Add support for CockorachDB.
This commit is contained in:
parent
3ff9241eea
commit
bc776f947b
33 changed files with 1040 additions and 1037 deletions
|
|
@ -20,7 +20,7 @@ import (
|
|||
|
||||
func TestAllTypes(t *testing.T) {
|
||||
|
||||
dest := []model.AllTypes{}
|
||||
var dest []model.AllTypes
|
||||
|
||||
err := AllTypes.
|
||||
SELECT(AllTypes.AllColumns).
|
||||
|
|
@ -39,7 +39,7 @@ func TestAllTypesViewSelect(t *testing.T) {
|
|||
|
||||
type AllTypesView model.AllTypes
|
||||
|
||||
dest := []AllTypesView{}
|
||||
var dest []AllTypesView
|
||||
|
||||
err := view.AllTypesView.SELECT(view.AllTypesView.AllColumns).Query(db, &dest)
|
||||
require.NoError(t, err)
|
||||
|
|
|
|||
|
|
@ -13,24 +13,20 @@ import (
|
|||
)
|
||||
|
||||
func TestDeleteWithWhere(t *testing.T) {
|
||||
initForDeleteTest(t)
|
||||
|
||||
var expectedSQL = `
|
||||
DELETE FROM test_sample.link
|
||||
WHERE link.name IN ('Gmail', 'Outlook');
|
||||
`
|
||||
deleteStmt := Link.
|
||||
DELETE().
|
||||
WHERE(Link.Name.IN(String("Gmail"), String("Outlook")))
|
||||
|
||||
testutils.AssertDebugStatementSql(t, deleteStmt, expectedSQL, "Gmail", "Outlook")
|
||||
testutils.AssertExec(t, deleteStmt, db, 2)
|
||||
testutils.AssertDebugStatementSql(t, deleteStmt, `
|
||||
DELETE FROM test_sample.link
|
||||
WHERE link.name IN ('Gmail', 'Outlook');
|
||||
`, "Gmail", "Outlook")
|
||||
|
||||
testutils.AssertExecAndRollback(t, deleteStmt, db, 2)
|
||||
requireLogged(t, deleteStmt)
|
||||
}
|
||||
|
||||
func TestDeleteWithWhereOrderByLimit(t *testing.T) {
|
||||
initForDeleteTest(t)
|
||||
|
||||
var expectedSQL = `
|
||||
DELETE FROM test_sample.link
|
||||
WHERE link.name IN ('Gmail', 'Outlook')
|
||||
|
|
@ -44,13 +40,11 @@ LIMIT 1;
|
|||
LIMIT(1)
|
||||
|
||||
testutils.AssertDebugStatementSql(t, deleteStmt, expectedSQL, "Gmail", "Outlook", int64(1))
|
||||
testutils.AssertExec(t, deleteStmt, db, 1)
|
||||
testutils.AssertExecAndRollback(t, deleteStmt, db, 1)
|
||||
requireLogged(t, deleteStmt)
|
||||
}
|
||||
|
||||
func TestDeleteQueryContext(t *testing.T) {
|
||||
initForDeleteTest(t)
|
||||
|
||||
deleteStmt := Link.
|
||||
DELETE().
|
||||
WHERE(Link.Name.IN(String("Gmail"), String("Outlook")))
|
||||
|
|
@ -60,7 +54,7 @@ func TestDeleteQueryContext(t *testing.T) {
|
|||
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
|
||||
dest := []model.Link{}
|
||||
var dest []model.Link
|
||||
err := deleteStmt.QueryContext(ctx, db, &dest)
|
||||
|
||||
require.Error(t, err, "context deadline exceeded")
|
||||
|
|
@ -68,8 +62,6 @@ func TestDeleteQueryContext(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestDeleteExecContext(t *testing.T) {
|
||||
initForDeleteTest(t)
|
||||
|
||||
deleteStmt := Link.
|
||||
DELETE().
|
||||
WHERE(Link.Name.IN(String("Gmail"), String("Outlook")))
|
||||
|
|
@ -84,19 +76,7 @@ func TestDeleteExecContext(t *testing.T) {
|
|||
require.Error(t, err, "context deadline exceeded")
|
||||
}
|
||||
|
||||
func initForDeleteTest(t *testing.T) {
|
||||
cleanUpLinkTable(t)
|
||||
stmt := Link.INSERT(Link.URL, Link.Name, Link.Description).
|
||||
VALUES("www.gmail.com", "Gmail", "Email service developed by Google").
|
||||
VALUES("www.outlook.live.com", "Outlook", "Email service developed by Microsoft")
|
||||
|
||||
testutils.AssertExec(t, stmt, db, 2)
|
||||
}
|
||||
|
||||
func TestDeleteWithUsing(t *testing.T) {
|
||||
tx := beginTx(t)
|
||||
defer tx.Rollback()
|
||||
|
||||
stmt := table.Rental.DELETE().
|
||||
USING(
|
||||
table.Rental.
|
||||
|
|
@ -116,5 +96,5 @@ USING dvds.rental
|
|||
WHERE (staff.staff_id != ?) AND (rental.rental_id < ?);
|
||||
`)
|
||||
|
||||
testutils.AssertExec(t, stmt, tx)
|
||||
testutils.AssertExecAndRollback(t, stmt, db)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package mysql
|
|||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"github.com/go-jet/jet/v2/internal/testutils"
|
||||
. "github.com/go-jet/jet/v2/mysql"
|
||||
"github.com/go-jet/jet/v2/tests/.gentestdata/mysql/test_sample/model"
|
||||
|
|
@ -13,51 +14,47 @@ import (
|
|||
)
|
||||
|
||||
func TestInsertValues(t *testing.T) {
|
||||
cleanUpLinkTable(t)
|
||||
|
||||
var expectedSQL = `
|
||||
INSERT INTO test_sample.link (id, url, name, description)
|
||||
VALUES (100, 'http://www.postgresqltutorial.com', 'PostgreSQL Tutorial', DEFAULT),
|
||||
(101, 'http://www.google.com', 'Google', DEFAULT),
|
||||
(102, 'http://www.yahoo.com', 'Yahoo', NULL);
|
||||
`
|
||||
|
||||
insertQuery := Link.INSERT(Link.ID, Link.URL, Link.Name, Link.Description).
|
||||
VALUES(100, "http://www.postgresqltutorial.com", "PostgreSQL Tutorial", DEFAULT).
|
||||
VALUES(101, "http://www.google.com", "Google", DEFAULT).
|
||||
VALUES(102, "http://www.yahoo.com", "Yahoo", nil)
|
||||
|
||||
testutils.AssertDebugStatementSql(t, insertQuery, expectedSQL,
|
||||
testutils.AssertDebugStatementSql(t, insertQuery, `
|
||||
INSERT INTO test_sample.link (id, url, name, description)
|
||||
VALUES (100, 'http://www.postgresqltutorial.com', 'PostgreSQL Tutorial', DEFAULT),
|
||||
(101, 'http://www.google.com', 'Google', DEFAULT),
|
||||
(102, 'http://www.yahoo.com', 'Yahoo', NULL);
|
||||
`,
|
||||
100, "http://www.postgresqltutorial.com", "PostgreSQL Tutorial",
|
||||
101, "http://www.google.com", "Google",
|
||||
102, "http://www.yahoo.com", "Yahoo", nil)
|
||||
|
||||
_, err := insertQuery.Exec(db)
|
||||
require.NoError(t, err)
|
||||
requireLogged(t, insertQuery)
|
||||
testutils.ExecuteInTxAndRollback(t, db, func(tx *sql.Tx) {
|
||||
_, err := insertQuery.Exec(tx)
|
||||
require.NoError(t, err)
|
||||
requireLogged(t, insertQuery)
|
||||
|
||||
insertedLinks := []model.Link{}
|
||||
var insertedLinks []model.Link
|
||||
|
||||
err = Link.SELECT(Link.AllColumns).
|
||||
WHERE(Link.ID.GT_EQ(Int(100))).
|
||||
ORDER_BY(Link.ID).
|
||||
Query(db, &insertedLinks)
|
||||
err = Link.SELECT(Link.AllColumns).
|
||||
WHERE(Link.ID.BETWEEN(Int(100), Int(199))).
|
||||
ORDER_BY(Link.ID).
|
||||
Query(tx, &insertedLinks)
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, len(insertedLinks), 3)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, len(insertedLinks), 3)
|
||||
|
||||
testutils.AssertDeepEqual(t, insertedLinks[0], postgreTutorial)
|
||||
|
||||
testutils.AssertDeepEqual(t, insertedLinks[1], model.Link{
|
||||
ID: 101,
|
||||
URL: "http://www.google.com",
|
||||
Name: "Google",
|
||||
})
|
||||
|
||||
testutils.AssertDeepEqual(t, insertedLinks[2], model.Link{
|
||||
ID: 102,
|
||||
URL: "http://www.yahoo.com",
|
||||
Name: "Yahoo",
|
||||
testutils.AssertDeepEqual(t, insertedLinks[0], postgreTutorial)
|
||||
testutils.AssertDeepEqual(t, insertedLinks[1], model.Link{
|
||||
ID: 101,
|
||||
URL: "http://www.google.com",
|
||||
Name: "Google",
|
||||
})
|
||||
testutils.AssertDeepEqual(t, insertedLinks[2], model.Link{
|
||||
ID: 102,
|
||||
URL: "http://www.yahoo.com",
|
||||
Name: "Yahoo",
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -68,42 +65,34 @@ var postgreTutorial = model.Link{
|
|||
}
|
||||
|
||||
func TestInsertEmptyColumnList(t *testing.T) {
|
||||
cleanUpLinkTable(t)
|
||||
|
||||
expectedSQL := `
|
||||
INSERT INTO test_sample.link
|
||||
VALUES (100, 'http://www.postgresqltutorial.com', 'PostgreSQL Tutorial', DEFAULT);
|
||||
`
|
||||
|
||||
stmt := Link.INSERT().
|
||||
VALUES(100, "http://www.postgresqltutorial.com", "PostgreSQL Tutorial", DEFAULT)
|
||||
|
||||
testutils.AssertDebugStatementSql(t, stmt, expectedSQL,
|
||||
testutils.AssertDebugStatementSql(t, stmt, `
|
||||
INSERT INTO test_sample.link
|
||||
VALUES (100, 'http://www.postgresqltutorial.com', 'PostgreSQL Tutorial', DEFAULT);
|
||||
`,
|
||||
100, "http://www.postgresqltutorial.com", "PostgreSQL Tutorial")
|
||||
|
||||
_, err := stmt.Exec(db)
|
||||
require.NoError(t, err)
|
||||
requireLogged(t, stmt)
|
||||
testutils.ExecuteInTxAndRollback(t, db, func(tx *sql.Tx) {
|
||||
_, err := stmt.Exec(tx)
|
||||
require.NoError(t, err)
|
||||
requireLogged(t, stmt)
|
||||
|
||||
insertedLinks := []model.Link{}
|
||||
var insertedLinks []model.Link
|
||||
|
||||
err = Link.SELECT(Link.AllColumns).
|
||||
WHERE(Link.ID.GT_EQ(Int(100))).
|
||||
ORDER_BY(Link.ID).
|
||||
Query(db, &insertedLinks)
|
||||
err = Link.SELECT(Link.AllColumns).
|
||||
WHERE(Link.ID.BETWEEN(Int(100), Int(199))).
|
||||
ORDER_BY(Link.ID).
|
||||
Query(tx, &insertedLinks)
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, len(insertedLinks), 1)
|
||||
testutils.AssertDeepEqual(t, insertedLinks[0], postgreTutorial)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, len(insertedLinks), 1)
|
||||
testutils.AssertDeepEqual(t, insertedLinks[0], postgreTutorial)
|
||||
})
|
||||
}
|
||||
|
||||
func TestInsertModelObject(t *testing.T) {
|
||||
cleanUpLinkTable(t)
|
||||
var expectedSQL = `
|
||||
INSERT INTO test_sample.link (url, name)
|
||||
VALUES ('http://www.duckduckgo.com', 'Duck Duck go');
|
||||
`
|
||||
|
||||
linkData := model.Link{
|
||||
URL: "http://www.duckduckgo.com",
|
||||
Name: "Duck Duck go",
|
||||
|
|
@ -113,19 +102,19 @@ VALUES ('http://www.duckduckgo.com', 'Duck Duck go');
|
|||
INSERT(Link.URL, Link.Name).
|
||||
MODEL(linkData)
|
||||
|
||||
testutils.AssertDebugStatementSql(t, query, expectedSQL, "http://www.duckduckgo.com", "Duck Duck go")
|
||||
testutils.AssertDebugStatementSql(t, query, `
|
||||
INSERT INTO test_sample.link (url, name)
|
||||
VALUES ('http://www.duckduckgo.com', 'Duck Duck go');
|
||||
`,
|
||||
"http://www.duckduckgo.com", "Duck Duck go")
|
||||
|
||||
_, err := query.Exec(db)
|
||||
require.NoError(t, err)
|
||||
testutils.ExecuteInTxAndRollback(t, db, func(tx *sql.Tx) {
|
||||
_, err := query.Exec(tx)
|
||||
require.NoError(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
func TestInsertModelObjectEmptyColumnList(t *testing.T) {
|
||||
cleanUpLinkTable(t)
|
||||
var expectedSQL = `
|
||||
INSERT INTO test_sample.link
|
||||
VALUES (1000, 'http://www.duckduckgo.com', 'Duck Duck go', NULL);
|
||||
`
|
||||
|
||||
linkData := model.Link{
|
||||
ID: 1000,
|
||||
URL: "http://www.duckduckgo.com",
|
||||
|
|
@ -136,20 +125,18 @@ VALUES (1000, 'http://www.duckduckgo.com', 'Duck Duck go', NULL);
|
|||
INSERT().
|
||||
MODEL(linkData)
|
||||
|
||||
testutils.AssertDebugStatementSql(t, query, expectedSQL, int32(1000), "http://www.duckduckgo.com", "Duck Duck go", nil)
|
||||
testutils.AssertDebugStatementSql(t, query, `
|
||||
INSERT INTO test_sample.link
|
||||
VALUES (1000, 'http://www.duckduckgo.com', 'Duck Duck go', NULL);
|
||||
`, int32(1000), "http://www.duckduckgo.com", "Duck Duck go", nil)
|
||||
|
||||
_, err := query.Exec(db)
|
||||
require.NoError(t, err)
|
||||
testutils.ExecuteInTxAndRollback(t, db, func(tx *sql.Tx) {
|
||||
_, err := query.Exec(tx)
|
||||
require.NoError(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
func TestInsertModelsObject(t *testing.T) {
|
||||
expectedSQL := `
|
||||
INSERT INTO test_sample.link (url, name)
|
||||
VALUES ('http://www.postgresqltutorial.com', 'PostgreSQL Tutorial'),
|
||||
('http://www.google.com', 'Google'),
|
||||
('http://www.yahoo.com', 'Yahoo');
|
||||
`
|
||||
|
||||
tutorial := model.Link{
|
||||
URL: "http://www.postgresqltutorial.com",
|
||||
Name: "PostgreSQL Tutorial",
|
||||
|
|
@ -169,24 +156,23 @@ VALUES ('http://www.postgresqltutorial.com', 'PostgreSQL Tutorial'),
|
|||
INSERT(Link.URL, Link.Name).
|
||||
MODELS([]model.Link{tutorial, google, yahoo})
|
||||
|
||||
testutils.AssertDebugStatementSql(t, query, expectedSQL,
|
||||
testutils.AssertDebugStatementSql(t, query, `
|
||||
INSERT INTO test_sample.link (url, name)
|
||||
VALUES ('http://www.postgresqltutorial.com', 'PostgreSQL Tutorial'),
|
||||
('http://www.google.com', 'Google'),
|
||||
('http://www.yahoo.com', 'Yahoo');
|
||||
`,
|
||||
"http://www.postgresqltutorial.com", "PostgreSQL Tutorial",
|
||||
"http://www.google.com", "Google",
|
||||
"http://www.yahoo.com", "Yahoo")
|
||||
|
||||
_, err := query.Exec(db)
|
||||
require.NoError(t, err)
|
||||
testutils.ExecuteInTxAndRollback(t, db, func(tx *sql.Tx) {
|
||||
_, err := query.Exec(tx)
|
||||
require.NoError(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
func TestInsertUsingMutableColumns(t *testing.T) {
|
||||
var expectedSQL = `
|
||||
INSERT INTO test_sample.link (url, name, description)
|
||||
VALUES ('http://www.postgresqltutorial.com', 'PostgreSQL Tutorial', DEFAULT),
|
||||
('http://www.google.com', 'Google', NULL),
|
||||
('http://www.google.com', 'Google', NULL),
|
||||
('http://www.yahoo.com', 'Yahoo', NULL);
|
||||
`
|
||||
|
||||
google := model.Link{
|
||||
URL: "http://www.google.com",
|
||||
Name: "Google",
|
||||
|
|
@ -203,31 +189,25 @@ VALUES ('http://www.postgresqltutorial.com', 'PostgreSQL Tutorial', DEFAULT),
|
|||
MODEL(google).
|
||||
MODELS([]model.Link{google, yahoo})
|
||||
|
||||
testutils.AssertDebugStatementSql(t, stmt, expectedSQL,
|
||||
testutils.AssertDebugStatementSql(t, stmt, `
|
||||
INSERT INTO test_sample.link (url, name, description)
|
||||
VALUES ('http://www.postgresqltutorial.com', 'PostgreSQL Tutorial', DEFAULT),
|
||||
('http://www.google.com', 'Google', NULL),
|
||||
('http://www.google.com', 'Google', NULL),
|
||||
('http://www.yahoo.com', 'Yahoo', NULL);
|
||||
`,
|
||||
"http://www.postgresqltutorial.com", "PostgreSQL Tutorial",
|
||||
"http://www.google.com", "Google", nil,
|
||||
"http://www.google.com", "Google", nil,
|
||||
"http://www.yahoo.com", "Yahoo", nil)
|
||||
|
||||
_, err := stmt.Exec(db)
|
||||
require.NoError(t, err)
|
||||
testutils.ExecuteInTxAndRollback(t, db, func(tx *sql.Tx) {
|
||||
_, err := stmt.Exec(tx)
|
||||
require.NoError(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
func TestInsertQuery(t *testing.T) {
|
||||
_, err := Link.DELETE().
|
||||
WHERE(Link.ID.NOT_EQ(Int(1)).AND(Link.Name.EQ(String("Youtube")))).
|
||||
Exec(db)
|
||||
require.NoError(t, err)
|
||||
|
||||
var expectedSQL = `
|
||||
INSERT INTO test_sample.link (url, name) (
|
||||
SELECT link.url AS "link.url",
|
||||
link.name AS "link.name"
|
||||
FROM test_sample.link
|
||||
WHERE link.id = 1
|
||||
);
|
||||
`
|
||||
|
||||
query := Link.
|
||||
INSERT(Link.URL, Link.Name).
|
||||
QUERY(
|
||||
|
|
@ -236,19 +216,28 @@ INSERT INTO test_sample.link (url, name) (
|
|||
WHERE(Link.ID.EQ(Int(1))),
|
||||
)
|
||||
|
||||
testutils.AssertDebugStatementSql(t, query, expectedSQL, int64(1))
|
||||
testutils.AssertDebugStatementSql(t, query, `
|
||||
INSERT INTO test_sample.link (url, name) (
|
||||
SELECT link.url AS "link.url",
|
||||
link.name AS "link.name"
|
||||
FROM test_sample.link
|
||||
WHERE link.id = 1
|
||||
);
|
||||
`, int64(1))
|
||||
|
||||
_, err = query.Exec(db)
|
||||
require.NoError(t, err)
|
||||
testutils.ExecuteInTxAndRollback(t, db, func(tx *sql.Tx) {
|
||||
_, err := query.Exec(tx)
|
||||
require.NoError(t, err)
|
||||
|
||||
youtubeLinks := []model.Link{}
|
||||
err = Link.
|
||||
SELECT(Link.AllColumns).
|
||||
WHERE(Link.Name.EQ(String("Youtube"))).
|
||||
Query(db, &youtubeLinks)
|
||||
var youtubeLinks []model.Link
|
||||
err = Link.
|
||||
SELECT(Link.AllColumns).
|
||||
WHERE(Link.Name.EQ(String("Youtube"))).
|
||||
Query(tx, &youtubeLinks)
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, len(youtubeLinks), 2)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, len(youtubeLinks), 2)
|
||||
})
|
||||
}
|
||||
|
||||
func TestInsertOnDuplicateKey(t *testing.T) {
|
||||
|
|
@ -272,28 +261,29 @@ ON DUPLICATE KEY UPDATE id = (id + ?),
|
|||
randId, "http://www.postgresqltutorial.com", "PostgreSQL Tutorial",
|
||||
int64(11), "PostgreSQL Tutorial 2")
|
||||
|
||||
testutils.AssertExec(t, stmt, db, 3)
|
||||
testutils.ExecuteInTxAndRollback(t, db, func(tx *sql.Tx) {
|
||||
_, err := stmt.Exec(tx)
|
||||
require.NoError(t, err)
|
||||
|
||||
newLinks := []model.Link{}
|
||||
var newLinks []model.Link
|
||||
|
||||
err := SELECT(Link.AllColumns).
|
||||
FROM(Link).
|
||||
WHERE(Link.ID.EQ(Int32(randId).ADD(Int(11)))).
|
||||
Query(db, &newLinks)
|
||||
err = SELECT(Link.AllColumns).
|
||||
FROM(Link).
|
||||
WHERE(Link.ID.EQ(Int32(randId).ADD(Int(11)))).
|
||||
Query(tx, &newLinks)
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Len(t, newLinks, 1)
|
||||
require.Equal(t, newLinks[0], model.Link{
|
||||
ID: randId + 11,
|
||||
URL: "http://www.postgresqltutorial.com",
|
||||
Name: "PostgreSQL Tutorial 2",
|
||||
Description: nil,
|
||||
require.NoError(t, err)
|
||||
require.Len(t, newLinks, 1)
|
||||
require.Equal(t, newLinks[0], model.Link{
|
||||
ID: randId + 11,
|
||||
URL: "http://www.postgresqltutorial.com",
|
||||
Name: "PostgreSQL Tutorial 2",
|
||||
Description: nil,
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func TestInsertWithQueryContext(t *testing.T) {
|
||||
cleanUpLinkTable(t)
|
||||
|
||||
stmt := Link.INSERT().
|
||||
VALUES(1100, "http://www.postgresqltutorial.com", "PostgreSQL Tutorial", DEFAULT)
|
||||
|
||||
|
|
@ -302,15 +292,13 @@ func TestInsertWithQueryContext(t *testing.T) {
|
|||
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
|
||||
dest := []model.Link{}
|
||||
var dest []model.Link
|
||||
err := stmt.QueryContext(ctx, db, &dest)
|
||||
|
||||
require.Error(t, err, "context deadline exceeded")
|
||||
}
|
||||
|
||||
func TestInsertWithExecContext(t *testing.T) {
|
||||
cleanUpLinkTable(t)
|
||||
|
||||
stmt := Link.INSERT().
|
||||
VALUES(100, "http://www.postgresqltutorial.com", "PostgreSQL Tutorial", DEFAULT)
|
||||
|
||||
|
|
@ -323,8 +311,3 @@ func TestInsertWithExecContext(t *testing.T) {
|
|||
|
||||
require.Error(t, err, "context deadline exceeded")
|
||||
}
|
||||
|
||||
func cleanUpLinkTable(t *testing.T) {
|
||||
_, err := Link.DELETE().WHERE(Link.ID.GT(Int(1))).Exec(db)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -96,9 +96,3 @@ func skipForMariaDB(t *testing.T) {
|
|||
t.SkipNow()
|
||||
}
|
||||
}
|
||||
|
||||
func beginTx(t *testing.T) *sql.Tx {
|
||||
tx, err := db.Begin()
|
||||
require.NoError(t, err)
|
||||
return tx
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package mysql
|
|||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"github.com/go-jet/jet/v2/internal/testutils"
|
||||
. "github.com/go-jet/jet/v2/mysql"
|
||||
"github.com/go-jet/jet/v2/tests/.gentestdata/mysql/dvds/table"
|
||||
|
|
@ -13,8 +14,6 @@ import (
|
|||
)
|
||||
|
||||
func TestUpdateValues(t *testing.T) {
|
||||
setupLinkTableForUpdateTest(t)
|
||||
|
||||
var expectedSQL = `
|
||||
UPDATE test_sample.link
|
||||
SET name = 'Bong',
|
||||
|
|
@ -28,8 +27,26 @@ WHERE link.name = 'Bing';
|
|||
WHERE(Link.Name.EQ(String("Bing")))
|
||||
|
||||
testutils.AssertDebugStatementSql(t, query, expectedSQL, "Bong", "http://bong.com", "Bing")
|
||||
testutils.AssertExec(t, query, db)
|
||||
requireLogged(t, query)
|
||||
testutils.ExecuteInTxAndRollback(t, db, func(tx *sql.Tx) {
|
||||
testutils.AssertExec(t, query, tx)
|
||||
requireLogged(t, query)
|
||||
|
||||
var links []model.Link
|
||||
|
||||
err := Link.
|
||||
SELECT(Link.AllColumns).
|
||||
WHERE(Link.Name.EQ(String("Bong"))).
|
||||
Query(tx, &links)
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, len(links), 1)
|
||||
testutils.AssertDeepEqual(t, links[0], model.Link{
|
||||
ID: 204,
|
||||
URL: "http://bong.com",
|
||||
Name: "Bong",
|
||||
})
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
t.Run("new version", func(t *testing.T) {
|
||||
|
|
@ -41,29 +58,29 @@ WHERE link.name = 'Bing';
|
|||
WHERE(Link.Name.EQ(String("Bing")))
|
||||
|
||||
testutils.AssertDebugStatementSql(t, stmt, expectedSQL, "Bong", "http://bong.com", "Bing")
|
||||
testutils.AssertExec(t, stmt, db)
|
||||
requireLogged(t, stmt)
|
||||
})
|
||||
testutils.ExecuteInTxAndRollback(t, db, func(tx *sql.Tx) {
|
||||
testutils.AssertExec(t, stmt, tx)
|
||||
requireLogged(t, stmt)
|
||||
|
||||
links := []model.Link{}
|
||||
var links []model.Link
|
||||
|
||||
err := Link.
|
||||
SELECT(Link.AllColumns).
|
||||
WHERE(Link.Name.EQ(String("Bong"))).
|
||||
Query(db, &links)
|
||||
err := Link.
|
||||
SELECT(Link.AllColumns).
|
||||
WHERE(Link.Name.EQ(String("Bong"))).
|
||||
Query(tx, &links)
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, len(links), 1)
|
||||
testutils.AssertDeepEqual(t, links[0], model.Link{
|
||||
ID: 204,
|
||||
URL: "http://bong.com",
|
||||
Name: "Bong",
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, len(links), 1)
|
||||
testutils.AssertDeepEqual(t, links[0], model.Link{
|
||||
ID: 204,
|
||||
URL: "http://bong.com",
|
||||
Name: "Bong",
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func TestUpdateWithSubQueries(t *testing.T) {
|
||||
setupLinkTableForUpdateTest(t)
|
||||
|
||||
expectedSQL := `
|
||||
UPDATE test_sample.link
|
||||
SET name = ?,
|
||||
|
|
@ -86,7 +103,7 @@ WHERE link.name = ?;
|
|||
WHERE(Link.Name.EQ(String("Bing")))
|
||||
|
||||
testutils.AssertStatementSql(t, query, expectedSQL, "Bong", "Youtube", "Bing")
|
||||
testutils.AssertExec(t, query, db)
|
||||
testutils.AssertExecAndRollback(t, query, db)
|
||||
requireLogged(t, query)
|
||||
})
|
||||
|
||||
|
|
@ -104,14 +121,12 @@ WHERE link.name = ?;
|
|||
WHERE(Link.Name.EQ(String("Bing")))
|
||||
|
||||
testutils.AssertStatementSql(t, query, expectedSQL, "Bong", "Youtube", "Bing")
|
||||
testutils.AssertExec(t, query, db)
|
||||
testutils.AssertExecAndRollback(t, query, db)
|
||||
requireLogged(t, query)
|
||||
})
|
||||
}
|
||||
|
||||
func TestUpdateWithModelData(t *testing.T) {
|
||||
setupLinkTableForUpdateTest(t)
|
||||
|
||||
link := model.Link{
|
||||
ID: 201,
|
||||
URL: "http://www.duckduckgo.com",
|
||||
|
|
@ -123,24 +138,20 @@ func TestUpdateWithModelData(t *testing.T) {
|
|||
MODEL(link).
|
||||
WHERE(Link.ID.EQ(Int32(link.ID)))
|
||||
|
||||
expectedSQL := `
|
||||
testutils.AssertStatementSql(t, stmt, `
|
||||
UPDATE test_sample.link
|
||||
SET id = ?,
|
||||
url = ?,
|
||||
name = ?,
|
||||
description = ?
|
||||
WHERE link.id = ?;
|
||||
`
|
||||
testutils.AssertStatementSql(t, stmt, expectedSQL, int32(201), "http://www.duckduckgo.com", "DuckDuckGo", nil, int32(201))
|
||||
`, int32(201), "http://www.duckduckgo.com", "DuckDuckGo", nil, int32(201))
|
||||
|
||||
testutils.AssertExec(t, stmt, db)
|
||||
testutils.AssertExecAndRollback(t, stmt, db)
|
||||
requireLogged(t, stmt)
|
||||
}
|
||||
|
||||
func TestUpdateWithModelDataAndPredefinedColumnList(t *testing.T) {
|
||||
|
||||
setupLinkTableForUpdateTest(t)
|
||||
|
||||
link := model.Link{
|
||||
ID: 201,
|
||||
URL: "http://www.duckduckgo.com",
|
||||
|
|
@ -154,23 +165,19 @@ func TestUpdateWithModelDataAndPredefinedColumnList(t *testing.T) {
|
|||
MODEL(link).
|
||||
WHERE(Link.ID.EQ(Int32(link.ID)))
|
||||
|
||||
var expectedSQL = `
|
||||
testutils.AssertDebugStatementSql(t, stmt, `
|
||||
UPDATE test_sample.link
|
||||
SET description = NULL,
|
||||
name = 'DuckDuckGo',
|
||||
url = 'http://www.duckduckgo.com'
|
||||
WHERE link.id = 201;
|
||||
`
|
||||
`, nil, "DuckDuckGo", "http://www.duckduckgo.com", int32(201))
|
||||
|
||||
testutils.AssertDebugStatementSql(t, stmt, expectedSQL, nil, "DuckDuckGo", "http://www.duckduckgo.com", int32(201))
|
||||
|
||||
testutils.AssertExec(t, stmt, db)
|
||||
testutils.AssertExecAndRollback(t, stmt, db)
|
||||
requireLogged(t, stmt)
|
||||
}
|
||||
|
||||
func TestUpdateWithModelDataAndMutableColumns(t *testing.T) {
|
||||
setupLinkTableForUpdateTest(t)
|
||||
|
||||
link := model.Link{
|
||||
ID: 201,
|
||||
URL: "http://www.duckduckgo.com",
|
||||
|
|
@ -192,7 +199,7 @@ WHERE link.id = 201;
|
|||
//fmt.Println(stmt.DebugSql())
|
||||
|
||||
testutils.AssertDebugStatementSql(t, stmt, expectedSQL, "http://www.duckduckgo.com", "DuckDuckGo", nil, int32(201))
|
||||
testutils.AssertExec(t, stmt, db)
|
||||
testutils.AssertExecAndRollback(t, stmt, db)
|
||||
}
|
||||
|
||||
func TestUpdateWithInvalidModelData(t *testing.T) {
|
||||
|
|
@ -201,8 +208,6 @@ func TestUpdateWithInvalidModelData(t *testing.T) {
|
|||
require.Equal(t, r, "missing struct field for column : id")
|
||||
}()
|
||||
|
||||
setupLinkTableForUpdateTest(t)
|
||||
|
||||
link := struct {
|
||||
Ident int
|
||||
URL string
|
||||
|
|
@ -215,17 +220,13 @@ func TestUpdateWithInvalidModelData(t *testing.T) {
|
|||
Name: "DuckDuckGo",
|
||||
}
|
||||
|
||||
stmt := Link.
|
||||
_ = Link.
|
||||
UPDATE(Link.AllColumns).
|
||||
MODEL(link).
|
||||
WHERE(Link.ID.EQ(Int(int64(link.Ident))))
|
||||
|
||||
stmt.Sql()
|
||||
}
|
||||
|
||||
func TestUpdateQueryContext(t *testing.T) {
|
||||
setupLinkTableForUpdateTest(t)
|
||||
|
||||
updateStmt := Link.
|
||||
UPDATE(Link.Name, Link.URL).
|
||||
SET("Bong", "http://bong.com").
|
||||
|
|
@ -243,8 +244,6 @@ func TestUpdateQueryContext(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestUpdateExecContext(t *testing.T) {
|
||||
setupLinkTableForUpdateTest(t)
|
||||
|
||||
updateStmt := Link.
|
||||
UPDATE(Link.Name, Link.URL).
|
||||
SET("Bong", "http://bong.com").
|
||||
|
|
@ -261,9 +260,6 @@ func TestUpdateExecContext(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestUpdateWithJoin(t *testing.T) {
|
||||
tx := beginTx(t)
|
||||
defer tx.Rollback()
|
||||
|
||||
statement := table.Staff.INNER_JOIN(table.Address, table.Address.AddressID.EQ(table.Staff.AddressID)).
|
||||
UPDATE(table.Staff.LastName).
|
||||
SET(String("New staff name")).
|
||||
|
|
@ -276,21 +272,5 @@ SET last_name = ?
|
|||
WHERE staff.staff_id = ?;
|
||||
`, "New staff name", int64(1))
|
||||
|
||||
_, err := statement.Exec(tx)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func setupLinkTableForUpdateTest(t *testing.T) {
|
||||
|
||||
cleanUpLinkTable(t)
|
||||
|
||||
_, err := Link.INSERT(Link.ID, Link.URL, Link.Name, Link.Description).
|
||||
VALUES(200, "http://www.postgresqltutorial.com", "PostgreSQL Tutorial", DEFAULT).
|
||||
VALUES(201, "http://www.ask.com", "Ask", DEFAULT).
|
||||
VALUES(202, "http://www.ask.com", "Ask", DEFAULT).
|
||||
VALUES(203, "http://www.yahoo.com", "Yahoo", DEFAULT).
|
||||
VALUES(204, "http://www.bing.com", "Bing", DEFAULT).
|
||||
Exec(db)
|
||||
|
||||
require.NoError(t, err)
|
||||
testutils.AssertExecAndRollback(t, statement, db)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue