MySQL execution and scan support.
This commit is contained in:
parent
5dda5e1e11
commit
bffa102849
34 changed files with 48216 additions and 337 deletions
33
tests/mysql/mysql_test.go
Normal file
33
tests/mysql/mysql_test.go
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
package mysql
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"github.com/go-jet/jet/tests/dbconfig"
|
||||
|
||||
//_ "github.com/go-sql-driver/mysql"
|
||||
_ "github.com/ziutek/mymysql/godrv"
|
||||
|
||||
"github.com/pkg/profile"
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
var db *sql.DB
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
defer profile.Start().Stop()
|
||||
|
||||
fmt.Println(dbconfig.MySQLConnectionString)
|
||||
|
||||
var err error
|
||||
db, err = sql.Open("mysql", "jet:jet@tcp(localhost:3306)/")
|
||||
if err != nil {
|
||||
panic("Failed to connect to test db" + err.Error())
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
ret := m.Run()
|
||||
|
||||
os.Exit(ret)
|
||||
}
|
||||
45
tests/mysql/sakila_test.go
Normal file
45
tests/mysql/sakila_test.go
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
package mysql
|
||||
|
||||
import (
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
"github.com/go-jet/jet/internal/testutils"
|
||||
. "github.com/go-jet/jet/mysql"
|
||||
"gotest.tools/assert"
|
||||
"reflect"
|
||||
|
||||
"github.com/go-jet/jet/tests/.gentestdata/sakila/model"
|
||||
. "github.com/go-jet/jet/tests/.gentestdata/sakila/table"
|
||||
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestSelect_ScanToStruct(t *testing.T) {
|
||||
expectedSQL := `
|
||||
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 sakila.actor
|
||||
WHERE actor.actor_id = 1;
|
||||
`
|
||||
spew.Dump(reflect.TypeOf(db.Driver()).String())
|
||||
|
||||
query := Actor.
|
||||
SELECT(Actor.AllColumns).
|
||||
DISTINCT().
|
||||
WHERE(Actor.ActorID.EQ(Int(1)))
|
||||
|
||||
testutils.AssertStatementSql(t, query, expectedSQL, int64(1))
|
||||
|
||||
actor := model.Actor{}
|
||||
err := query.Query(db, &actor)
|
||||
|
||||
assert.NilError(t, err)
|
||||
|
||||
assert.DeepEqual(t, actor, model.Actor{
|
||||
ActorID: 1,
|
||||
FirstName: "PENELOPE",
|
||||
LastName: "GUINESS",
|
||||
LastUpdate: *testutils.TimestampWithoutTimeZone("2006-02-15 04:34:33", 2),
|
||||
})
|
||||
}
|
||||
145
tests/mysql/sample_test.go
Normal file
145
tests/mysql/sample_test.go
Normal file
|
|
@ -0,0 +1,145 @@
|
|||
package mysql
|
||||
|
||||
import (
|
||||
"github.com/go-jet/jet/internal/testutils"
|
||||
"github.com/go-jet/jet/tests/.gentestdata/mysql/test_sample/model"
|
||||
. "github.com/go-jet/jet/tests/.gentestdata/mysql/test_sample/table"
|
||||
"gotest.tools/assert"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestAllTypes(t *testing.T) {
|
||||
|
||||
dest := []model.AllTypes{}
|
||||
|
||||
err := AllTypes.
|
||||
SELECT(AllTypes.AllColumns).
|
||||
LIMIT(2).
|
||||
Query(db, &dest)
|
||||
|
||||
assert.NilError(t, err)
|
||||
|
||||
//testutils.JsonPrint(dest)
|
||||
testutils.AssertJSON(t, dest, allTypesJson)
|
||||
}
|
||||
|
||||
var allTypesJson = `
|
||||
[
|
||||
{
|
||||
"TinyInt": -3,
|
||||
"UtinyInt": 3,
|
||||
"SmallInt": -14,
|
||||
"UsmallInt": 14,
|
||||
"MediumInt": -150,
|
||||
"UmediumInt": 150,
|
||||
"Int": -1600,
|
||||
"Uint": 1600,
|
||||
"BigInt": -17000,
|
||||
"UbigInt": 17000,
|
||||
"TinyIntPtr": -3,
|
||||
"UtinyIntPtr": 3,
|
||||
"SmallIntPtr": -14,
|
||||
"UsmallIntPtr": 14,
|
||||
"MediumIntPtr": -150,
|
||||
"UmediumIntPtr": 150,
|
||||
"IntPtr": -1600,
|
||||
"UintPtr": 1600,
|
||||
"BigIntPtr": -17000,
|
||||
"UbigIntPtr": 17000,
|
||||
"Decimal": 1.11,
|
||||
"DecimalPtr": 1.11,
|
||||
"Numeric": 2.22,
|
||||
"NumericPtr": 2.22,
|
||||
"Float": 3.33,
|
||||
"FloatPtr": 3.33,
|
||||
"Double": 4.44,
|
||||
"DoublePtr": 4.44,
|
||||
"Bit": "\u0000\u0003",
|
||||
"BitPtr": "\u0000\u0003",
|
||||
"Date": "2008-07-04T00:00:00Z",
|
||||
"DatePtr": "2008-07-04T00:00:00Z",
|
||||
"DateTime": "2011-12-18T13:17:17Z",
|
||||
"DateTimePtr": "2011-12-18T13:17:17Z",
|
||||
"Timestamp": "2007-12-31T23:00:01Z",
|
||||
"TimestampPtr": "2007-12-31T23:00:01Z",
|
||||
"Year": 2004,
|
||||
"YearPtr": 2004,
|
||||
"Char": "char",
|
||||
"CharPtr": "char",
|
||||
"Varchar": "varchar",
|
||||
"VarcharPtr": "varchar",
|
||||
"Binary": "YmluYXJ5AAAAAAAAAAAAAAAAAAA=",
|
||||
"BinaryPtr": "YmluYXJ5AAAAAAAAAAAAAAAAAAA=",
|
||||
"VarBinary": "dmFyYmluYXJ5",
|
||||
"VarBinaryPtr": "dmFyYmluYXJ5",
|
||||
"Blob": "YmxvYg==",
|
||||
"BlobPtr": "YmxvYg==",
|
||||
"Text": "text",
|
||||
"TextPtr": "text",
|
||||
"Enum": "value1",
|
||||
"EnumPtr": "value1",
|
||||
"Set": "s1",
|
||||
"SetPtr": "s2",
|
||||
"JSON": "{\"key1\": \"value1\", \"key2\": \"value2\"}",
|
||||
"JSONPtr": "{\"key1\": \"value1\", \"key2\": \"value2\"}"
|
||||
},
|
||||
{
|
||||
"TinyInt": -3,
|
||||
"UtinyInt": 3,
|
||||
"SmallInt": -14,
|
||||
"UsmallInt": 14,
|
||||
"MediumInt": -150,
|
||||
"UmediumInt": 150,
|
||||
"Int": -1600,
|
||||
"Uint": 1600,
|
||||
"BigInt": -17000,
|
||||
"UbigInt": 17000,
|
||||
"TinyIntPtr": null,
|
||||
"UtinyIntPtr": null,
|
||||
"SmallIntPtr": null,
|
||||
"UsmallIntPtr": null,
|
||||
"MediumIntPtr": null,
|
||||
"UmediumIntPtr": null,
|
||||
"IntPtr": null,
|
||||
"UintPtr": null,
|
||||
"BigIntPtr": null,
|
||||
"UbigIntPtr": null,
|
||||
"Decimal": 1.11,
|
||||
"DecimalPtr": null,
|
||||
"Numeric": 2.22,
|
||||
"NumericPtr": null,
|
||||
"Float": 3.33,
|
||||
"FloatPtr": null,
|
||||
"Double": 4.44,
|
||||
"DoublePtr": null,
|
||||
"Bit": "\u0000\u0003",
|
||||
"BitPtr": null,
|
||||
"Date": "2008-07-04T00:00:00Z",
|
||||
"DatePtr": null,
|
||||
"DateTime": "2011-12-18T13:17:17Z",
|
||||
"DateTimePtr": null,
|
||||
"Timestamp": "2007-12-31T23:00:01Z",
|
||||
"TimestampPtr": null,
|
||||
"Year": 2004,
|
||||
"YearPtr": null,
|
||||
"Char": "char",
|
||||
"CharPtr": null,
|
||||
"Varchar": "varchar",
|
||||
"VarcharPtr": null,
|
||||
"Binary": "YmluYXJ5AAAAAAAAAAAAAAAAAAA=",
|
||||
"BinaryPtr": null,
|
||||
"VarBinary": "dmFyYmluYXJ5",
|
||||
"VarBinaryPtr": null,
|
||||
"Blob": "YmxvYg==",
|
||||
"BlobPtr": null,
|
||||
"Text": "text",
|
||||
"TextPtr": null,
|
||||
"Enum": "value1",
|
||||
"EnumPtr": null,
|
||||
"Set": "s1",
|
||||
"SetPtr": null,
|
||||
"JSON": "{\"key1\": \"value1\", \"key2\": \"value2\"}",
|
||||
"JSONPtr": null
|
||||
}
|
||||
]
|
||||
`
|
||||
Loading…
Add table
Add a link
Reference in a new issue