Visitar URL original
Expected type DATUM but found DATABASE after use of conn.use("database_name") · Issue #66 · rethinkdb/rethinkdb-java · GitHub
Skip to content

Expected type DATUM but found DATABASE after use of conn.use("database_name") #66

Open

Description

@jlove-nz

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 isn't on the list, create it.
3 conn.use ("my database")
4 check table list
5 if "table a" isn't on the list, create it.
}

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).

Activity

  1. jlove-nz commented on Jul 16, 2016

    @jlove-nz
    Author

    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.

  2. danielmewes commented on Jul 18, 2016

    @danielmewes
    Member

    @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.

  3. jlove-nz commented on Jul 18, 2016

    @jlove-nz
    Author

    Hi Daniel,
    It's definitely a string -

    class DatabaseValidator {
        String database_name = "n2ocs"
        ...
        Connection c = ....
        c.use (this.database_name)
    }
    
  4. danielmewes commented on Jul 19, 2016

    @danielmewes
    Member

    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?

  5. jlove-nz commented on Jul 19, 2016

    @jlove-nz
    Author

    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)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions