rethinkdb-java
rethinkdb-java copied to clipboard
Expected type DATUM but found DATABASE after use of conn.use("database_name")
Using Groovy, I have a function that performs the following steps (pseudocode):
def conn = r.connection().connect()
def validate (Connection conn) {
1 check rethink database list
2 if
However, at step 4, where it uses:
r.tableList().run (conn)
I get in my logs:
23:19:16.939 [vert.x-eventloop-thread-1] DEBUG com.rethinkdb.ast.Query - JSON Send: Token: 4 [1,[62,[]],{"db":[14,[[14,["mydb"]]]],"read_mode":"majority","durability":"hard"}] 23:19:16.940 [pool-1-thread-1] DEBUG com.rethinkdb.ast.Query - JSON Recv: Token: 4 {"t":18,"e":3000000,"r":["Expected type DATUM but found DATABASE:\ndb("mydb")"],"b":[]}
It would appear that somehow the 'use' command is causing the database buffer to be set incorrectly. Without the conn.use("my database"), the table creation works, however it creates the table against the test database instead of "my database" (which is expected behavour).
Right, I've been doing more testing.
It turns out this occurs if I add OptArgs.of("durability", "hard").with("read_mode", "majority") to the tablesList().run() request.
If I remove that OptArgs line (which is actually a shared object I reuse, it works.
@jlove-nz What option do you pass into conn.use exactly? Are you passing a string (conn.use("name")) or an object of the type r.db("name") (conn.use(r.db("name")))? It looks like it needs to be the former.
Hi Daniel, It's definitely a string -
class DatabaseValidator {
String database_name = "n2ocs"
...
Connection c = ....
c.use (this.database_name)
}
Ok. I wonder if something goes wrong due to the shared OptArgs object then. I think if you call .with, that modifies the object in place. Are you adding a db optarg anywhere in your code?
yes, I have this:
public static final OptArgs HARD_MAJORITY = OptArgs.of("durability", "hard").with("read_mode", "majority")
defined, and the code as using this when performing actions - e.g:
def result = r.tableCreate("audit_table_updates").optArg("durability", "hard").run (conn, HARD_MAJORITY)