|
|
|
@ -38,74 +38,120 @@ func Test_StoreClientSideBySide(t *testing.T) {
|
|
|
|
|
t.Fatalf("failed to execute on local: %s", err.Error())
|
|
|
|
|
}
|
|
|
|
|
if exp, got := "[{}]", asJSON(res); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results, expt %s, got %s", exp, got)
|
|
|
|
|
t.Fatalf("unexpected results, exp %s, got %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
res, err = client.Execute(executeRequestFromString("CREATE TABLE bar (id INTEGER NOT NULL PRIMARY KEY, name TEXT)"), leaderAddr, NO_CREDS, shortWait)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("failed to execute via remote: %s", err.Error())
|
|
|
|
|
}
|
|
|
|
|
if exp, got := "[{}]", asJSON(res); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results, expt %s, got %s", exp, got)
|
|
|
|
|
t.Fatalf("unexpected results, exp %s, got %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ==============================================================================
|
|
|
|
|
res, err = node.Store.Execute(executeRequestFromString(`INSERT INTO foo(name) VALUES("fiona")`))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("failed to execute on local: %s", err.Error())
|
|
|
|
|
}
|
|
|
|
|
if exp, got := `[{"last_insert_id":1,"rows_affected":1}]`, asJSON(res); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results, expt %s, got %s", exp, got)
|
|
|
|
|
t.Fatalf("unexpected results, exp %s, got %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
res, err = client.Execute(executeRequestFromString(`INSERT INTO bar(name) VALUES("fiona")`), leaderAddr, NO_CREDS, shortWait)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("failed to execute via remote: %s", err.Error())
|
|
|
|
|
}
|
|
|
|
|
if exp, got := `[{"last_insert_id":1,"rows_affected":1}]`, asJSON(res); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results, expt %s, got %s", exp, got)
|
|
|
|
|
t.Fatalf("unexpected results, exp %s, got %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ==============================================================================
|
|
|
|
|
rows, err := node.Store.Query(queryRequestFromString(`SELECT * FROM foo`))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("failed to query on local: %s", err.Error())
|
|
|
|
|
}
|
|
|
|
|
if exp, got := `[{"columns":["id","name"],"types":["integer","text"],"values":[[1,"fiona"]]}]`, asJSON(rows); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results, expt %s, got %s", exp, got)
|
|
|
|
|
t.Fatalf("unexpected results, exp %s, got %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
rows, err = node.Store.Query(queryRequestFromString(`SELECT * FROM bar`))
|
|
|
|
|
results, err := node.Store.Request(executeQueryRequestFromString(`SELECT * FROM foo`))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("failed to query on local: %s", err.Error())
|
|
|
|
|
t.Fatalf("failed to request on local: %s", err.Error())
|
|
|
|
|
}
|
|
|
|
|
if exp, got := `[{"columns":["id","name"],"types":["integer","text"],"values":[[1,"fiona"]]}]`, asJSON(rows); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results, expt %s, got %s", exp, got)
|
|
|
|
|
if exp, got := `[{"columns":["id","name"],"types":["integer","text"],"values":[[1,"fiona"]]}]`, asJSON(results); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results, exp %s, got %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
rows, err = client.Query(queryRequestFromString(`SELECT * FROM foo`), leaderAddr, NO_CREDS, shortWait)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("failed to query via remote: %s", err.Error())
|
|
|
|
|
}
|
|
|
|
|
if exp, got := `[{"columns":["id","name"],"types":["integer","text"],"values":[[1,"fiona"]]}]`, asJSON(rows); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results, expt %s, got %s", exp, got)
|
|
|
|
|
t.Fatalf("unexpected results, exp %s, got %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
results, err = client.Request(executeQueryRequestFromString(`SELECT * FROM foo`), leaderAddr, NO_CREDS, shortWait)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("failed to query via remote: %s", err.Error())
|
|
|
|
|
}
|
|
|
|
|
if exp, got := `[{"columns":["id","name"],"types":["integer","text"],"values":[[1,"fiona"]]}]`, asJSON(results); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results, exp %s, got %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ==============================================================================
|
|
|
|
|
rows, err = node.Store.Query(queryRequestFromString(`SELECT * FROM bar`))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("failed to query on local: %s", err.Error())
|
|
|
|
|
}
|
|
|
|
|
if exp, got := `[{"columns":["id","name"],"types":["integer","text"],"values":[[1,"fiona"]]}]`, asJSON(rows); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results, exp %s, got %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
results, err = node.Store.Request(executeQueryRequestFromString(`SELECT * FROM bar`))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("failed to request on local: %s", err.Error())
|
|
|
|
|
}
|
|
|
|
|
if exp, got := `[{"columns":["id","name"],"types":["integer","text"],"values":[[1,"fiona"]]}]`, asJSON(results); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results, exp %s, got %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
rows, err = client.Query(queryRequestFromString(`SELECT * FROM bar`), leaderAddr, NO_CREDS, shortWait)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("failed to query via remote: %s", err.Error())
|
|
|
|
|
}
|
|
|
|
|
if exp, got := `[{"columns":["id","name"],"types":["integer","text"],"values":[[1,"fiona"]]}]`, asJSON(rows); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results, expt %s, got %s", exp, got)
|
|
|
|
|
t.Fatalf("unexpected results, exp %s, got %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
results, err = client.Request(executeQueryRequestFromString(`SELECT * FROM bar`), leaderAddr, NO_CREDS, shortWait)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("failed to query via remote: %s", err.Error())
|
|
|
|
|
}
|
|
|
|
|
if exp, got := `[{"columns":["id","name"],"types":["integer","text"],"values":[[1,"fiona"]]}]`, asJSON(results); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results, exp %s, got %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ==============================================================================
|
|
|
|
|
rows, err = node.Store.Query(queryRequestFromString(`SELECT * FROM qux`))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("failed to query on local: %s", err.Error())
|
|
|
|
|
}
|
|
|
|
|
if exp, got := `[{"error":"no such table: qux"}]`, asJSON(rows); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results, expt %s, got %s", exp, got)
|
|
|
|
|
t.Fatalf("unexpected results, exp %s, got %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
results, err = node.Store.Request(executeQueryRequestFromString(`SELECT * FROM qux`))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("failed to request on local: %s", err.Error())
|
|
|
|
|
}
|
|
|
|
|
if exp, got := `[{"error":"no such table: qux"}]`, asJSON(results); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results, exp %s, got %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
rows, err = client.Query(queryRequestFromString(`SELECT * FROM qux`), leaderAddr, NO_CREDS, shortWait)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("failed to query via remote: %s", err.Error())
|
|
|
|
|
}
|
|
|
|
|
if exp, got := `[{"error":"no such table: qux"}]`, asJSON(rows); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results, expt %s, got %s", exp, got)
|
|
|
|
|
t.Fatalf("unexpected results, exp %s, got %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
results, err = client.Request(executeQueryRequestFromString(`SELECT * FROM qux`), leaderAddr, NO_CREDS, shortWait)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("failed to query via remote: %s", err.Error())
|
|
|
|
|
}
|
|
|
|
|
if exp, got := `[{"error":"no such table: qux"}]`, asJSON(results); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results, exp %s, got %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -302,6 +348,27 @@ func queryRequestFromStrings(s []string) *command.QueryRequest {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func executeQueryRequestFromString(s string) *command.ExecuteQueryRequest {
|
|
|
|
|
return executeQueryRequestFromStrings([]string{s})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// executeQueryRequestFromStrings converts a slice of strings into a command.ExecuteQueryRequest
|
|
|
|
|
func executeQueryRequestFromStrings(s []string) *command.ExecuteQueryRequest {
|
|
|
|
|
stmts := make([]*command.Statement, len(s))
|
|
|
|
|
for i := range s {
|
|
|
|
|
stmts[i] = &command.Statement{
|
|
|
|
|
Sql: s[i],
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return &command.ExecuteQueryRequest{
|
|
|
|
|
Request: &command.Request{
|
|
|
|
|
Statements: stmts,
|
|
|
|
|
Transaction: false,
|
|
|
|
|
},
|
|
|
|
|
Timings: false,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func mustNewDialer(header byte, remoteEncrypted, skipVerify bool) *tcp.Dialer {
|
|
|
|
|
var tlsConfig *tls.Config
|
|
|
|
|
var err error
|
|
|
|
|