Timestamp function instead of CAST for literal construct.

This commit is contained in:
go-jet 2019-08-06 13:58:17 +02:00
parent d235385c2a
commit fbf5fbddbc
4 changed files with 35 additions and 28 deletions

View file

@ -8,7 +8,6 @@ type cast interface {
jet.Cast jet.Cast
AS_DATETIME() DateTimeExpression AS_DATETIME() DateTimeExpression
AS_TIMESTAMP() TimestampExpression
AS_SIGNED() IntegerExpression AS_SIGNED() IntegerExpression
AS_UNSIGNED() IntegerExpression AS_UNSIGNED() IntegerExpression
AS_BINARY() StringExpression AS_BINARY() StringExpression
@ -27,21 +26,17 @@ func CAST(expr jet.Expression) cast {
} }
func (c *castImpl) AS_DATETIME() DateTimeExpression { func (c *castImpl) AS_DATETIME() DateTimeExpression {
return jet.TimestampExp(c.AS("DATETIME")) return DateTimeExp(c.AS("DATETIME"))
}
func (c *castImpl) AS_TIMESTAMP() TimestampExpression {
return jet.TimestampExp(c.AS("DATETIME"))
} }
func (c *castImpl) AS_SIGNED() IntegerExpression { func (c *castImpl) AS_SIGNED() IntegerExpression {
return jet.IntExp(c.AS("SIGNED")) return IntExp(c.AS("SIGNED"))
} }
func (c *castImpl) AS_UNSIGNED() IntegerExpression { func (c *castImpl) AS_UNSIGNED() IntegerExpression {
return jet.IntExp(c.AS("UNSIGNED")) return IntExp(c.AS("UNSIGNED"))
} }
func (c *castImpl) AS_BINARY() StringExpression { func (c *castImpl) AS_BINARY() StringExpression {
return jet.StringExp(c.AS("BINARY")) return StringExp(c.AS("BINARY"))
} }

View file

@ -113,6 +113,14 @@ func NOW(fsp ...int) DateTimeExpression {
return jet.NewTimestampFunc("NOW") return jet.NewTimestampFunc("NOW")
} }
func TIMESTAMP(str StringExpression) TimestampExpression {
return jet.NewTimestampFunc("TIMESTAMP", str)
}
func UNIX_TIMESTAMP(str StringExpression) TimestampExpression {
return jet.NewTimestampFunc("UNIX_TIMESTAMP", str)
}
// --------------- Conditional Expressions Functions -------------// // --------------- Conditional Expressions Functions -------------//
var COALESCE = jet.COALESCE var COALESCE = jet.COALESCE
var NULLIF = jet.NULLIF var NULLIF = jet.NULLIF

View file

@ -32,8 +32,8 @@ var DateTimeT = func(t time.Time) DateTimeExpression {
return CAST(jet.TimestampT(t)).AS_DATETIME() return CAST(jet.TimestampT(t)).AS_DATETIME()
} }
var Timestamp = func(year int, month time.Month, day, hour, minute, second int, milliseconds ...int) TimestampExpression { var Timestamp = func(year int, month time.Month, day, hour, minute, second int, milliseconds ...int) TimestampExpression {
return CAST(jet.Timestamp(year, month, day, hour, minute, second, milliseconds...)).AS_TIMESTAMP() return TIMESTAMP(StringExp(jet.Timestamp(year, month, day, hour, minute, second, milliseconds...)))
} }
var TimestampT = func(t time.Time) TimestampExpression { var TimestampT = func(t time.Time) TimestampExpression {
return CAST(jet.TimestampT(t)).AS_TIMESTAMP() return TIMESTAMP(StringExp(jet.TimestampT(t)))
} }

View file

@ -715,21 +715,21 @@ func TestTimestampExpressions(t *testing.T) {
testutils.AssertDebugStatementSql(t, query, ` testutils.AssertDebugStatementSql(t, query, `
SELECT all_types.timestamp = all_types.timestamp, SELECT all_types.timestamp = all_types.timestamp,
all_types.timestamp = CAST('2019-06-06 10:02:46' AS DATETIME), all_types.timestamp = TIMESTAMP('2019-06-06 10:02:46'),
all_types.timestamp_ptr != all_types.timestamp, all_types.timestamp_ptr != all_types.timestamp,
all_types.timestamp_ptr != CAST('2019-06-06 10:02:46.1000' AS DATETIME), all_types.timestamp_ptr != TIMESTAMP('2019-06-06 10:02:46.1000'),
NOT(all_types.timestamp <=> all_types.timestamp), NOT(all_types.timestamp <=> all_types.timestamp),
NOT(all_types.timestamp <=> CAST('2019-06-06 10:02:46' AS DATETIME)), NOT(all_types.timestamp <=> TIMESTAMP('2019-06-06 10:02:46')),
all_types.timestamp <=> all_types.timestamp, all_types.timestamp <=> all_types.timestamp,
all_types.timestamp <=> CAST('2019-06-06 10:02:46' AS DATETIME), all_types.timestamp <=> TIMESTAMP('2019-06-06 10:02:46'),
all_types.timestamp < all_types.timestamp, all_types.timestamp < all_types.timestamp,
all_types.timestamp < CAST('2019-06-06 10:02:46' AS DATETIME), all_types.timestamp < TIMESTAMP('2019-06-06 10:02:46'),
all_types.timestamp <= all_types.timestamp, all_types.timestamp <= all_types.timestamp,
all_types.timestamp <= CAST('2019-06-06 10:02:46' AS DATETIME), all_types.timestamp <= TIMESTAMP('2019-06-06 10:02:46'),
all_types.timestamp > all_types.timestamp, all_types.timestamp > all_types.timestamp,
all_types.timestamp > CAST('2019-06-06 10:02:46' AS DATETIME), all_types.timestamp > TIMESTAMP('2019-06-06 10:02:46'),
all_types.timestamp >= all_types.timestamp, all_types.timestamp >= all_types.timestamp,
all_types.timestamp >= CAST('2019-06-06 10:02:46' AS DATETIME), all_types.timestamp >= TIMESTAMP('2019-06-06 10:02:46'),
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP,
CURRENT_TIMESTAMP(2) CURRENT_TIMESTAMP(2)
FROM test_sample.all_types; FROM test_sample.all_types;
@ -752,7 +752,8 @@ func TestTimeLiterals(t *testing.T) {
Time(timeT.Clock()).AS("time"), Time(timeT.Clock()).AS("time"),
TimeT(timeT).AS("timeT"), TimeT(timeT).AS("timeT"),
DateTimeT(timeT).AS("datetime"), DateTimeT(timeT).AS("datetime"),
TimestampT(timeT).AS("timestamp"), Timestamp(2019, 8, 6, 10, 10, 30, 123456).AS("timestamp"),
TimestampT(timeT).AS("timestampT"),
).FROM(AllTypes).LIMIT(1) ).FROM(AllTypes).LIMIT(1)
fmt.Println(query.Sql()) fmt.Println(query.Sql())
@ -763,7 +764,8 @@ SELECT CAST(? AS DATE) AS "date",
CAST(? AS TIME) AS "time", CAST(? AS TIME) AS "time",
CAST(? AS TIME) AS "timeT", CAST(? AS TIME) AS "timeT",
CAST(? AS DATETIME) AS "datetime", CAST(? AS DATETIME) AS "datetime",
CAST(? AS DATETIME) AS "timestamp" TIMESTAMP(?) AS "timestamp",
TIMESTAMP(?) AS "timestampT"
FROM test_sample.all_types FROM test_sample.all_types
LIMIT ?; LIMIT ?;
`) `)
@ -775,6 +777,7 @@ LIMIT ?;
TimeT time.Time TimeT time.Time
DateTime time.Time DateTime time.Time
Timestamp time.Time Timestamp time.Time
TimestampT time.Time
} }
err = query.Query(db, &dest) err = query.Query(db, &dest)
@ -789,7 +792,8 @@ LIMIT ?;
"Time": "0000-01-01T20:34:58Z", "Time": "0000-01-01T20:34:58Z",
"TimeT": "0000-01-01T19:34:58Z", "TimeT": "0000-01-01T19:34:58Z",
"DateTime": "2009-11-17T19:34:58Z", "DateTime": "2009-11-17T19:34:58Z",
"Timestamp": "2009-11-17T19:34:58Z" "Timestamp": "2019-08-06T10:10:30.123456Z",
"TimestampT": "2009-11-17T19:34:58.351387Z"
} }
`) `)
} }