Add support for automatic query logging.

This commit is contained in:
go-jet 2020-05-10 11:41:07 +02:00
parent 5d742837f1
commit 0d3ec872d6
22 changed files with 152 additions and 13 deletions

View file

@ -80,6 +80,7 @@ func TestUUID(t *testing.T) {
require.True(t, dest.UUID.String() != uuid.UUID{}.String())
require.True(t, dest.StrUUID.String() != uuid.UUID{}.String())
require.Equal(t, dest.StrUUID.String(), dest.BinUUID.String())
requireLogged(t, query)
}
func TestExpressionOperators(t *testing.T) {

View file

@ -68,4 +68,6 @@ FROM test_sample.all_types;
Unsigned: 15,
Binary: "Some text",
})
requireLogged(t, query)
}

View file

@ -24,6 +24,7 @@ WHERE link.name IN ('Gmail', 'Outlook');
testutils.AssertDebugStatementSql(t, deleteStmt, expectedSQL, "Gmail", "Outlook")
testutils.AssertExec(t, deleteStmt, db, 2)
requireLogged(t, deleteStmt)
}
func TestDeleteWithWhereOrderByLimit(t *testing.T) {
@ -43,6 +44,7 @@ LIMIT 1;
testutils.AssertDebugStatementSql(t, deleteStmt, expectedSQL, "Gmail", "Outlook", int64(1))
testutils.AssertExec(t, deleteStmt, db, 1)
requireLogged(t, deleteStmt)
}
func TestDeleteQueryContext(t *testing.T) {
@ -61,6 +63,7 @@ func TestDeleteQueryContext(t *testing.T) {
err := deleteStmt.QueryContext(ctx, db, &dest)
require.Error(t, err, "context deadline exceeded")
requireLogged(t, deleteStmt)
}
func TestDeleteExecContext(t *testing.T) {

View file

@ -34,6 +34,7 @@ VALUES (100, 'http://www.postgresqltutorial.com', 'PostgreSQL Tutorial', DEFAULT
_, err := insertQuery.Exec(db)
require.NoError(t, err)
requireLogged(t, insertQuery)
insertedLinks := []model.Link{}
@ -82,6 +83,7 @@ VALUES (100, 'http://www.postgresqltutorial.com', 'PostgreSQL Tutorial', DEFAULT
_, err := stmt.Exec(db)
require.NoError(t, err)
requireLogged(t, stmt)
insertedLinks := []model.Link{}

View file

@ -17,6 +17,7 @@ LOCK TABLES dvds.customer READ;
_, err := query.Exec(db)
require.NoError(t, err)
requireLogged(t, query)
}
func TestLockWrite(t *testing.T) {
@ -28,6 +29,7 @@ LOCK TABLES dvds.customer WRITE;
_, err := query.Exec(db)
require.NoError(t, err)
requireLogged(t, query)
}
func TestUnlockTables(t *testing.T) {
@ -39,4 +41,5 @@ UNLOCK TABLES;
_, err := query.Exec(db)
require.NoError(t, err)
requireLogged(t, query)
}

View file

@ -1,9 +1,13 @@
package mysql
import (
"context"
"database/sql"
"flag"
jetmysql "github.com/go-jet/jet/mysql"
"github.com/go-jet/jet/postgres"
"github.com/go-jet/jet/tests/dbconfig"
"github.com/stretchr/testify/require"
"math/rand"
"time"
@ -44,3 +48,21 @@ func TestMain(m *testing.M) {
os.Exit(ret)
}
var loggedSQL string
var loggedSQLArgs []interface{}
var loggedDebugSQL string
func init() {
jetmysql.SetLogger(func(ctx context.Context, statement jetmysql.LoggableStatement) {
loggedSQL, loggedSQLArgs = statement.Sql()
loggedDebugSQL = statement.DebugSql()
})
}
func requireLogged(t *testing.T, statement postgres.Statement) {
query, args := statement.Sql()
require.Equal(t, loggedSQL, query)
require.Equal(t, loggedSQLArgs, args)
require.Equal(t, loggedDebugSQL, statement.DebugSql())
}

View file

@ -33,6 +33,7 @@ WHERE actor.actor_id = ?;
require.NoError(t, err)
testutils.AssertDeepEqual(t, actor, actor2)
requireLogged(t, query)
}
var actor2 = model.Actor{
@ -67,6 +68,7 @@ ORDER BY actor.actor_id;
//testutils.PrintJson(dest)
//testutils.SaveJsonFile(dest, "mysql/testdata/all_actors.json")
testutils.AssertJSONFile(t, dest, "./testdata/results/mysql/all_actors.json")
requireLogged(t, query)
}
func TestSelectGroupByHaving(t *testing.T) {
@ -144,6 +146,7 @@ ORDER BY payment.customer_id, SUM(payment.amount) ASC;
//testutils.SaveJsonFile(dest, "mysql/testdata/customer_payment_sum.json")
testutils.AssertJSONFile(t, dest, "./testdata/results/mysql/customer_payment_sum.json")
requireLogged(t, query)
}
func TestSubQuery(t *testing.T) {

View file

@ -30,6 +30,7 @@ WHERE link.name = 'Bing';
testutils.AssertDebugStatementSql(t, query, expectedSQL, "Bong", "http://bong.com", "Bing")
testutils.AssertExec(t, query, db)
requireLogged(t, query)
})
t.Run("new version", func(t *testing.T) {
@ -42,6 +43,7 @@ WHERE link.name = 'Bing';
testutils.AssertDebugStatementSql(t, stmt, expectedSQL, "Bong", "http://bong.com", "Bing")
testutils.AssertExec(t, stmt, db)
requireLogged(t, stmt)
})
links := []model.Link{}
@ -88,6 +90,7 @@ WHERE link.name = ?;
testutils.AssertStatementSql(t, query, expectedSQL, "Bong", "Youtube", "Bing")
testutils.AssertExec(t, query, db)
requireLogged(t, query)
})
t.Run("new version", func(t *testing.T) {
@ -105,6 +108,7 @@ WHERE link.name = ?;
testutils.AssertStatementSql(t, query, expectedSQL, "Bong", "Youtube", "Bing")
testutils.AssertExec(t, query, db)
requireLogged(t, query)
})
}
@ -130,10 +134,10 @@ SET id = ?,
description = ?
WHERE link.id = ?;
`
fmt.Println(stmt.Sql())
testutils.AssertStatementSql(t, stmt, expectedSQL, int32(201), "http://www.duckduckgo.com", "DuckDuckGo", nil, int64(201))
testutils.AssertExec(t, stmt, db)
requireLogged(t, stmt)
}
func TestUpdateWithModelDataAndPredefinedColumnList(t *testing.T) {
@ -165,10 +169,10 @@ WHERE link.id = 201;
testutils.AssertDebugStatementSql(t, stmt, expectedSQL, nil, "DuckDuckGo", "http://www.duckduckgo.com", int64(201))
testutils.AssertExec(t, stmt, db)
requireLogged(t, stmt)
}
func TestUpdateWithModelDataAndMutableColumns(t *testing.T) {
setupLinkTableForUpdateTest(t)
link := model.Link{