mirror of https://github.com/VinGarcia/ksql.git
parent
f4cac02602
commit
83cf354f35
|
@ -18,13 +18,13 @@ services:
|
||||||
- POSTGRES_DB=${DB_NAME:-ksql}
|
- POSTGRES_DB=${DB_NAME:-ksql}
|
||||||
|
|
||||||
mysql:
|
mysql:
|
||||||
image: mysql
|
image: mariadb:10.8
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:3306:3306"
|
- "127.0.0.1:3306:3306"
|
||||||
environment:
|
environment:
|
||||||
MYSQL_ROOT_PASSWORD: mysql
|
MARIADB_ROOT_PASSWORD: mysql
|
||||||
MYSQL_DATABASE: ksql
|
MARIADB_DATABASE: ksql
|
||||||
|
|
||||||
sqlserver:
|
sqlserver:
|
||||||
image: microsoft/mssql-server-linux:2017-latest
|
image: microsoft/mssql-server-linux:2017-latest
|
||||||
|
|
22
ksql.go
22
ksql.go
|
@ -84,14 +84,14 @@ type ScanArgError struct {
|
||||||
func (s ScanArgError) Error() string {
|
func (s ScanArgError) Error() string {
|
||||||
return fmt.Sprintf(
|
return fmt.Sprintf(
|
||||||
"error scanning input attribute with index %d: %s",
|
"error scanning input attribute with index %d: %s",
|
||||||
s.ColumnIndex, s.Err.Error(),
|
s.ColumnIndex, s.Err,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s ScanArgError) ErrorWithStructNames(structName string, colName string) error {
|
func (s ScanArgError) ErrorWithStructNames(structName string, colName string) error {
|
||||||
return fmt.Errorf(
|
return fmt.Errorf(
|
||||||
"error scanning %s.%s: %s",
|
"error scanning %s.%s: %w",
|
||||||
structName, colName, s.Err.Error(),
|
structName, colName, s.Err,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,7 +192,7 @@ func (c DB) Query(
|
||||||
|
|
||||||
rows, err := c.db.QueryContext(ctx, query, params...)
|
rows, err := c.db.QueryContext(ctx, query, params...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error running query: %s", err)
|
return fmt.Errorf("error running query: %w", err)
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
|
|
||||||
|
@ -282,7 +282,7 @@ func (c DB) QueryOne(
|
||||||
|
|
||||||
rows, err := c.db.QueryContext(ctx, query, params...)
|
rows, err := c.db.QueryContext(ctx, query, params...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error running query: %s", err)
|
return fmt.Errorf("error running query: %w", err)
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
|
|
||||||
|
@ -441,7 +441,7 @@ func (c DB) Insert(
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := table.validate(); err != nil {
|
if err := table.validate(); err != nil {
|
||||||
return fmt.Errorf("can't insert in ksql.Table: %s", err)
|
return fmt.Errorf("can't insert in ksql.Table: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
info, err := structs.GetTagInfo(t.Elem())
|
info, err := structs.GetTagInfo(t.Elem())
|
||||||
|
@ -586,7 +586,7 @@ func (c DB) Delete(
|
||||||
idOrRecord interface{},
|
idOrRecord interface{},
|
||||||
) error {
|
) error {
|
||||||
if err := table.validate(); err != nil {
|
if err := table.validate(); err != nil {
|
||||||
return fmt.Errorf("can't delete from ksql.Table: %s", err)
|
return fmt.Errorf("can't delete from ksql.Table: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
idMap, err := normalizeIDsAsMap(table.idColumns, idOrRecord)
|
idMap, err := normalizeIDsAsMap(table.idColumns, idOrRecord)
|
||||||
|
@ -605,7 +605,7 @@ func (c DB) Delete(
|
||||||
|
|
||||||
n, err := result.RowsAffected()
|
n, err := result.RowsAffected()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("unable to check if the record was succesfully deleted: %s", err)
|
return fmt.Errorf("unable to check if the record was succesfully deleted: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if n == 0 {
|
if n == 0 {
|
||||||
|
@ -699,7 +699,7 @@ func (c DB) Patch(
|
||||||
n, err := result.RowsAffected()
|
n, err := result.RowsAffected()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf(
|
return fmt.Errorf(
|
||||||
"unexpected error: unable to fetch how many rows were affected by the update: %s",
|
"unexpected error: unable to fetch how many rows were affected by the update: %w",
|
||||||
err,
|
err,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -946,7 +946,7 @@ func (c DB) Transaction(ctx context.Context, fn func(Provider) error) error {
|
||||||
case TxBeginner:
|
case TxBeginner:
|
||||||
tx, err := txBeginner.BeginTx(ctx)
|
tx, err := txBeginner.BeginTx(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("KSQL: error starting transaction: %s", err)
|
return fmt.Errorf("KSQL: error starting transaction: %w", err)
|
||||||
}
|
}
|
||||||
defer func() {
|
defer func() {
|
||||||
if r := recover(); r != nil {
|
if r := recover(); r != nil {
|
||||||
|
@ -970,7 +970,7 @@ func (c DB) Transaction(ctx context.Context, fn func(Provider) error) error {
|
||||||
if rollbackErr != nil {
|
if rollbackErr != nil {
|
||||||
err = fmt.Errorf(
|
err = fmt.Errorf(
|
||||||
"KSQL: unable to rollback after error: %s, rollback error: %w",
|
"KSQL: unable to rollback after error: %s, rollback error: %w",
|
||||||
err.Error(), rollbackErr,
|
err, rollbackErr,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
|
|
202
test_adapters.go
202
test_adapters.go
|
@ -4,6 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
@ -93,7 +94,7 @@ func QueryTest(
|
||||||
) {
|
) {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|
||||||
t.Run("QueryTest", func(t *testing.T) {
|
t.Run("Query", func(t *testing.T) {
|
||||||
variations := []struct {
|
variations := []struct {
|
||||||
desc string
|
desc string
|
||||||
queryPrefix string
|
queryPrefix string
|
||||||
|
@ -554,6 +555,21 @@ func QueryTest(
|
||||||
err := c.Query(ctx, &users, `SELECT * FROM users`)
|
err := c.Query(ctx, &users, `SELECT * FROM users`)
|
||||||
tt.AssertErrContains(t, err, "KSQL", "fakeCloseErr")
|
tt.AssertErrContains(t, err, "KSQL", "fakeCloseErr")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("should report error context.Canceled if the context is canceled", func(t *testing.T) {
|
||||||
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
|
cancel()
|
||||||
|
|
||||||
|
db, closer := newDBAdapter(t)
|
||||||
|
defer closer.Close()
|
||||||
|
|
||||||
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
|
var users []user
|
||||||
|
err := c.Query(ctx, &users, `SELECT * FROM users`)
|
||||||
|
tt.AssertErrContains(t, err, "context", "canceled")
|
||||||
|
tt.AssertEqual(t, errors.Is(err, context.Canceled), true)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -566,6 +582,8 @@ func QueryOneTest(
|
||||||
connStr string,
|
connStr string,
|
||||||
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
||||||
) {
|
) {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
t.Run("QueryOne", func(t *testing.T) {
|
t.Run("QueryOne", func(t *testing.T) {
|
||||||
variations := []struct {
|
variations := []struct {
|
||||||
desc string
|
desc string
|
||||||
|
@ -591,7 +609,6 @@ func QueryOneTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
u := user{}
|
u := user{}
|
||||||
err := c.QueryOne(ctx, &u, variation.queryPrefix+`FROM users WHERE id=1;`)
|
err := c.QueryOne(ctx, &u, variation.queryPrefix+`FROM users WHERE id=1;`)
|
||||||
|
@ -602,8 +619,6 @@ func QueryOneTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
|
|
||||||
_, err := db.ExecContext(ctx, `INSERT INTO users (name, age, address) VALUES ('Bia', 0, '{"country":"BR"}')`)
|
_, err := db.ExecContext(ctx, `INSERT INTO users (name, age, address) VALUES ('Bia', 0, '{"country":"BR"}')`)
|
||||||
tt.AssertNoErr(t, err)
|
tt.AssertNoErr(t, err)
|
||||||
|
|
||||||
|
@ -623,8 +638,6 @@ func QueryOneTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
|
|
||||||
_, err := db.ExecContext(ctx, `INSERT INTO users (name, age, address) VALUES ('Andréa Sá', 0, '{"country":"US"}')`)
|
_, err := db.ExecContext(ctx, `INSERT INTO users (name, age, address) VALUES ('Andréa Sá', 0, '{"country":"US"}')`)
|
||||||
tt.AssertNoErr(t, err)
|
tt.AssertNoErr(t, err)
|
||||||
|
|
||||||
|
@ -652,8 +665,6 @@ func QueryOneTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
|
|
||||||
_, err := db.ExecContext(ctx, `INSERT INTO users (name, age, address) VALUES ('João Ribeiro', 0, '{"country":"US"}')`)
|
_, err := db.ExecContext(ctx, `INSERT INTO users (name, age, address) VALUES ('João Ribeiro', 0, '{"country":"US"}')`)
|
||||||
tt.AssertNoErr(t, err)
|
tt.AssertNoErr(t, err)
|
||||||
var joao user
|
var joao user
|
||||||
|
@ -683,7 +694,6 @@ func QueryOneTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
_, err := db.ExecContext(ctx, `INSERT INTO users (name, age, address) VALUES ('Count Olivia', 0, '{"country":"US"}')`)
|
_, err := db.ExecContext(ctx, `INSERT INTO users (name, age, address) VALUES ('Count Olivia', 0, '{"country":"US"}')`)
|
||||||
tt.AssertNoErr(t, err)
|
tt.AssertNoErr(t, err)
|
||||||
|
|
||||||
|
@ -703,8 +713,6 @@ func QueryOneTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
|
|
||||||
_, err := db.ExecContext(ctx, `INSERT INTO users (name, age, address) VALUES ('Andréa Sá', 0, '{"country":"US"}')`)
|
_, err := db.ExecContext(ctx, `INSERT INTO users (name, age, address) VALUES ('Andréa Sá', 0, '{"country":"US"}')`)
|
||||||
tt.AssertNoErr(t, err)
|
tt.AssertNoErr(t, err)
|
||||||
|
|
||||||
|
@ -724,7 +732,6 @@ func QueryOneTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
var u *user
|
var u *user
|
||||||
err := c.QueryOne(ctx, u, `SELECT * FROM users`)
|
err := c.QueryOne(ctx, u, `SELECT * FROM users`)
|
||||||
|
@ -735,7 +742,6 @@ func QueryOneTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
var u user
|
var u user
|
||||||
err := c.QueryOne(ctx, &u, `SELECT * FROM not a valid query`)
|
err := c.QueryOne(ctx, &u, `SELECT * FROM not a valid query`)
|
||||||
|
@ -746,7 +752,6 @@ func QueryOneTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
var row struct {
|
var row struct {
|
||||||
User user `tablename:"users"`
|
User user `tablename:"users"`
|
||||||
|
@ -760,7 +765,6 @@ func QueryOneTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
_, err := db.ExecContext(ctx, `INSERT INTO users (name, age, address) VALUES ('Olivia', 0, '{"country":"US"}')`)
|
_, err := db.ExecContext(ctx, `INSERT INTO users (name, age, address) VALUES ('Olivia', 0, '{"country":"US"}')`)
|
||||||
tt.AssertNoErr(t, err)
|
tt.AssertNoErr(t, err)
|
||||||
|
|
||||||
|
@ -772,6 +776,20 @@ func QueryOneTest(
|
||||||
err = c.QueryOne(ctx, &row, `SELECT count(*) as my_count FROM users`)
|
err = c.QueryOne(ctx, &row, `SELECT count(*) as my_count FROM users`)
|
||||||
tt.AssertErrContains(t, err, "unexported", "my_count")
|
tt.AssertErrContains(t, err, "unexported", "my_count")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("should report error context.Canceled the context has been canceled", func(t *testing.T) {
|
||||||
|
db, closer := newDBAdapter(t)
|
||||||
|
defer closer.Close()
|
||||||
|
|
||||||
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
|
cancel()
|
||||||
|
|
||||||
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
|
var u user
|
||||||
|
err := c.QueryOne(ctx, &u, `SELECT * FROM users LIMIT 1`)
|
||||||
|
tt.AssertEqual(t, errors.Is(err, context.Canceled), true)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -783,6 +801,8 @@ func InsertTest(
|
||||||
connStr string,
|
connStr string,
|
||||||
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
||||||
) {
|
) {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
t.Run("Insert", func(t *testing.T) {
|
t.Run("Insert", func(t *testing.T) {
|
||||||
t.Run("success cases", func(t *testing.T) {
|
t.Run("success cases", func(t *testing.T) {
|
||||||
t.Run("single primary key tables", func(t *testing.T) {
|
t.Run("single primary key tables", func(t *testing.T) {
|
||||||
|
@ -795,7 +815,6 @@ func InsertTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
u := user{
|
u := user{
|
||||||
|
@ -828,7 +847,6 @@ func InsertTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
u := user{
|
u := user{
|
||||||
|
@ -856,7 +874,6 @@ func InsertTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
err = c.Insert(ctx, usersTable, &struct {
|
err = c.Insert(ctx, usersTable, &struct {
|
||||||
ID int `ksql:"id"`
|
ID int `ksql:"id"`
|
||||||
|
@ -870,7 +887,6 @@ func InsertTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
usersByName := NewTable("users", "name")
|
usersByName := NewTable("users", "name")
|
||||||
|
@ -891,7 +907,6 @@ func InsertTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
type tsUser struct {
|
type tsUser struct {
|
||||||
|
@ -925,7 +940,6 @@ func InsertTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
table := NewTable("user_permissions", "id", "user_id", "perm_id")
|
table := NewTable("user_permissions", "id", "user_id", "perm_id")
|
||||||
|
@ -946,7 +960,6 @@ func InsertTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
// Table defined with 3 values, but we'll provide only 2,
|
// Table defined with 3 values, but we'll provide only 2,
|
||||||
|
@ -983,7 +996,6 @@ func InsertTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
// Table defined with 3 values, but we'll provide only 2,
|
// Table defined with 3 values, but we'll provide only 2,
|
||||||
|
@ -1039,7 +1051,6 @@ func InsertTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err = c.Insert(ctx, usersTable, "foo")
|
err = c.Insert(ctx, usersTable, "foo")
|
||||||
|
@ -1070,7 +1081,6 @@ func InsertTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
// This is an invalid value:
|
// This is an invalid value:
|
||||||
|
@ -1084,7 +1094,6 @@ func InsertTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
var u *user
|
var u *user
|
||||||
|
@ -1096,7 +1105,6 @@ func InsertTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err := c.Insert(ctx, NewTable("users", ""), &user{Name: "fake-name"})
|
err := c.Insert(ctx, NewTable("users", ""), &user{Name: "fake-name"})
|
||||||
|
@ -1107,7 +1115,6 @@ func InsertTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err := c.Insert(ctx, NewTable("", "id"), &user{Name: "fake-name"})
|
err := c.Insert(ctx, NewTable("", "id"), &user{Name: "fake-name"})
|
||||||
|
@ -1118,7 +1125,6 @@ func InsertTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err = c.Insert(ctx, usersTable, &struct {
|
err = c.Insert(ctx, usersTable, &struct {
|
||||||
|
@ -1134,7 +1140,6 @@ func InsertTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
brokenTable := NewTable("users", "non_existing_id")
|
brokenTable := NewTable("users", "non_existing_id")
|
||||||
|
@ -1150,7 +1155,6 @@ func InsertTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err = c.Insert(ctx, usersTable, &struct {
|
err = c.Insert(ctx, usersTable, &struct {
|
||||||
|
@ -1165,6 +1169,20 @@ func InsertTest(
|
||||||
tt.AssertNotEqual(t, u.ID, uint(0))
|
tt.AssertNotEqual(t, u.ID, uint(0))
|
||||||
tt.AssertEqual(t, u.Age, 42)
|
tt.AssertEqual(t, u.Age, 42)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("should report error context.Canceled the context has been canceled", func(t *testing.T) {
|
||||||
|
db, closer := newDBAdapter(t)
|
||||||
|
defer closer.Close()
|
||||||
|
|
||||||
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
|
cancel()
|
||||||
|
|
||||||
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
|
err = c.Insert(ctx, usersTable, &user{Age: 42, Name: "FakeUserName"})
|
||||||
|
|
||||||
|
tt.AssertEqual(t, errors.Is(err, context.Canceled), true)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -1195,6 +1213,8 @@ func DeleteTest(
|
||||||
connStr string,
|
connStr string,
|
||||||
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
||||||
) {
|
) {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
t.Run("Delete", func(t *testing.T) {
|
t.Run("Delete", func(t *testing.T) {
|
||||||
err := createTables(driver, connStr)
|
err := createTables(driver, connStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -1231,7 +1251,6 @@ func DeleteTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
u1 := user{
|
u1 := user{
|
||||||
|
@ -1282,7 +1301,6 @@ func DeleteTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
// This permission should not be deleted, we'll use the id to check it:
|
// This permission should not be deleted, we'll use the id to check it:
|
||||||
|
@ -1318,7 +1336,6 @@ func DeleteTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
// This permission should not be deleted, we'll use the id to check it:
|
// This permission should not be deleted, we'll use the id to check it:
|
||||||
|
@ -1358,7 +1375,6 @@ func DeleteTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err = c.Delete(ctx, usersTable, 4200)
|
err = c.Delete(ctx, usersTable, 4200)
|
||||||
|
@ -1369,7 +1385,6 @@ func DeleteTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
var u *user
|
var u *user
|
||||||
|
@ -1383,7 +1398,6 @@ func DeleteTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err := c.Delete(ctx, NewTable("users", "id"), &struct {
|
err := c.Delete(ctx, NewTable("users", "id"), &struct {
|
||||||
|
@ -1397,7 +1411,6 @@ func DeleteTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err := c.Delete(ctx, NewTable("users", "id"), &struct {
|
err := c.Delete(ctx, NewTable("users", "id"), &struct {
|
||||||
|
@ -1412,7 +1425,6 @@ func DeleteTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err := c.Delete(ctx, NewTable("users", "id"), &struct {
|
err := c.Delete(ctx, NewTable("users", "id"), &struct {
|
||||||
|
@ -1429,7 +1441,6 @@ func DeleteTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err := c.Delete(ctx, userPermissionsTable, &struct {
|
err := c.Delete(ctx, userPermissionsTable, &struct {
|
||||||
|
@ -1447,7 +1458,6 @@ func DeleteTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err := c.Delete(ctx, userPermissionsTable, map[string]interface{}{
|
err := c.Delete(ctx, userPermissionsTable, map[string]interface{}{
|
||||||
|
@ -1462,7 +1472,6 @@ func DeleteTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err := c.Delete(ctx, userPermissionsTable, &struct {
|
err := c.Delete(ctx, userPermissionsTable, &struct {
|
||||||
|
@ -1482,7 +1491,6 @@ func DeleteTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err := c.Delete(ctx, userPermissionsTable, map[string]interface{}{
|
err := c.Delete(ctx, userPermissionsTable, map[string]interface{}{
|
||||||
|
@ -1498,7 +1506,6 @@ func DeleteTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err := c.Delete(ctx, userPermissionsTable, &struct {
|
err := c.Delete(ctx, userPermissionsTable, &struct {
|
||||||
|
@ -1518,7 +1525,6 @@ func DeleteTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err := c.Delete(ctx, userPermissionsTable, map[string]interface{}{
|
err := c.Delete(ctx, userPermissionsTable, map[string]interface{}{
|
||||||
|
@ -1536,7 +1542,6 @@ func DeleteTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err := c.Delete(ctx, NewTable("users", ""), &user{ID: 42, Name: "fake-name"})
|
err := c.Delete(ctx, NewTable("users", ""), &user{ID: 42, Name: "fake-name"})
|
||||||
|
@ -1547,12 +1552,24 @@ func DeleteTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err := c.Delete(ctx, NewTable("", "id"), &user{Name: "fake-name"})
|
err := c.Delete(ctx, NewTable("", "id"), &user{Name: "fake-name"})
|
||||||
tt.AssertErrContains(t, err, "ksql.Table", "table name", "empty string")
|
tt.AssertErrContains(t, err, "ksql.Table", "table name", "empty string")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("should report error context.Canceled the context has been canceled", func(t *testing.T) {
|
||||||
|
db, closer := newDBAdapter(t)
|
||||||
|
defer closer.Close()
|
||||||
|
|
||||||
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
|
cancel()
|
||||||
|
|
||||||
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
|
err := c.Delete(ctx, usersTable, &user{ID: 42, Name: "fake-name"})
|
||||||
|
tt.AssertEqual(t, errors.Is(err, context.Canceled), true)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1564,6 +1581,8 @@ func PatchTest(
|
||||||
connStr string,
|
connStr string,
|
||||||
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
||||||
) {
|
) {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
t.Run("Patch", func(t *testing.T) {
|
t.Run("Patch", func(t *testing.T) {
|
||||||
err := createTables(driver, connStr)
|
err := createTables(driver, connStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -1574,7 +1593,6 @@ func PatchTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
u := user{
|
u := user{
|
||||||
|
@ -1603,7 +1621,6 @@ func PatchTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
u := user{
|
u := user{
|
||||||
|
@ -1632,7 +1649,6 @@ func PatchTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err = createUserPermission(db, c.dialect, userPermission{
|
err = createUserPermission(db, c.dialect, userPermission{
|
||||||
|
@ -1669,7 +1685,6 @@ func PatchTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
type partialUser struct {
|
type partialUser struct {
|
||||||
|
@ -1706,7 +1721,6 @@ func PatchTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
type partialUser struct {
|
type partialUser struct {
|
||||||
|
@ -1743,7 +1757,6 @@ func PatchTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err = c.Update(ctx, usersTable, user{
|
err = c.Update(ctx, usersTable, user{
|
||||||
|
@ -1757,7 +1770,6 @@ func PatchTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err = c.Update(ctx, NewTable("non_existing_table"), user{
|
err = c.Update(ctx, NewTable("non_existing_table"), user{
|
||||||
|
@ -1771,7 +1783,6 @@ func PatchTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
var u *user
|
var u *user
|
||||||
|
@ -1783,7 +1794,6 @@ func PatchTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err = c.Update(ctx, usersTable, struct {
|
err = c.Update(ctx, usersTable, struct {
|
||||||
|
@ -1802,7 +1812,6 @@ func PatchTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err := c.Update(ctx, usersTable, &user{
|
err := c.Update(ctx, usersTable, &user{
|
||||||
|
@ -1816,7 +1825,6 @@ func PatchTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err := c.Update(ctx, NewTable("user_permissions", "id", "user_id", "perm_id"), &userPermission{
|
err := c.Update(ctx, NewTable("user_permissions", "id", "user_id", "perm_id"), &userPermission{
|
||||||
|
@ -1827,6 +1835,22 @@ func PatchTest(
|
||||||
tt.AssertErrContains(t, err, "invalid value", "0", "'user_id'")
|
tt.AssertErrContains(t, err, "invalid value", "0", "'user_id'")
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("should report error context.Canceled the context has been canceled", func(t *testing.T) {
|
||||||
|
db, closer := newDBAdapter(t)
|
||||||
|
defer closer.Close()
|
||||||
|
|
||||||
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
|
cancel()
|
||||||
|
|
||||||
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
|
err = c.Update(ctx, usersTable, user{
|
||||||
|
ID: 1,
|
||||||
|
Name: "Thayane",
|
||||||
|
})
|
||||||
|
tt.AssertEqual(t, errors.Is(err, context.Canceled), true)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1838,6 +1862,8 @@ func QueryChunksTest(
|
||||||
connStr string,
|
connStr string,
|
||||||
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
||||||
) {
|
) {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
t.Run("QueryChunks", func(t *testing.T) {
|
t.Run("QueryChunks", func(t *testing.T) {
|
||||||
variations := []struct {
|
variations := []struct {
|
||||||
desc string
|
desc string
|
||||||
|
@ -1863,7 +1889,6 @@ func QueryChunksTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
_ = c.Insert(ctx, usersTable, &user{
|
_ = c.Insert(ctx, usersTable, &user{
|
||||||
|
@ -1903,7 +1928,6 @@ func QueryChunksTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
_ = c.Insert(ctx, usersTable, &user{Name: "User1", Address: address{Country: "US"}})
|
_ = c.Insert(ctx, usersTable, &user{Name: "User1", Address: address{Country: "US"}})
|
||||||
|
@ -1945,7 +1969,6 @@ func QueryChunksTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
_ = c.Insert(ctx, usersTable, &user{Name: "User1", Address: address{Country: "US"}})
|
_ = c.Insert(ctx, usersTable, &user{Name: "User1", Address: address{Country: "US"}})
|
||||||
|
@ -1987,7 +2010,6 @@ func QueryChunksTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
_ = c.Insert(ctx, usersTable, &user{Name: "User1"})
|
_ = c.Insert(ctx, usersTable, &user{Name: "User1"})
|
||||||
|
@ -2038,7 +2060,6 @@ func QueryChunksTest(
|
||||||
Age: 20,
|
Age: 20,
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
_ = c.Insert(ctx, usersTable, &joao)
|
_ = c.Insert(ctx, usersTable, &joao)
|
||||||
_ = c.Insert(ctx, usersTable, &thatiana)
|
_ = c.Insert(ctx, usersTable, &thatiana)
|
||||||
|
@ -2100,7 +2121,6 @@ func QueryChunksTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
_ = c.Insert(ctx, usersTable, &user{Name: "User1"})
|
_ = c.Insert(ctx, usersTable, &user{Name: "User1"})
|
||||||
|
@ -2139,7 +2159,6 @@ func QueryChunksTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
_ = c.Insert(ctx, usersTable, &user{Name: "User1"})
|
_ = c.Insert(ctx, usersTable, &user{Name: "User1"})
|
||||||
|
@ -2182,7 +2201,6 @@ func QueryChunksTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
_ = c.Insert(ctx, usersTable, &user{Name: "User1"})
|
_ = c.Insert(ctx, usersTable, &user{Name: "User1"})
|
||||||
|
@ -2221,7 +2239,6 @@ func QueryChunksTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
_ = c.Insert(ctx, usersTable, &user{Name: "User1"})
|
_ = c.Insert(ctx, usersTable, &user{Name: "User1"})
|
||||||
|
@ -2259,7 +2276,6 @@ func QueryChunksTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
funcs := []interface{}{
|
funcs := []interface{}{
|
||||||
|
@ -2303,7 +2319,6 @@ func QueryChunksTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
err := c.QueryChunks(ctx, ChunkParser{
|
err := c.QueryChunks(ctx, ChunkParser{
|
||||||
Query: `SELECT * FROM not a valid query`,
|
Query: `SELECT * FROM not a valid query`,
|
||||||
|
@ -2321,7 +2336,6 @@ func QueryChunksTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
err := c.QueryChunks(ctx, ChunkParser{
|
err := c.QueryChunks(ctx, ChunkParser{
|
||||||
|
@ -2341,6 +2355,29 @@ func QueryChunksTest(
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t.Run("error cases", func(t *testing.T) {
|
||||||
|
t.Run("should report error context.Canceled the context has been canceled", func(t *testing.T) {
|
||||||
|
db, closer := newDBAdapter(t)
|
||||||
|
defer closer.Close()
|
||||||
|
|
||||||
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
|
cancel()
|
||||||
|
|
||||||
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
|
err := c.QueryChunks(ctx, ChunkParser{
|
||||||
|
Query: `SELECT * FROM users u JOIN posts p ON u.id = p.user_id`,
|
||||||
|
Params: []interface{}{},
|
||||||
|
|
||||||
|
ChunkSize: 2,
|
||||||
|
ForEachChunk: func(rows []user) error {
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
})
|
||||||
|
tt.AssertEqual(t, errors.Is(err, context.Canceled), true)
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2352,6 +2389,8 @@ func TransactionTest(
|
||||||
connStr string,
|
connStr string,
|
||||||
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
||||||
) {
|
) {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
t.Run("Transaction", func(t *testing.T) {
|
t.Run("Transaction", func(t *testing.T) {
|
||||||
t.Run("should query a single row correctly", func(t *testing.T) {
|
t.Run("should query a single row correctly", func(t *testing.T) {
|
||||||
err := createTables(driver, connStr)
|
err := createTables(driver, connStr)
|
||||||
|
@ -2362,7 +2401,6 @@ func TransactionTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
_ = c.Insert(ctx, usersTable, &user{Name: "User1"})
|
_ = c.Insert(ctx, usersTable, &user{Name: "User1"})
|
||||||
|
@ -2389,7 +2427,6 @@ func TransactionTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
u := user{
|
u := user{
|
||||||
|
@ -2426,7 +2463,6 @@ func TransactionTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
u1 := user{Name: "User1", Age: 42}
|
u1 := user{Name: "User1", Age: 42}
|
||||||
|
@ -2463,7 +2499,6 @@ func TransactionTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
u1 := user{Name: "User1", Age: 42}
|
u1 := user{Name: "User1", Age: 42}
|
||||||
|
@ -2501,7 +2536,6 @@ func TransactionTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
cMock := mockTxBeginner{
|
cMock := mockTxBeginner{
|
||||||
|
@ -2536,7 +2570,6 @@ func TransactionTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
cMock := mockTxBeginner{
|
cMock := mockTxBeginner{
|
||||||
|
@ -2562,7 +2595,6 @@ func TransactionTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
cMock := mockTxBeginner{
|
cMock := mockTxBeginner{
|
||||||
|
@ -2588,7 +2620,6 @@ func TransactionTest(
|
||||||
db, closer := newDBAdapter(t)
|
db, closer := newDBAdapter(t)
|
||||||
defer closer.Close()
|
defer closer.Close()
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, driver)
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
c.db = mockDBAdapter{}
|
c.db = mockDBAdapter{}
|
||||||
|
@ -2598,6 +2629,21 @@ func TransactionTest(
|
||||||
})
|
})
|
||||||
tt.AssertErrContains(t, err, "KSQL", "can't start transaction", "DBAdapter", "TxBeginner")
|
tt.AssertErrContains(t, err, "KSQL", "can't start transaction", "DBAdapter", "TxBeginner")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("should report error context.Canceled the context has been canceled", func(t *testing.T) {
|
||||||
|
db, closer := newDBAdapter(t)
|
||||||
|
defer closer.Close()
|
||||||
|
|
||||||
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
|
cancel()
|
||||||
|
|
||||||
|
c := newTestDB(db, driver)
|
||||||
|
|
||||||
|
err := c.Transaction(ctx, func(db Provider) error {
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
tt.AssertEqual(t, errors.Is(err, context.Canceled), true)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue