Timestamp function instead of CAST for literal construct.
This commit is contained in:
parent
d235385c2a
commit
fbf5fbddbc
4 changed files with 35 additions and 28 deletions
|
|
@ -8,7 +8,6 @@ type cast interface {
|
|||
jet.Cast
|
||||
|
||||
AS_DATETIME() DateTimeExpression
|
||||
AS_TIMESTAMP() TimestampExpression
|
||||
AS_SIGNED() IntegerExpression
|
||||
AS_UNSIGNED() IntegerExpression
|
||||
AS_BINARY() StringExpression
|
||||
|
|
@ -27,21 +26,17 @@ func CAST(expr jet.Expression) cast {
|
|||
}
|
||||
|
||||
func (c *castImpl) AS_DATETIME() DateTimeExpression {
|
||||
return jet.TimestampExp(c.AS("DATETIME"))
|
||||
}
|
||||
|
||||
func (c *castImpl) AS_TIMESTAMP() TimestampExpression {
|
||||
return jet.TimestampExp(c.AS("DATETIME"))
|
||||
return DateTimeExp(c.AS("DATETIME"))
|
||||
}
|
||||
|
||||
func (c *castImpl) AS_SIGNED() IntegerExpression {
|
||||
return jet.IntExp(c.AS("SIGNED"))
|
||||
return IntExp(c.AS("SIGNED"))
|
||||
}
|
||||
|
||||
func (c *castImpl) AS_UNSIGNED() IntegerExpression {
|
||||
return jet.IntExp(c.AS("UNSIGNED"))
|
||||
return IntExp(c.AS("UNSIGNED"))
|
||||
}
|
||||
|
||||
func (c *castImpl) AS_BINARY() StringExpression {
|
||||
return jet.StringExp(c.AS("BINARY"))
|
||||
return StringExp(c.AS("BINARY"))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -113,6 +113,14 @@ func NOW(fsp ...int) DateTimeExpression {
|
|||
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 -------------//
|
||||
var COALESCE = jet.COALESCE
|
||||
var NULLIF = jet.NULLIF
|
||||
|
|
|
|||
|
|
@ -32,8 +32,8 @@ var DateTimeT = func(t time.Time) DateTimeExpression {
|
|||
return CAST(jet.TimestampT(t)).AS_DATETIME()
|
||||
}
|
||||
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 {
|
||||
return CAST(jet.TimestampT(t)).AS_TIMESTAMP()
|
||||
return TIMESTAMP(StringExp(jet.TimestampT(t)))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -715,21 +715,21 @@ func TestTimestampExpressions(t *testing.T) {
|
|||
|
||||
testutils.AssertDebugStatementSql(t, query, `
|
||||
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 != 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 <=> 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 <=> 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 < 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 <= 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 > 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 >= CAST('2019-06-06 10:02:46' AS DATETIME),
|
||||
all_types.timestamp >= TIMESTAMP('2019-06-06 10:02:46'),
|
||||
CURRENT_TIMESTAMP,
|
||||
CURRENT_TIMESTAMP(2)
|
||||
FROM test_sample.all_types;
|
||||
|
|
@ -752,7 +752,8 @@ func TestTimeLiterals(t *testing.T) {
|
|||
Time(timeT.Clock()).AS("time"),
|
||||
TimeT(timeT).AS("timeT"),
|
||||
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)
|
||||
|
||||
fmt.Println(query.Sql())
|
||||
|
|
@ -763,7 +764,8 @@ SELECT CAST(? AS DATE) AS "date",
|
|||
CAST(? AS TIME) AS "time",
|
||||
CAST(? AS TIME) AS "timeT",
|
||||
CAST(? AS DATETIME) AS "datetime",
|
||||
CAST(? AS DATETIME) AS "timestamp"
|
||||
TIMESTAMP(?) AS "timestamp",
|
||||
TIMESTAMP(?) AS "timestampT"
|
||||
FROM test_sample.all_types
|
||||
LIMIT ?;
|
||||
`)
|
||||
|
|
@ -775,6 +777,7 @@ LIMIT ?;
|
|||
TimeT time.Time
|
||||
DateTime time.Time
|
||||
Timestamp time.Time
|
||||
TimestampT time.Time
|
||||
}
|
||||
|
||||
err = query.Query(db, &dest)
|
||||
|
|
@ -789,7 +792,8 @@ LIMIT ?;
|
|||
"Time": "0000-01-01T20:34:58Z",
|
||||
"TimeT": "0000-01-01T19: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"
|
||||
}
|
||||
`)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue