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

@ -834,6 +834,7 @@ func TestInterval(t *testing.T) {
err := stmt.Query(db, &struct{}{})
require.NoError(t, err)
requireLogged(t, stmt)
}
func TestSubQueryColumnReference(t *testing.T) {
@ -1009,6 +1010,7 @@ FROM`
require.NoError(t, err)
testutils.AssertDeepEqual(t, dest1, dest2)
requireLogged(t, stmt2)
}
}
@ -1062,6 +1064,7 @@ LIMIT $6;
"Timestamp": "2009-11-17T20:34:58.651387Z"
}
`)
requireLogged(t, query)
}
var allTypesRow0 = model.AllTypes{

View file

@ -35,6 +35,7 @@ ORDER BY "Album"."AlbumId" ASC;
testutils.AssertDeepEqual(t, dest[0], album1)
testutils.AssertDeepEqual(t, dest[1], album2)
testutils.AssertDeepEqual(t, dest[len(dest)-1], album347)
requireLogged(t, stmt)
}
func TestJoinEverything(t *testing.T) {
@ -106,6 +107,7 @@ func TestJoinEverything(t *testing.T) {
require.NoError(t, err)
require.Equal(t, len(dest), 275)
testutils.AssertJSONFile(t, dest, "./testdata/results/postgres/joined_everything.json")
requireLogged(t, stmt)
}
func TestSelfJoin(t *testing.T) {

View file

@ -53,6 +53,7 @@ RETURNING link.id AS "link.id",
require.Equal(t, len(dest), 2)
testutils.AssertDeepEqual(t, dest[0].Name, "Gmail")
testutils.AssertDeepEqual(t, dest[1].Name, "Outlook")
requireLogged(t, deleteStmt)
}
func initForDeleteTest(t *testing.T) {
@ -80,6 +81,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) {
@ -99,4 +101,5 @@ func TestDeleteExecContext(t *testing.T) {
_, err := deleteStmt.ExecContext(ctx, db)
require.Error(t, err, "context deadline exceeded")
requireLogged(t, deleteStmt)
}

View file

@ -89,6 +89,7 @@ VALUES (100, 'http://www.postgresqltutorial.com', 'PostgreSQL Tutorial', DEFAULT
100, "http://www.postgresqltutorial.com", "PostgreSQL Tutorial")
AssertExec(t, stmt, 1)
requireLogged(t, stmt)
}
func TestInsertOnConflict(t *testing.T) {
@ -108,6 +109,7 @@ VALUES ($1, $2, $3, $4, $5),
ON CONFLICT (employee_id) DO NOTHING;
`)
AssertExec(t, stmt, 1)
requireLogged(t, stmt)
})
t.Run("on constraint do nothing", func(t *testing.T) {
@ -125,6 +127,7 @@ VALUES ($1, $2, $3, $4, $5),
ON CONFLICT ON CONSTRAINT employee_pkey DO NOTHING;
`)
AssertExec(t, stmt, 1)
requireLogged(t, stmt)
})
t.Run("do update", func(t *testing.T) {

View file

@ -40,6 +40,7 @@ LOCK TABLE dvds.address IN`
err = tx.Rollback()
require.NoError(t, err)
requireLogged(t, query)
}
for _, lockMode := range testData {
@ -56,6 +57,7 @@ LOCK TABLE dvds.address IN`
err = tx.Rollback()
require.NoError(t, err)
requireLogged(t, query)
}
}

View file

@ -1,10 +1,13 @@
package postgres
import (
"context"
"database/sql"
"github.com/go-jet/jet/postgres"
"github.com/go-jet/jet/tests/dbconfig"
_ "github.com/lib/pq"
"github.com/pkg/profile"
"github.com/stretchr/testify/require"
"math/rand"
"os"
"os/exec"
@ -43,3 +46,21 @@ func setTestRoot() {
testRoot = strings.TrimSpace(string(byteArr)) + "/tests/"
}
var loggedSQL string
var loggedSQLArgs []interface{}
var loggedDebugSQL string
func init() {
postgres.SetLogger(func(ctx context.Context, statement postgres.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

@ -63,4 +63,5 @@ func TestNorthwindJoinEverything(t *testing.T) {
//jsonSave("./testdata/northwind-all.json", dest)
testutils.AssertJSONFile(t, dest, "./testdata/results/postgres/northwind-all.json")
requireLogged(t, stmt)
}

View file

@ -28,6 +28,7 @@ WHERE all_types.uuid = 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11';
require.NoError(t, err)
require.Equal(t, result.UUID, uuid.MustParse("a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11"))
testutils.AssertDeepEqual(t, result.UUIDPtr, testutils.UUIDPtr("a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11"))
requireLogged(t, query)
}
func TestUUIDComplex(t *testing.T) {
@ -118,6 +119,7 @@ func TestUUIDComplex(t *testing.T) {
]
}
`)
requireLogged(t, query)
})
t.Run("slice of structs left join", func(t *testing.T) {
@ -175,6 +177,7 @@ func TestUUIDComplex(t *testing.T) {
}
]
`)
requireLogged(t, leftQuery)
})
}

View file

@ -43,6 +43,8 @@ WHERE actor.actor_id = 2;
}
testutils.AssertDeepEqual(t, actor, expectedActor)
requireLogged(t, query)
}
func TestClassicSelect(t *testing.T) {
@ -86,6 +88,8 @@ LIMIT 30;
require.NoError(t, err)
require.Equal(t, len(dest), 30)
requireLogged(t, query)
}
func TestSelect_ScanToSlice(t *testing.T) {
@ -117,6 +121,8 @@ ORDER BY customer.customer_id ASC;
testutils.AssertDeepEqual(t, customer0, customers[0])
testutils.AssertDeepEqual(t, customer1, customers[1])
testutils.AssertDeepEqual(t, lastCustomer, customers[598])
requireLogged(t, query)
}
func TestSelectAndUnionInProjection(t *testing.T) {

View file

@ -27,13 +27,15 @@ WHERE link.name = 'Bing';
`, "Bong", "http://bong.com", "Bing")
testutils.AssertExec(t, query, db, 1)
requireLogged(t, query)
links := []model.Link{}
err := Link.
selQuery := Link.
SELECT(Link.AllColumns).
WHERE(Link.Name.IN(String("Bong"))).
Query(db, &links)
WHERE(Link.Name.IN(String("Bong")))
err := selQuery.Query(db, &links)
require.NoError(t, err)
require.Equal(t, len(links), 1)
@ -42,6 +44,7 @@ WHERE link.name = 'Bing';
URL: "http://bong.com",
Name: "Bong",
})
requireLogged(t, selQuery)
})
t.Run("new version", func(t *testing.T) {
@ -59,6 +62,7 @@ SET name = 'DuckDuckGo',
WHERE link.name = 'Yahoo';
`)
testutils.AssertExec(t, stmt, db, 1)
requireLogged(t, stmt)
})
}
@ -90,6 +94,7 @@ WHERE link.name = 'Bing';
testutils.AssertDebugStatementSql(t, query, expectedSQL, "Bong", "Bing", "Bing")
AssertExec(t, query, 1)
requireLogged(t, query)
})
t.Run("new version", func(t *testing.T) {
@ -114,6 +119,9 @@ SET name = $1,
)
WHERE link.name = $3;
`, "Bong", "Bing", "Bing")
_, err := query.Exec(db)
require.NoError(t, err)
requireLogged(t, query)
})
}
@ -146,6 +154,7 @@ RETURNING link.id AS "link.id",
require.Equal(t, len(links), 2)
require.Equal(t, links[0].Name, "DuckDuckGo")
require.Equal(t, links[1].Name, "DuckDuckGo")
requireLogged(t, stmt)
}
func TestUpdateWithSelect(t *testing.T) {