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" . "github.com/go-jet/jet/mysql" "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) } func TestBoolOperators(t *testing.T) { query := AllTypes.SELECT( AllTypes.Boolean.EQ(AllTypes.BooleanPtr).AS("EQ1"), AllTypes.Boolean.EQ(Bool(true)).AS("EQ2"), AllTypes.Boolean.NOT_EQ(AllTypes.BooleanPtr).AS("NEq1"), AllTypes.Boolean.NOT_EQ(Bool(false)).AS("NEq2"), AllTypes.Boolean.IS_DISTINCT_FROM(AllTypes.BooleanPtr).AS("distinct1"), AllTypes.Boolean.IS_DISTINCT_FROM(Bool(true)).AS("distinct2"), AllTypes.Boolean.IS_NOT_DISTINCT_FROM(AllTypes.BooleanPtr).AS("not_distinct_1"), AllTypes.Boolean.IS_NOT_DISTINCT_FROM(Bool(true)).AS("NOTDISTINCT2"), AllTypes.Boolean.IS_TRUE().AS("ISTRUE"), AllTypes.Boolean.IS_NOT_TRUE().AS("isnottrue"), AllTypes.Boolean.IS_FALSE().AS("is_False"), AllTypes.Boolean.IS_NOT_FALSE().AS("is not false"), AllTypes.Boolean.IS_UNKNOWN().AS("is unknown"), AllTypes.Boolean.IS_NOT_UNKNOWN().AS("is_not_unknown"), AllTypes.Boolean.AND(AllTypes.Boolean).EQ(AllTypes.Boolean.AND(AllTypes.Boolean)).AS("complex1"), AllTypes.Boolean.OR(AllTypes.Boolean).EQ(AllTypes.Boolean.AND(AllTypes.Boolean)).AS("complex2"), ) //fmt.Println(query.Sql()) testutils.AssertStatementSql(t, query, ` SELECT (all_types.boolean = all_types.boolean_ptr) AS "EQ1", (all_types.boolean = ?) AS "EQ2", (all_types.boolean != all_types.boolean_ptr) AS "NEq1", (all_types.boolean != ?) AS "NEq2", (NOT all_types.boolean <=> all_types.boolean_ptr) AS "distinct1", (NOT all_types.boolean <=> ?) AS "distinct2", (all_types.boolean <=> all_types.boolean_ptr) AS "not_distinct_1", (all_types.boolean <=> ?) AS "NOTDISTINCT2", all_types.boolean IS TRUE AS "ISTRUE", all_types.boolean IS NOT TRUE AS "isnottrue", all_types.boolean IS FALSE AS "is_False", all_types.boolean IS NOT FALSE AS "is not false", all_types.boolean IS UNKNOWN AS "is unknown", all_types.boolean IS NOT UNKNOWN AS "is_not_unknown", ((all_types.boolean AND all_types.boolean) = (all_types.boolean AND all_types.boolean)) AS "complex1", ((all_types.boolean OR all_types.boolean) = (all_types.boolean AND all_types.boolean)) AS "complex2" FROM test_sample.all_types; `, true, false, true, true) var dest []struct { Eq1 *bool Eq2 *bool NEq1 *bool NEq2 *bool Distinct1 *bool Distinct2 *bool NotDistinct1 *bool NotDistinct2 *bool IsTrue *bool IsNotTrue *bool IsFalse *bool IsNotFalse *bool IsUnknown *bool IsNotUnknown *bool Complex1 *bool Complex2 *bool } err := query.Query(db, &dest) assert.NilError(t, err) testutils.JsonPrint(dest) testutils.AssertJSONFile(t, "./testdata/common_db_results/bool_operators.json", dest) } var allTypesJson = ` [ { "Boolean": false, "BooleanPtr": true, "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\"}" }, { "Boolean": false, "BooleanPtr": null, "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 } ] `