Move schema to DSN path so that it follows the same schematics as the MySQL and PostgreSQL driver.
Project: http://git-wip-us.apache.org/repos/asf/calcite-avatica-go/repo Commit: http://git-wip-us.apache.org/repos/asf/calcite-avatica-go/commit/4e1ded88 Tree: http://git-wip-us.apache.org/repos/asf/calcite-avatica-go/tree/4e1ded88 Diff: http://git-wip-us.apache.org/repos/asf/calcite-avatica-go/diff/4e1ded88 Branch: refs/heads/master Commit: 4e1ded88f09f25163be7c9a6a9c738791a777c96 Parents: 9a364ff Author: Francis Chuang <francis.chu...@boostport.com> Authored: Fri Sep 30 10:40:58 2016 +1000 Committer: Julian Hyde <jh...@apache.org> Committed: Thu Aug 10 18:47:09 2017 -0700 ---------------------------------------------------------------------- README.md | 16 ++++++++-------- driver_test.go | 8 ++++---- dsn.go | 5 +++-- dsn_test.go | 6 +++--- 4 files changed, 18 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite-avatica-go/blob/4e1ded88/README.md ---------------------------------------------------------------------- diff --git a/README.md b/README.md index f804dc0..42d04dc 100644 --- a/README.md +++ b/README.md @@ -35,10 +35,16 @@ rows := db.Query("SELECT COUNT(*) FROM test") The DSN has the following format (optional parts are marked by square brackets): ``` -http://address:ports[?parameter1=value&...parameterN=value] +http://address:port[/schema][?parameter1=value&...parameterN=value] ``` -In other words, the scheme (http), address and port is mandatory, but the parameters are optional. +In other words, the scheme (http), address and port is mandatory, but the schema and parameters are optional. + +#### schema +The `schema` path sets the default schema to use for this connection. For example, if you set it to `myschema`, +then executing the query `SELECT * FROM my_table` will have the equivalence of `SELECT * FROM myschema.my_table`. +If schema is set, you can still work on tables in other schemas by supplying a schema prefix: +`SELECT * FROM myotherschema.my_other_table`. The following parameters are supported: @@ -47,12 +53,6 @@ The following parameters are supported: The `location` will be set as the location of unserialized `time.Time` values. It must be a valid timezone. If you want to use the local timezone, use `Local`. By default, this is set to `UTC`. -#### schema -The `schema` parameter sets the default schema to use for this connection. For example, if you set it to `myschema`, -then executing the query `SELECT * FROM my_table` will have the equivalence of `SELECT * FROM myschema.my_table`. -If schema is set, you can still work on tables in other schemas by supplying a schema prefix: -`SELECT * FROM myotherschema.my_other_table`. - #### maxRowsTotal The `maxRowsTotal` parameter sets the maximum number of rows to return for a given query. By default, this is set to http://git-wip-us.apache.org/repos/asf/calcite-avatica-go/blob/4e1ded88/driver_test.go ---------------------------------------------------------------------- diff --git a/driver_test.go b/driver_test.go index 928b610..4cc1661 100644 --- a/driver_test.go +++ b/driver_test.go @@ -927,9 +927,9 @@ func TestSchemaSupport(t *testing.T) { db.Exec("CREATE SCHEMA IF NOT EXISTS avaticatest") defer db.Exec("DROP SCHEMA IF EXISTS avaticatest") - query := "?schema=avaticatest" + path := "/avaticatest" - runTests(t, dsn+query, func(dbt *DBTest) { + runTests(t, dsn+path, func(dbt *DBTest) { // Create and seed table dbt.mustExec(`CREATE TABLE ` + dbt.tableName + ` ( @@ -975,9 +975,9 @@ func TestMultipleSchemaSupport(t *testing.T) { db.Exec("CREATE SCHEMA IF NOT EXISTS avaticatest2") defer db.Exec("DROP SCHEMA IF EXISTS avaticatest2") - query := "?schema=avaticatest1" + path := "/avaticatest1" - runTests(t, dsn+query, func(dbt *DBTest) { + runTests(t, dsn+path, func(dbt *DBTest) { // Create and seed table dbt.mustExec(`CREATE TABLE avaticatest2.` + dbt.tableName + ` ( http://git-wip-us.apache.org/repos/asf/calcite-avatica-go/blob/4e1ded88/dsn.go ---------------------------------------------------------------------- diff --git a/dsn.go b/dsn.go index 2292bf3..d1cbad0 100644 --- a/dsn.go +++ b/dsn.go @@ -4,6 +4,7 @@ import ( "fmt" "net/url" "strconv" + "strings" "time" ) @@ -68,8 +69,8 @@ func ParseDSN(dsn string) (*Config, error) { conf.location = loc } - if v := queries.Get("schema"); v != "" { - conf.schema = v + if parsed.Path != "" { + conf.schema = strings.TrimPrefix(parsed.Path, "/") } if v := queries.Get("transactionIsolation"); v != "" { http://git-wip-us.apache.org/repos/asf/calcite-avatica-go/blob/4e1ded88/dsn_test.go ---------------------------------------------------------------------- diff --git a/dsn_test.go b/dsn_test.go index 7c43786..6fce9da 100644 --- a/dsn_test.go +++ b/dsn_test.go @@ -8,14 +8,14 @@ import ( func TestParseDSN(t *testing.T) { - config, err := ParseDSN("http://localhost:8765?maxRowsTotal=1&frameMaxSize=1&location=Australia/Melbourne&schema=myschema&transactionIsolation=8") + config, err := ParseDSN("http://localhost:8765/myschema?maxRowsTotal=1&frameMaxSize=1&location=Australia/Melbourne&transactionIsolation=8") if err != nil { t.Fatalf("Unexpected error: %s", err) } - if config.endpoint != "http://localhost:8765" { - t.Errorf("Expected endpoint to be %s, got %s", "http://localhost:8765", config.endpoint) + if config.endpoint != "http://localhost:8765/myschema" { + t.Errorf("Expected endpoint to be %s, got %s", "http://localhost:8765/myschema", config.endpoint) } if config.frameMaxSize != 1 {