Add RawStatement support
RawStatement method creates new sql statements from raw query and optional map of named arguments.
This commit is contained in:
parent
e95a2385ee
commit
a5b7769589
11 changed files with 393 additions and 78 deletions
82
tests/mysql/raw_statement_test.go
Normal file
82
tests/mysql/raw_statement_test.go
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
package mysql
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/go-jet/jet/v2/internal/testutils"
|
||||
"github.com/go-jet/jet/v2/tests/.gentestdata/mysql/dvds/model"
|
||||
|
||||
. "github.com/go-jet/jet/v2/mysql"
|
||||
)
|
||||
|
||||
func TestRawStatementSelect(t *testing.T) {
|
||||
stmt := RawStatement(`
|
||||
SELECT actor.first_name AS "actor.first_name"
|
||||
FROM dvds.actor
|
||||
WHERE actor.actor_id = 2`)
|
||||
|
||||
testutils.AssertStatementSql(t, stmt, `
|
||||
SELECT actor.first_name AS "actor.first_name"
|
||||
FROM dvds.actor
|
||||
WHERE actor.actor_id = 2;
|
||||
`)
|
||||
testutils.AssertDebugStatementSql(t, stmt, `
|
||||
SELECT actor.first_name AS "actor.first_name"
|
||||
FROM dvds.actor
|
||||
WHERE actor.actor_id = 2;
|
||||
`)
|
||||
var actor model.Actor
|
||||
err := stmt.Query(db, &actor)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, actor.FirstName, "NICK")
|
||||
}
|
||||
|
||||
func TestRawStatementSelectWithArguments(t *testing.T) {
|
||||
stmt := RawStatement(`
|
||||
SELECT DISTINCT actor.actor_id AS "actor.actor_id",
|
||||
actor.first_name AS "actor.first_name",
|
||||
actor.last_name AS "actor.last_name",
|
||||
actor.last_update AS "actor.last_update"
|
||||
FROM dvds.actor
|
||||
WHERE actor.actor_id IN (#actorID1, #actorID2, #actorID3) AND ((#actorID1 / #actorID2) <> (#actorID2 * #actorID3))
|
||||
ORDER BY actor.actor_id`,
|
||||
RawArgs{
|
||||
"#actorID1": int64(1),
|
||||
"#actorID2": int64(2),
|
||||
"#actorID3": int64(3),
|
||||
},
|
||||
)
|
||||
|
||||
testutils.AssertStatementSql(t, stmt, `
|
||||
SELECT DISTINCT actor.actor_id AS "actor.actor_id",
|
||||
actor.first_name AS "actor.first_name",
|
||||
actor.last_name AS "actor.last_name",
|
||||
actor.last_update AS "actor.last_update"
|
||||
FROM dvds.actor
|
||||
WHERE actor.actor_id IN (?, ?, ?) AND ((? / ?) <> (? * ?))
|
||||
ORDER BY actor.actor_id;
|
||||
`, int64(1), int64(2), int64(3), int64(1), int64(2), int64(2), int64(3))
|
||||
|
||||
testutils.AssertDebugStatementSql(t, stmt, `
|
||||
SELECT DISTINCT actor.actor_id AS "actor.actor_id",
|
||||
actor.first_name AS "actor.first_name",
|
||||
actor.last_name AS "actor.last_name",
|
||||
actor.last_update AS "actor.last_update"
|
||||
FROM dvds.actor
|
||||
WHERE actor.actor_id IN (1, 2, 3) AND ((1 / 2) <> (2 * 3))
|
||||
ORDER BY actor.actor_id;
|
||||
`)
|
||||
|
||||
var actor []model.Actor
|
||||
err := stmt.Query(db, &actor)
|
||||
require.NoError(t, err)
|
||||
|
||||
testutils.AssertDeepEqual(t, actor[1], model.Actor{
|
||||
ActorID: 2,
|
||||
FirstName: "NICK",
|
||||
LastName: "WAHLBERG",
|
||||
LastUpdate: *testutils.TimestampWithoutTimeZone("2006-02-15 04:34:33", 2),
|
||||
})
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue