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
|
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"))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,18 +764,20 @@ 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 ?;
|
||||||
`)
|
`)
|
||||||
|
|
||||||
var dest struct {
|
var dest struct {
|
||||||
Date time.Time
|
Date time.Time
|
||||||
DateT time.Time
|
DateT time.Time
|
||||||
Time time.Time
|
Time time.Time
|
||||||
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"
|
||||||
}
|
}
|
||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue