|
|
|
@ -2,6 +2,7 @@ package db
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"encoding/json"
|
|
|
|
|
"fmt"
|
|
|
|
|
"io/ioutil"
|
|
|
|
|
"os"
|
|
|
|
|
"path"
|
|
|
|
@ -177,7 +178,7 @@ func Test_SimpleMultiStatements(t *testing.T) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func Test_SimpleFailingStatements(t *testing.T) {
|
|
|
|
|
func Test_SimpleFailingStatements_Execute(t *testing.T) {
|
|
|
|
|
db, path := mustCreateDatabase()
|
|
|
|
|
defer db.Close()
|
|
|
|
|
defer os.Remove(path)
|
|
|
|
@ -220,6 +221,19 @@ func Test_SimpleFailingStatements(t *testing.T) {
|
|
|
|
|
t.Fatalf("unexpected results for query\nexp: %s\ngot: %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
r, err = db.Execute([]string{`utter nonsense`}, false, false)
|
|
|
|
|
if err != nil {
|
|
|
|
|
if exp, got := `[{"error":"near \"utter\": syntax error"}]`, asJSON(r); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results for query\nexp: %s\ngot: %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func Test_SimpleFailingStatements_Query(t *testing.T) {
|
|
|
|
|
db, path := mustCreateDatabase()
|
|
|
|
|
defer db.Close()
|
|
|
|
|
defer os.Remove(path)
|
|
|
|
|
|
|
|
|
|
ro, err := db.Query([]string{`SELECT * FROM bar`}, false, false)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("failed to attempt query of non-existent table: %s", err.Error())
|
|
|
|
@ -235,12 +249,11 @@ func Test_SimpleFailingStatements(t *testing.T) {
|
|
|
|
|
if exp, got := `[{"error":"near \"SELECTxx\": syntax error"}]`, asJSON(ro); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results for query\nexp: %s\ngot: %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
r, err = db.Execute([]string{`utter nonsense`}, false, false)
|
|
|
|
|
r, err := db.Query([]string{`utter nonsense`}, false, false)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("failed to attempt nonsense execution: %s", err.Error())
|
|
|
|
|
}
|
|
|
|
|
if exp, got := `[{"error":"near \"utter\": syntax error"}]`, asJSON(r); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results for query\nexp: %s\ngot: %s", exp, got)
|
|
|
|
|
if exp, got := `[{"error":"near \"utter\": syntax error"}]`, asJSON(r); exp != got {
|
|
|
|
|
t.Fatalf("unexpected results for query\nexp: %s\ngot: %s", exp, got)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -493,6 +506,24 @@ func mustWriteAndOpenDatabase(b []byte) (*DB, string) {
|
|
|
|
|
return db, f.Name()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// mustExecute executes a statement, and panics on failure. Used for statements
|
|
|
|
|
// that should never fail, even taking into account test setup.
|
|
|
|
|
func mustExecute(db *DB, stmt string) {
|
|
|
|
|
_, err := db.Execute([]string{stmt}, false, false)
|
|
|
|
|
if err != nil {
|
|
|
|
|
panic(fmt.Sprintf("failed to execute statement: %s", err.Error()))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// mustQuery executes a statement, and panics on failure. Used for statements
|
|
|
|
|
// that should never fail, even taking into account test setup.
|
|
|
|
|
func mustQuery(db *DB, stmt string) {
|
|
|
|
|
_, err := db.Execute([]string{stmt}, false, false)
|
|
|
|
|
if err != nil {
|
|
|
|
|
panic(fmt.Sprintf("failed to query: %s", err.Error()))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func asJSON(v interface{}) string {
|
|
|
|
|
b, err := json.Marshal(v)
|
|
|
|
|
if err != nil {
|
|
|
|
|