expression: rewrite builtin function: DAYOFWEEK, DAYOFMONTH, DAYOFYEAR (#4283)
This commit is contained in:
@ -803,36 +803,30 @@ func (c *dayOfMonthFunctionClass) getFunction(args []Expression, ctx context.Con
|
||||
if err := c.verifyArgs(args); err != nil {
|
||||
return nil, errors.Trace(err)
|
||||
}
|
||||
sig := &builtinDayOfMonthSig{newBaseBuiltinFunc(args, ctx)}
|
||||
bf, err := newBaseBuiltinFuncWithTp(args, ctx, tpInt, tpTime)
|
||||
if err != nil {
|
||||
return nil, errors.Trace(err)
|
||||
}
|
||||
bf.tp.Flen = 2
|
||||
sig := &builtinDayOfMonthSig{baseIntBuiltinFunc{bf}}
|
||||
return sig.setSelf(sig), nil
|
||||
}
|
||||
|
||||
type builtinDayOfMonthSig struct {
|
||||
baseBuiltinFunc
|
||||
baseIntBuiltinFunc
|
||||
}
|
||||
|
||||
// eval evals a builtinDayOfMonthSig.
|
||||
// evalInt evals a builtinDayOfMonthSig.
|
||||
// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_dayofmonth
|
||||
func (b *builtinDayOfMonthSig) eval(row []types.Datum) (d types.Datum, err error) {
|
||||
args, err := b.evalArgs(row)
|
||||
if err != nil {
|
||||
return d, errors.Trace(err)
|
||||
func (b *builtinDayOfMonthSig) evalInt(row []types.Datum) (int64, bool, error) {
|
||||
arg, isNull, err := b.args[0].EvalTime(row, b.ctx.GetSessionVars().StmtCtx)
|
||||
if isNull || err != nil {
|
||||
return 0, true, errors.Trace(handleInvalidTimeError(b.ctx, err))
|
||||
}
|
||||
// TODO: some invalid format like 2000-00-00 will return 0 too.
|
||||
d, err = convertToTime(b.ctx.GetSessionVars().StmtCtx, args[0], mysql.TypeDate)
|
||||
if err != nil || d.IsNull() {
|
||||
return d, errors.Trace(err)
|
||||
if arg.IsZero() {
|
||||
return 0, true, errors.Trace(handleInvalidTimeError(b.ctx, types.ErrInvalidTimeFormat))
|
||||
}
|
||||
|
||||
// No need to check type here.
|
||||
t := d.GetMysqlTime()
|
||||
if t.IsZero() {
|
||||
d.SetInt64(int64(0))
|
||||
return
|
||||
}
|
||||
|
||||
d.SetInt64(int64(t.Time.Day()))
|
||||
return
|
||||
return int64(arg.Time.Day()), false, nil
|
||||
}
|
||||
|
||||
type dayOfWeekFunctionClass struct {
|
||||
@ -843,37 +837,32 @@ func (c *dayOfWeekFunctionClass) getFunction(args []Expression, ctx context.Cont
|
||||
if err := c.verifyArgs(args); err != nil {
|
||||
return nil, errors.Trace(err)
|
||||
}
|
||||
sig := &builtinDayOfWeekSig{newBaseBuiltinFunc(args, ctx)}
|
||||
bf, err := newBaseBuiltinFuncWithTp(args, ctx, tpInt, tpTime)
|
||||
if err != nil {
|
||||
return nil, errors.Trace(err)
|
||||
}
|
||||
bf.tp.Flen = 1
|
||||
sig := &builtinDayOfWeekSig{baseIntBuiltinFunc{bf}}
|
||||
return sig.setSelf(sig), nil
|
||||
}
|
||||
|
||||
type builtinDayOfWeekSig struct {
|
||||
baseBuiltinFunc
|
||||
baseIntBuiltinFunc
|
||||
}
|
||||
|
||||
// eval evals a builtinDayOfWeekSig.
|
||||
// evalInt evals a builtinDayOfWeekSig.
|
||||
// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_dayofweek
|
||||
func (b *builtinDayOfWeekSig) eval(row []types.Datum) (d types.Datum, err error) {
|
||||
args, err := b.evalArgs(row)
|
||||
if err != nil {
|
||||
return d, errors.Trace(err)
|
||||
func (b *builtinDayOfWeekSig) evalInt(row []types.Datum) (int64, bool, error) {
|
||||
sc := b.ctx.GetSessionVars().StmtCtx
|
||||
arg, isNull, err := b.args[0].EvalTime(row, sc)
|
||||
if isNull || err != nil {
|
||||
return 0, true, errors.Trace(handleInvalidTimeError(b.ctx, err))
|
||||
}
|
||||
d, err = convertToTime(b.ctx.GetSessionVars().StmtCtx, args[0], mysql.TypeDate)
|
||||
if err != nil || d.IsNull() {
|
||||
return d, errors.Trace(err)
|
||||
if arg.InvalidZero() {
|
||||
return 0, true, errors.Trace(handleInvalidTimeError(b.ctx, types.ErrInvalidTimeFormat))
|
||||
}
|
||||
|
||||
// No need to check type here.
|
||||
t := d.GetMysqlTime()
|
||||
if t.IsZero() {
|
||||
d.SetNull()
|
||||
// TODO: log warning or return error?
|
||||
return
|
||||
}
|
||||
|
||||
// 1 is Sunday, 2 is Monday, .... 7 is Saturday
|
||||
d.SetInt64(int64(t.Time.Weekday() + 1))
|
||||
return
|
||||
return int64(arg.Time.Weekday() + 1), false, nil
|
||||
}
|
||||
|
||||
type dayOfYearFunctionClass struct {
|
||||
@ -884,36 +873,31 @@ func (c *dayOfYearFunctionClass) getFunction(args []Expression, ctx context.Cont
|
||||
if err := c.verifyArgs(args); err != nil {
|
||||
return nil, errors.Trace(err)
|
||||
}
|
||||
sig := &builtinDayOfYearSig{newBaseBuiltinFunc(args, ctx)}
|
||||
bf, err := newBaseBuiltinFuncWithTp(args, ctx, tpInt, tpTime)
|
||||
if err != nil {
|
||||
return nil, errors.Trace(err)
|
||||
}
|
||||
bf.tp.Flen = 3
|
||||
sig := &builtinDayOfYearSig{baseIntBuiltinFunc{bf}}
|
||||
return sig.setSelf(sig), nil
|
||||
}
|
||||
|
||||
type builtinDayOfYearSig struct {
|
||||
baseBuiltinFunc
|
||||
baseIntBuiltinFunc
|
||||
}
|
||||
|
||||
// eval evals a builtinDayOfYearSig.
|
||||
// evalInt evals a builtinDayOfYearSig.
|
||||
// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_dayofyear
|
||||
func (b *builtinDayOfYearSig) eval(row []types.Datum) (d types.Datum, err error) {
|
||||
args, err := b.evalArgs(row)
|
||||
if err != nil {
|
||||
return d, errors.Trace(err)
|
||||
func (b *builtinDayOfYearSig) evalInt(row []types.Datum) (int64, bool, error) {
|
||||
arg, isNull, err := b.args[0].EvalTime(row, b.ctx.GetSessionVars().StmtCtx)
|
||||
if isNull || err != nil {
|
||||
return 0, isNull, errors.Trace(handleInvalidTimeError(b.ctx, err))
|
||||
}
|
||||
d, err = convertToTime(b.ctx.GetSessionVars().StmtCtx, args[0], mysql.TypeDate)
|
||||
if err != nil || d.IsNull() {
|
||||
return d, errors.Trace(err)
|
||||
if arg.InvalidZero() {
|
||||
return 0, true, errors.Trace(handleInvalidTimeError(b.ctx, types.ErrInvalidTimeFormat))
|
||||
}
|
||||
|
||||
t := d.GetMysqlTime()
|
||||
if t.InvalidZero() {
|
||||
// TODO: log warning or return error?
|
||||
d.SetNull()
|
||||
return
|
||||
}
|
||||
|
||||
yd := int64(t.Time.YearDay())
|
||||
d.SetInt64(yd)
|
||||
return
|
||||
return int64(arg.Time.YearDay()), false, nil
|
||||
}
|
||||
|
||||
type weekFunctionClass struct {
|
||||
|
||||
@ -170,8 +170,8 @@ func (s *testEvaluatorSuite) TestDate(c *C) {
|
||||
YearWeek interface{}
|
||||
}{
|
||||
{nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil},
|
||||
{"0000-00-00 00:00:00", nil, nil, nil, int64(0), nil, nil, nil, nil, nil, nil, nil},
|
||||
{"0000-00-00", nil, nil, nil, int64(0), nil, nil, nil, nil, nil, nil, nil},
|
||||
{"0000-00-00 00:00:00", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil},
|
||||
{"0000-00-00", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil},
|
||||
}
|
||||
|
||||
dtblNil := tblToDtbl(tblNil)
|
||||
@ -258,6 +258,111 @@ func (s *testEvaluatorSuite) TestDate(c *C) {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *testEvaluatorSuite) TestDayOfWeek(c *C) {
|
||||
defer testleak.AfterTest(c)()
|
||||
cases := []struct {
|
||||
args interface{}
|
||||
expected int64
|
||||
isNil bool
|
||||
getErr bool
|
||||
}{
|
||||
{"2017-12-01", 6, false, false},
|
||||
{"0000-00-00", 1, true, false},
|
||||
{"2018-00-00", 1, true, false},
|
||||
{"2017-00-00 12:12:12", 1, true, false},
|
||||
{"0000-00-00 12:12:12", 1, true, false},
|
||||
}
|
||||
for _, t := range cases {
|
||||
f, err := newFunctionForTest(s.ctx, ast.DayOfWeek, primitiveValsToConstants([]interface{}{t.args})...)
|
||||
c.Assert(err, IsNil)
|
||||
d, err := f.Eval(nil)
|
||||
if t.getErr {
|
||||
c.Assert(err, NotNil)
|
||||
} else {
|
||||
c.Assert(err, IsNil)
|
||||
if t.isNil {
|
||||
c.Assert(d.Kind(), Equals, types.KindNull)
|
||||
} else {
|
||||
c.Assert(d.GetInt64(), Equals, t.expected)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
f, err := funcs[ast.DayOfWeek].getFunction([]Expression{Zero}, s.ctx)
|
||||
c.Assert(err, IsNil)
|
||||
c.Assert(f.isDeterministic(), IsTrue)
|
||||
}
|
||||
|
||||
func (s *testEvaluatorSuite) TestDayOfMonth(c *C) {
|
||||
defer testleak.AfterTest(c)()
|
||||
cases := []struct {
|
||||
args interface{}
|
||||
expected int64
|
||||
isNil bool
|
||||
getErr bool
|
||||
}{
|
||||
{"2017-12-01", 1, false, false},
|
||||
{"0000-00-00", 1, true, false},
|
||||
{"2018-00-00", 0, false, false},
|
||||
{"2017-00-00 12:12:12", 0, false, false},
|
||||
{"0000-00-00 12:12:12", 0, false, false},
|
||||
}
|
||||
for _, t := range cases {
|
||||
f, err := newFunctionForTest(s.ctx, ast.DayOfMonth, primitiveValsToConstants([]interface{}{t.args})...)
|
||||
c.Assert(err, IsNil)
|
||||
d, err := f.Eval(nil)
|
||||
if t.getErr {
|
||||
c.Assert(err, NotNil)
|
||||
} else {
|
||||
c.Assert(err, IsNil)
|
||||
if t.isNil {
|
||||
c.Assert(d.Kind(), Equals, types.KindNull)
|
||||
} else {
|
||||
c.Assert(d.GetInt64(), Equals, t.expected)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
f, err := funcs[ast.DayOfMonth].getFunction([]Expression{Zero}, s.ctx)
|
||||
c.Assert(err, IsNil)
|
||||
c.Assert(f.isDeterministic(), IsTrue)
|
||||
}
|
||||
|
||||
func (s *testEvaluatorSuite) TestDayOfYear(c *C) {
|
||||
defer testleak.AfterTest(c)()
|
||||
cases := []struct {
|
||||
args interface{}
|
||||
expected int64
|
||||
isNil bool
|
||||
getErr bool
|
||||
}{
|
||||
{"2017-12-01", 335, false, false},
|
||||
{"0000-00-00", 1, true, false},
|
||||
{"2018-00-00", 0, true, false},
|
||||
{"2017-00-00 12:12:12", 0, true, false},
|
||||
{"0000-00-00 12:12:12", 0, true, false},
|
||||
}
|
||||
for _, t := range cases {
|
||||
f, err := newFunctionForTest(s.ctx, ast.DayOfYear, primitiveValsToConstants([]interface{}{t.args})...)
|
||||
c.Assert(err, IsNil)
|
||||
d, err := f.Eval(nil)
|
||||
if t.getErr {
|
||||
c.Assert(err, NotNil)
|
||||
} else {
|
||||
c.Assert(err, IsNil)
|
||||
if t.isNil {
|
||||
c.Assert(d.Kind(), Equals, types.KindNull)
|
||||
} else {
|
||||
c.Assert(d.GetInt64(), Equals, t.expected)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
f, err := funcs[ast.DayOfYear].getFunction([]Expression{Zero}, s.ctx)
|
||||
c.Assert(err, IsNil)
|
||||
c.Assert(f.isDeterministic(), IsTrue)
|
||||
}
|
||||
|
||||
func (s *testEvaluatorSuite) TestDateFormat(c *C) {
|
||||
defer testleak.AfterTest(c)()
|
||||
|
||||
|
||||
@ -19,6 +19,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/juju/errors"
|
||||
"github.com/ngaut/log"
|
||||
. "github.com/pingcap/check"
|
||||
"github.com/pingcap/tidb"
|
||||
"github.com/pingcap/tidb/context"
|
||||
@ -1130,6 +1131,46 @@ func (s *testIntegrationSuite) TestTimeBuiltin(c *C) {
|
||||
result.Check(testkit.Rows("<nil>"))
|
||||
result = tk.MustQuery("SELECT TIME_FORMAT(123, '%H:%i:%s %p');")
|
||||
result.Check(testkit.Rows("00:01:23 AM"))
|
||||
|
||||
// for dayOfWeek, dayOfMonth, dayOfYear
|
||||
result = tk.MustQuery(`select dayOfWeek(null), dayOfWeek("2017-08-12"), dayOfWeek("0000-00-00"), dayOfWeek("2017-00-00"), dayOfWeek("0000-00-00 12:12:12"), dayOfWeek("2017-00-00 12:12:12")`)
|
||||
result.Check(testkit.Rows("<nil> 7 <nil> <nil> <nil> <nil>"))
|
||||
result = tk.MustQuery(`select dayOfYear(null), dayOfYear("2017-08-12"), dayOfYear("0000-00-00"), dayOfYear("2017-00-00"), dayOfYear("0000-00-00 12:12:12"), dayOfYear("2017-00-00 12:12:12")`)
|
||||
result.Check(testkit.Rows("<nil> 224 <nil> <nil> <nil> <nil>"))
|
||||
result = tk.MustQuery(`select dayOfMonth(null), dayOfMonth("2017-08-12"), dayOfMonth("0000-00-00"), dayOfMonth("2017-00-00"), dayOfMonth("0000-00-00 12:12:12"), dayOfMonth("2017-00-00 12:12:12")`)
|
||||
result.Check(testkit.Rows("<nil> 12 <nil> 0 0 0"))
|
||||
|
||||
tk.MustExec(`drop table if exists t`)
|
||||
tk.MustExec(`create table t(a bigint)`)
|
||||
tk.MustExec(`insert into t value(1)`)
|
||||
tk.MustExec("set sql_mode = 'STRICT_TRANS_TABLES'")
|
||||
|
||||
_, err = tk.Exec("insert into t value(dayOfWeek('0000-00-00'))")
|
||||
c.Assert(terror.ErrorEqual(err, types.ErrInvalidTimeFormat), IsTrue)
|
||||
_, err = tk.Exec(`update t set a = dayOfWeek("0000-00-00")`)
|
||||
log.Warning(err, IsNil)
|
||||
c.Assert(terror.ErrorEqual(err, types.ErrInvalidTimeFormat), IsTrue)
|
||||
_, err = tk.Exec(`delete from t where a = dayOfWeek(123)`)
|
||||
c.Assert(terror.ErrorEqual(err, types.ErrInvalidTimeFormat), IsTrue)
|
||||
|
||||
_, err = tk.Exec("insert into t value(dayOfMonth('2017-00-00'))")
|
||||
c.Assert(err, IsNil)
|
||||
_, err = tk.Exec("insert into t value(dayOfMonth('0000-00-00'))")
|
||||
c.Assert(terror.ErrorEqual(err, types.ErrInvalidTimeFormat), IsTrue)
|
||||
_, err = tk.Exec(`update t set a = dayOfMonth("0000-00-00")`)
|
||||
log.Warning(err, IsNil)
|
||||
c.Assert(terror.ErrorEqual(err, types.ErrInvalidTimeFormat), IsTrue)
|
||||
_, err = tk.Exec(`delete from t where a = dayOfMonth(123)`)
|
||||
c.Assert(terror.ErrorEqual(err, types.ErrInvalidTimeFormat), IsTrue)
|
||||
|
||||
_, err = tk.Exec("insert into t value(dayOfYear('0000-00-00'))")
|
||||
c.Assert(terror.ErrorEqual(err, types.ErrInvalidTimeFormat), IsTrue)
|
||||
_, err = tk.Exec(`update t set a = dayOfYear("0000-00-00")`)
|
||||
c.Assert(terror.ErrorEqual(err, types.ErrInvalidTimeFormat), IsTrue)
|
||||
_, err = tk.Exec(`delete from t where a = dayOfYear(123)`)
|
||||
c.Assert(terror.ErrorEqual(err, types.ErrInvalidTimeFormat), IsTrue)
|
||||
|
||||
tk.MustExec("set sql_mode = ''")
|
||||
}
|
||||
|
||||
func (s *testIntegrationSuite) TestOpBuiltin(c *C) {
|
||||
|
||||
@ -1002,6 +1002,124 @@ func (s *testPlanSuite) createTestCase4TimeFuncs() []typeInferTestCase {
|
||||
{"to_seconds(c_char)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 20, 0},
|
||||
{"to_days(c_char)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 20, 0},
|
||||
|
||||
{"hour(c_int_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"hour(c_bigint_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"hour(c_float_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"hour(c_double_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"hour(c_decimal )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"hour(c_datetime )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"hour(c_time )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"hour(c_timestamp)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"hour(c_char )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"hour(c_varchar )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"hour(c_text_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"hour(c_binary )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"hour(c_varbinary)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"hour(c_blob_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"hour(c_set )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"hour(c_enum )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
|
||||
{"minute(c_int_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"minute(c_bigint_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"minute(c_float_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"minute(c_double_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"minute(c_decimal )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"minute(c_datetime )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"minute(c_time )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"minute(c_timestamp)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"minute(c_char )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"minute(c_varchar )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"minute(c_text_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"minute(c_binary )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"minute(c_varbinary)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"minute(c_blob_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"minute(c_set )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"minute(c_enum )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
|
||||
{"second(c_int_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"second(c_bigint_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"second(c_float_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"second(c_double_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"second(c_decimal )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"second(c_datetime )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"second(c_time )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"second(c_timestamp)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"second(c_char )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"second(c_varchar )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"second(c_text_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"second(c_binary )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"second(c_varbinary)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"second(c_blob_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"second(c_set )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"second(c_enum )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
|
||||
{"microsecond(c_int_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 6, 0},
|
||||
{"microsecond(c_bigint_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 6, 0},
|
||||
{"microsecond(c_float_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 6, 0},
|
||||
{"microsecond(c_double_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 6, 0},
|
||||
{"microsecond(c_decimal )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 6, 0},
|
||||
{"microsecond(c_datetime )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 6, 0},
|
||||
{"microsecond(c_time )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 6, 0},
|
||||
{"microsecond(c_timestamp)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 6, 0},
|
||||
{"microsecond(c_char )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 6, 0},
|
||||
{"microsecond(c_varchar )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 6, 0},
|
||||
{"microsecond(c_text_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 6, 0},
|
||||
{"microsecond(c_binary )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 6, 0},
|
||||
{"microsecond(c_varbinary)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 6, 0},
|
||||
{"microsecond(c_blob_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 6, 0},
|
||||
{"microsecond(c_set )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 6, 0},
|
||||
{"microsecond(c_enum )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 6, 0},
|
||||
|
||||
{"dayofmonth(c_int_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"dayofmonth(c_bigint_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"dayofmonth(c_float_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"dayofmonth(c_double_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"dayofmonth(c_decimal )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"dayofmonth(c_datetime )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"dayofmonth(c_time )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"dayofmonth(c_timestamp)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"dayofmonth(c_char )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"dayofmonth(c_varchar )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"dayofmonth(c_text_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"dayofmonth(c_binary )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"dayofmonth(c_varbinary)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"dayofmonth(c_blob_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"dayofmonth(c_set )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
{"dayofmonth(c_enum )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 2, 0},
|
||||
|
||||
{"dayofyear(c_int_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"dayofyear(c_bigint_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"dayofyear(c_float_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"dayofyear(c_double_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"dayofyear(c_decimal )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"dayofyear(c_datetime )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"dayofyear(c_time )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"dayofyear(c_timestamp)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"dayofyear(c_char )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"dayofyear(c_varchar )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"dayofyear(c_text_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"dayofyear(c_binary )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"dayofyear(c_varbinary)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"dayofyear(c_blob_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"dayofyear(c_set )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"dayofyear(c_enum )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
|
||||
{"dayofweek(c_bigint_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 1, 0},
|
||||
{"dayofweek(c_float_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 1, 0},
|
||||
{"dayofweek(c_double_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 1, 0},
|
||||
{"dayofweek(c_decimal )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 1, 0},
|
||||
{"dayofweek(c_datetime )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 1, 0},
|
||||
{"dayofweek(c_time )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 1, 0},
|
||||
{"dayofweek(c_timestamp)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 1, 0},
|
||||
{"dayofweek(c_char )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 1, 0},
|
||||
{"dayofweek(c_varchar )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 1, 0},
|
||||
{"dayofweek(c_text_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 1, 0},
|
||||
{"dayofweek(c_binary )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 1, 0},
|
||||
{"dayofweek(c_varbinary)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 1, 0},
|
||||
{"dayofweek(c_blob_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 1, 0},
|
||||
{"dayofweek(c_set )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 1, 0},
|
||||
{"dayofweek(c_enum )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 1, 0},
|
||||
|
||||
{"hour(c_int_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"hour(c_bigint_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
{"hour(c_float_d )", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, 3, 0},
|
||||
|
||||
Reference in New Issue
Block a user