Literal and cast clean up.

This commit is contained in:
go-jet 2019-08-13 10:16:26 +02:00
parent 9a34dc9fd7
commit 614c7e9754
22 changed files with 438 additions and 177 deletions

View file

@ -1,6 +1,7 @@
package mysql
import (
"fmt"
"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"
@ -494,8 +495,8 @@ func TestTimeExpressions(t *testing.T) {
AllTypes.Time.EQ(AllTypes.Time),
AllTypes.Time.EQ(Time(23, 6, 6)),
AllTypes.Time.EQ(Time(22, 6, 6, 11)),
AllTypes.Time.EQ(Time(21, 6, 6, 11111)),
AllTypes.Time.EQ(Time(22, 6, 6, 11*time.Millisecond)),
AllTypes.Time.EQ(Time(21, 6, 6, 11111*time.Microsecond)),
AllTypes.TimePtr.NOT_EQ(AllTypes.Time),
AllTypes.TimePtr.NOT_EQ(Time(20, 16, 6)),
@ -547,7 +548,7 @@ SELECT CAST(? AS TIME),
CURRENT_TIME,
CURRENT_TIME(3)
FROM test_sample.all_types;
`, "20:34:58", "23:06:06", "22:06:06.011", "21:06:06.11111", "20:16:06",
`, "20:34:58", "23:06:06", "22:06:06.011", "21:06:06.011111", "20:16:06",
"19:26:06", "18:36:06", "17:46:06", "16:56:56", "15:16:46", "14:26:36")
err := query.Query(db, &struct{}{})
@ -624,7 +625,7 @@ func TestDateTimeExpressions(t *testing.T) {
AllTypes.DateTime.EQ(dateTime),
AllTypes.DateTimePtr.NOT_EQ(AllTypes.DateTime),
AllTypes.DateTimePtr.NOT_EQ(DateTime(2019, 6, 6, 10, 2, 46, 1000)),
AllTypes.DateTimePtr.NOT_EQ(DateTime(2019, 6, 6, 10, 2, 46, 100*time.Millisecond)),
AllTypes.DateTime.IS_DISTINCT_FROM(AllTypes.DateTime),
AllTypes.DateTime.IS_DISTINCT_FROM(dateTime),
@ -654,7 +655,7 @@ func TestDateTimeExpressions(t *testing.T) {
SELECT all_types.date_time = all_types.date_time,
all_types.date_time = CAST('2019-06-06 10:02:46' AS DATETIME),
all_types.date_time_ptr != all_types.date_time,
all_types.date_time_ptr != CAST('2019-06-06 10:02:46.1000' AS DATETIME),
all_types.date_time_ptr != CAST('2019-06-06 10:02:46.100' AS DATETIME),
NOT(all_types.date_time <=> all_types.date_time),
NOT(all_types.date_time <=> CAST('2019-06-06 10:02:46' AS DATETIME)),
all_types.date_time <=> all_types.date_time,
@ -686,7 +687,7 @@ func TestTimestampExpressions(t *testing.T) {
AllTypes.Timestamp.EQ(timestamp),
AllTypes.TimestampPtr.NOT_EQ(AllTypes.Timestamp),
AllTypes.TimestampPtr.NOT_EQ(Timestamp(2019, 6, 6, 10, 2, 46, 1000)),
AllTypes.TimestampPtr.NOT_EQ(Timestamp(2019, 6, 6, 10, 2, 46, 100*time.Millisecond)),
AllTypes.Timestamp.IS_DISTINCT_FROM(AllTypes.Timestamp),
AllTypes.Timestamp.IS_DISTINCT_FROM(timestamp),
@ -716,7 +717,7 @@ func TestTimestampExpressions(t *testing.T) {
SELECT all_types.timestamp = all_types.timestamp,
all_types.timestamp = TIMESTAMP('2019-06-06 10:02:46'),
all_types.timestamp_ptr != all_types.timestamp,
all_types.timestamp_ptr != TIMESTAMP('2019-06-06 10:02:46.1000'),
all_types.timestamp_ptr != TIMESTAMP('2019-06-06 10:02:46.100'),
NOT(all_types.timestamp <=> all_types.timestamp),
NOT(all_types.timestamp <=> TIMESTAMP('2019-06-06 10:02:46')),
all_types.timestamp <=> all_types.timestamp,
@ -751,11 +752,11 @@ func TestTimeLiterals(t *testing.T) {
Time(timeT.Clock()).AS("time"),
TimeT(timeT).AS("timeT"),
DateTimeT(timeT).AS("datetime"),
Timestamp(2019, 8, 6, 10, 10, 30, 123456).AS("timestamp"),
Timestamp(2019, 8, 6, 10, 10, 30, 123456*time.Millisecond).AS("timestamp"),
TimestampT(timeT).AS("timestampT"),
).FROM(AllTypes).LIMIT(1)
//fmt.Println(query.Sql())
fmt.Println(query.DebugSql())
testutils.AssertStatementSql(t, query, `
SELECT CAST(? AS DATE) AS "date",

View file

@ -384,7 +384,7 @@ SELECT (all_types.numeric = all_types.numeric) AS "eq1",
TRUNC(ABS(all_types.decimal), $29) AS "abs",
TRUNC(POWER(all_types.decimal, $30), $31) AS "power",
TRUNC(SQRT(all_types.decimal), $32) AS "sqrt",
TRUNC(CBRT(all_types.decimal)::DECIMAL, $33) AS "cbrt",
TRUNC(CBRT(all_types.decimal)::decimal, $33) AS "cbrt",
CEIL(all_types.real) AS "ceil",
FLOOR(all_types.real) AS "floor",
ROUND(all_types.decimal) AS "round1",
@ -552,22 +552,22 @@ func TestTimeExpression(t *testing.T) {
AllTypes.Time.EQ(AllTypes.Time),
AllTypes.Time.EQ(Time(23, 6, 6, 1)),
AllTypes.Timez.EQ(AllTypes.TimezPtr),
AllTypes.Timez.EQ(Timez(23, 6, 6, 222, +200)),
AllTypes.Timez.EQ(Timez(23, 6, 6, 222, "+200")),
AllTypes.Timestamp.EQ(AllTypes.TimestampPtr),
AllTypes.Timestamp.EQ(Timestamp(2010, 10, 21, 15, 30, 12, 333)),
AllTypes.Timestampz.EQ(AllTypes.TimestampzPtr),
AllTypes.Timestampz.EQ(Timestampz(2010, 10, 21, 15, 30, 12, 444, 0)),
AllTypes.Timestampz.EQ(Timestampz(2010, 10, 21, 15, 30, 12, 444, "PST")),
AllTypes.Date.EQ(AllTypes.DatePtr),
AllTypes.Date.EQ(Date(2010, 12, 3)),
AllTypes.Time.NOT_EQ(AllTypes.Time),
AllTypes.Time.NOT_EQ(Time(23, 6, 6, 10)),
AllTypes.Timez.NOT_EQ(AllTypes.TimezPtr),
AllTypes.Timez.NOT_EQ(Timez(23, 6, 6, 555, +200)),
AllTypes.Timez.NOT_EQ(Timez(23, 6, 6, 555, "+4:00")),
AllTypes.Timestamp.NOT_EQ(AllTypes.TimestampPtr),
AllTypes.Timestamp.NOT_EQ(Timestamp(2010, 10, 21, 15, 30, 12, 666)),
AllTypes.Timestampz.NOT_EQ(AllTypes.TimestampzPtr),
AllTypes.Timestampz.NOT_EQ(Timestampz(2010, 10, 21, 15, 30, 12, 777, 0)),
AllTypes.Timestampz.NOT_EQ(Timestampz(2010, 10, 21, 15, 30, 12, 777, "UTC")),
AllTypes.Date.NOT_EQ(AllTypes.DatePtr),
AllTypes.Date.NOT_EQ(Date(2010, 12, 3)),
@ -803,7 +803,7 @@ func TestTimeLiterals(t *testing.T) {
//fmt.Println(query.Sql())
testutils.AssertStatementSql(t, query, `
SELECT $1::DATE AS "date",
SELECT $1::date AS "date",
$2::time without time zone AS "time",
$3::time with time zone AS "timez",
$4::timestamp without time zone AS "timestamp",

View file

@ -10,6 +10,7 @@ import (
. "github.com/go-jet/jet/tests/.gentestdata/jetdb/dvds/table"
"gotest.tools/assert"
"testing"
"time"
)
func TestSelect_ScanToStruct(t *testing.T) {
@ -1185,15 +1186,15 @@ SELECT payment.payment_id AS "payment.payment_id",
payment.amount AS "payment.amount",
payment.payment_date AS "payment.payment_date"
FROM dvds.payment
WHERE payment.payment_date < '2007-02-14 22:16:01.000'::timestamp without time zone
WHERE payment.payment_date < '2007-02-14 22:16:01'::timestamp without time zone
ORDER BY payment.payment_date ASC;
`
query := Payment.SELECT(Payment.AllColumns).
WHERE(Payment.PaymentDate.LT(Timestamp(2007, 02, 14, 22, 16, 01, 0))).
WHERE(Payment.PaymentDate.LT(Timestamp(2007, time.February, 14, 22, 16, 01, 0))).
ORDER_BY(Payment.PaymentDate.ASC())
testutils.AssertDebugStatementSql(t, query, expectedSQL, "2007-02-14 22:16:01.000")
testutils.AssertDebugStatementSql(t, query, expectedSQL, "2007-02-14 22:16:01")
payments := []model.Payment{}