diff --git a/DEPS.bzl b/DEPS.bzl new file mode 100644 index 0000000000000..97d5e63b1776b --- /dev/null +++ b/DEPS.bzl @@ -0,0 +1,3154 @@ +load("@bazel_gazelle//:deps.bzl", "go_repository") + +def go_deps(): + go_repository( + name = "co_honnef_go_tools", + build_file_proto_mode = "disable_global", + importpath = "honnef.co/go/tools", + sum = "h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8=", + version = "v0.0.1-2020.1.4", + ) + go_repository( + name = "com_github_ajg_form", + build_file_proto_mode = "disable_global", + importpath = "github.com/ajg/form", + sum = "h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU=", + version = "v1.5.1", + ) + go_repository( + name = "com_github_ajstarks_svgo", + build_file_proto_mode = "disable_global", + importpath = "github.com/ajstarks/svgo", + sum = "h1:wVe6/Ea46ZMeNkQjjBW6xcqyQA/j5e0D6GytH95g0gQ=", + version = "v0.0.0-20180226025133-644b8db467af", + ) + go_repository( + name = "com_github_alecthomas_template", + build_file_proto_mode = "disable_global", + importpath = "github.com/alecthomas/template", + sum = "h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM=", + version = "v0.0.0-20190718012654-fb15b899a751", + ) + go_repository( + name = "com_github_alecthomas_units", + build_file_proto_mode = "disable_global", + importpath = "github.com/alecthomas/units", + sum = "h1:UQZhZ2O0vMHr2cI+DC1Mbh0TJxzA3RcLoMsFw+aXw7E=", + version = "v0.0.0-20190924025748-f65c72e2690d", + ) + go_repository( + name = "com_github_aliyun_alibaba_cloud_sdk_go", + build_file_proto_mode = "disable", + importpath = "github.com/aliyun/alibaba-cloud-sdk-go", + sum = "h1:Q/yk4z/cHUVZfgTqtD09qeYBxHwshQAjVRX73qs8UH0=", + version = "v1.61.1581", + ) + + go_repository( + name = "com_github_andreasbriese_bbloom", + build_file_proto_mode = "disable_global", + importpath = "github.com/AndreasBriese/bbloom", + sum = "h1:HD8gA2tkByhMAwYaFAX9w2l7vxvBQ5NMoxDrkhqhtn4=", + version = "v0.0.0-20190306092124-e2d15f34fcf9", + ) + go_repository( + name = "com_github_antihax_optional", + build_file_proto_mode = "disable_global", + importpath = "github.com/antihax/optional", + sum = "h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_apache_thrift", + build_file_proto_mode = "disable_global", + importpath = "github.com/apache/thrift", + sum = "h1:Jz3KVLYY5+JO7rDiX0sAuRGtuv2vG01r17Y9nLMWNUw=", + version = "v0.13.1-0.20201008052519-daf620915714", + ) + go_repository( + name = "com_github_armon_circbuf", + build_file_proto_mode = "disable_global", + importpath = "github.com/armon/circbuf", + sum = "h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA=", + version = "v0.0.0-20150827004946-bbbad097214e", + ) + go_repository( + name = "com_github_armon_consul_api", + build_file_proto_mode = "disable_global", + importpath = "github.com/armon/consul-api", + sum = "h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA=", + version = "v0.0.0-20180202201655-eb2c6b5be1b6", + ) + go_repository( + name = "com_github_armon_go_metrics", + build_file_proto_mode = "disable_global", + importpath = "github.com/armon/go-metrics", + sum = "h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I=", + version = "v0.0.0-20180917152333-f0300d1749da", + ) + go_repository( + name = "com_github_armon_go_radix", + build_file_proto_mode = "disable_global", + importpath = "github.com/armon/go-radix", + sum = "h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to=", + version = "v0.0.0-20180808171621-7fddfc383310", + ) + go_repository( + name = "com_github_aws_aws_sdk_go", + build_file_proto_mode = "disable_global", + importpath = "github.com/aws/aws-sdk-go", + sum = "h1:r0puXncSaAfRt7Btml2swUo74Kao+vKhO3VLjwDjK54=", + version = "v1.35.3", + ) + go_repository( + name = "com_github_aymerick_raymond", + build_file_proto_mode = "disable_global", + importpath = "github.com/aymerick/raymond", + sum = "h1:Ppm0npCCsmuR9oQaBtRuZcmILVE74aXE+AmrJj8L2ns=", + version = "v2.0.3-0.20180322193309-b565731e1464+incompatible", + ) + go_repository( + name = "com_github_azure_azure_sdk_for_go_sdk_azcore", + build_file_proto_mode = "disable_global", + importpath = "github.com/Azure/azure-sdk-for-go/sdk/azcore", + sum = "h1:KQgdWmEOmaJKxaUUZwHAYh12t+b+ZJf8q3friycK1kA=", + version = "v0.20.0", + ) + go_repository( + name = "com_github_azure_azure_sdk_for_go_sdk_azidentity", + build_file_proto_mode = "disable_global", + importpath = "github.com/Azure/azure-sdk-for-go/sdk/azidentity", + sum = "h1:VBvHGLJbaY0+c66NZHdS9cgjHVYSH6DDa0XJMyrblsI=", + version = "v0.12.0", + ) + go_repository( + name = "com_github_azure_azure_sdk_for_go_sdk_internal", + build_file_proto_mode = "disable_global", + importpath = "github.com/Azure/azure-sdk-for-go/sdk/internal", + sum = "h1:BUYIbDf/mMZ8945v3QkG3OuqGVyS4Iek0AOLwdRAYoc=", + version = "v0.8.1", + ) + go_repository( + name = "com_github_azure_azure_sdk_for_go_sdk_storage_azblob", + build_file_proto_mode = "disable_global", + importpath = "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob", + sum = "h1:62Ew5xXg5UCGIXDOM7+y4IL5/6mQJq1nenhBCJAeGX8=", + version = "v0.2.0", + ) + go_repository( + name = "com_github_benbjohnson_clock", + build_file_proto_mode = "disable_global", + importpath = "github.com/benbjohnson/clock", + sum = "h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A=", + version = "v1.3.0", + ) + go_repository( + name = "com_github_beorn7_perks", + build_file_proto_mode = "disable_global", + importpath = "github.com/beorn7/perks", + sum = "h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=", + version = "v1.0.1", + ) + go_repository( + name = "com_github_bgentry_speakeasy", + build_file_proto_mode = "disable_global", + importpath = "github.com/bgentry/speakeasy", + sum = "h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY=", + version = "v0.1.0", + ) + go_repository( + name = "com_github_bketelsen_crypt", + build_file_proto_mode = "disable_global", + importpath = "github.com/bketelsen/crypt", + sum = "h1:+0HFd5KSZ/mm3JmhmrDukiId5iR6w4+BdFtfSy4yWIc=", + version = "v0.0.3-0.20200106085610-5cbc8cc4026c", + ) + go_repository( + name = "com_github_blacktear23_go_proxyprotocol", + build_file_proto_mode = "disable_global", + importpath = "github.com/blacktear23/go-proxyprotocol", + sum = "h1:rQlvB2AYWme2bIB18r/SipGiMEVJYE9U0z+MGoU/LtQ=", + version = "v0.0.0-20180807104634-af7a81e8dd0d", + ) + go_repository( + name = "com_github_burntsushi_toml", + build_file_proto_mode = "disable_global", + importpath = "github.com/BurntSushi/toml", + sum = "h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=", + version = "v0.3.1", + ) + go_repository( + name = "com_github_burntsushi_xgb", + build_file_proto_mode = "disable_global", + importpath = "github.com/BurntSushi/xgb", + sum = "h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc=", + version = "v0.0.0-20160522181843-27f122750802", + ) + go_repository( + name = "com_github_carlmjohnson_flagext", + build_file_proto_mode = "disable_global", + importpath = "github.com/carlmjohnson/flagext", + sum = "h1:/c4uK3ie786Z7caXLcIMvePNSSiH3bQVGDvmGLMme60=", + version = "v0.21.0", + ) + go_repository( + name = "com_github_census_instrumentation_opencensus_proto", + build_file_proto_mode = "disable_global", + importpath = "github.com/census-instrumentation/opencensus-proto", + sum = "h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk=", + version = "v0.2.1", + ) + go_repository( + name = "com_github_certifi_gocertifi", + build_file_proto_mode = "disable_global", + importpath = "github.com/certifi/gocertifi", + sum = "h1:uH66TXeswKn5PW5zdZ39xEwfS9an067BirqA+P4QaLI=", + version = "v0.0.0-20200922220541-2c3bb06c6054", + ) + go_repository( + name = "com_github_cespare_xxhash", + build_file_proto_mode = "disable_global", + importpath = "github.com/cespare/xxhash", + sum = "h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=", + version = "v1.1.0", + ) + go_repository( + name = "com_github_cespare_xxhash_v2", + build_file_proto_mode = "disable_global", + importpath = "github.com/cespare/xxhash/v2", + sum = "h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=", + version = "v2.1.2", + ) + go_repository( + name = "com_github_cheggaaa_pb_v3", + build_file_proto_mode = "disable_global", + importpath = "github.com/cheggaaa/pb/v3", + sum = "h1:bC8oemdChbke2FHIIGy9mn4DPJ2caZYQnfbRqwmdCoA=", + version = "v3.0.8", + ) + go_repository( + name = "com_github_cheynewallace_tabby", + build_file_proto_mode = "disable_global", + importpath = "github.com/cheynewallace/tabby", + sum = "h1:JvUR8waht4Y0S3JF17G6Vhyt+FRhnqVCkk8l4YrOU54=", + version = "v1.1.1", + ) + go_repository( + name = "com_github_chzyer_logex", + build_file_proto_mode = "disable_global", + importpath = "github.com/chzyer/logex", + sum = "h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE=", + version = "v1.1.10", + ) + go_repository( + name = "com_github_chzyer_readline", + build_file_proto_mode = "disable_global", + importpath = "github.com/chzyer/readline", + sum = "h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8=", + version = "v0.0.0-20180603132655-2972be24d48e", + ) + go_repository( + name = "com_github_chzyer_test", + build_file_proto_mode = "disable_global", + importpath = "github.com/chzyer/test", + sum = "h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8=", + version = "v0.0.0-20180213035817-a1ea475d72b1", + ) + go_repository( + name = "com_github_client9_misspell", + build_file_proto_mode = "disable_global", + importpath = "github.com/client9/misspell", + sum = "h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI=", + version = "v0.3.4", + ) + go_repository( + name = "com_github_cloudykit_fastprinter", + build_file_proto_mode = "disable_global", + importpath = "github.com/CloudyKit/fastprinter", + sum = "h1:3SgJcK9l5uPdBC/X17wanyJAMxM33+4ZhEIV96MIH8U=", + version = "v0.0.0-20170127035650-74b38d55f37a", + ) + go_repository( + name = "com_github_cloudykit_jet", + build_file_proto_mode = "disable_global", + importpath = "github.com/CloudyKit/jet", + sum = "h1:rZgFj+Gtf3NMi/U5FvCvhzaxzW/TaPYgUYx3bAPz9DE=", + version = "v2.1.3-0.20180809161101-62edd43e4f88+incompatible", + ) + go_repository( + name = "com_github_cncf_udpa_go", + build_file_proto_mode = "disable_global", + importpath = "github.com/cncf/udpa/go", + sum = "h1:hzAQntlaYRkVSFEfj9OTWlVV1H155FMD8BTKktLv0QI=", + version = "v0.0.0-20210930031921-04548b0d99d4", + ) + go_repository( + name = "com_github_cncf_xds_go", + build_file_proto_mode = "disable_global", + importpath = "github.com/cncf/xds/go", + sum = "h1:zH8ljVhhq7yC0MIeUL/IviMtY8hx2mK8cN9wEYb8ggw=", + version = "v0.0.0-20211011173535-cb28da3451f1", + ) + go_repository( + name = "com_github_cockroachdb_datadriven", + build_file_proto_mode = "disable_global", + importpath = "github.com/cockroachdb/datadriven", + sum = "h1:uhZrAfEayBecH2w2tZmhe20HJ7hDvrrA4x2Bg9YdZKM=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_cockroachdb_errors", + build_file_proto_mode = "disable_global", + importpath = "github.com/cockroachdb/errors", + sum = "h1:A5+txlVZfOqFBDa4mGz2bUWSp0aHElvHX2bKkdbQu+Y=", + version = "v1.8.1", + ) + go_repository( + name = "com_github_cockroachdb_logtags", + build_file_proto_mode = "disable_global", + importpath = "github.com/cockroachdb/logtags", + sum = "h1:o/kfcElHqOiXqcou5a3rIlMc7oJbMQkeLk0VQJ7zgqY=", + version = "v0.0.0-20190617123548-eb05cc24525f", + ) + go_repository( + name = "com_github_cockroachdb_pebble", + build_file_proto_mode = "disable_global", + importpath = "github.com/cockroachdb/pebble", + sum = "h1:Igd6YmtOZ77EgLAIaE9+mHl7+sAKaZ5m4iMI0Dz/J2A=", + version = "v0.0.0-20210719141320-8c3bd06debb5", + ) + go_repository( + name = "com_github_cockroachdb_redact", + build_file_proto_mode = "disable_global", + importpath = "github.com/cockroachdb/redact", + sum = "h1:8QG/764wK+vmEYoOlfobpe12EQcS81ukx/a4hdVMxNw=", + version = "v1.0.8", + ) + go_repository( + name = "com_github_cockroachdb_sentry_go", + build_file_proto_mode = "disable_global", + importpath = "github.com/cockroachdb/sentry-go", + sum = "h1:IKgmqgMQlVJIZj19CdocBeSfSaiCbEBZGKODaixqtHM=", + version = "v0.6.1-cockroachdb.2", + ) + go_repository( + name = "com_github_codahale_hdrhistogram", + build_file_proto_mode = "disable_global", + importpath = "github.com/codahale/hdrhistogram", + sum = "h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w=", + version = "v0.0.0-20161010025455-3a0bb77429bd", + ) + go_repository( + name = "com_github_codegangsta_inject", + build_file_proto_mode = "disable_global", + importpath = "github.com/codegangsta/inject", + sum = "h1:sDMmm+q/3+BukdIpxwO365v/Rbspp2Nt5XntgQRXq8Q=", + version = "v0.0.0-20150114235600-33e0aa1cb7c0", + ) + go_repository( + name = "com_github_colinmarc_hdfs_v2", + build_file_proto_mode = "disable_global", + importpath = "github.com/colinmarc/hdfs/v2", + sum = "h1:x0hw/m+o3UE20Scso/KCkvYNc9Di39TBlCfGMkJ1/a0=", + version = "v2.1.1", + ) + go_repository( + name = "com_github_coocood_bbloom", + build_file_proto_mode = "disable_global", + importpath = "github.com/coocood/bbloom", + sum = "h1:W1SHiII3e0jVwvaQFglwu3kS9NLxOeTpvik7MbKCyuQ=", + version = "v0.0.0-20190830030839-58deb6228d64", + ) + go_repository( + name = "com_github_coocood_freecache", + build_file_proto_mode = "disable_global", + importpath = "github.com/coocood/freecache", + sum = "h1:/v1CqMq45NFH9mp/Pt142reundeBM0dVUD3osQBeu/U=", + version = "v1.2.1", + ) + go_repository( + name = "com_github_coocood_rtutil", + build_file_proto_mode = "disable_global", + importpath = "github.com/coocood/rtutil", + sum = "h1:NnLfQ77q0G4k2Of2c1ceQ0ec6MkLQyDp+IGdVM0D8XM=", + version = "v0.0.0-20190304133409-c84515f646f2", + ) + go_repository( + name = "com_github_coreos_bbolt", + build_file_proto_mode = "disable_global", + importpath = "github.com/coreos/bbolt", + sum = "h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s=", + version = "v1.3.2", + ) + go_repository( + name = "com_github_coreos_etcd", + build_file_proto_mode = "disable_global", + importpath = "github.com/coreos/etcd", + sum = "h1:8F3hqu9fGYLBifCmRCJsicFqDx/D68Rt3q1JMazcgBQ=", + version = "v3.3.13+incompatible", + ) + go_repository( + name = "com_github_coreos_go_etcd", + build_file_proto_mode = "disable_global", + importpath = "github.com/coreos/go-etcd", + sum = "h1:bXhRBIXoTm9BYHS3gE0TtQuyNZyeEMux2sDi4oo5YOo=", + version = "v2.0.0+incompatible", + ) + go_repository( + name = "com_github_coreos_go_semver", + build_file_proto_mode = "disable_global", + importpath = "github.com/coreos/go-semver", + sum = "h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=", + version = "v0.3.0", + ) + go_repository( + name = "com_github_coreos_go_systemd", + build_file_proto_mode = "disable_global", + importpath = "github.com/coreos/go-systemd", + sum = "h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8=", + version = "v0.0.0-20190321100706-95778dfbb74e", + ) + go_repository( + name = "com_github_coreos_go_systemd_v22", + build_file_proto_mode = "disable_global", + importpath = "github.com/coreos/go-systemd/v22", + sum = "h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI=", + version = "v22.3.2", + ) + go_repository( + name = "com_github_coreos_pkg", + build_file_proto_mode = "disable_global", + importpath = "github.com/coreos/pkg", + sum = "h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg=", + version = "v0.0.0-20180928190104-399ea9e2e55f", + ) + go_repository( + name = "com_github_cpuguy83_go_md2man", + build_file_proto_mode = "disable_global", + importpath = "github.com/cpuguy83/go-md2man", + sum = "h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk=", + version = "v1.0.10", + ) + go_repository( + name = "com_github_cpuguy83_go_md2man_v2", + build_file_proto_mode = "disable_global", + importpath = "github.com/cpuguy83/go-md2man/v2", + sum = "h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU=", + version = "v2.0.1", + ) + go_repository( + name = "com_github_creack_pty", + build_file_proto_mode = "disable_global", + importpath = "github.com/creack/pty", + sum = "h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw=", + version = "v1.1.11", + ) + go_repository( + name = "com_github_cznic_mathutil", + build_file_proto_mode = "disable_global", + importpath = "github.com/cznic/mathutil", + sum = "h1:iwZdTE0PVqJCos1vaoKsclOGD3ADKpshg3SRtYBbwso=", + version = "v0.0.0-20181122101859-297441e03548", + ) + go_repository( + name = "com_github_cznic_sortutil", + build_file_proto_mode = "disable_global", + importpath = "github.com/cznic/sortutil", + sum = "h1:LpMLYGyy67BoAFGda1NeOBQwqlv7nUXpm+rIVHGxZZ4=", + version = "v0.0.0-20181122101858-f5f958428db8", + ) + go_repository( + name = "com_github_cznic_strutil", + build_file_proto_mode = "disable_global", + importpath = "github.com/cznic/strutil", + sum = "h1:0rkFMAbn5KBKNpJyHQ6Prb95vIKanmAe62KxsrN+sqA=", + version = "v0.0.0-20171016134553-529a34b1c186", + ) + go_repository( + name = "com_github_danjacques_gofslock", + build_file_proto_mode = "disable_global", + importpath = "github.com/danjacques/gofslock", + sum = "h1:X6mKGhCFOxrKeeHAjv/3UvT6e5RRxW6wRdlqlV6/H4w=", + version = "v0.0.0-20191023191349-0a45f885bc37", + ) + go_repository( + name = "com_github_data_dog_go_sqlmock", + build_file_proto_mode = "disable_global", + importpath = "github.com/DATA-DOG/go-sqlmock", + sum = "h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60=", + version = "v1.5.0", + ) + go_repository( + name = "com_github_datadog_zstd", + build_file_proto_mode = "disable_global", + importpath = "github.com/DataDog/zstd", + sum = "h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ=", + version = "v1.4.5", + ) + go_repository( + name = "com_github_davecgh_go_spew", + build_file_proto_mode = "disable_global", + importpath = "github.com/davecgh/go-spew", + sum = "h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=", + version = "v1.1.1", + ) + go_repository( + name = "com_github_dgraph_io_badger", + build_file_proto_mode = "disable_global", + importpath = "github.com/dgraph-io/badger", + sum = "h1:DshxFxZWXUcO0xX476VJC07Xsr6ZCBVRHKZ93Oh7Evo=", + version = "v1.6.0", + ) + go_repository( + name = "com_github_dgraph_io_ristretto", + build_file_proto_mode = "disable_global", + importpath = "github.com/dgraph-io/ristretto", + sum = "h1:Wrc3UKTS+cffkOx0xRGFC+ZesNuTfn0ThvEC72N0krk=", + version = "v0.1.1-0.20220403145359-8e850b710d6d", + ) + go_repository( + name = "com_github_dgrijalva_jwt_go", + build_file_proto_mode = "disable_global", + importpath = "github.com/dgrijalva/jwt-go", + replace = "github.com/form3tech-oss/jwt-go", + sum = "h1:0sWoh2EtO7UrQdNTAN+hnU3QXa4AoivplyPLLHkcrLk=", + version = "v3.2.6-0.20210809144907-32ab6a8243d7+incompatible", + ) + go_repository( + name = "com_github_dgryski_go_farm", + build_file_proto_mode = "disable_global", + importpath = "github.com/dgryski/go-farm", + sum = "h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y=", + version = "v0.0.0-20200201041132-a6ae2369ad13", + ) + go_repository( + name = "com_github_dgryski_go_sip13", + build_file_proto_mode = "disable_global", + importpath = "github.com/dgryski/go-sip13", + sum = "h1:RMLoZVzv4GliuWafOuPuQDKSm1SJph7uCRnnS61JAn4=", + version = "v0.0.0-20181026042036-e10d5fee7954", + ) + go_repository( + name = "com_github_dnaeon_go_vcr", + build_file_proto_mode = "disable_global", + importpath = "github.com/dnaeon/go-vcr", + sum = "h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=", + version = "v1.2.0", + ) + go_repository( + name = "com_github_docker_go_units", + build_file_proto_mode = "disable_global", + importpath = "github.com/docker/go-units", + sum = "h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=", + version = "v0.4.0", + ) + go_repository( + name = "com_github_dustin_go_humanize", + build_file_proto_mode = "disable_global", + importpath = "github.com/dustin/go-humanize", + sum = "h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_eapache_go_resiliency", + build_file_proto_mode = "disable_global", + importpath = "github.com/eapache/go-resiliency", + sum = "h1:v7g92e/KSN71Rq7vSThKaWIq68fL4YHvWyiUKorFR1Q=", + version = "v1.2.0", + ) + go_repository( + name = "com_github_eapache_go_xerial_snappy", + build_file_proto_mode = "disable_global", + importpath = "github.com/eapache/go-xerial-snappy", + sum = "h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw=", + version = "v0.0.0-20180814174437-776d5712da21", + ) + go_repository( + name = "com_github_eapache_queue", + build_file_proto_mode = "disable_global", + importpath = "github.com/eapache/queue", + sum = "h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc=", + version = "v1.1.0", + ) + go_repository( + name = "com_github_eknkc_amber", + build_file_proto_mode = "disable_global", + importpath = "github.com/eknkc/amber", + sum = "h1:clC1lXBpe2kTj2VHdaIu9ajZQe4kcEY9j0NsnDDBZ3o=", + version = "v0.0.0-20171010120322-cdade1c07385", + ) + go_repository( + name = "com_github_envoyproxy_go_control_plane", + build_file_proto_mode = "disable_global", + importpath = "github.com/envoyproxy/go-control-plane", + sum = "h1:fP+fF0up6oPY49OrjPrhIJ8yQfdIM85NXMLkMg1EXVs=", + version = "v0.9.10-0.20210907150352-cf90f659a021", + ) + go_repository( + name = "com_github_envoyproxy_protoc_gen_validate", + build_file_proto_mode = "disable_global", + importpath = "github.com/envoyproxy/protoc-gen-validate", + sum = "h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A=", + version = "v0.1.0", + ) + go_repository( + name = "com_github_etcd_io_bbolt", + build_file_proto_mode = "disable_global", + importpath = "github.com/etcd-io/bbolt", + sum = "h1:gSJmxrs37LgTqR/oyJBWok6k6SvXEUerFTbltIhXkBM=", + version = "v1.3.3", + ) + go_repository( + name = "com_github_etcd_io_gofail", + build_file_proto_mode = "disable_global", + importpath = "github.com/etcd-io/gofail", + sum = "h1:Y2I0lxOttdUKz+hNaIdG3FtjuQrTmwXun1opRV65IZc=", + version = "v0.0.0-20190801230047-ad7f989257ca", + ) + go_repository( + name = "com_github_fasthttp_contrib_websocket", + build_file_proto_mode = "disable_global", + importpath = "github.com/fasthttp-contrib/websocket", + sum = "h1:DddqAaWDpywytcG8w/qoQ5sAN8X12d3Z3koB0C3Rxsc=", + version = "v0.0.0-20160511215533-1f3b11f56072", + ) + go_repository( + name = "com_github_fatih_color", + build_file_proto_mode = "disable_global", + importpath = "github.com/fatih/color", + sum = "h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=", + version = "v1.13.0", + ) + go_repository( + name = "com_github_fatih_structs", + build_file_proto_mode = "disable_global", + importpath = "github.com/fatih/structs", + sum = "h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=", + version = "v1.1.0", + ) + go_repository( + name = "com_github_felixge_httpsnoop", + build_file_proto_mode = "disable_global", + importpath = "github.com/felixge/httpsnoop", + sum = "h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ=", + version = "v1.0.1", + ) + go_repository( + name = "com_github_flosch_pongo2", + build_file_proto_mode = "disable_global", + importpath = "github.com/flosch/pongo2", + sum = "h1:GY1+t5Dr9OKADM64SYnQjw/w99HMYvQ0A8/JoUkxVmc=", + version = "v0.0.0-20190707114632-bbf5a6c351f4", + ) + go_repository( + name = "com_github_fogleman_gg", + build_file_proto_mode = "disable_global", + importpath = "github.com/fogleman/gg", + sum = "h1:WXb3TSNmHp2vHoCroCIB1foO/yQ36swABL8aOVeDpgg=", + version = "v1.2.1-0.20190220221249-0403632d5b90", + ) + go_repository( + name = "com_github_form3tech_oss_jwt_go", + build_file_proto_mode = "disable_global", + importpath = "github.com/form3tech-oss/jwt-go", + sum = "h1:/l4kBbb4/vGSsdtB5nUe8L7B9mImVMaBPw9L/0TBHU8=", + version = "v3.2.5+incompatible", + ) + go_repository( + name = "com_github_fortytw2_leaktest", + build_file_proto_mode = "disable_global", + importpath = "github.com/fortytw2/leaktest", + sum = "h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=", + version = "v1.3.0", + ) + go_repository( + name = "com_github_frankban_quicktest", + build_file_proto_mode = "disable_global", + importpath = "github.com/frankban/quicktest", + sum = "h1:8sXhOn0uLys67V8EsXLc6eszDs8VXWxL3iRvebPhedY=", + version = "v1.11.3", + ) + go_repository( + name = "com_github_fsnotify_fsnotify", + build_file_proto_mode = "disable_global", + importpath = "github.com/fsnotify/fsnotify", + sum = "h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=", + version = "v1.5.1", + ) + go_repository( + name = "com_github_fsouza_fake_gcs_server", + build_file_proto_mode = "disable_global", + importpath = "github.com/fsouza/fake-gcs-server", + sum = "h1:XyaGOlqo+R5sjT03x2ymk0xepaQlgwhRLTT2IopW0zA=", + version = "v1.19.0", + ) + go_repository( + name = "com_github_fzipp_gocyclo", + build_file_proto_mode = "disable_global", + importpath = "github.com/fzipp/gocyclo", + sum = "h1:A9UeX3HJSXTBzvHzhqoYVuE0eAhe+aM8XBCCwsPMZOc=", + version = "v0.3.1", + ) + go_repository( + name = "com_github_gavv_httpexpect", + build_file_proto_mode = "disable_global", + importpath = "github.com/gavv/httpexpect", + sum = "h1:1X9kcRshkSKEjNJJxX9Y9mQ5BRfbxU5kORdjhlA1yX8=", + version = "v2.0.0+incompatible", + ) + go_repository( + name = "com_github_getsentry_raven_go", + build_file_proto_mode = "disable_global", + importpath = "github.com/getsentry/raven-go", + sum = "h1:no+xWJRb5ZI7eE8TWgIq1jLulQiIoLG0IfYxv5JYMGs=", + version = "v0.2.0", + ) + go_repository( + name = "com_github_ghemawat_stream", + build_file_proto_mode = "disable_global", + importpath = "github.com/ghemawat/stream", + sum = "h1:r5GgOLGbza2wVHRzK7aAj6lWZjfbAwiu/RDCVOKjRyM=", + version = "v0.0.0-20171120220530-696b145b53b9", + ) + go_repository( + name = "com_github_ghodss_yaml", + build_file_proto_mode = "disable_global", + importpath = "github.com/ghodss/yaml", + sum = "h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_gin_contrib_sse", + build_file_proto_mode = "disable_global", + importpath = "github.com/gin-contrib/sse", + sum = "h1:t8FVkw33L+wilf2QiWkw0UV77qRpcH/JHPKGpKa2E8g=", + version = "v0.0.0-20190301062529-5545eab6dad3", + ) + go_repository( + name = "com_github_gin_gonic_gin", + build_file_proto_mode = "disable_global", + importpath = "github.com/gin-gonic/gin", + sum = "h1:3tMoCCfM7ppqsR0ptz/wi1impNpT7/9wQtMZ8lr1mCQ=", + version = "v1.4.0", + ) + go_repository( + name = "com_github_go_check_check", + build_file_proto_mode = "disable_global", + importpath = "github.com/go-check/check", + sum = "h1:0gkP6mzaMqkmpcJYCFOLkIBwI7xFExG03bbkOkCvUPI=", + version = "v0.0.0-20180628173108-788fd7840127", + ) + go_repository( + name = "com_github_go_errors_errors", + build_file_proto_mode = "disable_global", + importpath = "github.com/go-errors/errors", + sum = "h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w=", + version = "v1.0.1", + ) + go_repository( + name = "com_github_go_gl_glfw", + build_file_proto_mode = "disable_global", + importpath = "github.com/go-gl/glfw", + sum = "h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0=", + version = "v0.0.0-20190409004039-e6da0acd62b1", + ) + go_repository( + name = "com_github_go_gl_glfw_v3_3_glfw", + build_file_proto_mode = "disable_global", + importpath = "github.com/go-gl/glfw/v3.3/glfw", + sum = "h1:WtGNWLvXpe6ZudgnXrq0barxBImvnnJoMEhXAzcbM0I=", + version = "v0.0.0-20200222043503-6f7a984d4dc4", + ) + go_repository( + name = "com_github_go_kit_kit", + build_file_proto_mode = "disable_global", + importpath = "github.com/go-kit/kit", + sum = "h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk=", + version = "v0.9.0", + ) + go_repository( + name = "com_github_go_kit_log", + build_file_proto_mode = "disable_global", + importpath = "github.com/go-kit/log", + sum = "h1:DGJh0Sm43HbOeYDNnVZFl8BvcYVvjD5bqYJvp0REbwQ=", + version = "v0.1.0", + ) + go_repository( + name = "com_github_go_logfmt_logfmt", + build_file_proto_mode = "disable_global", + importpath = "github.com/go-logfmt/logfmt", + sum = "h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4=", + version = "v0.5.0", + ) + go_repository( + name = "com_github_go_martini_martini", + build_file_proto_mode = "disable_global", + importpath = "github.com/go-martini/martini", + sum = "h1:xveKWz2iaueeTaUgdetzel+U7exyigDYBryyVfV/rZk=", + version = "v0.0.0-20170121215854-22fa46961aab", + ) + go_repository( + name = "com_github_go_ole_go_ole", + build_file_proto_mode = "disable_global", + importpath = "github.com/go-ole/go-ole", + sum = "h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=", + version = "v1.2.6", + ) + go_repository( + name = "com_github_go_sql_driver_mysql", + build_file_proto_mode = "disable_global", + importpath = "github.com/go-sql-driver/mysql", + sum = "h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=", + version = "v1.6.0", + ) + go_repository( + name = "com_github_go_stack_stack", + build_file_proto_mode = "disable_global", + importpath = "github.com/go-stack/stack", + sum = "h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=", + version = "v1.8.0", + ) + go_repository( + name = "com_github_go_task_slim_sprig", + build_file_proto_mode = "disable_global", + importpath = "github.com/go-task/slim-sprig", + sum = "h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I=", + version = "v0.0.0-20210107165309-348f09dbbbc0", + ) + go_repository( + name = "com_github_gobwas_httphead", + build_file_proto_mode = "disable_global", + importpath = "github.com/gobwas/httphead", + sum = "h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0=", + version = "v0.0.0-20180130184737-2c6c146eadee", + ) + go_repository( + name = "com_github_gobwas_pool", + build_file_proto_mode = "disable_global", + importpath = "github.com/gobwas/pool", + sum = "h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8=", + version = "v0.2.0", + ) + go_repository( + name = "com_github_gobwas_ws", + build_file_proto_mode = "disable_global", + importpath = "github.com/gobwas/ws", + sum = "h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo=", + version = "v1.0.2", + ) + go_repository( + name = "com_github_godbus_dbus_v5", + build_file_proto_mode = "disable_global", + importpath = "github.com/godbus/dbus/v5", + sum = "h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA=", + version = "v5.0.4", + ) + go_repository( + name = "com_github_gogo_googleapis", + build_file_proto_mode = "disable_global", + importpath = "github.com/gogo/googleapis", + sum = "h1:dR8+Q0uO5S2ZBcs2IH6VBKYwSxPo2vYCYq0ot0mu7xA=", + version = "v0.0.0-20180223154316-0cd9801be74a", + ) + go_repository( + name = "com_github_gogo_protobuf", + build_file_proto_mode = "disable_global", + importpath = "github.com/gogo/protobuf", + sum = "h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=", + version = "v1.3.2", + ) + go_repository( + name = "com_github_gogo_status", + build_file_proto_mode = "disable_global", + importpath = "github.com/gogo/status", + sum = "h1:+eIkrewn5q6b30y+g/BJINVVdi2xH7je5MPJ3ZPK3JA=", + version = "v1.1.0", + ) + go_repository( + name = "com_github_goji_httpauth", + build_file_proto_mode = "disable", + importpath = "github.com/goji/httpauth", + sum = "h1:lBXNCxVENCipq4D1Is42JVOP4eQjlB8TQ6H69Yx5J9Q=", + version = "v0.0.0-20160601135302-2da839ab0f4d", + ) + + go_repository( + name = "com_github_golang_freetype", + build_file_proto_mode = "disable_global", + importpath = "github.com/golang/freetype", + sum = "h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=", + version = "v0.0.0-20170609003504-e2365dfdc4a0", + ) + go_repository( + name = "com_github_golang_glog", + build_file_proto_mode = "disable_global", + importpath = "github.com/golang/glog", + sum = "h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_golang_groupcache", + build_file_proto_mode = "disable_global", + importpath = "github.com/golang/groupcache", + sum = "h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=", + version = "v0.0.0-20210331224755-41bb18bfe9da", + ) + go_repository( + name = "com_github_golang_mock", + build_file_proto_mode = "disable_global", + importpath = "github.com/golang/mock", + sum = "h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=", + version = "v1.6.0", + ) + go_repository( + name = "com_github_golang_protobuf", + build_file_proto_mode = "disable_global", + importpath = "github.com/golang/protobuf", + patch_args = ["-p1"], + patches = [ + "//build/patches:com_github_golang_protobuf.patch", + ], + sum = "h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=", + version = "v1.5.2", + ) + go_repository( + name = "com_github_golang_snappy", + build_file_proto_mode = "disable_global", + importpath = "github.com/golang/snappy", + sum = "h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=", + version = "v0.0.4", + ) + go_repository( + name = "com_github_gomodule_redigo", + build_file_proto_mode = "disable_global", + importpath = "github.com/gomodule/redigo", + sum = "h1:y0Wmhvml7cGnzPa9nocn/fMraMH/lMDdeG+rkx4VgYY=", + version = "v1.7.1-0.20190724094224-574c33c3df38", + ) + go_repository( + name = "com_github_google_btree", + build_file_proto_mode = "disable_global", + importpath = "github.com/google/btree", + sum = "h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=", + version = "v1.0.1", + ) + go_repository( + name = "com_github_google_go_cmp", + build_file_proto_mode = "disable_global", + importpath = "github.com/google/go-cmp", + sum = "h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=", + version = "v0.5.7", + ) + go_repository( + name = "com_github_google_go_querystring", + build_file_proto_mode = "disable_global", + importpath = "github.com/google/go-querystring", + sum = "h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_google_gofuzz", + build_file_proto_mode = "disable_global", + importpath = "github.com/google/gofuzz", + sum = "h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_google_martian", + build_file_proto_mode = "disable_global", + importpath = "github.com/google/martian", + sum = "h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no=", + version = "v2.1.0+incompatible", + ) + go_repository( + name = "com_github_google_martian_v3", + build_file_proto_mode = "disable_global", + importpath = "github.com/google/martian/v3", + sum = "h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ=", + version = "v3.2.1", + ) + go_repository( + name = "com_github_google_pprof", + build_file_proto_mode = "disable_global", + importpath = "github.com/google/pprof", + sum = "h1:c8EUapQFi+kjzedr4c6WqbwMdmB95+oDBWZ5XFHFYxY=", + version = "v0.0.0-20211122183932-1daafda22083", + ) + go_repository( + name = "com_github_google_renameio", + build_file_proto_mode = "disable_global", + importpath = "github.com/google/renameio", + sum = "h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA=", + version = "v0.1.0", + ) + go_repository( + name = "com_github_google_uuid", + build_file_proto_mode = "disable_global", + importpath = "github.com/google/uuid", + sum = "h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=", + version = "v1.1.2", + ) + go_repository( + name = "com_github_googleapis_gax_go_v2", + build_file_proto_mode = "disable_global", + importpath = "github.com/googleapis/gax-go/v2", + sum = "h1:dp3bWCh+PPO1zjRRiCSczJav13sBvG4UhNyVTa1KqdU=", + version = "v2.1.1", + ) + go_repository( + name = "com_github_gopherjs_gopherjs", + build_file_proto_mode = "disable_global", + importpath = "github.com/gopherjs/gopherjs", + sum = "h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=", + version = "v0.0.0-20181017120253-0766667cb4d1", + ) + go_repository( + name = "com_github_gorilla_handlers", + build_file_proto_mode = "disable_global", + importpath = "github.com/gorilla/handlers", + sum = "h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4=", + version = "v1.5.1", + ) + go_repository( + name = "com_github_gorilla_mux", + build_file_proto_mode = "disable_global", + importpath = "github.com/gorilla/mux", + sum = "h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=", + version = "v1.8.0", + ) + go_repository( + name = "com_github_gorilla_securecookie", + build_file_proto_mode = "disable_global", + importpath = "github.com/gorilla/securecookie", + sum = "h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ=", + version = "v1.1.1", + ) + go_repository( + name = "com_github_gorilla_sessions", + build_file_proto_mode = "disable_global", + importpath = "github.com/gorilla/sessions", + sum = "h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI=", + version = "v1.2.1", + ) + go_repository( + name = "com_github_gorilla_websocket", + build_file_proto_mode = "disable_global", + importpath = "github.com/gorilla/websocket", + sum = "h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=", + version = "v1.4.2", + ) + go_repository( + name = "com_github_grpc_ecosystem_go_grpc_middleware", + build_file_proto_mode = "disable_global", + importpath = "github.com/grpc-ecosystem/go-grpc-middleware", + sum = "h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw=", + version = "v1.3.0", + ) + go_repository( + name = "com_github_grpc_ecosystem_go_grpc_prometheus", + build_file_proto_mode = "disable_global", + importpath = "github.com/grpc-ecosystem/go-grpc-prometheus", + sum = "h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho=", + version = "v1.2.0", + ) + go_repository( + name = "com_github_grpc_ecosystem_grpc_gateway", + build_file_proto_mode = "disable_global", + build_naming_convention = "go_default_library", + importpath = "github.com/grpc-ecosystem/grpc-gateway", + patch_args = ["-p1"], + patches = [ + "//build/patches:com_github_grpc_ecosystem_grpc_gateway.patch", + ], + sum = "h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=", + version = "v1.16.0", + ) + go_repository( + name = "com_github_hashicorp_consul_api", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/consul/api", + sum = "h1:BNQPM9ytxj6jbjjdRPioQ94T6YXriSopn0i8COv6SRA=", + version = "v1.1.0", + ) + go_repository( + name = "com_github_hashicorp_consul_sdk", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/consul/sdk", + sum = "h1:LnuDWGNsoajlhGyHJvuWW6FVqRl8JOTPqS6CPTsYjhY=", + version = "v0.1.1", + ) + go_repository( + name = "com_github_hashicorp_errwrap", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/errwrap", + sum = "h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hashicorp_go_cleanhttp", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/go-cleanhttp", + sum = "h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM=", + version = "v0.5.1", + ) + go_repository( + name = "com_github_hashicorp_go_immutable_radix", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/go-immutable-radix", + sum = "h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hashicorp_go_msgpack", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/go-msgpack", + sum = "h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4=", + version = "v0.5.3", + ) + go_repository( + name = "com_github_hashicorp_go_multierror", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/go-multierror", + sum = "h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hashicorp_go_net", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/go.net", + sum = "h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw=", + version = "v0.0.1", + ) + go_repository( + name = "com_github_hashicorp_go_rootcerts", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/go-rootcerts", + sum = "h1:Rqb66Oo1X/eSV1x66xbDccZjhJigjg0+e82kpwzSwCI=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hashicorp_go_sockaddr", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/go-sockaddr", + sum = "h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hashicorp_go_syslog", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/go-syslog", + sum = "h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hashicorp_go_uuid", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/go-uuid", + sum = "h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE=", + version = "v1.0.2", + ) + go_repository( + name = "com_github_hashicorp_go_version", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/go-version", + sum = "h1:3vNe/fWF5CBgRIguda1meWhsZHy3m8gCJ5wx+dIzX/E=", + version = "v1.2.0", + ) + go_repository( + name = "com_github_hashicorp_golang_lru", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/golang-lru", + sum = "h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=", + version = "v0.5.1", + ) + go_repository( + name = "com_github_hashicorp_hcl", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/hcl", + sum = "h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hashicorp_logutils", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/logutils", + sum = "h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hashicorp_mdns", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/mdns", + sum = "h1:WhIgCr5a7AaVH6jPUwjtRuuE7/RDufnUvzIr48smyxs=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hashicorp_memberlist", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/memberlist", + sum = "h1:EmmoJme1matNzb+hMpDuR/0sbJSUisxyqBGG676r31M=", + version = "v0.1.3", + ) + go_repository( + name = "com_github_hashicorp_serf", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/serf", + sum = "h1:YZ7UKsJv+hKjqGVUUbtE3HNj79Eln2oQ75tniF6iPt0=", + version = "v0.8.2", + ) + go_repository( + name = "com_github_hdrhistogram_hdrhistogram_go", + build_file_proto_mode = "disable_global", + importpath = "github.com/HdrHistogram/hdrhistogram-go", + sum = "h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=", + version = "v1.1.2", + ) + go_repository( + name = "com_github_hpcloud_tail", + build_file_proto_mode = "disable_global", + importpath = "github.com/hpcloud/tail", + sum = "h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hydrogen18_memlistener", + build_file_proto_mode = "disable_global", + importpath = "github.com/hydrogen18/memlistener", + sum = "h1:EPRgaDqXpLFUJLXZdGLnBTy1l6CLiNAPnvn2l+kHit0=", + version = "v0.0.0-20141126152155-54553eb933fb", + ) + go_repository( + name = "com_github_iancoleman_strcase", + build_file_proto_mode = "disable_global", + importpath = "github.com/iancoleman/strcase", + sum = "h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0=", + version = "v0.2.0", + ) + go_repository( + name = "com_github_ianlancetaylor_demangle", + build_file_proto_mode = "disable_global", + importpath = "github.com/ianlancetaylor/demangle", + sum = "h1:uGg2frlt3IcT7kbV6LEp5ONv4vmoO2FW4qSO+my/aoM=", + version = "v0.0.0-20210905161508-09a460cdf81d", + ) + go_repository( + name = "com_github_imkira_go_interpol", + build_file_proto_mode = "disable_global", + importpath = "github.com/imkira/go-interpol", + sum = "h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk=", + version = "v1.1.0", + ) + go_repository( + name = "com_github_inconshreveable_mousetrap", + build_file_proto_mode = "disable_global", + importpath = "github.com/inconshreveable/mousetrap", + sum = "h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_iris_contrib_blackfriday", + build_file_proto_mode = "disable_global", + importpath = "github.com/iris-contrib/blackfriday", + sum = "h1:o5sHQHHm0ToHUlAJSTjW9UWicjJSDDauOOQ2AHuIVp4=", + version = "v2.0.0+incompatible", + ) + go_repository( + name = "com_github_iris_contrib_go_uuid", + build_file_proto_mode = "disable_global", + importpath = "github.com/iris-contrib/go.uuid", + sum = "h1:XZubAYg61/JwnJNbZilGjf3b3pB80+OQg2qf6c8BfWE=", + version = "v2.0.0+incompatible", + ) + go_repository( + name = "com_github_iris_contrib_i18n", + build_file_proto_mode = "disable_global", + importpath = "github.com/iris-contrib/i18n", + sum = "h1:Kyp9KiXwsyZRTeoNjgVCrWks7D8ht9+kg6yCjh8K97o=", + version = "v0.0.0-20171121225848-987a633949d0", + ) + go_repository( + name = "com_github_iris_contrib_schema", + build_file_proto_mode = "disable_global", + importpath = "github.com/iris-contrib/schema", + sum = "h1:10g/WnoRR+U+XXHWKBHeNy/+tZmM2kcAVGLOsz+yaDA=", + version = "v0.0.1", + ) + go_repository( + name = "com_github_jcmturner_aescts_v2", + build_file_proto_mode = "disable_global", + importpath = "github.com/jcmturner/aescts/v2", + sum = "h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8=", + version = "v2.0.0", + ) + go_repository( + name = "com_github_jcmturner_dnsutils_v2", + build_file_proto_mode = "disable_global", + importpath = "github.com/jcmturner/dnsutils/v2", + sum = "h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo=", + version = "v2.0.0", + ) + go_repository( + name = "com_github_jcmturner_gofork", + build_file_proto_mode = "disable_global", + importpath = "github.com/jcmturner/gofork", + sum = "h1:J7uCkflzTEhUZ64xqKnkDxq3kzc96ajM1Gli5ktUem8=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_jcmturner_goidentity_v6", + build_file_proto_mode = "disable_global", + importpath = "github.com/jcmturner/goidentity/v6", + sum = "h1:VKnZd2oEIMorCTsFBnJWbExfNN7yZr3EhJAxwOkZg6o=", + version = "v6.0.1", + ) + go_repository( + name = "com_github_jcmturner_gokrb5_v8", + build_file_proto_mode = "disable_global", + importpath = "github.com/jcmturner/gokrb5/v8", + sum = "h1:6ZIM6b/JJN0X8UM43ZOM6Z4SJzla+a/u7scXFJzodkA=", + version = "v8.4.2", + ) + go_repository( + name = "com_github_jcmturner_rpc_v2", + build_file_proto_mode = "disable_global", + importpath = "github.com/jcmturner/rpc/v2", + sum = "h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY=", + version = "v2.0.3", + ) + go_repository( + name = "com_github_jedib0t_go_pretty_v6", + build_file_proto_mode = "disable_global", + importpath = "github.com/jedib0t/go-pretty/v6", + sum = "h1:o3McN0rQ4X+IU+HduppSp9TwRdGLRW2rhJXy9CJaCRw=", + version = "v6.2.2", + ) + go_repository( + name = "com_github_jeffail_gabs_v2", + build_file_proto_mode = "disable_global", + importpath = "github.com/Jeffail/gabs/v2", + sum = "h1:ANfZYjpMlfTTKebycu4X1AgkVWumFVDYQl7JwOr4mDk=", + version = "v2.5.1", + ) + go_repository( + name = "com_github_jmespath_go_jmespath", + build_file_proto_mode = "disable_global", + importpath = "github.com/jmespath/go-jmespath", + sum = "h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=", + version = "v0.4.0", + ) + go_repository( + name = "com_github_jmespath_go_jmespath_internal_testify", + build_file_proto_mode = "disable_global", + importpath = "github.com/jmespath/go-jmespath/internal/testify", + sum = "h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=", + version = "v1.5.1", + ) + go_repository( + name = "com_github_joho_sqltocsv", + build_file_proto_mode = "disable_global", + importpath = "github.com/joho/sqltocsv", + sum = "h1:Zrb0IbuLOGHL7nrO2WrcuNWgDTlzFv3zY69QMx4ggQE=", + version = "v0.0.0-20210428211105-a6d6801d59df", + ) + go_repository( + name = "com_github_joker_hpp", + build_file_proto_mode = "disable_global", + importpath = "github.com/Joker/hpp", + sum = "h1:65+iuJYdRXv/XyN62C1uEmmOx3432rNG/rKlX6V7Kkc=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_joker_jade", + build_file_proto_mode = "disable_global", + importpath = "github.com/Joker/jade", + sum = "h1:mreN1m/5VJ/Zc3b4pzj9qU6D9SRQ6Vm+3KfI328t3S8=", + version = "v1.0.1-0.20190614124447-d475f43051e7", + ) + go_repository( + name = "com_github_jonboulle_clockwork", + build_file_proto_mode = "disable_global", + importpath = "github.com/jonboulle/clockwork", + sum = "h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ=", + version = "v0.2.2", + ) + go_repository( + name = "com_github_jpillora_backoff", + build_file_proto_mode = "disable_global", + importpath = "github.com/jpillora/backoff", + sum = "h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_json_iterator_go", + build_file_proto_mode = "disable_global", + importpath = "github.com/json-iterator/go", + sum = "h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=", + version = "v1.1.12", + ) + go_repository( + name = "com_github_jstemmer_go_junit_report", + build_file_proto_mode = "disable_global", + importpath = "github.com/jstemmer/go-junit-report", + sum = "h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o=", + version = "v0.9.1", + ) + go_repository( + name = "com_github_jtolds_gls", + build_file_proto_mode = "disable_global", + importpath = "github.com/jtolds/gls", + sum = "h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=", + version = "v4.20.0+incompatible", + ) + go_repository( + name = "com_github_juju_errors", + build_file_proto_mode = "disable_global", + importpath = "github.com/juju/errors", + sum = "h1:rhqTjzJlm7EbkELJDKMTU7udov+Se0xZkWmugr6zGok=", + version = "v0.0.0-20181118221551-089d3ea4e4d5", + ) + go_repository( + name = "com_github_juju_loggo", + build_file_proto_mode = "disable_global", + importpath = "github.com/juju/loggo", + sum = "h1:MK144iBQF9hTSwBW/9eJm034bVoG30IshVm688T2hi8=", + version = "v0.0.0-20180524022052-584905176618", + ) + go_repository( + name = "com_github_juju_testing", + build_file_proto_mode = "disable_global", + importpath = "github.com/juju/testing", + sum = "h1:WQM1NildKThwdP7qWrNAFGzp4ijNLw8RlgENkaI4MJs=", + version = "v0.0.0-20180920084828-472a3e8b2073", + ) + go_repository( + name = "com_github_julienschmidt_httprouter", + build_file_proto_mode = "disable_global", + importpath = "github.com/julienschmidt/httprouter", + sum = "h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U=", + version = "v1.3.0", + ) + go_repository( + name = "com_github_jung_kurt_gofpdf", + build_file_proto_mode = "disable_global", + importpath = "github.com/jung-kurt/gofpdf", + sum = "h1:PJr+ZMXIecYc1Ey2zucXdR73SMBtgjPgwa31099IMv0=", + version = "v1.0.3-0.20190309125859-24315acbbda5", + ) + go_repository( + name = "com_github_k0kubun_colorstring", + build_file_proto_mode = "disable_global", + importpath = "github.com/k0kubun/colorstring", + sum = "h1:uC1QfSlInpQF+M0ao65imhwqKnz3Q2z/d8PWZRMQvDM=", + version = "v0.0.0-20150214042306-9440f1994b88", + ) + go_repository( + name = "com_github_kataras_golog", + build_file_proto_mode = "disable_global", + importpath = "github.com/kataras/golog", + sum = "h1:J7Dl82843nbKQDrQM/abbNJZvQjS6PfmkkffhOTXEpM=", + version = "v0.0.9", + ) + go_repository( + name = "com_github_kataras_iris_v12", + build_file_proto_mode = "disable_global", + importpath = "github.com/kataras/iris/v12", + sum = "h1:Wo5S7GMWv5OAzJmvFTvss/C4TS1W0uo6LkDlSymT4rM=", + version = "v12.0.1", + ) + go_repository( + name = "com_github_kataras_neffos", + build_file_proto_mode = "disable_global", + importpath = "github.com/kataras/neffos", + sum = "h1:O06dvQlxjdWvzWbm2Bq+Si6psUhvSmEctAMk9Xujqms=", + version = "v0.0.10", + ) + go_repository( + name = "com_github_kataras_pio", + build_file_proto_mode = "disable_global", + importpath = "github.com/kataras/pio", + sum = "h1:V5Rs9ztEWdp58oayPq/ulmlqJJZeJP6pP79uP3qjcao=", + version = "v0.0.0-20190103105442-ea782b38602d", + ) + go_repository( + name = "com_github_kisielk_errcheck", + build_file_proto_mode = "disable_global", + importpath = "github.com/kisielk/errcheck", + sum = "h1:e8esj/e4R+SAOwFwN+n3zr0nYeCyeweozKfO23MvHzY=", + version = "v1.5.0", + ) + go_repository( + name = "com_github_kisielk_gotool", + build_file_proto_mode = "disable_global", + importpath = "github.com/kisielk/gotool", + sum = "h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_klauspost_compress", + build_file_proto_mode = "disable_global", + importpath = "github.com/klauspost/compress", + sum = "h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A=", + version = "v1.15.1", + ) + go_repository( + name = "com_github_klauspost_cpuid", + build_file_proto_mode = "disable_global", + importpath = "github.com/klauspost/cpuid", + sum = "h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s=", + version = "v1.3.1", + ) + go_repository( + name = "com_github_konsorten_go_windows_terminal_sequences", + build_file_proto_mode = "disable_global", + importpath = "github.com/konsorten/go-windows-terminal-sequences", + sum = "h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=", + version = "v1.0.3", + ) + go_repository( + name = "com_github_kr_logfmt", + build_file_proto_mode = "disable_global", + importpath = "github.com/kr/logfmt", + sum = "h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY=", + version = "v0.0.0-20140226030751-b84e30acd515", + ) + go_repository( + name = "com_github_kr_pretty", + build_file_proto_mode = "disable_global", + importpath = "github.com/kr/pretty", + sum = "h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=", + version = "v0.3.0", + ) + go_repository( + name = "com_github_kr_pty", + build_file_proto_mode = "disable_global", + importpath = "github.com/kr/pty", + sum = "h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw=", + version = "v1.1.1", + ) + go_repository( + name = "com_github_kr_text", + build_file_proto_mode = "disable_global", + importpath = "github.com/kr/text", + sum = "h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=", + version = "v0.2.0", + ) + go_repository( + name = "com_github_labstack_echo_v4", + build_file_proto_mode = "disable_global", + importpath = "github.com/labstack/echo/v4", + sum = "h1:z0BZoArY4FqdpUEl+wlHp4hnr/oSR6MTmQmv8OHSoww=", + version = "v4.1.11", + ) + go_repository( + name = "com_github_labstack_gommon", + build_file_proto_mode = "disable_global", + importpath = "github.com/labstack/gommon", + sum = "h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0=", + version = "v0.3.0", + ) + go_repository( + name = "com_github_lufia_plan9stats", + build_file_proto_mode = "disable_global", + importpath = "github.com/lufia/plan9stats", + sum = "h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=", + version = "v0.0.0-20211012122336-39d0f177ccd0", + ) + go_repository( + name = "com_github_magiconair_properties", + build_file_proto_mode = "disable_global", + importpath = "github.com/magiconair/properties", + sum = "h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=", + version = "v1.8.1", + ) + go_repository( + name = "com_github_mattn_go_colorable", + build_file_proto_mode = "disable_global", + importpath = "github.com/mattn/go-colorable", + sum = "h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=", + version = "v0.1.12", + ) + go_repository( + name = "com_github_mattn_go_isatty", + build_file_proto_mode = "disable_global", + importpath = "github.com/mattn/go-isatty", + sum = "h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=", + version = "v0.0.14", + ) + go_repository( + name = "com_github_mattn_go_runewidth", + build_file_proto_mode = "disable_global", + importpath = "github.com/mattn/go-runewidth", + sum = "h1:Y41i/hVW3Pgwr8gV+J23B9YEY0zxjptBuCWEaxmAOow=", + version = "v0.0.12", + ) + go_repository( + name = "com_github_mattn_goveralls", + build_file_proto_mode = "disable_global", + importpath = "github.com/mattn/goveralls", + sum = "h1:7eJB6EqsPhRVxvwEXGnqdO2sJI0PTsrWoTMXEk9/OQc=", + version = "v0.0.2", + ) + go_repository( + name = "com_github_matttproud_golang_protobuf_extensions", + build_file_proto_mode = "disable_global", + importpath = "github.com/matttproud/golang_protobuf_extensions", + sum = "h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=", + version = "v1.0.1", + ) + go_repository( + name = "com_github_mediocregopher_mediocre_go_lib", + build_file_proto_mode = "disable_global", + importpath = "github.com/mediocregopher/mediocre-go-lib", + sum = "h1:3dQJqqDouawQgl3gBE1PNHKFkJYGEuFb1DbSlaxdosE=", + version = "v0.0.0-20181029021733-cb65787f37ed", + ) + go_repository( + name = "com_github_mediocregopher_radix_v3", + build_file_proto_mode = "disable_global", + importpath = "github.com/mediocregopher/radix/v3", + sum = "h1:oacPXPKHJg0hcngVVrdtTnfGJiS+PtwoQwTBZGFlV4k=", + version = "v3.3.0", + ) + go_repository( + name = "com_github_microcosm_cc_bluemonday", + build_file_proto_mode = "disable_global", + importpath = "github.com/microcosm-cc/bluemonday", + sum = "h1:5lPfLTTAvAbtS0VqT+94yOtFnGfUWYyx0+iToC3Os3s=", + version = "v1.0.2", + ) + go_repository( + name = "com_github_miekg_dns", + build_file_proto_mode = "disable_global", + importpath = "github.com/miekg/dns", + sum = "h1:9jZdLNd/P4+SfEJ0TNyxYpsK8N4GtfylBLqtbYN1sbA=", + version = "v1.0.14", + ) + go_repository( + name = "com_github_mitchellh_cli", + build_file_proto_mode = "disable_global", + importpath = "github.com/mitchellh/cli", + sum = "h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_mitchellh_go_homedir", + build_file_proto_mode = "disable_global", + importpath = "github.com/mitchellh/go-homedir", + sum = "h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=", + version = "v1.1.0", + ) + go_repository( + name = "com_github_mitchellh_go_testing_interface", + build_file_proto_mode = "disable_global", + importpath = "github.com/mitchellh/go-testing-interface", + sum = "h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_mitchellh_gox", + build_file_proto_mode = "disable_global", + importpath = "github.com/mitchellh/gox", + sum = "h1:lfGJxY7ToLJQjHHwi0EX6uYBdK78egf954SQl13PQJc=", + version = "v0.4.0", + ) + go_repository( + name = "com_github_mitchellh_iochan", + build_file_proto_mode = "disable_global", + importpath = "github.com/mitchellh/iochan", + sum = "h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_mitchellh_mapstructure", + build_file_proto_mode = "disable_global", + importpath = "github.com/mitchellh/mapstructure", + sum = "h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=", + version = "v1.1.2", + ) + go_repository( + name = "com_github_modern_go_concurrent", + build_file_proto_mode = "disable_global", + importpath = "github.com/modern-go/concurrent", + sum = "h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=", + version = "v0.0.0-20180306012644-bacd9c7ef1dd", + ) + go_repository( + name = "com_github_modern_go_reflect2", + build_file_proto_mode = "disable_global", + importpath = "github.com/modern-go/reflect2", + sum = "h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=", + version = "v1.0.2", + ) + go_repository( + name = "com_github_modocache_gover", + build_file_proto_mode = "disable_global", + importpath = "github.com/modocache/gover", + sum = "h1:8Q0qkMVC/MmWkpIdlvZgcv2o2jrlF6zqVOh7W5YHdMA=", + version = "v0.0.0-20171022184752-b58185e213c5", + ) + go_repository( + name = "com_github_moul_http2curl", + build_file_proto_mode = "disable_global", + importpath = "github.com/moul/http2curl", + sum = "h1:dRMWoAtb+ePxMlLkrCbAqh4TlPHXvoGUSQ323/9Zahs=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_mwitkow_go_conntrack", + build_file_proto_mode = "disable_global", + importpath = "github.com/mwitkow/go-conntrack", + sum = "h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU=", + version = "v0.0.0-20190716064945-2f068394615f", + ) + go_repository( + name = "com_github_nats_io_nats_go", + build_file_proto_mode = "disable_global", + importpath = "github.com/nats-io/nats.go", + sum = "h1:6lF/f1/NN6kzUDBz6pyvQDEXO39jqXcWRLu/tKjtOUQ=", + version = "v1.8.1", + ) + go_repository( + name = "com_github_nats_io_nkeys", + build_file_proto_mode = "disable_global", + importpath = "github.com/nats-io/nkeys", + sum = "h1:+qM7QpgXnvDDixitZtQUBDY9w/s9mu1ghS+JIbsrx6M=", + version = "v0.0.2", + ) + go_repository( + name = "com_github_nats_io_nuid", + build_file_proto_mode = "disable_global", + importpath = "github.com/nats-io/nuid", + sum = "h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=", + version = "v1.0.1", + ) + go_repository( + name = "com_github_ncw_directio", + build_file_proto_mode = "disable_global", + importpath = "github.com/ncw/directio", + sum = "h1:JSUBhdjEvVaJvOoyPAbcW0fnd0tvRXD76wEfZ1KcQz4=", + version = "v1.0.5", + ) + go_repository( + name = "com_github_ngaut_pools", + build_file_proto_mode = "disable_global", + importpath = "github.com/ngaut/pools", + sum = "h1:7KAv7KMGTTqSmYZtNdcNTgsos+vFzULLwyElndwn+5c=", + version = "v0.0.0-20180318154953-b7bc8c42aac7", + ) + go_repository( + name = "com_github_ngaut_sync2", + build_file_proto_mode = "disable_global", + importpath = "github.com/ngaut/sync2", + sum = "h1:K0Fn+DoFqNqktdZtdV3bPQ/0cuYh2H4rkg0tytX/07k=", + version = "v0.0.0-20141008032647-7a24ed77b2ef", + ) + go_repository( + name = "com_github_niemeyer_pretty", + build_file_proto_mode = "disable_global", + importpath = "github.com/niemeyer/pretty", + sum = "h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=", + version = "v0.0.0-20200227124842-a10e7caefd8e", + ) + go_repository( + name = "com_github_nxadm_tail", + build_file_proto_mode = "disable_global", + importpath = "github.com/nxadm/tail", + sum = "h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=", + version = "v1.4.8", + ) + go_repository( + name = "com_github_oklog_ulid", + build_file_proto_mode = "disable_global", + importpath = "github.com/oklog/ulid", + sum = "h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=", + version = "v1.3.1", + ) + go_repository( + name = "com_github_olekukonko_tablewriter", + build_file_proto_mode = "disable_global", + importpath = "github.com/olekukonko/tablewriter", + sum = "h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=", + version = "v0.0.5", + ) + go_repository( + name = "com_github_oneofone_xxhash", + build_file_proto_mode = "disable_global", + importpath = "github.com/OneOfOne/xxhash", + sum = "h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=", + version = "v1.2.2", + ) + go_repository( + name = "com_github_onsi_ginkgo", + build_file_proto_mode = "disable_global", + importpath = "github.com/onsi/ginkgo", + sum = "h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=", + version = "v1.16.5", + ) + go_repository( + name = "com_github_onsi_ginkgo_v2", + build_file_proto_mode = "disable_global", + importpath = "github.com/onsi/ginkgo/v2", + sum = "h1:CcuG/HvWNkkaqCUpJifQY8z7qEMBJya6aLPx6ftGyjQ=", + version = "v2.0.0", + ) + go_repository( + name = "com_github_onsi_gomega", + build_file_proto_mode = "disable_global", + importpath = "github.com/onsi/gomega", + sum = "h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=", + version = "v1.18.1", + ) + go_repository( + name = "com_github_opentracing_basictracer_go", + build_file_proto_mode = "disable_global", + importpath = "github.com/opentracing/basictracer-go", + sum = "h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7lZWlQw5UXuoo=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_opentracing_opentracing_go", + build_file_proto_mode = "disable_global", + importpath = "github.com/opentracing/opentracing-go", + sum = "h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=", + version = "v1.2.0", + ) + go_repository( + name = "com_github_pascaldekloe_goe", + build_file_proto_mode = "disable_global", + importpath = "github.com/pascaldekloe/goe", + sum = "h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs=", + version = "v0.0.0-20180627143212-57f6aae5913c", + ) + go_repository( + name = "com_github_pborman_getopt", + build_file_proto_mode = "disable_global", + importpath = "github.com/pborman/getopt", + sum = "h1:7822vZ646Atgxkp3tqrSufChvAAYgIy+iFEGpQntwlI=", + version = "v0.0.0-20180729010549-6fdd0a2c7117", + ) + go_repository( + name = "com_github_pelletier_go_toml", + build_file_proto_mode = "disable_global", + importpath = "github.com/pelletier/go-toml", + sum = "h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=", + version = "v1.2.0", + ) + go_repository( + name = "com_github_phayes_freeport", + build_file_proto_mode = "disable_global", + importpath = "github.com/phayes/freeport", + sum = "h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc=", + version = "v0.0.0-20180830031419-95f893ade6f2", + ) + go_repository( + name = "com_github_pierrec_lz4", + build_file_proto_mode = "disable_global", + importpath = "github.com/pierrec/lz4", + sum = "h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM=", + version = "v2.6.1+incompatible", + ) + go_repository( + name = "com_github_pingcap_badger", + build_file_proto_mode = "disable_global", + importpath = "github.com/pingcap/badger", + sum = "h1:MKVFZuqFvAMiDtv3AbihOQ6rY5IE8LWflI1BuZ/hF0Y=", + version = "v1.5.1-0.20220314162537-ab58fbf40580", + ) + go_repository( + name = "com_github_pingcap_check", + build_file_proto_mode = "disable_global", + importpath = "github.com/pingcap/check", + sum = "h1:HVl5539r48eA+uDuX/ziBmQCxzT1pGrzWbKuXT46Bq0=", + version = "v0.0.0-20211026125417-57bd13f7b5f0", + ) + go_repository( + name = "com_github_pingcap_errors", + build_file_proto_mode = "disable_global", + importpath = "github.com/pingcap/errors", + sum = "h1:xpW9bvK+HuuTmyFqUwr+jcCvpVkK7sumiz+ko5H9eq4=", + version = "v0.11.5-0.20211224045212-9687c2b0f87c", + ) + go_repository( + name = "com_github_pingcap_failpoint", + build_file_proto_mode = "disable_global", + importpath = "github.com/pingcap/failpoint", + sum = "h1:kJolJWbyadVeL8RKBlqmXQR7FRKPsIeU85TUYyhbhiQ=", + version = "v0.0.0-20220423142525-ae43b7f4e5c3", + ) + go_repository( + name = "com_github_pingcap_fn", + build_file_proto_mode = "disable_global", + importpath = "github.com/pingcap/fn", + sum = "h1:Pe2LbxRmbTfAoKJ65bZLmhahmvHm7n9DUxGRQT00208=", + version = "v0.0.0-20200306044125-d5540d389059", + ) + go_repository( + name = "com_github_pingcap_goleveldb", + build_file_proto_mode = "disable_global", + importpath = "github.com/pingcap/goleveldb", + sum = "h1:surzm05a8C9dN8dIUmo4Be2+pMRb6f55i+UIYrluu2E=", + version = "v0.0.0-20191226122134-f82aafb29989", + ) + go_repository( + name = "com_github_pingcap_kvproto", + build_file_proto_mode = "disable_global", + importpath = "github.com/pingcap/kvproto", + sum = "h1:dsMpneacHyuVslSVndgUfJKrXFNG7VPdXip2ulG6glo=", + version = "v0.0.0-20220517085838-12e2f5a9d167", + ) + go_repository( + name = "com_github_pingcap_log", + build_file_proto_mode = "disable_global", + importpath = "github.com/pingcap/log", + sum = "h1:ELiPxACz7vdo1qAvvaWJg1NrYFoY6gqAh/+Uo6aXdD8=", + version = "v1.1.0", + ) + go_repository( + name = "com_github_pingcap_sysutil", + build_file_proto_mode = "disable_global", + importpath = "github.com/pingcap/sysutil", + sum = "h1:HYbcxtnkN3s5tqrZ/z3eJS4j3Db8wMphEm1q10lY/TM=", + version = "v0.0.0-20220114020952-ea68d2dbf5b4", + ) + go_repository( + name = "com_github_pingcap_tipb", + build_file_proto_mode = "disable_global", + importpath = "github.com/pingcap/tipb", + sum = "h1:L4nZwfYSrIsWPAZR8zMwHaNQJy0Rjy3Od6Smj5mlOms=", + version = "v0.0.0-20220602075447-4847c5d68e73", + ) + go_repository( + name = "com_github_pkg_browser", + build_file_proto_mode = "disable_global", + importpath = "github.com/pkg/browser", + sum = "h1:49lOXmGaUpV9Fz3gd7TFZY106KVlPVa5jcYD1gaQf98=", + version = "v0.0.0-20180916011732-0a3d74bf9ce4", + ) + go_repository( + name = "com_github_pkg_errors", + build_file_proto_mode = "disable_global", + importpath = "github.com/pkg/errors", + sum = "h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=", + version = "v0.9.1", + ) + go_repository( + name = "com_github_pkg_profile", + build_file_proto_mode = "disable_global", + importpath = "github.com/pkg/profile", + sum = "h1:F++O52m40owAmADcojzM+9gyjmMOY/T4oYJkgFDH8RE=", + version = "v1.2.1", + ) + go_repository( + name = "com_github_pmezard_go_difflib", + build_file_proto_mode = "disable_global", + importpath = "github.com/pmezard/go-difflib", + sum = "h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_posener_complete", + build_file_proto_mode = "disable_global", + importpath = "github.com/posener/complete", + sum = "h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w=", + version = "v1.1.1", + ) + go_repository( + name = "com_github_power_devops_perfstat", + build_file_proto_mode = "disable_global", + importpath = "github.com/power-devops/perfstat", + sum = "h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=", + version = "v0.0.0-20210106213030-5aafc221ea8c", + ) + go_repository( + name = "com_github_prometheus_client_golang", + build_file_proto_mode = "disable_global", + importpath = "github.com/prometheus/client_golang", + sum = "h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34=", + version = "v1.12.2", + ) + go_repository( + name = "com_github_prometheus_client_model", + build_file_proto_mode = "disable_global", + importpath = "github.com/prometheus/client_model", + sum = "h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=", + version = "v0.2.0", + ) + go_repository( + name = "com_github_prometheus_common", + build_file_proto_mode = "disable_global", + importpath = "github.com/prometheus/common", + sum = "h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4=", + version = "v0.32.1", + ) + go_repository( + name = "com_github_prometheus_procfs", + build_file_proto_mode = "disable_global", + importpath = "github.com/prometheus/procfs", + sum = "h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU=", + version = "v0.7.3", + ) + go_repository( + name = "com_github_prometheus_tsdb", + build_file_proto_mode = "disable_global", + importpath = "github.com/prometheus/tsdb", + sum = "h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA=", + version = "v0.7.1", + ) + go_repository( + name = "com_github_rcrowley_go_metrics", + build_file_proto_mode = "disable_global", + importpath = "github.com/rcrowley/go-metrics", + sum = "h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM=", + version = "v0.0.0-20201227073835-cf1acfcdf475", + ) + go_repository( + name = "com_github_remyoudompheng_bigfft", + build_file_proto_mode = "disable_global", + importpath = "github.com/remyoudompheng/bigfft", + sum = "h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk=", + version = "v0.0.0-20200410134404-eec4a21b6bb0", + ) + go_repository( + name = "com_github_rivo_uniseg", + build_file_proto_mode = "disable_global", + importpath = "github.com/rivo/uniseg", + sum = "h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=", + version = "v0.2.0", + ) + go_repository( + name = "com_github_rogpeppe_fastuuid", + build_file_proto_mode = "disable_global", + importpath = "github.com/rogpeppe/fastuuid", + sum = "h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s=", + version = "v1.2.0", + ) + go_repository( + name = "com_github_rogpeppe_go_internal", + build_file_proto_mode = "disable_global", + importpath = "github.com/rogpeppe/go-internal", + sum = "h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=", + version = "v1.6.1", + ) + go_repository( + name = "com_github_russross_blackfriday", + build_file_proto_mode = "disable_global", + importpath = "github.com/russross/blackfriday", + sum = "h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=", + version = "v1.5.2", + ) + go_repository( + name = "com_github_russross_blackfriday_v2", + build_file_proto_mode = "disable_global", + importpath = "github.com/russross/blackfriday/v2", + sum = "h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=", + version = "v2.1.0", + ) + go_repository( + name = "com_github_ryanuber_columnize", + build_file_proto_mode = "disable_global", + importpath = "github.com/ryanuber/columnize", + sum = "h1:j1Wcmh8OrK4Q7GXY+V7SVSY8nUWQxHW5TkBe7YUl+2s=", + version = "v2.1.0+incompatible", + ) + go_repository( + name = "com_github_sclevine_agouti", + build_file_proto_mode = "disable_global", + importpath = "github.com/sclevine/agouti", + sum = "h1:8IBJS6PWz3uTlMP3YBIR5f+KAldcGuOeFkFbUWfBgK4=", + version = "v3.0.0+incompatible", + ) + go_repository( + name = "com_github_sean_seed", + build_file_proto_mode = "disable_global", + importpath = "github.com/sean-/seed", + sum = "h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=", + version = "v0.0.0-20170313163322-e2103e2c3529", + ) + go_repository( + name = "com_github_sergi_go_diff", + build_file_proto_mode = "disable_global", + importpath = "github.com/sergi/go-diff", + sum = "h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=", + version = "v1.1.0", + ) + go_repository( + name = "com_github_shirou_gopsutil_v3", + build_file_proto_mode = "disable_global", + importpath = "github.com/shirou/gopsutil/v3", + sum = "h1:VoGxEW2hpmz0Vt3wUvHIl9fquzYLNpVpgNNB7pGJimA=", + version = "v3.21.12", + ) + go_repository( + name = "com_github_shopify_goreferrer", + build_file_proto_mode = "disable_global", + importpath = "github.com/Shopify/goreferrer", + sum = "h1:WDC6ySpJzbxGWFh4aMxFFC28wwGp5pEuoTtvA4q/qQ4=", + version = "v0.0.0-20181106222321-ec9c9a553398", + ) + go_repository( + name = "com_github_shopify_sarama", + build_file_proto_mode = "disable_global", + importpath = "github.com/Shopify/sarama", + sum = "h1:ARid8o8oieau9XrHI55f/L3EoRAhm9px6sonbD7yuUE=", + version = "v1.29.0", + ) + go_repository( + name = "com_github_shopify_toxiproxy", + build_file_proto_mode = "disable_global", + importpath = "github.com/Shopify/toxiproxy", + sum = "h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc=", + version = "v2.1.4+incompatible", + ) + go_repository( + name = "com_github_shurcool_httpfs", + build_file_proto_mode = "disable_global", + importpath = "github.com/shurcooL/httpfs", + sum = "h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk=", + version = "v0.0.0-20190707220628-8d4bc4ba7749", + ) + go_repository( + name = "com_github_shurcool_httpgzip", + build_file_proto_mode = "disable_global", + importpath = "github.com/shurcooL/httpgzip", + sum = "h1:mj/nMDAwTBiaCqMEs4cYCqF7pO6Np7vhy1D1wcQGz+E=", + version = "v0.0.0-20190720172056-320755c1c1b0", + ) + go_repository( + name = "com_github_shurcool_sanitized_anchor_name", + build_file_proto_mode = "disable_global", + importpath = "github.com/shurcooL/sanitized_anchor_name", + sum = "h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_shurcool_vfsgen", + build_file_proto_mode = "disable_global", + importpath = "github.com/shurcooL/vfsgen", + sum = "h1:pXY9qYc/MP5zdvqWEUH6SjNiu7VhSjuVFTFiTcphaLU=", + version = "v0.0.0-20200824052919-0d455de96546", + ) + go_repository( + name = "com_github_sirupsen_logrus", + build_file_proto_mode = "disable_global", + importpath = "github.com/sirupsen/logrus", + sum = "h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=", + version = "v1.8.1", + ) + go_repository( + name = "com_github_smartystreets_assertions", + build_file_proto_mode = "disable_global", + importpath = "github.com/smartystreets/assertions", + sum = "h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=", + version = "v0.0.0-20180927180507-b2de0cb4f26d", + ) + go_repository( + name = "com_github_smartystreets_goconvey", + build_file_proto_mode = "disable_global", + importpath = "github.com/smartystreets/goconvey", + sum = "h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=", + version = "v1.6.4", + ) + go_repository( + name = "com_github_soheilhy_cmux", + build_file_proto_mode = "disable_global", + importpath = "github.com/soheilhy/cmux", + sum = "h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js=", + version = "v0.1.5", + ) + go_repository( + name = "com_github_spaolacci_murmur3", + build_file_proto_mode = "disable_global", + importpath = "github.com/spaolacci/murmur3", + sum = "h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ=", + version = "v0.0.0-20180118202830-f09979ecbc72", + ) + go_repository( + name = "com_github_spf13_afero", + build_file_proto_mode = "disable_global", + importpath = "github.com/spf13/afero", + sum = "h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=", + version = "v1.2.2", + ) + go_repository( + name = "com_github_spf13_cast", + build_file_proto_mode = "disable_global", + importpath = "github.com/spf13/cast", + sum = "h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=", + version = "v1.3.0", + ) + go_repository( + name = "com_github_spf13_cobra", + build_file_proto_mode = "disable_global", + importpath = "github.com/spf13/cobra", + sum = "h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q=", + version = "v1.4.0", + ) + go_repository( + name = "com_github_spf13_jwalterweatherman", + build_file_proto_mode = "disable_global", + importpath = "github.com/spf13/jwalterweatherman", + sum = "h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_spf13_pflag", + build_file_proto_mode = "disable_global", + importpath = "github.com/spf13/pflag", + sum = "h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=", + version = "v1.0.5", + ) + go_repository( + name = "com_github_spf13_viper", + build_file_proto_mode = "disable_global", + importpath = "github.com/spf13/viper", + sum = "h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM=", + version = "v1.7.0", + ) + go_repository( + name = "com_github_stathat_consistent", + build_file_proto_mode = "disable", + importpath = "github.com/stathat/consistent", + sum = "h1:ZFJ1QTRn8npNBKW065raSZ8xfOqhpb8vLOkfp4CcL/U=", + version = "v1.0.0", + ) + + go_repository( + name = "com_github_stretchr_objx", + build_file_proto_mode = "disable_global", + importpath = "github.com/stretchr/objx", + sum = "h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=", + version = "v0.1.1", + ) + go_repository( + name = "com_github_stretchr_testify", + build_file_proto_mode = "disable_global", + importpath = "github.com/stretchr/testify", + sum = "h1:rh3VYpfvzXRbJ90ymx1yfhGl/wq8ac2m/cUbao61kwY=", + version = "v1.7.2-0.20220504104629-106ec21d14df", + ) + go_repository( + name = "com_github_subosito_gotenv", + build_file_proto_mode = "disable_global", + importpath = "github.com/subosito/gotenv", + sum = "h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=", + version = "v1.2.0", + ) + go_repository( + name = "com_github_tiancaiamao_appdash", + build_file_proto_mode = "disable_global", + importpath = "github.com/tiancaiamao/appdash", + sum = "h1:mbAskLJ0oJfDRtkanvQPiooDH8HvJ2FBh+iKT/OmiQQ=", + version = "v0.0.0-20181126055449-889f96f722a2", + ) + go_repository( + name = "com_github_tikv_client_go_v2", + build_file_proto_mode = "disable_global", + importpath = "github.com/tikv/client-go/v2", + sum = "h1:N5ivsNkDQDgimY0ZVqMnWqXjEnxy5uFChoB4wPIKpPI=", + version = "v2.0.1-0.20220613112734-be31f33ba03b", + ) + go_repository( + name = "com_github_tikv_pd_client", + build_file_proto_mode = "disable_global", + importpath = "github.com/tikv/pd/client", + sum = "h1:jxgmKOscXSjaFEKQGRyY5qOpK8hLqxs2irb/uDJMtwk=", + version = "v0.0.0-20220307081149-841fa61e9710", + ) + go_repository( + name = "com_github_tklauser_go_sysconf", + build_file_proto_mode = "disable_global", + importpath = "github.com/tklauser/go-sysconf", + sum = "h1:JeUVdAOWhhxVcU6Eqr/ATFHgXk/mmiItdKeJPev3vTo=", + version = "v0.3.9", + ) + go_repository( + name = "com_github_tklauser_numcpus", + build_file_proto_mode = "disable_global", + importpath = "github.com/tklauser/numcpus", + sum = "h1:ILuRUQBtssgnxw0XXIjKUC56fgnOrFoQQ/4+DeU2biQ=", + version = "v0.3.0", + ) + go_repository( + name = "com_github_tmc_grpc_websocket_proxy", + build_file_proto_mode = "disable_global", + importpath = "github.com/tmc/grpc-websocket-proxy", + sum = "h1:uruHq4dN7GR16kFc5fp3d1RIYzJW5onx8Ybykw2YQFA=", + version = "v0.0.0-20201229170055-e5319fda7802", + ) + go_repository( + name = "com_github_twmb_murmur3", + build_file_proto_mode = "disable_global", + importpath = "github.com/twmb/murmur3", + sum = "h1:D83U0XYKcHRYwYIpBKf3Pks91Z0Byda/9SJ8B6EMRcA=", + version = "v1.1.3", + ) + go_repository( + name = "com_github_uber_jaeger_client_go", + build_file_proto_mode = "disable_global", + importpath = "github.com/uber/jaeger-client-go", + sum = "h1:NHcubEkVbahf9t3p75TOCR83gdUHXjRJvjoBh1yACsM=", + version = "v2.22.1+incompatible", + ) + go_repository( + name = "com_github_uber_jaeger_lib", + build_file_proto_mode = "disable_global", + importpath = "github.com/uber/jaeger-lib", + sum = "h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=", + version = "v2.4.1+incompatible", + ) + go_repository( + name = "com_github_ugorji_go", + build_file_proto_mode = "disable_global", + importpath = "github.com/ugorji/go", + sum = "h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw=", + version = "v1.1.4", + ) + go_repository( + name = "com_github_ugorji_go_codec", + build_file_proto_mode = "disable_global", + importpath = "github.com/ugorji/go/codec", + sum = "h1:3SVOIvH7Ae1KRYyQWRjXWJEA9sS/c/pjvH++55Gr648=", + version = "v0.0.0-20181204163529-d75b2dcb6bc8", + ) + go_repository( + name = "com_github_urfave_negroni", + build_file_proto_mode = "disable_global", + importpath = "github.com/urfave/negroni", + sum = "h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_valyala_bytebufferpool", + build_file_proto_mode = "disable_global", + importpath = "github.com/valyala/bytebufferpool", + sum = "h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_valyala_fasthttp", + build_file_proto_mode = "disable_global", + importpath = "github.com/valyala/fasthttp", + sum = "h1:uWF8lgKmeaIewWVPwi4GRq2P6+R46IgYZdxWtM+GtEY=", + version = "v1.6.0", + ) + go_repository( + name = "com_github_valyala_fasttemplate", + build_file_proto_mode = "disable_global", + importpath = "github.com/valyala/fasttemplate", + sum = "h1:tY9CJiPnMXf1ERmG2EyK7gNUd+c6RKGD0IfU8WdUSz8=", + version = "v1.0.1", + ) + go_repository( + name = "com_github_valyala_tcplisten", + build_file_proto_mode = "disable_global", + importpath = "github.com/valyala/tcplisten", + sum = "h1:0R4NLDRDZX6JcmhJgXi5E4b8Wg84ihbmUKp/GvSPEzc=", + version = "v0.0.0-20161114210144-ceec8f93295a", + ) + go_repository( + name = "com_github_vividcortex_ewma", + build_file_proto_mode = "disable_global", + importpath = "github.com/VividCortex/ewma", + sum = "h1:MnEK4VOv6n0RSY4vtRe3h11qjxL3+t0B8yOL8iMXdcM=", + version = "v1.1.1", + ) + go_repository( + name = "com_github_wangjohn_quickselect", + build_file_proto_mode = "disable_global", + importpath = "github.com/wangjohn/quickselect", + sum = "h1:9DDCDwOyEy/gId+IEMrFHLuQ5R/WV0KNxWLler8X2OY=", + version = "v0.0.0-20161129230411-ed8402a42d5f", + ) + go_repository( + name = "com_github_xdg_scram", + build_file_proto_mode = "disable_global", + importpath = "github.com/xdg/scram", + sum = "h1:nTadYh2Fs4BK2xdldEa2g5bbaZp0/+1nJMMPtPxS/to=", + version = "v1.0.3", + ) + go_repository( + name = "com_github_xdg_stringprep", + build_file_proto_mode = "disable_global", + importpath = "github.com/xdg/stringprep", + sum = "h1:cmL5Enob4W83ti/ZHuZLuKD/xqJfus4fVPwE+/BDm+4=", + version = "v1.0.3", + ) + go_repository( + name = "com_github_xeipuuv_gojsonpointer", + build_file_proto_mode = "disable_global", + importpath = "github.com/xeipuuv/gojsonpointer", + sum = "h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c=", + version = "v0.0.0-20180127040702-4e3ac2762d5f", + ) + go_repository( + name = "com_github_xeipuuv_gojsonreference", + build_file_proto_mode = "disable_global", + importpath = "github.com/xeipuuv/gojsonreference", + sum = "h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=", + version = "v0.0.0-20180127040603-bd5ef7bd5415", + ) + go_repository( + name = "com_github_xeipuuv_gojsonschema", + build_file_proto_mode = "disable_global", + importpath = "github.com/xeipuuv/gojsonschema", + sum = "h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=", + version = "v1.2.0", + ) + go_repository( + name = "com_github_xiang90_probing", + build_file_proto_mode = "disable_global", + importpath = "github.com/xiang90/probing", + sum = "h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=", + version = "v0.0.0-20190116061207-43a291ad63a2", + ) + go_repository( + name = "com_github_xitongsys_parquet_go", + build_file_proto_mode = "disable_global", + importpath = "github.com/xitongsys/parquet-go", + sum = "h1:tBbuFCtyJNKT+BFAv6qjvTFpVdy97IYNaBwGUXifIUs=", + version = "v1.5.5-0.20201110004701-b09c49d6d457", + ) + go_repository( + name = "com_github_xitongsys_parquet_go_source", + build_file_proto_mode = "disable_global", + importpath = "github.com/xitongsys/parquet-go-source", + sum = "h1:a742S4V5A15F93smuVxA60LQWsrCnN8bKeWDBARU1/k=", + version = "v0.0.0-20200817004010-026bad9b25d0", + ) + go_repository( + name = "com_github_xordataexchange_crypt", + build_file_proto_mode = "disable_global", + importpath = "github.com/xordataexchange/crypt", + sum = "h1:ESFSdwYZvkeru3RtdrYueztKhOBCSAAzS4Gf+k0tEow=", + version = "v0.0.3-0.20170626215501-b2862e3d0a77", + ) + go_repository( + name = "com_github_yalp_jsonpath", + build_file_proto_mode = "disable_global", + importpath = "github.com/yalp/jsonpath", + sum = "h1:6fRhSjgLCkTD3JnJxvaJ4Sj+TYblw757bqYgZaOq5ZY=", + version = "v0.0.0-20180802001716-5cc68e5049a0", + ) + go_repository( + name = "com_github_yudai_gojsondiff", + build_file_proto_mode = "disable_global", + importpath = "github.com/yudai/gojsondiff", + sum = "h1:27cbfqXLVEJ1o8I6v3y9lg8Ydm53EKqHXAOMxEGlCOA=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_yudai_golcs", + build_file_proto_mode = "disable_global", + importpath = "github.com/yudai/golcs", + sum = "h1:BHyfKlQyqbsFN5p3IfnEUduWvb9is428/nNb5L3U01M=", + version = "v0.0.0-20170316035057-ecda9a501e82", + ) + go_repository( + name = "com_github_yudai_pp", + build_file_proto_mode = "disable_global", + importpath = "github.com/yudai/pp", + sum = "h1:Q4//iY4pNF6yPLZIigmvcl7k/bPgrcTPIFIcmawg5bI=", + version = "v2.0.1+incompatible", + ) + go_repository( + name = "com_github_yuin_goldmark", + build_file_proto_mode = "disable_global", + importpath = "github.com/yuin/goldmark", + sum = "h1:/vn0k+RBvwlxEmP5E7SZMqNxPhfMVFEJiykr15/0XKM=", + version = "v1.4.1", + ) + go_repository( + name = "com_github_yusufpapurcu_wmi", + build_file_proto_mode = "disable_global", + importpath = "github.com/yusufpapurcu/wmi", + sum = "h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=", + version = "v1.2.2", + ) + go_repository( + name = "com_google_cloud_go", + build_file_proto_mode = "disable_global", + importpath = "cloud.google.com/go", + sum = "h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y=", + version = "v0.100.2", + ) + go_repository( + name = "com_google_cloud_go_bigquery", + build_file_proto_mode = "disable_global", + importpath = "cloud.google.com/go/bigquery", + sum = "h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA=", + version = "v1.8.0", + ) + go_repository( + name = "com_google_cloud_go_compute", + build_file_proto_mode = "disable_global", + importpath = "cloud.google.com/go/compute", + sum = "h1:EKki8sSdvDU0OO9mAXGwPXOTOgPz2l08R0/IutDH11I=", + version = "v1.2.0", + ) + go_repository( + name = "com_google_cloud_go_datastore", + build_file_proto_mode = "disable_global", + importpath = "cloud.google.com/go/datastore", + sum = "h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ=", + version = "v1.1.0", + ) + go_repository( + name = "com_google_cloud_go_firestore", + build_file_proto_mode = "disable_global", + importpath = "cloud.google.com/go/firestore", + sum = "h1:9x7Bx0A9R5/M9jibeJeZWqjeVEIxYW9fZYqB9a70/bY=", + version = "v1.1.0", + ) + go_repository( + name = "com_google_cloud_go_iam", + build_file_proto_mode = "disable_global", + importpath = "cloud.google.com/go/iam", + sum = "h1:4CapQyNFjiksks1/x7jsvsygFPhihslYk5GptIrlX68=", + version = "v0.1.1", + ) + go_repository( + name = "com_google_cloud_go_pubsub", + build_file_proto_mode = "disable_global", + importpath = "cloud.google.com/go/pubsub", + sum = "h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU=", + version = "v1.3.1", + ) + go_repository( + name = "com_google_cloud_go_storage", + build_file_proto_mode = "disable_global", + importpath = "cloud.google.com/go/storage", + sum = "h1:HwnT2u2D309SFDHQII6m18HlrCi3jAXhUMTLOWXYH14=", + version = "v1.21.0", + ) + go_repository( + name = "com_shuralyov_dmitri_gpu_mtl", + build_file_proto_mode = "disable_global", + importpath = "dmitri.shuralyov.com/gpu/mtl", + sum = "h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY=", + version = "v0.0.0-20190408044501-666a987793e9", + ) + go_repository( + name = "com_sourcegraph_sourcegraph_appdash", + build_file_proto_mode = "disable_global", + importpath = "sourcegraph.com/sourcegraph/appdash", + sum = "h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM=", + version = "v0.0.0-20190731080439-ebfcffb1b5c0", + ) + go_repository( + name = "com_sourcegraph_sourcegraph_appdash_data", + build_file_proto_mode = "disable_global", + importpath = "sourcegraph.com/sourcegraph/appdash-data", + sum = "h1:e1sMhtVq9AfcEy8AXNb8eSg6gbzfdpYhoNqnPJa+GzI=", + version = "v0.0.0-20151005221446-73f23eafcf67", + ) + go_repository( + name = "com_stathat_c_consistent", + build_file_proto_mode = "disable", + importpath = "stathat.com/c/consistent", + sum = "h1:ezyc51EGcRPJUxfHGSgJjWzJdj3NiMU9pNfLNGiXV0c=", + version = "v1.0.0", + ) + + go_repository( + name = "in_gopkg_alecthomas_kingpin_v2", + build_file_proto_mode = "disable_global", + importpath = "gopkg.in/alecthomas/kingpin.v2", + sum = "h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=", + version = "v2.2.6", + ) + go_repository( + name = "in_gopkg_check_v1", + build_file_proto_mode = "disable_global", + importpath = "gopkg.in/check.v1", + sum = "h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=", + version = "v1.0.0-20201130134442-10cb98267c6c", + ) + go_repository( + name = "in_gopkg_errgo_v2", + build_file_proto_mode = "disable_global", + importpath = "gopkg.in/errgo.v2", + sum = "h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8=", + version = "v2.1.0", + ) + go_repository( + name = "in_gopkg_fsnotify_v1", + build_file_proto_mode = "disable_global", + importpath = "gopkg.in/fsnotify.v1", + sum = "h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=", + version = "v1.4.7", + ) + go_repository( + name = "in_gopkg_go_playground_assert_v1", + build_file_proto_mode = "disable_global", + importpath = "gopkg.in/go-playground/assert.v1", + sum = "h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM=", + version = "v1.2.1", + ) + go_repository( + name = "in_gopkg_go_playground_validator_v8", + build_file_proto_mode = "disable_global", + importpath = "gopkg.in/go-playground/validator.v8", + sum = "h1:lFB4DoMU6B626w8ny76MV7VX6W2VHct2GVOI3xgiMrQ=", + version = "v8.18.2", + ) + go_repository( + name = "in_gopkg_ini_v1", + build_file_proto_mode = "disable_global", + importpath = "gopkg.in/ini.v1", + sum = "h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI=", + version = "v1.66.2", + ) + go_repository( + name = "in_gopkg_jcmturner_aescts_v1", + build_file_proto_mode = "disable_global", + importpath = "gopkg.in/jcmturner/aescts.v1", + sum = "h1:cVVZBK2b1zY26haWB4vbBiZrfFQnfbTVrE3xZq6hrEw=", + version = "v1.0.1", + ) + go_repository( + name = "in_gopkg_jcmturner_dnsutils_v1", + build_file_proto_mode = "disable_global", + importpath = "gopkg.in/jcmturner/dnsutils.v1", + sum = "h1:cIuC1OLRGZrld+16ZJvvZxVJeKPsvd5eUIvxfoN5hSM=", + version = "v1.0.1", + ) + go_repository( + name = "in_gopkg_jcmturner_goidentity_v3", + build_file_proto_mode = "disable_global", + importpath = "gopkg.in/jcmturner/goidentity.v3", + sum = "h1:1duIyWiTaYvVx3YX2CYtpJbUFd7/UuPYCfgXtQ3VTbI=", + version = "v3.0.0", + ) + go_repository( + name = "in_gopkg_jcmturner_gokrb5_v7", + build_file_proto_mode = "disable_global", + importpath = "gopkg.in/jcmturner/gokrb5.v7", + sum = "h1:0709Jtq/6QXEuWRfAm260XqlpcwL1vxtO1tUE2qK8Z4=", + version = "v7.3.0", + ) + go_repository( + name = "in_gopkg_jcmturner_rpc_v1", + build_file_proto_mode = "disable_global", + importpath = "gopkg.in/jcmturner/rpc.v1", + sum = "h1:QHIUxTX1ISuAv9dD2wJ9HWQVuWDX/Zc0PfeC2tjc4rU=", + version = "v1.1.0", + ) + go_repository( + name = "in_gopkg_mgo_v2", + build_file_proto_mode = "disable_global", + importpath = "gopkg.in/mgo.v2", + sum = "h1:xcEWjVhvbDy+nHP67nPDDpbYrY+ILlfndk4bRioVHaU=", + version = "v2.0.0-20180705113604-9856a29383ce", + ) + go_repository( + name = "in_gopkg_natefinch_lumberjack_v2", + build_file_proto_mode = "disable_global", + importpath = "gopkg.in/natefinch/lumberjack.v2", + sum = "h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=", + version = "v2.0.0", + ) + go_repository( + name = "in_gopkg_resty_v1", + build_file_proto_mode = "disable_global", + importpath = "gopkg.in/resty.v1", + sum = "h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI=", + version = "v1.12.0", + ) + go_repository( + name = "in_gopkg_tomb_v1", + build_file_proto_mode = "disable_global", + importpath = "gopkg.in/tomb.v1", + sum = "h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=", + version = "v1.0.0-20141024135613-dd632973f1e7", + ) + go_repository( + name = "in_gopkg_yaml_v2", + build_file_proto_mode = "disable_global", + importpath = "gopkg.in/yaml.v2", + sum = "h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=", + version = "v2.4.0", + ) + go_repository( + name = "in_gopkg_yaml_v3", + build_file_proto_mode = "disable_global", + importpath = "gopkg.in/yaml.v3", + sum = "h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=", + version = "v3.0.0-20210107192922-496545a6307b", + ) + go_repository( + name = "io_etcd_go_bbolt", + build_file_proto_mode = "disable_global", + importpath = "go.etcd.io/bbolt", + sum = "h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU=", + version = "v1.3.6", + ) + go_repository( + name = "io_etcd_go_etcd_api_v3", + build_file_proto_mode = "disable", + importpath = "go.etcd.io/etcd/api/v3", + patch_args = ["-p2"], + patches = [ + "//build/patches:io_etcd_go_etcd_api_v3.patch", + ], + sum = "h1:tXok5yLlKyuQ/SXSjtqHc4uzNaMqZi2XsoSPr/LlJXI=", + version = "v3.5.2", + ) + go_repository( + name = "io_etcd_go_etcd_client_pkg_v3", + build_file_proto_mode = "disable_global", + importpath = "go.etcd.io/etcd/client/pkg/v3", + sum = "h1:4hzqQ6hIb3blLyQ8usCU4h3NghkqcsohEQ3o3VetYxE=", + version = "v3.5.2", + ) + go_repository( + name = "io_etcd_go_etcd_client_v2", + build_file_proto_mode = "disable_global", + importpath = "go.etcd.io/etcd/client/v2", + sum = "h1:ymrVwTkefuqA/rPkSW7/B4ApijbPVefRumkY+stNfS0=", + version = "v2.305.2", + ) + go_repository( + name = "io_etcd_go_etcd_client_v3", + build_file_proto_mode = "disable_global", + importpath = "go.etcd.io/etcd/client/v3", + sum = "h1:WdnejrUtQC4nCxK0/dLTMqKOB+U5TP/2Ya0BJL+1otA=", + version = "v3.5.2", + ) + go_repository( + name = "io_etcd_go_etcd_etcdutl_v3", + build_file_proto_mode = "disable_global", + importpath = "go.etcd.io/etcd/etcdutl/v3", + sum = "h1:XDNv2bGD6Ylz3Gb9lIGV/IYLk1bwTvyCIi1EI4hyyqo=", + version = "v3.5.2", + ) + go_repository( + name = "io_etcd_go_etcd_pkg_v3", + build_file_proto_mode = "disable_global", + importpath = "go.etcd.io/etcd/pkg/v3", + sum = "h1:YZUojdoPhOyl5QILYnR8LTUbbNefu/sV4ma+ZMr2tto=", + version = "v3.5.2", + ) + go_repository( + name = "io_etcd_go_etcd_raft_v3", + build_file_proto_mode = "disable_global", + importpath = "go.etcd.io/etcd/raft/v3", + patch_args = ["-p1"], + patches = [ + "//build/patches:io_etcd_go_etcd_raft_v3.patch", + ], + sum = "h1:uCC37qOXqBvKqTGHGyhASsaCsnTuJugl1GvneJNwHWo=", + version = "v3.5.2", + ) + go_repository( + name = "io_etcd_go_etcd_server_v3", + build_file_proto_mode = "disable_global", + importpath = "go.etcd.io/etcd/server/v3", + sum = "h1:B6ytJvS4Fmt8nkjzS2/8POf4tuPhFMluE0lWd4dx/7U=", + version = "v3.5.2", + ) + go_repository( + name = "io_etcd_go_etcd_tests_v3", + build_file_proto_mode = "disable_global", + importpath = "go.etcd.io/etcd/tests/v3", + sum = "h1:uk7/uMGVebpBDl+roivowHt6gJ5Fnqwik3syDkoSKdo=", + version = "v3.5.2", + ) + go_repository( + name = "io_k8s_sigs_yaml", + build_file_proto_mode = "disable_global", + importpath = "sigs.k8s.io/yaml", + sum = "h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=", + version = "v1.2.0", + ) + go_repository( + name = "io_opencensus_go", + build_file_proto_mode = "disable_global", + importpath = "go.opencensus.io", + sum = "h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M=", + version = "v0.23.0", + ) + go_repository( + name = "io_opentelemetry_go_contrib", + build_file_proto_mode = "disable_global", + importpath = "go.opentelemetry.io/contrib", + sum = "h1:ubFQUn0VCZ0gPwIoJfBJVpeBlyRMxu8Mm/huKWYd9p0=", + version = "v0.20.0", + ) + go_repository( + name = "io_opentelemetry_go_contrib_instrumentation_google_golang_org_grpc_otelgrpc", + build_file_proto_mode = "disable_global", + importpath = "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc", + sum = "h1:sO4WKdPAudZGKPcpZT4MJn6JaDmpyLrMPDGGyA1SttE=", + version = "v0.20.0", + ) + go_repository( + name = "io_opentelemetry_go_otel", + build_file_proto_mode = "disable_global", + importpath = "go.opentelemetry.io/otel", + sum = "h1:eaP0Fqu7SXHwvjiqDq83zImeehOHX8doTvU9AwXON8g=", + version = "v0.20.0", + ) + go_repository( + name = "io_opentelemetry_go_otel_exporters_otlp", + build_file_proto_mode = "disable_global", + importpath = "go.opentelemetry.io/otel/exporters/otlp", + sum = "h1:PTNgq9MRmQqqJY0REVbZFvwkYOA85vbdQU/nVfxDyqg=", + version = "v0.20.0", + ) + go_repository( + name = "io_opentelemetry_go_otel_metric", + build_file_proto_mode = "disable_global", + importpath = "go.opentelemetry.io/otel/metric", + sum = "h1:4kzhXFP+btKm4jwxpjIqjs41A7MakRFUS86bqLHTIw8=", + version = "v0.20.0", + ) + go_repository( + name = "io_opentelemetry_go_otel_oteltest", + build_file_proto_mode = "disable_global", + importpath = "go.opentelemetry.io/otel/oteltest", + sum = "h1:HiITxCawalo5vQzdHfKeZurV8x7ljcqAgiWzF6Vaeaw=", + version = "v0.20.0", + ) + go_repository( + name = "io_opentelemetry_go_otel_sdk", + build_file_proto_mode = "disable_global", + importpath = "go.opentelemetry.io/otel/sdk", + sum = "h1:JsxtGXd06J8jrnya7fdI/U/MR6yXA5DtbZy+qoHQlr8=", + version = "v0.20.0", + ) + go_repository( + name = "io_opentelemetry_go_otel_sdk_export_metric", + build_file_proto_mode = "disable_global", + importpath = "go.opentelemetry.io/otel/sdk/export/metric", + sum = "h1:c5VRjxCXdQlx1HjzwGdQHzZaVI82b5EbBgOu2ljD92g=", + version = "v0.20.0", + ) + go_repository( + name = "io_opentelemetry_go_otel_sdk_metric", + build_file_proto_mode = "disable_global", + importpath = "go.opentelemetry.io/otel/sdk/metric", + sum = "h1:7ao1wpzHRVKf0OQ7GIxiQJA6X7DLX9o14gmVon7mMK8=", + version = "v0.20.0", + ) + go_repository( + name = "io_opentelemetry_go_otel_trace", + build_file_proto_mode = "disable_global", + importpath = "go.opentelemetry.io/otel/trace", + sum = "h1:1DL6EXUdcg95gukhuRRvLDO/4X5THh/5dIV52lqtnbw=", + version = "v0.20.0", + ) + go_repository( + name = "io_opentelemetry_go_proto_otlp", + build_file_proto_mode = "disable_global", + importpath = "go.opentelemetry.io/proto/otlp", + sum = "h1:rwOQPCuKAKmwGKq2aVNnYIibI6wnV7EvzgfTCzcdGg8=", + version = "v0.7.0", + ) + go_repository( + name = "io_rsc_binaryregexp", + build_file_proto_mode = "disable_global", + importpath = "rsc.io/binaryregexp", + sum = "h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE=", + version = "v0.2.0", + ) + go_repository( + name = "io_rsc_pdf", + build_file_proto_mode = "disable_global", + importpath = "rsc.io/pdf", + sum = "h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4=", + version = "v0.1.1", + ) + go_repository( + name = "io_rsc_quote_v3", + build_file_proto_mode = "disable_global", + importpath = "rsc.io/quote/v3", + sum = "h1:9JKUTTIUgS6kzR9mK1YuGKv6Nl+DijDNIc0ghT58FaY=", + version = "v3.1.0", + ) + go_repository( + name = "io_rsc_sampler", + build_file_proto_mode = "disable_global", + importpath = "rsc.io/sampler", + sum = "h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4=", + version = "v1.3.0", + ) + go_repository( + name = "org_golang_google_api", + build_file_proto_mode = "disable_global", + importpath = "google.golang.org/api", + sum = "h1:yHW5s2SFyDapr/43kYtIQmoaaFVW4baLMLwqV4auj2A=", + version = "v0.69.0", + ) + go_repository( + name = "org_golang_google_appengine", + build_file_proto_mode = "disable_global", + importpath = "google.golang.org/appengine", + sum = "h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=", + version = "v1.6.7", + ) + go_repository( + name = "org_golang_google_genproto", + build_file_proto_mode = "disable_global", + importpath = "google.golang.org/genproto", + sum = "h1:divpuJZKgX3Qt7MFDE5v62yu0yQcQbTCD9VJp9leX58=", + version = "v0.0.0-20220216160803-4663080d8bc8", + ) + go_repository( + name = "org_golang_google_grpc", + build_file_proto_mode = "disable_global", + importpath = "google.golang.org/grpc", + sum = "h1:weqSxi/TMs1SqFRMHCtBgXRs8k3X39QIDEZ0pRcttUg=", + version = "v1.44.0", + ) + go_repository( + name = "org_golang_google_grpc_cmd_protoc_gen_go_grpc", + build_file_proto_mode = "disable_global", + importpath = "google.golang.org/grpc/cmd/protoc-gen-go-grpc", + sum = "h1:M1YKkFIboKNieVO5DLUEVzQfGwJD30Nv2jfUgzb5UcE=", + version = "v1.1.0", + ) + go_repository( + name = "org_golang_google_protobuf", + build_file_proto_mode = "disable_global", + importpath = "google.golang.org/protobuf", + sum = "h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=", + version = "v1.27.1", + ) + go_repository( + name = "org_golang_x_crypto", + build_file_proto_mode = "disable_global", + importpath = "golang.org/x/crypto", + sum = "h1:f+lwQ+GtmgoY+A2YaQxlSOnDjXcQ7ZRLWOHbC6HtRqE=", + version = "v0.0.0-20220214200702-86341886e292", + ) + go_repository( + name = "org_golang_x_exp", + build_file_proto_mode = "disable_global", + importpath = "golang.org/x/exp", + sum = "h1:rxKZ2gOnYxjfmakvUUqh9Gyb6KXfrj7JWTxORTYqb0E=", + version = "v0.0.0-20220426173459-3bcf042a4bf5", + ) + go_repository( + name = "org_golang_x_image", + build_file_proto_mode = "disable_global", + importpath = "golang.org/x/image", + sum = "h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4=", + version = "v0.0.0-20190802002840-cff245a6509b", + ) + go_repository( + name = "org_golang_x_lint", + build_file_proto_mode = "disable_global", + importpath = "golang.org/x/lint", + sum = "h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug=", + version = "v0.0.0-20210508222113-6edffad5e616", + ) + go_repository( + name = "org_golang_x_mobile", + build_file_proto_mode = "disable_global", + importpath = "golang.org/x/mobile", + sum = "h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs=", + version = "v0.0.0-20190719004257-d2bd2a29d028", + ) + go_repository( + name = "org_golang_x_mod", + build_file_proto_mode = "disable_global", + importpath = "golang.org/x/mod", + sum = "h1:LQmS1nU0twXLA96Kt7U9qtHJEbBk3z6Q0V4UXjZkpr4=", + version = "v0.6.0-dev.0.20211013180041-c96bc1413d57", + ) + go_repository( + name = "org_golang_x_net", + build_file_proto_mode = "disable_global", + importpath = "golang.org/x/net", + sum = "h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk=", + version = "v0.0.0-20220127200216-cd36cc0744dd", + ) + go_repository( + name = "org_golang_x_oauth2", + build_file_proto_mode = "disable_global", + importpath = "golang.org/x/oauth2", + sum = "h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg=", + version = "v0.0.0-20211104180415-d3ed0bb246c8", + ) + go_repository( + name = "org_golang_x_sync", + build_file_proto_mode = "disable_global", + importpath = "golang.org/x/sync", + sum = "h1:w8s32wxx3sY+OjLlv9qltkLU5yvJzxjjgiHWLjdIcw4=", + version = "v0.0.0-20220513210516-0976fa681c29", + ) + go_repository( + name = "org_golang_x_sys", + build_file_proto_mode = "disable_global", + importpath = "golang.org/x/sys", + sum = "h1:8w7RhxzTVgUzw/AH/9mUV5q0vMgy40SQRursCcfmkCw=", + version = "v0.0.0-20220408201424-a24fb2fb8a0f", + ) + go_repository( + name = "org_golang_x_term", + build_file_proto_mode = "disable_global", + importpath = "golang.org/x/term", + sum = "h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=", + version = "v0.0.0-20210927222741-03fcf44c2211", + ) + go_repository( + name = "org_golang_x_text", + build_file_proto_mode = "disable_global", + importpath = "golang.org/x/text", + sum = "h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=", + version = "v0.3.7", + ) + go_repository( + name = "org_golang_x_time", + build_file_proto_mode = "disable_global", + importpath = "golang.org/x/time", + sum = "h1:M73Iuj3xbbb9Uk1DYhzydthsj6oOd6l9bpuFcNoUvTs=", + version = "v0.0.0-20220224211638-0e9765cccd65", + ) + go_repository( + name = "org_golang_x_tools", + build_file_proto_mode = "disable_global", + importpath = "golang.org/x/tools", + sum = "h1:P1HhGGuLW4aAclzjtmJdf0mJOjVUZUzOTqkAkWL+l6w=", + version = "v0.1.8", + ) + go_repository( + name = "org_golang_x_xerrors", + build_file_proto_mode = "disable_global", + importpath = "golang.org/x/xerrors", + sum = "h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=", + version = "v0.0.0-20200804184101-5ec99f83aff1", + ) + go_repository( + name = "org_gonum_v1_gonum", + build_file_proto_mode = "disable_global", + importpath = "gonum.org/v1/gonum", + sum = "h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM=", + version = "v0.8.2", + ) + go_repository( + name = "org_gonum_v1_netlib", + build_file_proto_mode = "disable_global", + importpath = "gonum.org/v1/netlib", + sum = "h1:OE9mWmgKkjJyEmDAAtGMPjXu+YNeGvK9VTSHY6+Qihc=", + version = "v0.0.0-20190313105609-8cb42192e0e0", + ) + go_repository( + name = "org_gonum_v1_plot", + build_file_proto_mode = "disable_global", + importpath = "gonum.org/v1/plot", + sum = "h1:Qh4dB5D/WpoUUp3lSod7qgoyEHbDGPUWjIbnqdqqe1k=", + version = "v0.0.0-20190515093506-e2840ee46a6b", + ) + go_repository( + name = "org_modernc_fileutil", + build_file_proto_mode = "disable_global", + importpath = "modernc.org/fileutil", + sum = "h1:Z1AFLZwl6BO8A5NldQg/xTSjGLetp+1Ubvl4alfGx8w=", + version = "v1.0.0", + ) + go_repository( + name = "org_modernc_golex", + build_file_proto_mode = "disable_global", + importpath = "modernc.org/golex", + sum = "h1:EYKY1a3wStt0RzHaH8mdSRNg78Ub0OHxYfCRWw35YtM=", + version = "v1.0.1", + ) + go_repository( + name = "org_modernc_lex", + build_file_proto_mode = "disable_global", + importpath = "modernc.org/lex", + sum = "h1:w0dxp18i1q+aSE7GkepvwzvVWTLoCIQ2oDgTFAV2JZU=", + version = "v1.0.0", + ) + go_repository( + name = "org_modernc_lexer", + build_file_proto_mode = "disable_global", + importpath = "modernc.org/lexer", + sum = "h1:D2xE6YTaH7aiEC7o/+rbx6qTAEr1uY83peKwkamIdQ0=", + version = "v1.0.0", + ) + go_repository( + name = "org_modernc_mathutil", + build_file_proto_mode = "disable_global", + importpath = "modernc.org/mathutil", + sum = "h1:ij3fYGe8zBF4Vu+g0oT7mB06r8sqGWKuJu1yXeR4by8=", + version = "v1.4.1", + ) + go_repository( + name = "org_modernc_parser", + build_file_proto_mode = "disable_global", + importpath = "modernc.org/parser", + sum = "h1:/qHLDn1ezrcRk9/XbErYp84bPPM4+w0kIDuvMdRk6Vc=", + version = "v1.0.2", + ) + go_repository( + name = "org_modernc_scanner", + build_file_proto_mode = "disable_global", + importpath = "modernc.org/scanner", + sum = "h1:rmWBTztgQKLM2CYx0uTQGhAxgnrILDEOVXJsEq/I4Js=", + version = "v1.0.1", + ) + go_repository( + name = "org_modernc_sortutil", + build_file_proto_mode = "disable_global", + importpath = "modernc.org/sortutil", + sum = "h1:SUTM1sCR0Ldpv7dbB/KCPC2zHHsZ1KrSkhmGmmV22CQ=", + version = "v1.0.0", + ) + go_repository( + name = "org_modernc_strutil", + build_file_proto_mode = "disable_global", + importpath = "modernc.org/strutil", + sum = "h1:+1/yCzZxY2pZwwrsbH+4T7BQMoLQ9QiBshRC9eicYsc=", + version = "v1.1.0", + ) + go_repository( + name = "org_modernc_y", + build_file_proto_mode = "disable_global", + importpath = "modernc.org/y", + sum = "h1:+QT+MtLkwkvLkh3fYQq+YD5vw2s5paVE73jdl5R/Py8=", + version = "v1.0.1", + ) + go_repository( + name = "org_uber_go_atomic", + build_file_proto_mode = "disable_global", + importpath = "go.uber.org/atomic", + sum = "h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=", + version = "v1.9.0", + ) + go_repository( + name = "org_uber_go_automaxprocs", + build_file_proto_mode = "disable_global", + importpath = "go.uber.org/automaxprocs", + sum = "h1:CpDZl6aOlLhReez+8S3eEotD7Jx0Os++lemPlMULQP0=", + version = "v1.4.0", + ) + go_repository( + name = "org_uber_go_goleak", + build_file_proto_mode = "disable_global", + importpath = "go.uber.org/goleak", + sum = "h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA=", + version = "v1.1.12", + ) + go_repository( + name = "org_uber_go_multierr", + build_file_proto_mode = "disable_global", + importpath = "go.uber.org/multierr", + sum = "h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8=", + version = "v1.8.0", + ) + go_repository( + name = "org_uber_go_tools", + build_file_proto_mode = "disable_global", + importpath = "go.uber.org/tools", + sum = "h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=", + version = "v0.0.0-20190618225709-2cfd321de3ee", + ) + go_repository( + name = "org_uber_go_zap", + build_file_proto_mode = "disable_global", + importpath = "go.uber.org/zap", + sum = "h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8=", + version = "v1.21.0", + ) diff --git a/expression/bench_test.go b/expression/bench_test.go index 5bb0977841f1f..4510ed47cce2c 100644 --- a/expression/bench_test.go +++ b/expression/bench_test.go @@ -19,6 +19,7 @@ package expression import ( "flag" "fmt" + "math" "math/rand" "net" "reflect" @@ -732,6 +733,20 @@ func (g *randHexStrGener) gen() interface{} { return string(buf) } +// dateGener is used to generate a date +type dateGener struct { + randGen *defaultRandGen +} + +func (g dateGener) gen() interface{} { + year := 1970 + g.randGen.Intn(100) + month := g.randGen.Intn(10) + 1 + day := g.randGen.Intn(20) + 1 + gt := types.FromDate(year, month, day, 0, 0, 0, 0) + d := types.NewTime(gt, mysql.TypeDate, types.DefaultFsp) + return d +} + // dateTimeGener is used to generate a dataTime type dateTimeGener struct { Fsp int @@ -761,7 +776,9 @@ func (g *dateTimeGener) gen() interface{} { return t } -// dateTimeStrGener is used to generate strings which are dataTime format +// dateTimeStrGener is used to generate strings which are dateTime format. +// Fsp must be -1 to 9 otherwise will be ignored. -1 will generate a 0 to 9 random length fsp part, otherwise the fsp part will be of fixed length. +// Fsp more than 6 is to test robustness of fsp part parsing. type dateTimeStrGener struct { Fsp int Year int @@ -780,14 +797,17 @@ func (g *dateTimeStrGener) gen() interface{} { if g.Day == 0 { g.Day = g.randGen.Intn(20) + 1 } + if g.Fsp == -1 { + g.Fsp = g.randGen.Intn(10) + } hour := g.randGen.Intn(12) minute := g.randGen.Intn(60) second := g.randGen.Intn(60) dataTimeStr := fmt.Sprintf("%d-%d-%d %d:%d:%d", g.Year, g.Month, g.Day, hour, minute, second) - if g.Fsp > 0 && g.Fsp <= 6 { + if g.Fsp > 0 && g.Fsp <= 9 { microFmt := fmt.Sprintf(".%%0%dd", g.Fsp) - return dataTimeStr + fmt.Sprintf(microFmt, g.randGen.Int()%(10^g.Fsp)) + return dataTimeStr + fmt.Sprintf(microFmt, g.randGen.Int()%int(math.Pow10(g.Fsp))) } return dataTimeStr @@ -820,6 +840,21 @@ func (g *dateStrGener) gen() interface{} { return fmt.Sprintf("%d-%d-%d", g.Year, g.Month, g.Day) } +// dateOrDatetimeStrGener is used to generate strings which are date or datetime format. +type dateOrDatetimeStrGener struct { + dateRatio float64 + dateStrGener + dateTimeStrGener +} + +func (g dateOrDatetimeStrGener) gen() interface{} { + if g.dateRatio > 1e-6 && g.dateStrGener.randGen.Float64() < g.dateRatio { + return g.dateStrGener.gen() + } + + return g.dateTimeStrGener.gen() +} + // timeStrGener is used to generate strings which are time format type timeStrGener struct { nullRation float64 @@ -837,24 +872,194 @@ func (g *timeStrGener) gen() interface{} { return fmt.Sprintf("%d:%d:%d", hour, minute, second) } +// dateIntGener is used to generate int values which are date format. +type dateIntGener struct { + dateGener +} + +func (g dateIntGener) gen() interface{} { + t := g.dateGener.gen().(types.Time) + num, err := t.ToNumber().ToInt() + if err != nil { + panic(err) + } + return num +} + +// dateTimeIntGener is used to generate int values which are dateTime format. type dateTimeIntGener struct { dateTimeGener - nullRation float64 } -func (g *dateTimeIntGener) gen() interface{} { - if g.randGen.Float64() < g.nullRation { - return nil +func (g dateTimeIntGener) gen() interface{} { + t := g.dateTimeGener.gen().(types.Time) + num, err := t.ToNumber().ToInt() + if err != nil { + panic(err) } + return num +} + +// dateOrDatetimeIntGener is used to generate int values which are date or datetime format. +type dateOrDatetimeIntGener struct { + dateRatio float64 + dateIntGener + dateTimeIntGener +} + +func (g dateOrDatetimeIntGener) gen() interface{} { + if g.dateRatio > 1e-6 && g.dateGener.randGen.Float64() < g.dateRatio { + return g.dateIntGener.gen() + } + + return g.dateTimeIntGener.gen() +} +// dateRealGener is used to generate floating point values which are date format. +// `fspRatio` is used to control the ratio of values with fractional part. I.e., 20010203.000456789 is a valid representation of a date. +type dateRealGener struct { + fspRatio float64 + dateGener +} + +func (g dateRealGener) gen() interface{} { + t := g.dateGener.gen().(types.Time) + num, err := t.ToNumber().ToFloat64() + if err != nil { + panic(err) + } + + if g.randGen.Float64() >= g.fspRatio { + return num + } + + num += g.randGen.Float64() + return num +} + +// dateTimeRealGener is used to generate floating point values which are dateTime format. +// `fspRatio` is used to control the ratio of values with fractional part. +type dateTimeRealGener struct { + fspRatio float64 + dateTimeGener +} + +func (g dateTimeRealGener) gen() interface{} { t := g.dateTimeGener.gen().(types.Time) - num, err := t.ToNumber().ToInt() + tmp, err := t.ToNumber().ToInt() if err != nil { panic(err) } + num := float64(tmp) + + if g.randGen.Float64() >= g.fspRatio { + return num + } + + // Not using `t`'s us part since it's too regular. + // Instead, generating a more arbitrary fractional part, e.g. with more than 6 digits. + // We want the parsing logic to be strong enough to deal with this arbitrary fractional number. + num += g.randGen.Float64() return num } +// dateOrDatetimeRealGener is used to generate floating point values which are date or datetime format. +type dateOrDatetimeRealGener struct { + dateRatio float64 + dateRealGener + dateTimeRealGener +} + +func (g dateOrDatetimeRealGener) gen() interface{} { + if g.dateRatio > 1e-6 && g.dateGener.randGen.Float64() < g.dateRatio { + return g.dateRealGener.gen() + } + + return g.dateTimeRealGener.gen() +} + +// dateDecimalGener is used to generate decimals which are date format. +// `fspRatio` is used to control the ratio of values with fractional part. I.e., 20010203.000456789 is a valid representation of a date. +type dateDecimalGener struct { + fspRatio float64 + dateGener +} + +func (g dateDecimalGener) gen() interface{} { + t := g.dateGener.gen().(types.Time) + intPart := t.ToNumber() + + if g.randGen.Float64() >= g.fspRatio { + return intPart + } + + // Generate a fractional part that is at most 9 digits. + fracDigits := g.randGen.Intn(1000000000) + fracPart := new(types.MyDecimal).FromInt(int64(fracDigits)) + if err := fracPart.Shift(-9); err != nil { + panic(err) + } + + res := new(types.MyDecimal) + err := types.DecimalAdd(intPart, fracPart, res) + if err != nil { + panic(err) + } + return res +} + +// dateTimeDecimalGener is used to generate decimals which are dateTime format. +type dateTimeDecimalGener struct { + fspRatio float64 + dateTimeGener +} + +func (g dateTimeDecimalGener) gen() interface{} { + t := g.dateTimeGener.gen().(types.Time) + num := t.ToNumber() + // Not using `num`'s fractional part so that we can: + // 1. Return early for non-fsp values. + // 2. Generate a more arbitrary fractional part if needed. + i, err := num.ToInt() + if err != nil { + panic(err) + } + intPart := new(types.MyDecimal).FromInt(i) + + if g.randGen.Float64() >= g.fspRatio { + return intPart + } + + // Generate a fractional part that is at most 9 digits. + fracDigits := g.randGen.Intn(1000000000) + fracPart := new(types.MyDecimal).FromInt(int64(fracDigits)) + if err := fracPart.Shift(-9); err != nil { + panic(err) + } + + res := new(types.MyDecimal) + err = types.DecimalAdd(intPart, fracPart, res) + if err != nil { + panic(err) + } + return res +} + +// dateOrDatetimeDecimalGener is used to generate decimals which are date or datetime format. +type dateOrDatetimeDecimalGener struct { + dateRatio float64 + dateDecimalGener + dateTimeDecimalGener +} + +func (g dateOrDatetimeDecimalGener) gen() interface{} { + if g.dateRatio > 1e-6 && g.dateGener.randGen.Float64() < g.dateRatio { + return g.dateDecimalGener.gen() + } + + return g.dateTimeDecimalGener.gen() +} + // constStrGener always returns the given string type constStrGener struct { s string diff --git a/expression/builtin.go b/expression/builtin.go index 71fde7647a598..cb76d8e9e0e76 100644 --- a/expression/builtin.go +++ b/expression/builtin.go @@ -610,10 +610,10 @@ var funcs = map[string]functionClass{ ast.Truncate: &truncateFunctionClass{baseFunctionClass{ast.Truncate, 2, 2}}, // time functions - ast.AddDate: &addDateFunctionClass{baseFunctionClass{ast.AddDate, 3, 3}}, - ast.DateAdd: &addDateFunctionClass{baseFunctionClass{ast.DateAdd, 3, 3}}, - ast.SubDate: &subDateFunctionClass{baseFunctionClass{ast.SubDate, 3, 3}}, - ast.DateSub: &subDateFunctionClass{baseFunctionClass{ast.DateSub, 3, 3}}, + ast.AddDate: &addSubDateFunctionClass{baseFunctionClass{ast.AddDate, 3, 3}, addTime, addDuration, setAdd}, + ast.DateAdd: &addSubDateFunctionClass{baseFunctionClass{ast.DateAdd, 3, 3}, addTime, addDuration, setAdd}, + ast.SubDate: &addSubDateFunctionClass{baseFunctionClass{ast.SubDate, 3, 3}, subTime, subDuration, setSub}, + ast.DateSub: &addSubDateFunctionClass{baseFunctionClass{ast.DateSub, 3, 3}, subTime, subDuration, setSub}, ast.AddTime: &addTimeFunctionClass{baseFunctionClass{ast.AddTime, 2, 2}}, ast.ConvertTz: &convertTzFunctionClass{baseFunctionClass{ast.ConvertTz, 3, 3}}, ast.Curdate: ¤tDateFunctionClass{baseFunctionClass{ast.Curdate, 0, 0}}, diff --git a/expression/builtin_time.go b/expression/builtin_time.go index ef387deb6cacb..9bd13b5e16623 100644 --- a/expression/builtin_time.go +++ b/expression/builtin_time.go @@ -122,8 +122,7 @@ var ( _ functionClass = ×tampFunctionClass{} _ functionClass = ×tampLiteralFunctionClass{} _ functionClass = &lastDayFunctionClass{} - _ functionClass = &addDateFunctionClass{} - _ functionClass = &subDateFunctionClass{} + _ functionClass = &addSubDateFunctionClass{} ) var ( @@ -223,30 +222,9 @@ var ( _ builtinFunc = &builtinExtractDatetimeFromStringSig{} _ builtinFunc = &builtinExtractDatetimeSig{} _ builtinFunc = &builtinExtractDurationSig{} - _ builtinFunc = &builtinAddDateStringStringSig{} - _ builtinFunc = &builtinAddDateStringIntSig{} - _ builtinFunc = &builtinAddDateStringRealSig{} - _ builtinFunc = &builtinAddDateStringDecimalSig{} - _ builtinFunc = &builtinAddDateIntStringSig{} - _ builtinFunc = &builtinAddDateIntIntSig{} - _ builtinFunc = &builtinAddDateIntRealSig{} - _ builtinFunc = &builtinAddDateIntDecimalSig{} - _ builtinFunc = &builtinAddDateDatetimeStringSig{} - _ builtinFunc = &builtinAddDateDatetimeIntSig{} - _ builtinFunc = &builtinAddDateDatetimeRealSig{} - _ builtinFunc = &builtinAddDateDatetimeDecimalSig{} - _ builtinFunc = &builtinSubDateStringStringSig{} - _ builtinFunc = &builtinSubDateStringIntSig{} - _ builtinFunc = &builtinSubDateStringRealSig{} - _ builtinFunc = &builtinSubDateStringDecimalSig{} - _ builtinFunc = &builtinSubDateIntStringSig{} - _ builtinFunc = &builtinSubDateIntIntSig{} - _ builtinFunc = &builtinSubDateIntRealSig{} - _ builtinFunc = &builtinSubDateIntDecimalSig{} - _ builtinFunc = &builtinSubDateDatetimeStringSig{} - _ builtinFunc = &builtinSubDateDatetimeIntSig{} - _ builtinFunc = &builtinSubDateDatetimeRealSig{} - _ builtinFunc = &builtinSubDateDatetimeDecimalSig{} + _ builtinFunc = &builtinAddSubDateAsStringSig{} + _ builtinFunc = &builtinAddSubDateDatetimeAnySig{} + _ builtinFunc = &builtinAddSubDateDurationAnySig{} ) func convertTimeToMysqlTime(t time.Time, fsp int8, roundMode types.RoundMode) (types.Time, error) { @@ -264,13 +242,6 @@ func convertTimeToMysqlTime(t time.Time, fsp int8, roundMode types.RoundMode) (t return types.NewTime(types.FromGoTime(tr), mysql.TypeDatetime, fsp), nil } -func getDateAddOrSubReturnTypeByUnit(dateType uint8, unit string) uint8 { - if dateType == mysql.TypeDatetime || types.IsClockUnit(unit) { - return mysql.TypeDatetime - } - return mysql.TypeDate -} - type dateFunctionClass struct { baseFunctionClass } @@ -2783,11 +2754,51 @@ func (du *baseDateArithmetical) getDateFromInt(ctx sessionctx.Context, args []Ex return types.ZeroTime, true, handleInvalidTimeError(ctx, err) } - dateTp := mysql.TypeDate - if date.Type() == mysql.TypeDatetime || date.Type() == mysql.TypeTimestamp || types.IsClockUnit(unit) { - dateTp = mysql.TypeDatetime + // The actual date.Type() might be date or datetime. + // When the unit contains clock, the date part is treated as datetime even though it might be actually a date. + if types.IsClockUnit(unit) { + date.SetType(mysql.TypeDatetime) + } + return date, false, nil +} + +func (du *baseDateArithmetical) getDateFromReal(ctx sessionctx.Context, args []Expression, row chunk.Row, unit string) (types.Time, bool, error) { + dateReal, isNull, err := args[0].EvalReal(ctx, row) + if isNull || err != nil { + return types.ZeroTime, true, err + } + + sc := ctx.GetSessionVars().StmtCtx + date, err := types.ParseTimeFromFloat64(sc, dateReal) + if err != nil { + return types.ZeroTime, true, handleInvalidTimeError(ctx, err) + } + + // The actual date.Type() might be date or datetime. + // When the unit contains clock, the date part is treated as datetime even though it might be actually a date. + if types.IsClockUnit(unit) { + date.SetType(mysql.TypeDatetime) + } + return date, false, nil +} + +func (du *baseDateArithmetical) getDateFromDecimal(ctx sessionctx.Context, args []Expression, row chunk.Row, unit string) (types.Time, bool, error) { + dateDec, isNull, err := args[0].EvalDecimal(ctx, row) + if isNull || err != nil { + return types.ZeroTime, true, err + } + + sc := ctx.GetSessionVars().StmtCtx + date, err := types.ParseTimeFromDecimal(sc, dateDec) + if err != nil { + return types.ZeroTime, true, handleInvalidTimeError(ctx, err) + } + + // The actual date.Type() might be date or datetime. + // When the unit contains clock, the date part is treated as datetime even though it might be actually a date. + if types.IsClockUnit(unit) { + date.SetType(mysql.TypeDatetime) } - date.SetType(dateTp) return date, false, nil } @@ -2797,7 +2808,11 @@ func (du *baseDateArithmetical) getDateFromDatetime(ctx sessionctx.Context, args return types.ZeroTime, true, err } - if types.IsClockUnit(unit) { + // The actual date.Type() might be date, datetime or timestamp. + // Datetime is treated as is. + // Timestamp is treated as datetime, as MySQL manual says: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-add + // When the unit contains clock, the date part is treated as datetime even though it might be actually a date. + if types.IsClockUnit(unit) || date.Type() == mysql.TypeTimestamp { date.SetType(mysql.TypeDatetime) } return date, false, nil @@ -2891,15 +2906,20 @@ func (du *baseDateArithmetical) getIntervalFromReal(ctx sessionctx.Context, args return strconv.FormatFloat(interval, 'f', args[1].GetType().Decimal, 64), false, nil } +<<<<<<< HEAD func (du *baseDateArithmetical) add(ctx sessionctx.Context, date types.Time, interval string, unit string) (types.Time, bool, error) { year, month, day, nano, err := types.ParseDurationValue(unit, interval) +======= +func (du *baseDateArithmetical) add(ctx sessionctx.Context, date types.Time, interval, unit string, resultFsp int) (types.Time, bool, error) { + year, month, day, nano, _, err := types.ParseDurationValue(unit, interval) +>>>>>>> 4ae78cdea... expression: refine date_add/sub return type and precision (#35009) if err := handleInvalidTimeError(ctx, err); err != nil { return types.ZeroTime, true, err } - return du.addDate(ctx, date, year, month, day, nano) + return du.addDate(ctx, date, year, month, day, nano, resultFsp) } -func (du *baseDateArithmetical) addDate(ctx sessionctx.Context, date types.Time, year, month, day, nano int64) (types.Time, bool, error) { +func (du *baseDateArithmetical) addDate(ctx sessionctx.Context, date types.Time, year, month, day, nano int64, resultFsp int) (types.Time, bool, error) { goTime, err := date.GoTime(time.UTC) if err := handleInvalidTimeError(ctx, err); err != nil { return types.ZeroTime, true, err @@ -2908,11 +2928,8 @@ func (du *baseDateArithmetical) addDate(ctx sessionctx.Context, date types.Time, goTime = goTime.Add(time.Duration(nano)) goTime = types.AddDate(year, month, day, goTime) - if goTime.Nanosecond() == 0 { - date.SetFsp(0) - } else { - date.SetFsp(6) - } + // Adjust fsp as required by outer - always respect type inference. + date.SetFsp(resultFsp) // fix https://github.com/pingcap/tidb/issues/11329 if goTime.Year() == 0 { @@ -2936,36 +2953,47 @@ func (du *baseDateArithmetical) addDate(ctx sessionctx.Context, date types.Time, return date, false, nil } -func (du *baseDateArithmetical) addDuration(ctx sessionctx.Context, d types.Duration, interval string, unit string) (types.Duration, bool, error) { +type funcDurationOp func(d, interval types.Duration) (types.Duration, error) + +func (du *baseDateArithmetical) opDuration(ctx sessionctx.Context, op funcDurationOp, d types.Duration, interval string, unit string, resultFsp int) (types.Duration, bool, error) { dur, err := types.ExtractDurationValue(unit, interval) if err != nil { return types.ZeroDuration, true, handleInvalidTimeError(ctx, err) } - retDur, err := d.Add(dur) + retDur, err := op(d, dur) if err != nil { return types.ZeroDuration, true, err } + // Adjust fsp as required by outer - always respect type inference. + retDur.Fsp = resultFsp return retDur, false, nil } -func (du *baseDateArithmetical) subDuration(ctx sessionctx.Context, d types.Duration, interval string, unit string) (types.Duration, bool, error) { - dur, err := types.ExtractDurationValue(unit, interval) - if err != nil { - return types.ZeroDuration, true, handleInvalidTimeError(ctx, err) +func (du *baseDateArithmetical) addDuration(ctx sessionctx.Context, d types.Duration, interval string, unit string, resultFsp int) (types.Duration, bool, error) { + add := func(d, interval types.Duration) (types.Duration, error) { + return d.Add(interval) } - retDur, err := d.Sub(dur) - if err != nil { - return types.ZeroDuration, true, err + return du.opDuration(ctx, add, d, interval, unit, resultFsp) +} + +func (du *baseDateArithmetical) subDuration(ctx sessionctx.Context, d types.Duration, interval string, unit string, resultFsp int) (types.Duration, bool, error) { + sub := func(d, interval types.Duration) (types.Duration, error) { + return d.Sub(interval) } - return retDur, false, nil + return du.opDuration(ctx, sub, d, interval, unit, resultFsp) } +<<<<<<< HEAD func (du *baseDateArithmetical) sub(ctx sessionctx.Context, date types.Time, interval string, unit string) (types.Time, bool, error) { year, month, day, nano, err := types.ParseDurationValue(unit, interval) +======= +func (du *baseDateArithmetical) sub(ctx sessionctx.Context, date types.Time, interval string, unit string, resultFsp int) (types.Time, bool, error) { + year, month, day, nano, _, err := types.ParseDurationValue(unit, interval) +>>>>>>> 4ae78cdea... expression: refine date_add/sub return type and precision (#35009) if err := handleInvalidTimeError(ctx, err); err != nil { return types.ZeroTime, true, err } - return du.addDate(ctx, date, -year, -month, -day, -nano) + return du.addDate(ctx, date, -year, -month, -day, -nano, resultFsp) } func (du *baseDateArithmetical) vecGetDateFromInt(b *baseBuiltinFunc, input *chunk.Chunk, unit string, result *chunk.Column) error { @@ -3000,11 +3028,95 @@ func (du *baseDateArithmetical) vecGetDateFromInt(b *baseBuiltinFunc, input *chu continue } - dateTp := mysql.TypeDate - if date.Type() == mysql.TypeDatetime || date.Type() == mysql.TypeTimestamp || isClockUnit { - dateTp = mysql.TypeDatetime + // The actual date.Type() might be date or datetime. + // When the unit contains clock, the date part is treated as datetime even though it might be actually a date. + if isClockUnit { + date.SetType(mysql.TypeDatetime) + } + dates[i] = date + } + return nil +} + +func (du *baseDateArithmetical) vecGetDateFromReal(b *baseBuiltinFunc, input *chunk.Chunk, unit string, result *chunk.Column) error { + n := input.NumRows() + buf, err := b.bufAllocator.get() + if err != nil { + return err + } + defer b.bufAllocator.put(buf) + if err := b.args[0].VecEvalReal(b.ctx, input, buf); err != nil { + return err + } + + result.ResizeTime(n, false) + result.MergeNulls(buf) + dates := result.Times() + f64s := buf.Float64s() + sc := b.ctx.GetSessionVars().StmtCtx + isClockUnit := types.IsClockUnit(unit) + for i := 0; i < n; i++ { + if result.IsNull(i) { + continue + } + + date, err := types.ParseTimeFromFloat64(sc, f64s[i]) + if err != nil { + err = handleInvalidTimeError(b.ctx, err) + if err != nil { + return err + } + result.SetNull(i, true) + continue + } + + // The actual date.Type() might be date or datetime. + // When the unit contains clock, the date part is treated as datetime even though it might be actually a date. + if isClockUnit { + date.SetType(mysql.TypeDatetime) + } + dates[i] = date + } + return nil +} + +func (du *baseDateArithmetical) vecGetDateFromDecimal(b *baseBuiltinFunc, input *chunk.Chunk, unit string, result *chunk.Column) error { + n := input.NumRows() + buf, err := b.bufAllocator.get() + if err != nil { + return err + } + defer b.bufAllocator.put(buf) + if err := b.args[0].VecEvalDecimal(b.ctx, input, buf); err != nil { + return err + } + + result.ResizeTime(n, false) + result.MergeNulls(buf) + dates := result.Times() + sc := b.ctx.GetSessionVars().StmtCtx + isClockUnit := types.IsClockUnit(unit) + for i := 0; i < n; i++ { + if result.IsNull(i) { + continue + } + + dec := buf.GetDecimal(i) + date, err := types.ParseTimeFromDecimal(sc, dec) + if err != nil { + err = handleInvalidTimeError(b.ctx, err) + if err != nil { + return err + } + result.SetNull(i, true) + continue + } + + // The actual date.Type() might be date or datetime. + // When the unit contains clock, the date part is treated as datetime even though it might be actually a date. + if isClockUnit { + date.SetType(mysql.TypeDatetime) } - date.SetType(dateTp) dates[i] = date } return nil @@ -3068,7 +3180,11 @@ func (du *baseDateArithmetical) vecGetDateFromDatetime(b *baseBuiltinFunc, input continue } - if isClockUnit { + // The actual date[i].Type() might be date, datetime or timestamp. + // Datetime is treated as is. + // Timestamp is treated as datetime, as MySQL manual says: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-add + // When the unit contains clock, the date part is treated as datetime even though it might be actually a date. + if isClockUnit || dates[i].Type() == mysql.TypeTimestamp { dates[i].SetType(mysql.TypeDatetime) } } @@ -3260,33 +3376,147 @@ func (du *baseDateArithmetical) vecGetIntervalFromReal(b *baseBuiltinFunc, input return nil } -type addDateFunctionClass struct { +type funcTimeOpForDateAddSub func(da *baseDateArithmetical, ctx sessionctx.Context, date types.Time, interval, unit string, resultFsp int) (types.Time, bool, error) + +func addTime(da *baseDateArithmetical, ctx sessionctx.Context, date types.Time, interval, unit string, resultFsp int) (types.Time, bool, error) { + return da.add(ctx, date, interval, unit, resultFsp) +} + +func subTime(da *baseDateArithmetical, ctx sessionctx.Context, date types.Time, interval, unit string, resultFsp int) (types.Time, bool, error) { + return da.sub(ctx, date, interval, unit, resultFsp) +} + +type funcDurationOpForDateAddSub func(da *baseDateArithmetical, ctx sessionctx.Context, d types.Duration, interval, unit string, resultFsp int) (types.Duration, bool, error) + +func addDuration(da *baseDateArithmetical, ctx sessionctx.Context, d types.Duration, interval, unit string, resultFsp int) (types.Duration, bool, error) { + return da.addDuration(ctx, d, interval, unit, resultFsp) +} + +func subDuration(da *baseDateArithmetical, ctx sessionctx.Context, d types.Duration, interval, unit string, resultFsp int) (types.Duration, bool, error) { + return da.subDuration(ctx, d, interval, unit, resultFsp) +} + +type funcSetPbCodeOp func(b builtinFunc, add, sub tipb.ScalarFuncSig) + +func setAdd(b builtinFunc, add, sub tipb.ScalarFuncSig) { + b.setPbCode(add) +} + +func setSub(b builtinFunc, add, sub tipb.ScalarFuncSig) { + b.setPbCode(sub) +} + +type funcGetDateForDateAddSub func(da *baseDateArithmetical, ctx sessionctx.Context, args []Expression, row chunk.Row, unit string) (types.Time, bool, error) + +func getDateFromString(da *baseDateArithmetical, ctx sessionctx.Context, args []Expression, row chunk.Row, unit string) (types.Time, bool, error) { + return da.getDateFromString(ctx, args, row, unit) +} + +func getDateFromInt(da *baseDateArithmetical, ctx sessionctx.Context, args []Expression, row chunk.Row, unit string) (types.Time, bool, error) { + return da.getDateFromInt(ctx, args, row, unit) +} + +func getDateFromReal(da *baseDateArithmetical, ctx sessionctx.Context, args []Expression, row chunk.Row, unit string) (types.Time, bool, error) { + return da.getDateFromReal(ctx, args, row, unit) +} + +func getDateFromDecimal(da *baseDateArithmetical, ctx sessionctx.Context, args []Expression, row chunk.Row, unit string) (types.Time, bool, error) { + return da.getDateFromDecimal(ctx, args, row, unit) +} + +type funcVecGetDateForDateAddSub func(da *baseDateArithmetical, b *baseBuiltinFunc, input *chunk.Chunk, unit string, result *chunk.Column) error + +func vecGetDateFromString(da *baseDateArithmetical, b *baseBuiltinFunc, input *chunk.Chunk, unit string, result *chunk.Column) error { + return da.vecGetDateFromString(b, input, unit, result) +} + +func vecGetDateFromInt(da *baseDateArithmetical, b *baseBuiltinFunc, input *chunk.Chunk, unit string, result *chunk.Column) error { + return da.vecGetDateFromInt(b, input, unit, result) +} + +func vecGetDateFromReal(da *baseDateArithmetical, b *baseBuiltinFunc, input *chunk.Chunk, unit string, result *chunk.Column) error { + return da.vecGetDateFromReal(b, input, unit, result) +} + +func vecGetDateFromDecimal(da *baseDateArithmetical, b *baseBuiltinFunc, input *chunk.Chunk, unit string, result *chunk.Column) error { + return da.vecGetDateFromDecimal(b, input, unit, result) +} + +type funcGetIntervalForDateAddSub func(da *baseDateArithmetical, ctx sessionctx.Context, args []Expression, row chunk.Row, unit string) (string, bool, error) + +func getIntervalFromString(da *baseDateArithmetical, ctx sessionctx.Context, args []Expression, row chunk.Row, unit string) (string, bool, error) { + return da.getIntervalFromString(ctx, args, row, unit) +} + +func getIntervalFromInt(da *baseDateArithmetical, ctx sessionctx.Context, args []Expression, row chunk.Row, unit string) (string, bool, error) { + return da.getIntervalFromInt(ctx, args, row, unit) +} + +func getIntervalFromReal(da *baseDateArithmetical, ctx sessionctx.Context, args []Expression, row chunk.Row, unit string) (string, bool, error) { + return da.getIntervalFromReal(ctx, args, row, unit) +} + +func getIntervalFromDecimal(da *baseDateArithmetical, ctx sessionctx.Context, args []Expression, row chunk.Row, unit string) (string, bool, error) { + return da.getIntervalFromDecimal(ctx, args, row, unit) +} + +type funcVecGetIntervalForDateAddSub func(da *baseDateArithmetical, b *baseBuiltinFunc, input *chunk.Chunk, unit string, result *chunk.Column) error + +func vecGetIntervalFromString(da *baseDateArithmetical, b *baseBuiltinFunc, input *chunk.Chunk, unit string, result *chunk.Column) error { + return da.vecGetIntervalFromString(b, input, unit, result) +} + +func vecGetIntervalFromInt(da *baseDateArithmetical, b *baseBuiltinFunc, input *chunk.Chunk, unit string, result *chunk.Column) error { + return da.vecGetIntervalFromInt(b, input, unit, result) +} + +func vecGetIntervalFromReal(da *baseDateArithmetical, b *baseBuiltinFunc, input *chunk.Chunk, unit string, result *chunk.Column) error { + return da.vecGetIntervalFromReal(b, input, unit, result) +} + +func vecGetIntervalFromDecimal(da *baseDateArithmetical, b *baseBuiltinFunc, input *chunk.Chunk, unit string, result *chunk.Column) error { + return da.vecGetIntervalFromDecimal(b, input, unit, result) +} + +type addSubDateFunctionClass struct { baseFunctionClass + timeOp funcTimeOpForDateAddSub + durationOp funcDurationOpForDateAddSub + setPbCodeOp funcSetPbCodeOp } -func (c *addDateFunctionClass) getFunction(ctx sessionctx.Context, args []Expression) (sig builtinFunc, err error) { +func (c *addSubDateFunctionClass) getFunction(ctx sessionctx.Context, args []Expression) (sig builtinFunc, err error) { if err = c.verifyArgs(args); err != nil { return nil, err } dateEvalTp := args[0].GetType().EvalType() - if dateEvalTp != types.ETString && dateEvalTp != types.ETInt && dateEvalTp != types.ETDuration { + // Some special evaluation type treatment. + // Note that it could be more elegant if we always evaluate datetime for int, real, decimal and string, by leveraging existing implicit casts. + // However, MySQL has a weird behavior for date_add(string, ...), whose result depends on the content of the first argument. + // E.g., date_add('2000-01-02 00:00:00', interval 1 day) evaluates to '2021-01-03 00:00:00' (which is normal), + // whereas date_add('2000-01-02', interval 1 day) evaluates to '2000-01-03' instead of '2021-01-03 00:00:00'. + // This requires a customized parsing of the content of the first argument, by recognizing if it is a pure date format or contains HMS part. + // So implicit casts are not viable here. + if dateEvalTp == types.ETTimestamp { dateEvalTp = types.ETDatetime + } else if dateEvalTp == types.ETJson { + dateEvalTp = types.ETString } intervalEvalTp := args[1].GetType().EvalType() - if intervalEvalTp != types.ETString && intervalEvalTp != types.ETDecimal && intervalEvalTp != types.ETReal { + if intervalEvalTp == types.ETJson { + intervalEvalTp = types.ETString + } else if intervalEvalTp != types.ETString && intervalEvalTp != types.ETDecimal && intervalEvalTp != types.ETReal { intervalEvalTp = types.ETInt } - argTps := []types.EvalType{dateEvalTp, intervalEvalTp, types.ETString} - var bf baseBuiltinFunc unit, _, err := args[2].EvalString(ctx, chunk.Row{}) if err != nil { return nil, err } - if dateEvalTp == types.ETDuration { +<<<<<<< HEAD internalFsp := 0 switch unit { // If the unit has micro second, then the fsp must be the MaxFsp. @@ -3330,142 +3560,366 @@ func (c *addDateFunctionClass) getFunction(ctx sessionctx.Context, args []Expres } types.SetBinChsClnFlag(tp) args[0] = BuildCastFunction(ctx, args[0], tp) +======= + resultTp := mysql.TypeVarString + resultEvalTp := types.ETString + if args[0].GetType().GetType() == mysql.TypeDate { + if !types.IsClockUnit(unit) { + // First arg is date and unit contains no HMS, return date. + resultTp = mysql.TypeDate + resultEvalTp = types.ETDatetime + } else { + // First arg is date and unit contains HMS, return datetime. + resultTp = mysql.TypeDatetime + resultEvalTp = types.ETDatetime + } + } else if dateEvalTp == types.ETDuration { + if types.IsDateUnit(unit) && unit != "DAY_MICROSECOND" { + // First arg is time and unit contains YMD (except DAY_MICROSECOND), return datetime. + resultTp = mysql.TypeDatetime + resultEvalTp = types.ETDatetime + } else { + // First arg is time and unit contains no YMD or is DAY_MICROSECOND, return time. + resultTp = mysql.TypeDuration + resultEvalTp = types.ETDuration +>>>>>>> 4ae78cdea... expression: refine date_add/sub return type and precision (#35009) } - bf.setDecimalAndFlenForDatetime(int(types.MaxFsp)) + } else if dateEvalTp == types.ETDatetime { + // First arg is datetime or timestamp, return datetime. + resultTp = mysql.TypeDatetime + resultEvalTp = types.ETDatetime + } + + argTps := []types.EvalType{dateEvalTp, intervalEvalTp, types.ETString} + var bf baseBuiltinFunc + bf, err = newBaseBuiltinFuncWithTp(ctx, c.funcName, args, resultEvalTp, argTps...) + bf.tp.SetType(resultTp) +<<<<<<< HEAD if dateEvalTp == types.ETDatetime && args[0].GetType().Tp == mysql.TypeDate { switch strings.ToUpper(unit) { // If the unit is YMD, the return type is date. case "YEAR", "MONTH", "DAY", "YEAR_MONTH": bf.setDecimalAndFlenForDate() +======= + var resultFsp int + if types.IsMicrosecondUnit(unit) { + resultFsp = types.MaxFsp + } else { + intervalFsp := types.MinFsp + if unit == "SECOND" { + if intervalEvalTp == types.ETString || intervalEvalTp == types.ETReal { + intervalFsp = types.MaxFsp + } else { + intervalFsp = mathutil.Min(types.MaxFsp, args[1].GetType().GetDecimal()) +>>>>>>> 4ae78cdea... expression: refine date_add/sub return type and precision (#35009) } } + resultFsp = mathutil.Min(types.MaxFsp, mathutil.Max(args[0].GetType().GetDecimal(), intervalFsp)) + } + switch resultTp { + case mysql.TypeDate: + bf.setDecimalAndFlenForDate() + case mysql.TypeDuration: + bf.setDecimalAndFlenForTime(resultFsp) + case mysql.TypeDatetime: + bf.setDecimalAndFlenForDatetime(resultFsp) + case mysql.TypeVarString: + bf.tp.SetFlen(mysql.MaxDatetimeFullWidth) + bf.tp.SetDecimal(types.MinFsp) } switch { case dateEvalTp == types.ETString && intervalEvalTp == types.ETString: - sig = &builtinAddDateStringStringSig{ + sig = &builtinAddSubDateAsStringSig{ baseBuiltinFunc: bf, baseDateArithmetical: newDateArithmeticalUtil(), + getDate: getDateFromString, + vecGetDate: vecGetDateFromString, + getInterval: getIntervalFromString, + vecGetInterval: vecGetIntervalFromString, + timeOp: c.timeOp, } - sig.setPbCode(tipb.ScalarFuncSig_AddDateStringString) + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateStringString, tipb.ScalarFuncSig_SubDateStringString) case dateEvalTp == types.ETString && intervalEvalTp == types.ETInt: - sig = &builtinAddDateStringIntSig{ + sig = &builtinAddSubDateAsStringSig{ baseBuiltinFunc: bf, baseDateArithmetical: newDateArithmeticalUtil(), + getDate: getDateFromString, + vecGetDate: vecGetDateFromString, + getInterval: getIntervalFromInt, + vecGetInterval: vecGetIntervalFromInt, + timeOp: c.timeOp, } - sig.setPbCode(tipb.ScalarFuncSig_AddDateStringInt) + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateStringInt, tipb.ScalarFuncSig_SubDateStringInt) case dateEvalTp == types.ETString && intervalEvalTp == types.ETReal: - sig = &builtinAddDateStringRealSig{ + sig = &builtinAddSubDateAsStringSig{ baseBuiltinFunc: bf, baseDateArithmetical: newDateArithmeticalUtil(), + getDate: getDateFromString, + vecGetDate: vecGetDateFromString, + getInterval: getIntervalFromReal, + vecGetInterval: vecGetIntervalFromReal, + timeOp: c.timeOp, } - sig.setPbCode(tipb.ScalarFuncSig_AddDateStringReal) + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateStringReal, tipb.ScalarFuncSig_SubDateStringReal) case dateEvalTp == types.ETString && intervalEvalTp == types.ETDecimal: - sig = &builtinAddDateStringDecimalSig{ + sig = &builtinAddSubDateAsStringSig{ baseBuiltinFunc: bf, baseDateArithmetical: newDateArithmeticalUtil(), + getDate: getDateFromString, + vecGetDate: vecGetDateFromString, + getInterval: getIntervalFromDecimal, + vecGetInterval: vecGetIntervalFromDecimal, + timeOp: c.timeOp, } - sig.setPbCode(tipb.ScalarFuncSig_AddDateStringDecimal) + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateStringDecimal, tipb.ScalarFuncSig_SubDateStringDecimal) case dateEvalTp == types.ETInt && intervalEvalTp == types.ETString: - sig = &builtinAddDateIntStringSig{ + sig = &builtinAddSubDateAsStringSig{ baseBuiltinFunc: bf, baseDateArithmetical: newDateArithmeticalUtil(), + getDate: getDateFromInt, + vecGetDate: vecGetDateFromInt, + getInterval: getIntervalFromString, + vecGetInterval: vecGetIntervalFromString, + timeOp: c.timeOp, } - sig.setPbCode(tipb.ScalarFuncSig_AddDateIntString) + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateIntString, tipb.ScalarFuncSig_SubDateIntString) case dateEvalTp == types.ETInt && intervalEvalTp == types.ETInt: - sig = &builtinAddDateIntIntSig{ + sig = &builtinAddSubDateAsStringSig{ baseBuiltinFunc: bf, baseDateArithmetical: newDateArithmeticalUtil(), + getDate: getDateFromInt, + vecGetDate: vecGetDateFromInt, + getInterval: getIntervalFromInt, + vecGetInterval: vecGetIntervalFromInt, + timeOp: c.timeOp, } - sig.setPbCode(tipb.ScalarFuncSig_AddDateIntInt) + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateIntInt, tipb.ScalarFuncSig_SubDateIntInt) case dateEvalTp == types.ETInt && intervalEvalTp == types.ETReal: - sig = &builtinAddDateIntRealSig{ + sig = &builtinAddSubDateAsStringSig{ baseBuiltinFunc: bf, baseDateArithmetical: newDateArithmeticalUtil(), + getDate: getDateFromInt, + vecGetDate: vecGetDateFromInt, + getInterval: getIntervalFromReal, + vecGetInterval: vecGetIntervalFromReal, + timeOp: c.timeOp, } - sig.setPbCode(tipb.ScalarFuncSig_AddDateIntReal) + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateIntReal, tipb.ScalarFuncSig_SubDateIntReal) case dateEvalTp == types.ETInt && intervalEvalTp == types.ETDecimal: - sig = &builtinAddDateIntDecimalSig{ + sig = &builtinAddSubDateAsStringSig{ + baseBuiltinFunc: bf, + baseDateArithmetical: newDateArithmeticalUtil(), + getDate: getDateFromInt, + vecGetDate: vecGetDateFromInt, + getInterval: getIntervalFromDecimal, + vecGetInterval: vecGetIntervalFromDecimal, + timeOp: c.timeOp, + } + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateIntDecimal, tipb.ScalarFuncSig_SubDateIntDecimal) + case dateEvalTp == types.ETReal && intervalEvalTp == types.ETString: + sig = &builtinAddSubDateAsStringSig{ + baseBuiltinFunc: bf, + baseDateArithmetical: newDateArithmeticalUtil(), + getDate: getDateFromReal, + vecGetDate: vecGetDateFromReal, + getInterval: getIntervalFromString, + vecGetInterval: vecGetIntervalFromString, + timeOp: c.timeOp, + } + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateRealString, tipb.ScalarFuncSig_SubDateRealString) + case dateEvalTp == types.ETReal && intervalEvalTp == types.ETInt: + sig = &builtinAddSubDateAsStringSig{ + baseBuiltinFunc: bf, + baseDateArithmetical: newDateArithmeticalUtil(), + getDate: getDateFromReal, + vecGetDate: vecGetDateFromReal, + getInterval: getIntervalFromInt, + vecGetInterval: vecGetIntervalFromInt, + timeOp: c.timeOp, + } + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateRealInt, tipb.ScalarFuncSig_SubDateRealInt) + case dateEvalTp == types.ETReal && intervalEvalTp == types.ETReal: + sig = &builtinAddSubDateAsStringSig{ + baseBuiltinFunc: bf, + baseDateArithmetical: newDateArithmeticalUtil(), + getDate: getDateFromReal, + vecGetDate: vecGetDateFromReal, + getInterval: getIntervalFromReal, + vecGetInterval: vecGetIntervalFromReal, + timeOp: c.timeOp, + } + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateRealReal, tipb.ScalarFuncSig_SubDateRealReal) + case dateEvalTp == types.ETReal && intervalEvalTp == types.ETDecimal: + sig = &builtinAddSubDateAsStringSig{ + baseBuiltinFunc: bf, + baseDateArithmetical: newDateArithmeticalUtil(), + getDate: getDateFromReal, + vecGetDate: vecGetDateFromReal, + getInterval: getIntervalFromDecimal, + vecGetInterval: vecGetIntervalFromDecimal, + timeOp: c.timeOp, + } + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateRealDecimal, tipb.ScalarFuncSig_SubDateRealDecimal) + case dateEvalTp == types.ETDecimal && intervalEvalTp == types.ETString: + sig = &builtinAddSubDateAsStringSig{ + baseBuiltinFunc: bf, + baseDateArithmetical: newDateArithmeticalUtil(), + getDate: getDateFromDecimal, + vecGetDate: vecGetDateFromDecimal, + getInterval: getIntervalFromString, + vecGetInterval: vecGetIntervalFromString, + timeOp: c.timeOp, + } + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateDecimalString, tipb.ScalarFuncSig_SubDateDecimalString) + case dateEvalTp == types.ETDecimal && intervalEvalTp == types.ETInt: + sig = &builtinAddSubDateAsStringSig{ + baseBuiltinFunc: bf, + baseDateArithmetical: newDateArithmeticalUtil(), + getDate: getDateFromDecimal, + vecGetDate: vecGetDateFromDecimal, + getInterval: getIntervalFromInt, + vecGetInterval: vecGetIntervalFromInt, + timeOp: c.timeOp, + } + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateDecimalInt, tipb.ScalarFuncSig_SubDateDecimalInt) + case dateEvalTp == types.ETDecimal && intervalEvalTp == types.ETReal: + sig = &builtinAddSubDateAsStringSig{ baseBuiltinFunc: bf, baseDateArithmetical: newDateArithmeticalUtil(), + getDate: getDateFromDecimal, + vecGetDate: vecGetDateFromDecimal, + getInterval: getIntervalFromReal, + vecGetInterval: vecGetIntervalFromReal, + timeOp: c.timeOp, + } + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateDecimalReal, tipb.ScalarFuncSig_SubDateDecimalReal) + case dateEvalTp == types.ETDecimal && intervalEvalTp == types.ETDecimal: + sig = &builtinAddSubDateAsStringSig{ + baseBuiltinFunc: bf, + baseDateArithmetical: newDateArithmeticalUtil(), + getDate: getDateFromDecimal, + vecGetDate: vecGetDateFromDecimal, + getInterval: getIntervalFromDecimal, + vecGetInterval: vecGetIntervalFromDecimal, + timeOp: c.timeOp, } - sig.setPbCode(tipb.ScalarFuncSig_AddDateIntDecimal) + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateDecimalDecimal, tipb.ScalarFuncSig_SubDateDecimalDecimal) case dateEvalTp == types.ETDatetime && intervalEvalTp == types.ETString: - sig = &builtinAddDateDatetimeStringSig{ + sig = &builtinAddSubDateDatetimeAnySig{ baseBuiltinFunc: bf, baseDateArithmetical: newDateArithmeticalUtil(), + getInterval: getIntervalFromString, + vecGetInterval: vecGetIntervalFromString, + timeOp: c.timeOp, } - sig.setPbCode(tipb.ScalarFuncSig_AddDateDatetimeString) + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateDatetimeString, tipb.ScalarFuncSig_SubDateDatetimeString) case dateEvalTp == types.ETDatetime && intervalEvalTp == types.ETInt: - sig = &builtinAddDateDatetimeIntSig{ + sig = &builtinAddSubDateDatetimeAnySig{ baseBuiltinFunc: bf, baseDateArithmetical: newDateArithmeticalUtil(), + getInterval: getIntervalFromInt, + vecGetInterval: vecGetIntervalFromInt, + timeOp: c.timeOp, } - sig.setPbCode(tipb.ScalarFuncSig_AddDateDatetimeInt) + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateDatetimeInt, tipb.ScalarFuncSig_SubDateDatetimeInt) case dateEvalTp == types.ETDatetime && intervalEvalTp == types.ETReal: - sig = &builtinAddDateDatetimeRealSig{ + sig = &builtinAddSubDateDatetimeAnySig{ baseBuiltinFunc: bf, baseDateArithmetical: newDateArithmeticalUtil(), + getInterval: getIntervalFromReal, + vecGetInterval: vecGetIntervalFromReal, + timeOp: c.timeOp, } - sig.setPbCode(tipb.ScalarFuncSig_AddDateDatetimeReal) + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateDatetimeReal, tipb.ScalarFuncSig_SubDateDatetimeReal) case dateEvalTp == types.ETDatetime && intervalEvalTp == types.ETDecimal: - sig = &builtinAddDateDatetimeDecimalSig{ + sig = &builtinAddSubDateDatetimeAnySig{ baseBuiltinFunc: bf, baseDateArithmetical: newDateArithmeticalUtil(), + getInterval: getIntervalFromDecimal, + vecGetInterval: vecGetIntervalFromDecimal, + timeOp: c.timeOp, } - sig.setPbCode(tipb.ScalarFuncSig_AddDateDatetimeDecimal) + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateDatetimeDecimal, tipb.ScalarFuncSig_SubDateDatetimeDecimal) case dateEvalTp == types.ETDuration && intervalEvalTp == types.ETString: - sig = &builtinAddDateDurationStringSig{ + sig = &builtinAddSubDateDurationAnySig{ baseBuiltinFunc: bf, baseDateArithmetical: newDateArithmeticalUtil(), + getInterval: getIntervalFromString, + vecGetInterval: vecGetIntervalFromString, + timeOp: c.timeOp, + durationOp: c.durationOp, } - sig.setPbCode(tipb.ScalarFuncSig_AddDateDurationString) + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateDurationString, tipb.ScalarFuncSig_SubDateDurationString) case dateEvalTp == types.ETDuration && intervalEvalTp == types.ETInt: - sig = &builtinAddDateDurationIntSig{ + sig = &builtinAddSubDateDurationAnySig{ baseBuiltinFunc: bf, baseDateArithmetical: newDateArithmeticalUtil(), + getInterval: getIntervalFromInt, + vecGetInterval: vecGetIntervalFromInt, + timeOp: c.timeOp, + durationOp: c.durationOp, } - sig.setPbCode(tipb.ScalarFuncSig_AddDateDurationInt) + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateDurationInt, tipb.ScalarFuncSig_SubDateDurationInt) case dateEvalTp == types.ETDuration && intervalEvalTp == types.ETReal: - sig = &builtinAddDateDurationRealSig{ + sig = &builtinAddSubDateDurationAnySig{ baseBuiltinFunc: bf, baseDateArithmetical: newDateArithmeticalUtil(), + getInterval: getIntervalFromReal, + vecGetInterval: vecGetIntervalFromReal, + timeOp: c.timeOp, + durationOp: c.durationOp, } - sig.setPbCode(tipb.ScalarFuncSig_AddDateDurationReal) + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateDurationReal, tipb.ScalarFuncSig_SubDateDurationReal) case dateEvalTp == types.ETDuration && intervalEvalTp == types.ETDecimal: - sig = &builtinAddDateDurationDecimalSig{ + sig = &builtinAddSubDateDurationAnySig{ baseBuiltinFunc: bf, baseDateArithmetical: newDateArithmeticalUtil(), + getInterval: getIntervalFromDecimal, + vecGetInterval: vecGetIntervalFromDecimal, + timeOp: c.timeOp, + durationOp: c.durationOp, } - sig.setPbCode(tipb.ScalarFuncSig_AddDateDurationDecimal) + c.setPbCodeOp(sig, tipb.ScalarFuncSig_AddDateDurationDecimal, tipb.ScalarFuncSig_SubDateDurationDecimal) } return sig, nil } -type builtinAddDateStringStringSig struct { +type builtinAddSubDateAsStringSig struct { baseBuiltinFunc baseDateArithmetical + getDate funcGetDateForDateAddSub + vecGetDate funcVecGetDateForDateAddSub + getInterval funcGetIntervalForDateAddSub + vecGetInterval funcVecGetIntervalForDateAddSub + timeOp funcTimeOpForDateAddSub } -func (b *builtinAddDateStringStringSig) Clone() builtinFunc { - newSig := &builtinAddDateStringStringSig{baseDateArithmetical: b.baseDateArithmetical} +func (b *builtinAddSubDateAsStringSig) Clone() builtinFunc { + newSig := &builtinAddSubDateAsStringSig{ + baseDateArithmetical: b.baseDateArithmetical, + getDate: b.getDate, + vecGetDate: b.vecGetDate, + getInterval: b.getInterval, + vecGetInterval: b.vecGetInterval, + timeOp: b.timeOp, + } newSig.cloneFrom(&b.baseBuiltinFunc) return newSig } -// evalTime evals ADDDATE(date,INTERVAL expr unit). -// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_adddate -func (b *builtinAddDateStringStringSig) evalTime(row chunk.Row) (types.Time, bool, error) { +func (b *builtinAddSubDateAsStringSig) evalString(row chunk.Row) (string, bool, error) { unit, isNull, err := b.args[2].EvalString(b.ctx, row) if isNull || err != nil { - return types.ZeroTime, true, err + return types.ZeroTime.String(), true, err } - date, isNull, err := b.getDateFromString(b.ctx, b.args, row, unit) + date, isNull, err := b.getDate(&b.baseDateArithmetical, b.ctx, b.args, row, unit) if isNull || err != nil { - return types.ZeroTime, true, err + return types.ZeroTime.String(), true, err } +<<<<<<< HEAD interval, isNull, err := b.getIntervalFromString(b.ctx, b.args, row, unit) if isNull || err != nil { @@ -3481,64 +3935,94 @@ func (b *builtinAddDateStringStringSig) evalString(row chunk.Row) (string, bool, unit, isNull, err := b.args[2].EvalString(b.ctx, row) if isNull || err != nil { return types.ZeroTime.String(), isNull, err +======= + if date.InvalidZero() { + return types.ZeroTime.String(), true, handleInvalidTimeError(b.ctx, types.ErrWrongValue.GenWithStackByArgs(types.DateTimeStr, date.String())) +>>>>>>> 4ae78cdea... expression: refine date_add/sub return type and precision (#35009) } - date, isNull, err := b.getDateFromString(b.ctx, b.args, row, unit) + interval, isNull, err := b.getInterval(&b.baseDateArithmetical, b.ctx, b.args, row, unit) if isNull || err != nil { return types.ZeroTime.String(), true, err } - interval, isNull, err := b.getIntervalFromString(b.ctx, b.args, row, unit) - if isNull || err != nil { - return types.ZeroTime.String(), true, err + result, isNull, err := b.timeOp(&b.baseDateArithmetical, b.ctx, date, interval, unit, b.tp.GetDecimal()) + if result.Microsecond() == 0 { + result.SetFsp(types.MinFsp) + } else { + result.SetFsp(types.MaxFsp) } - result, isNull, err := b.add(b.ctx, date, interval, unit) - - result.SetType(getDateAddOrSubReturnTypeByUnit(date.Type(), unit)) return result.String(), isNull, err } -type builtinAddDateStringIntSig struct { +type builtinAddSubDateDatetimeAnySig struct { baseBuiltinFunc baseDateArithmetical + getInterval funcGetIntervalForDateAddSub + vecGetInterval funcVecGetIntervalForDateAddSub + timeOp funcTimeOpForDateAddSub } -func (b *builtinAddDateStringIntSig) Clone() builtinFunc { - newSig := &builtinAddDateStringIntSig{baseDateArithmetical: b.baseDateArithmetical} +func (b *builtinAddSubDateDatetimeAnySig) Clone() builtinFunc { + newSig := &builtinAddSubDateDatetimeAnySig{ + baseDateArithmetical: b.baseDateArithmetical, + getInterval: b.getInterval, + vecGetInterval: b.vecGetInterval, + timeOp: b.timeOp, + } newSig.cloneFrom(&b.baseBuiltinFunc) return newSig } -// evalTime evals ADDDATE(date,INTERVAL expr unit). -// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_adddate -func (b *builtinAddDateStringIntSig) evalTime(row chunk.Row) (types.Time, bool, error) { +func (b *builtinAddSubDateDatetimeAnySig) evalTime(row chunk.Row) (types.Time, bool, error) { unit, isNull, err := b.args[2].EvalString(b.ctx, row) if isNull || err != nil { return types.ZeroTime, true, err } - date, isNull, err := b.getDateFromString(b.ctx, b.args, row, unit) + date, isNull, err := b.getDateFromDatetime(b.ctx, b.args, row, unit) if isNull || err != nil { return types.ZeroTime, true, err } - interval, isNull, err := b.getIntervalFromInt(b.ctx, b.args, row, unit) + interval, isNull, err := b.getInterval(&b.baseDateArithmetical, b.ctx, b.args, row, unit) if isNull || err != nil { return types.ZeroTime, true, err } - result, isNull, err := b.add(b.ctx, date, interval, unit) + result, isNull, err := b.timeOp(&b.baseDateArithmetical, b.ctx, date, interval, unit, b.tp.GetDecimal()) return result, isNull || err != nil, err } -func (b *builtinAddDateStringIntSig) evalString(row chunk.Row) (string, bool, error) { +type builtinAddSubDateDurationAnySig struct { + baseBuiltinFunc + baseDateArithmetical + getInterval funcGetIntervalForDateAddSub + vecGetInterval funcVecGetIntervalForDateAddSub + timeOp funcTimeOpForDateAddSub + durationOp funcDurationOpForDateAddSub +} + +func (b *builtinAddSubDateDurationAnySig) Clone() builtinFunc { + newSig := &builtinAddSubDateDurationAnySig{ + baseDateArithmetical: b.baseDateArithmetical, + getInterval: b.getInterval, + vecGetInterval: b.vecGetInterval, + timeOp: b.timeOp, + durationOp: b.durationOp, + } + newSig.cloneFrom(&b.baseBuiltinFunc) + return newSig +} +func (b *builtinAddSubDateDurationAnySig) evalTime(row chunk.Row) (types.Time, bool, error) { unit, isNull, err := b.args[2].EvalString(b.ctx, row) if isNull || err != nil { - return types.ZeroTime.String(), true, err + return types.ZeroTime, true, err } +<<<<<<< HEAD date, isNull, err := b.getDateFromString(b.ctx, b.args, row, unit) if isNull || err != nil { return types.ZeroTime.String(), true, err @@ -4641,154 +5125,28 @@ func (b *builtinSubDateDatetimeIntSig) evalTime(row chunk.Row) (types.Time, bool } interval, isNull, err := b.getIntervalFromInt(b.ctx, b.args, row, unit) +======= + d, isNull, err := b.args[0].EvalDuration(b.ctx, row) +>>>>>>> 4ae78cdea... expression: refine date_add/sub return type and precision (#35009) if isNull || err != nil { return types.ZeroTime, true, err } - result, isNull, err := b.sub(b.ctx, date, interval, unit) - return result, isNull || err != nil, err -} - -type builtinSubDateDatetimeRealSig struct { - baseBuiltinFunc - baseDateArithmetical -} - -func (b *builtinSubDateDatetimeRealSig) Clone() builtinFunc { - newSig := &builtinSubDateDatetimeRealSig{baseDateArithmetical: b.baseDateArithmetical} - newSig.cloneFrom(&b.baseBuiltinFunc) - return newSig -} - -// evalTime evals SUBDATE(date,INTERVAL expr unit). -// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_subdate -func (b *builtinSubDateDatetimeRealSig) evalTime(row chunk.Row) (types.Time, bool, error) { - unit, isNull, err := b.args[2].EvalString(b.ctx, row) - if isNull || err != nil { - return types.ZeroTime, true, err - } - - date, isNull, err := b.getDateFromDatetime(b.ctx, b.args, row, unit) - if isNull || err != nil { - return types.ZeroTime, true, err - } - - interval, isNull, err := b.getIntervalFromReal(b.ctx, b.args, row, unit) - if isNull || err != nil { - return types.ZeroTime, true, err - } - - result, isNull, err := b.sub(b.ctx, date, interval, unit) - return result, isNull || err != nil, err -} - -type builtinSubDateDatetimeDecimalSig struct { - baseBuiltinFunc - baseDateArithmetical -} - -func (b *builtinSubDateDatetimeDecimalSig) Clone() builtinFunc { - newSig := &builtinSubDateDatetimeDecimalSig{baseDateArithmetical: b.baseDateArithmetical} - newSig.cloneFrom(&b.baseBuiltinFunc) - return newSig -} - -// evalTime evals SUBDATE(date,INTERVAL expr unit). -// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_subdate -func (b *builtinSubDateDatetimeDecimalSig) evalTime(row chunk.Row) (types.Time, bool, error) { - unit, isNull, err := b.args[2].EvalString(b.ctx, row) - if isNull || err != nil { - return types.ZeroTime, true, err - } - - date, isNull, err := b.getDateFromDatetime(b.ctx, b.args, row, unit) + interval, isNull, err := b.getInterval(&b.baseDateArithmetical, b.ctx, b.args, row, unit) if isNull || err != nil { return types.ZeroTime, true, err } - interval, isNull, err := b.getIntervalFromDecimal(b.ctx, b.args, row, unit) - if isNull || err != nil { + sc := b.ctx.GetSessionVars().StmtCtx + t, err := d.ConvertToTime(sc, mysql.TypeDatetime) + if err != nil { return types.ZeroTime, true, err } - - result, isNull, err := b.sub(b.ctx, date, interval, unit) - return result, isNull || err != nil, err -} - -type builtinSubDateDurationStringSig struct { - baseBuiltinFunc - baseDateArithmetical -} - -func (b *builtinSubDateDurationStringSig) Clone() builtinFunc { - newSig := &builtinSubDateDurationStringSig{baseDateArithmetical: b.baseDateArithmetical} - newSig.cloneFrom(&b.baseBuiltinFunc) - return newSig -} - -func (b *builtinSubDateDurationStringSig) evalDuration(row chunk.Row) (types.Duration, bool, error) { - unit, isNull, err := b.args[2].EvalString(b.ctx, row) - if isNull || err != nil { - return types.ZeroDuration, true, err - } - - dur, isNull, err := b.args[0].EvalDuration(b.ctx, row) - if isNull || err != nil { - return types.ZeroDuration, true, err - } - - interval, isNull, err := b.getIntervalFromString(b.ctx, b.args, row, unit) - if isNull || err != nil { - return types.ZeroDuration, true, err - } - - result, isNull, err := b.subDuration(b.ctx, dur, interval, unit) - return result, isNull || err != nil, err -} - -type builtinSubDateDurationIntSig struct { - baseBuiltinFunc - baseDateArithmetical -} - -func (b *builtinSubDateDurationIntSig) Clone() builtinFunc { - newSig := &builtinSubDateDurationIntSig{baseDateArithmetical: b.baseDateArithmetical} - newSig.cloneFrom(&b.baseBuiltinFunc) - return newSig -} - -func (b *builtinSubDateDurationIntSig) evalDuration(row chunk.Row) (types.Duration, bool, error) { - unit, isNull, err := b.args[2].EvalString(b.ctx, row) - if isNull || err != nil { - return types.ZeroDuration, true, err - } - - dur, isNull, err := b.args[0].EvalDuration(b.ctx, row) - if isNull || err != nil { - return types.ZeroDuration, true, err - } - - interval, isNull, err := b.getIntervalFromInt(b.ctx, b.args, row, unit) - if isNull || err != nil { - return types.ZeroDuration, true, err - } - - result, isNull, err := b.subDuration(b.ctx, dur, interval, unit) + result, isNull, err := b.timeOp(&b.baseDateArithmetical, b.ctx, t, interval, unit, b.tp.GetDecimal()) return result, isNull || err != nil, err } -type builtinSubDateDurationDecimalSig struct { - baseBuiltinFunc - baseDateArithmetical -} - -func (b *builtinSubDateDurationDecimalSig) Clone() builtinFunc { - newSig := &builtinSubDateDurationDecimalSig{baseDateArithmetical: b.baseDateArithmetical} - newSig.cloneFrom(&b.baseBuiltinFunc) - return newSig -} - -func (b *builtinSubDateDurationDecimalSig) evalDuration(row chunk.Row) (types.Duration, bool, error) { +func (b *builtinAddSubDateDurationAnySig) evalDuration(row chunk.Row) (types.Duration, bool, error) { unit, isNull, err := b.args[2].EvalString(b.ctx, row) if isNull || err != nil { return types.ZeroDuration, true, err @@ -4799,42 +5157,12 @@ func (b *builtinSubDateDurationDecimalSig) evalDuration(row chunk.Row) (types.Du return types.ZeroDuration, true, err } - interval, isNull, err := b.getIntervalFromDecimal(b.ctx, b.args, row, unit) - if isNull || err != nil { - return types.ZeroDuration, true, err - } - - result, isNull, err := b.subDuration(b.ctx, dur, interval, unit) - return result, isNull || err != nil, err -} - -type builtinSubDateDurationRealSig struct { - baseBuiltinFunc - baseDateArithmetical -} - -func (b *builtinSubDateDurationRealSig) Clone() builtinFunc { - newSig := &builtinSubDateDurationRealSig{baseDateArithmetical: b.baseDateArithmetical} - newSig.cloneFrom(&b.baseBuiltinFunc) - return newSig -} - -func (b *builtinSubDateDurationRealSig) evalDuration(row chunk.Row) (types.Duration, bool, error) { - unit, isNull, err := b.args[2].EvalString(b.ctx, row) - if isNull || err != nil { - return types.ZeroDuration, true, err - } - - dur, isNull, err := b.args[0].EvalDuration(b.ctx, row) - if isNull || err != nil { - return types.ZeroDuration, true, err - } - interval, isNull, err := b.getIntervalFromReal(b.ctx, b.args, row, unit) + interval, isNull, err := b.getInterval(&b.baseDateArithmetical, b.ctx, b.args, row, unit) if isNull || err != nil { return types.ZeroDuration, true, err } - result, isNull, err := b.subDuration(b.ctx, dur, interval, unit) + result, isNull, err := b.durationOp(&b.baseDateArithmetical, b.ctx, dur, interval, unit, b.tp.GetDecimal()) return result, isNull || err != nil, err } diff --git a/expression/builtin_time_test.go b/expression/builtin_time_test.go index 703d6f38160d5..8a0d33a7e4747 100644 --- a/expression/builtin_time_test.go +++ b/expression/builtin_time_test.go @@ -945,7 +945,7 @@ func TestAddTimeSig(t *testing.T) { resetStmtContext(ctx) now, _, err := evalNowWithFsp(ctx, 0) require.NoError(t, err) - res, _, err := du.add(ctx, now, "1", "MICROSECOND") + res, _, err := du.add(ctx, now, "1", "MICROSECOND", 6) require.NoError(t, err) require.Equal(t, int8(6), res.Fsp()) @@ -1992,84 +1992,103 @@ func TestDateArithFuncs(t *testing.T) { } testDurations := []struct { +<<<<<<< HEAD fc functionClass dur string fsp int8 unit string format interface{} expected string +======= + fc functionClass + dur string + fsp int + unit string + format interface{} + expected string + checkHmsOnly bool // Duration + day returns datetime with current date padded, only check HMS part for them. +>>>>>>> 4ae78cdea... expression: refine date_add/sub return type and precision (#35009) }{ { - fc: fcAdd, - dur: "00:00:00", - fsp: 0, - unit: "MICROSECOND", - format: "100", - expected: "00:00:00.000100", + fc: fcAdd, + dur: "00:00:00", + fsp: 0, + unit: "MICROSECOND", + format: "100", + expected: "00:00:00.000100", + checkHmsOnly: false, }, { - fc: fcAdd, - dur: "00:00:00", - fsp: 0, - unit: "MICROSECOND", - format: 100.0, - expected: "00:00:00.000100", + fc: fcAdd, + dur: "00:00:00", + fsp: 0, + unit: "MICROSECOND", + format: 100.0, + expected: "00:00:00.000100", + checkHmsOnly: false, }, { - fc: fcSub, - dur: "00:00:01", - fsp: 0, - unit: "MICROSECOND", - format: "100", - expected: "00:00:00.999900", + fc: fcSub, + dur: "00:00:01", + fsp: 0, + unit: "MICROSECOND", + format: "100", + expected: "00:00:00.999900", + checkHmsOnly: false, }, { - fc: fcAdd, - dur: "00:00:00", - fsp: 0, - unit: "DAY", - format: "1", - expected: "24:00:00", + fc: fcAdd, + dur: "01:00:00", + fsp: 0, + unit: "DAY", + format: "1", + expected: "01:00:00", + checkHmsOnly: true, }, { - fc: fcAdd, - dur: "00:00:00", - fsp: 0, - unit: "SECOND", - format: 1, - expected: "00:00:01", + fc: fcAdd, + dur: "00:00:00", + fsp: 0, + unit: "SECOND", + format: 1, + expected: "00:00:01", + checkHmsOnly: false, }, { - fc: fcAdd, - dur: "00:00:00", - fsp: 0, - unit: "DAY", - format: types.NewDecFromInt(1), - expected: "24:00:00", + fc: fcAdd, + dur: "01:00:00", + fsp: 0, + unit: "DAY", + format: types.NewDecFromInt(1), + expected: "01:00:00", + checkHmsOnly: true, }, { - fc: fcAdd, - dur: "00:00:00", - fsp: 0, - unit: "DAY", - format: 1.0, - expected: "24:00:00", + fc: fcAdd, + dur: "01:00:00", + fsp: 0, + unit: "DAY", + format: 1.0, + expected: "01:00:00", + checkHmsOnly: true, }, { - fc: fcSub, - dur: "26:00:00", - fsp: 0, - unit: "DAY", - format: "1", - expected: "02:00:00", + fc: fcSub, + dur: "26:00:00", + fsp: 0, + unit: "DAY", + format: "1", + expected: "02:00:00", + checkHmsOnly: true, }, { - fc: fcSub, - dur: "26:00:00", - fsp: 0, - unit: "DAY", - format: 1, - expected: "02:00:00", + fc: fcSub, + dur: "26:00:00", + fsp: 0, + unit: "DAY", + format: 1, + expected: "02:00:00", + checkHmsOnly: true, }, { fc: fcSub, @@ -2080,12 +2099,13 @@ func TestDateArithFuncs(t *testing.T) { expected: "25:59:59", }, { - fc: fcSub, - dur: "27:00:00", - fsp: 0, - unit: "DAY", - format: 1.0, - expected: "03:00:00", + fc: fcSub, + dur: "27:00:00", + fsp: 0, + unit: "DAY", + format: 1.0, + expected: "03:00:00", + checkHmsOnly: true, }, } for _, tt := range testDurations { @@ -2098,7 +2118,12 @@ func TestDateArithFuncs(t *testing.T) { require.NotNil(t, f) v, err = evalBuiltinFunc(f, chunk.Row{}) require.NoError(t, err) - require.Equal(t, tt.expected, v.GetMysqlDuration().String()) + if tt.checkHmsOnly { + s := v.GetMysqlTime().String() + require.Truef(t, strings.HasSuffix(s, tt.expected), "Suffix mismatch: %v, %v", s, tt.expected) + } else { + require.Equal(t, tt.expected, v.GetMysqlDuration().String()) + } } } diff --git a/expression/builtin_time_vec.go b/expression/builtin_time_vec.go index 896cea3252584..e879a75202ec1 100644 --- a/expression/builtin_time_vec.go +++ b/expression/builtin_time_vec.go @@ -2798,3 +2798,217 @@ func (b *builtinDayOfMonthSig) vecEvalInt(input *chunk.Chunk, result *chunk.Colu func (b *builtinDayOfMonthSig) vectorized() bool { return true } + +func (b *builtinAddSubDateAsStringSig) vecEvalString(input *chunk.Chunk, result *chunk.Column) error { + n := input.NumRows() + unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) + if err != nil { + return err + } + if isNull { + result.ReserveString(n) + result.SetNulls(0, n, true) + return nil + } + + intervalBuf, err := b.bufAllocator.get() + if err != nil { + return err + } + defer b.bufAllocator.put(intervalBuf) + if err := b.vecGetInterval(&b.baseDateArithmetical, &b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { + return err + } + + dateBuf, err := b.bufAllocator.get() + if err != nil { + return err + } + defer b.bufAllocator.put(dateBuf) + if err := b.vecGetDate(&b.baseDateArithmetical, &b.baseBuiltinFunc, input, unit, dateBuf); err != nil { + return err + } + + result.ReserveString(n) + + dateBuf.MergeNulls(intervalBuf) + for i := 0; i < n; i++ { + if dateBuf.IsNull(i) { + result.AppendNull() + continue + } + resDate, isNull, err := b.timeOp(&b.baseDateArithmetical, b.ctx, dateBuf.Times()[i], intervalBuf.GetString(i), unit, b.tp.GetDecimal()) + if err != nil { + return err + } + if isNull { + result.AppendNull() + } else { + if resDate.Microsecond() == 0 { + resDate.SetFsp(types.MinFsp) + } else { + resDate.SetFsp(types.MaxFsp) + } + result.AppendString(resDate.String()) + } + } + return nil +} + +func (b *builtinAddSubDateAsStringSig) vectorized() bool { + return true +} + +func (b *builtinAddSubDateDatetimeAnySig) vecEvalTime(input *chunk.Chunk, result *chunk.Column) error { + n := input.NumRows() + unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) + if err != nil { + return err + } + if isNull { + result.ResizeTime(n, true) + return nil + } + + intervalBuf, err := b.bufAllocator.get() + if err != nil { + return err + } + defer b.bufAllocator.put(intervalBuf) + if err := b.vecGetInterval(&b.baseDateArithmetical, &b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { + return err + } + + if err := b.vecGetDateFromDatetime(&b.baseBuiltinFunc, input, unit, result); err != nil { + return err + } + + result.MergeNulls(intervalBuf) + resDates := result.Times() + for i := 0; i < n; i++ { + if result.IsNull(i) { + continue + } + resDate, isNull, err := b.timeOp(&b.baseDateArithmetical, b.ctx, resDates[i], intervalBuf.GetString(i), unit, b.tp.GetDecimal()) + if err != nil { + return err + } + if isNull { + result.SetNull(i, true) + } else { + resDates[i] = resDate + } + } + return nil +} + +func (b *builtinAddSubDateDatetimeAnySig) vectorized() bool { + return true +} + +func (b *builtinAddSubDateDurationAnySig) vecEvalTime(input *chunk.Chunk, result *chunk.Column) error { + n := input.NumRows() + unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) + if err != nil { + return err + } + if isNull { + result.ResizeTime(n, true) + return nil + } + + intervalBuf, err := b.bufAllocator.get() + if err != nil { + return err + } + defer b.bufAllocator.put(intervalBuf) + if err := b.vecGetInterval(&b.baseDateArithmetical, &b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { + return err + } + + durBuf, err := b.bufAllocator.get() + if err != nil { + return err + } + defer b.bufAllocator.put(durBuf) + if err := b.args[0].VecEvalDuration(b.ctx, input, durBuf); err != nil { + return err + } + + goDurations := durBuf.GoDurations() + result.ResizeTime(n, false) + result.MergeNulls(durBuf, intervalBuf) + resDates := result.Times() + iterDuration := types.Duration{Fsp: types.MaxFsp} + sc := b.ctx.GetSessionVars().StmtCtx + for i := 0; i < n; i++ { + if result.IsNull(i) { + continue + } + iterDuration.Duration = goDurations[i] + t, err := iterDuration.ConvertToTime(sc, mysql.TypeDatetime) + if err != nil { + result.SetNull(i, true) + } + resDate, isNull, err := b.timeOp(&b.baseDateArithmetical, b.ctx, t, intervalBuf.GetString(i), unit, b.tp.GetDecimal()) + if err != nil { + return err + } + if isNull { + result.SetNull(i, true) + } else { + resDates[i] = resDate + } + } + return nil +} + +func (b *builtinAddSubDateDurationAnySig) vecEvalDuration(input *chunk.Chunk, result *chunk.Column) error { + n := input.NumRows() + unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) + if err != nil { + return err + } + if isNull { + result.ResizeGoDuration(n, true) + return nil + } + + intervalBuf, err := b.bufAllocator.get() + if err != nil { + return err + } + defer b.bufAllocator.put(intervalBuf) + if err := b.vecGetInterval(&b.baseDateArithmetical, &b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { + return err + } + + result.ResizeGoDuration(n, false) + if err := b.args[0].VecEvalDuration(b.ctx, input, result); err != nil { + return err + } + + result.MergeNulls(intervalBuf) + resDurations := result.GoDurations() + iterDuration := types.Duration{Fsp: types.MaxFsp} + for i := 0; i < n; i++ { + if result.IsNull(i) { + continue + } + iterDuration.Duration = resDurations[i] + resDuration, isNull, err := b.durationOp(&b.baseDateArithmetical, b.ctx, iterDuration, intervalBuf.GetString(i), unit, b.tp.GetDecimal()) + if err != nil { + return err + } + if isNull { + result.SetNull(i, true) + } else { + resDurations[i] = resDuration.Duration + } + } + return nil +} + +func (b *builtinAddSubDateDurationAnySig) vectorized() bool { + return true +} diff --git a/expression/builtin_time_vec_generated.go b/expression/builtin_time_vec_generated.go index 52fc31a902c57..ad197a9e71ad2 100644 --- a/expression/builtin_time_vec_generated.go +++ b/expression/builtin_time_vec_generated.go @@ -1657,1651 +1657,3 @@ func (b *builtinTimeTimeTimeDiffSig) vecEvalDuration(input *chunk.Chunk, result func (b *builtinTimeTimeTimeDiffSig) vectorized() bool { return true } - -func (b *builtinAddDateStringStringSig) vecEvalString(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ReserveString(n) - result.SetNulls(0, n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromString(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - dateBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(dateBuf) - if err := b.vecGetDateFromString(&b.baseBuiltinFunc, input, unit, dateBuf); err != nil { - return err - } - - isClockUnit := types.IsClockUnit(unit) - - result.ReserveString(n) - - dateBuf.MergeNulls(intervalBuf) - for i := 0; i < n; i++ { - if dateBuf.IsNull(i) { - result.AppendNull() - continue - } - resDate, isNull, err := b.add(b.ctx, dateBuf.Times()[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.AppendNull() - } else { - dateTp := mysql.TypeDate - if dateBuf.Times()[i].Type() == mysql.TypeDatetime || isClockUnit { - dateTp = mysql.TypeDatetime - } - resDate.SetType(dateTp) - result.AppendString(resDate.String()) - } - } - return nil -} - -func (b *builtinAddDateStringStringSig) vectorized() bool { - return true -} - -func (b *builtinAddDateStringIntSig) vecEvalString(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ReserveString(n) - result.SetNulls(0, n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromInt(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - dateBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(dateBuf) - if err := b.vecGetDateFromString(&b.baseBuiltinFunc, input, unit, dateBuf); err != nil { - return err - } - - isClockUnit := types.IsClockUnit(unit) - - result.ReserveString(n) - - dateBuf.MergeNulls(intervalBuf) - for i := 0; i < n; i++ { - if dateBuf.IsNull(i) { - result.AppendNull() - continue - } - resDate, isNull, err := b.add(b.ctx, dateBuf.Times()[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.AppendNull() - } else { - dateTp := mysql.TypeDate - if dateBuf.Times()[i].Type() == mysql.TypeDatetime || isClockUnit { - dateTp = mysql.TypeDatetime - } - resDate.SetType(dateTp) - result.AppendString(resDate.String()) - } - } - return nil -} - -func (b *builtinAddDateStringIntSig) vectorized() bool { - return true -} - -func (b *builtinAddDateStringRealSig) vecEvalString(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ReserveString(n) - result.SetNulls(0, n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromReal(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - dateBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(dateBuf) - if err := b.vecGetDateFromString(&b.baseBuiltinFunc, input, unit, dateBuf); err != nil { - return err - } - - isClockUnit := types.IsClockUnit(unit) - - result.ReserveString(n) - - dateBuf.MergeNulls(intervalBuf) - for i := 0; i < n; i++ { - if dateBuf.IsNull(i) { - result.AppendNull() - continue - } - resDate, isNull, err := b.add(b.ctx, dateBuf.Times()[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.AppendNull() - } else { - dateTp := mysql.TypeDate - if dateBuf.Times()[i].Type() == mysql.TypeDatetime || isClockUnit { - dateTp = mysql.TypeDatetime - } - resDate.SetType(dateTp) - result.AppendString(resDate.String()) - } - } - return nil -} - -func (b *builtinAddDateStringRealSig) vectorized() bool { - return true -} - -func (b *builtinAddDateStringDecimalSig) vecEvalString(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ReserveString(n) - result.SetNulls(0, n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromDecimal(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - dateBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(dateBuf) - if err := b.vecGetDateFromString(&b.baseBuiltinFunc, input, unit, dateBuf); err != nil { - return err - } - - isClockUnit := types.IsClockUnit(unit) - - result.ReserveString(n) - - dateBuf.MergeNulls(intervalBuf) - for i := 0; i < n; i++ { - if dateBuf.IsNull(i) { - result.AppendNull() - continue - } - resDate, isNull, err := b.add(b.ctx, dateBuf.Times()[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.AppendNull() - } else { - dateTp := mysql.TypeDate - if dateBuf.Times()[i].Type() == mysql.TypeDatetime || isClockUnit { - dateTp = mysql.TypeDatetime - } - resDate.SetType(dateTp) - result.AppendString(resDate.String()) - } - } - return nil -} - -func (b *builtinAddDateStringDecimalSig) vectorized() bool { - return true -} - -func (b *builtinAddDateIntStringSig) vecEvalTime(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeTime(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromString(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - if err := b.vecGetDateFromInt(&b.baseBuiltinFunc, input, unit, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDates := result.Times() - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - resDate, isNull, err := b.add(b.ctx, resDates[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDates[i] = resDate - } - } - return nil -} - -func (b *builtinAddDateIntStringSig) vectorized() bool { - return true -} - -func (b *builtinAddDateIntIntSig) vecEvalTime(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeTime(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromInt(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - if err := b.vecGetDateFromInt(&b.baseBuiltinFunc, input, unit, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDates := result.Times() - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - resDate, isNull, err := b.add(b.ctx, resDates[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDates[i] = resDate - } - } - return nil -} - -func (b *builtinAddDateIntIntSig) vectorized() bool { - return true -} - -func (b *builtinAddDateIntRealSig) vecEvalTime(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeTime(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromReal(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - if err := b.vecGetDateFromInt(&b.baseBuiltinFunc, input, unit, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDates := result.Times() - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - resDate, isNull, err := b.add(b.ctx, resDates[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDates[i] = resDate - } - } - return nil -} - -func (b *builtinAddDateIntRealSig) vectorized() bool { - return true -} - -func (b *builtinAddDateIntDecimalSig) vecEvalTime(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeTime(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromDecimal(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - if err := b.vecGetDateFromInt(&b.baseBuiltinFunc, input, unit, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDates := result.Times() - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - resDate, isNull, err := b.add(b.ctx, resDates[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDates[i] = resDate - } - } - return nil -} - -func (b *builtinAddDateIntDecimalSig) vectorized() bool { - return true -} - -func (b *builtinAddDateDatetimeStringSig) vecEvalTime(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeTime(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromString(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - if err := b.vecGetDateFromDatetime(&b.baseBuiltinFunc, input, unit, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDates := result.Times() - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - resDate, isNull, err := b.add(b.ctx, resDates[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDates[i] = resDate - } - } - return nil -} - -func (b *builtinAddDateDatetimeStringSig) vectorized() bool { - return true -} - -func (b *builtinAddDateDatetimeIntSig) vecEvalTime(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeTime(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromInt(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - if err := b.vecGetDateFromDatetime(&b.baseBuiltinFunc, input, unit, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDates := result.Times() - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - resDate, isNull, err := b.add(b.ctx, resDates[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDates[i] = resDate - } - } - return nil -} - -func (b *builtinAddDateDatetimeIntSig) vectorized() bool { - return true -} - -func (b *builtinAddDateDatetimeRealSig) vecEvalTime(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeTime(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromReal(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - if err := b.vecGetDateFromDatetime(&b.baseBuiltinFunc, input, unit, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDates := result.Times() - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - resDate, isNull, err := b.add(b.ctx, resDates[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDates[i] = resDate - } - } - return nil -} - -func (b *builtinAddDateDatetimeRealSig) vectorized() bool { - return true -} - -func (b *builtinAddDateDatetimeDecimalSig) vecEvalTime(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeTime(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromDecimal(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - if err := b.vecGetDateFromDatetime(&b.baseBuiltinFunc, input, unit, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDates := result.Times() - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - resDate, isNull, err := b.add(b.ctx, resDates[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDates[i] = resDate - } - } - return nil -} - -func (b *builtinAddDateDatetimeDecimalSig) vectorized() bool { - return true -} - -func (b *builtinAddDateDurationStringSig) vecEvalDuration(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeGoDuration(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromString(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - result.ResizeGoDuration(n, false) - if err := b.args[0].VecEvalDuration(b.ctx, input, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDurations := result.GoDurations() - iterDuration := types.Duration{Fsp: types.MaxFsp} - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - iterDuration.Duration = resDurations[i] - resDuration, isNull, err := b.addDuration(b.ctx, iterDuration, intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDurations[i] = resDuration.Duration - } - } - return nil -} - -func (b *builtinAddDateDurationStringSig) vectorized() bool { - return true -} - -func (b *builtinAddDateDurationIntSig) vecEvalDuration(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeGoDuration(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromInt(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - result.ResizeGoDuration(n, false) - if err := b.args[0].VecEvalDuration(b.ctx, input, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDurations := result.GoDurations() - iterDuration := types.Duration{Fsp: types.MaxFsp} - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - iterDuration.Duration = resDurations[i] - resDuration, isNull, err := b.addDuration(b.ctx, iterDuration, intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDurations[i] = resDuration.Duration - } - } - return nil -} - -func (b *builtinAddDateDurationIntSig) vectorized() bool { - return true -} - -func (b *builtinAddDateDurationRealSig) vecEvalDuration(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeGoDuration(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromReal(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - result.ResizeGoDuration(n, false) - if err := b.args[0].VecEvalDuration(b.ctx, input, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDurations := result.GoDurations() - iterDuration := types.Duration{Fsp: types.MaxFsp} - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - iterDuration.Duration = resDurations[i] - resDuration, isNull, err := b.addDuration(b.ctx, iterDuration, intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDurations[i] = resDuration.Duration - } - } - return nil -} - -func (b *builtinAddDateDurationRealSig) vectorized() bool { - return true -} - -func (b *builtinAddDateDurationDecimalSig) vecEvalDuration(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeGoDuration(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromDecimal(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - result.ResizeGoDuration(n, false) - if err := b.args[0].VecEvalDuration(b.ctx, input, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDurations := result.GoDurations() - iterDuration := types.Duration{Fsp: types.MaxFsp} - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - iterDuration.Duration = resDurations[i] - resDuration, isNull, err := b.addDuration(b.ctx, iterDuration, intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDurations[i] = resDuration.Duration - } - } - return nil -} - -func (b *builtinAddDateDurationDecimalSig) vectorized() bool { - return true -} - -func (b *builtinSubDateStringStringSig) vecEvalString(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ReserveString(n) - result.SetNulls(0, n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromString(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - dateBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(dateBuf) - if err := b.vecGetDateFromString(&b.baseBuiltinFunc, input, unit, dateBuf); err != nil { - return err - } - - isClockUnit := types.IsClockUnit(unit) - - result.ReserveString(n) - - dateBuf.MergeNulls(intervalBuf) - for i := 0; i < n; i++ { - if dateBuf.IsNull(i) { - result.AppendNull() - continue - } - resDate, isNull, err := b.sub(b.ctx, dateBuf.Times()[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.AppendNull() - } else { - dateTp := mysql.TypeDate - if dateBuf.Times()[i].Type() == mysql.TypeDatetime || isClockUnit { - dateTp = mysql.TypeDatetime - } - resDate.SetType(dateTp) - result.AppendString(resDate.String()) - } - } - return nil -} - -func (b *builtinSubDateStringStringSig) vectorized() bool { - return true -} - -func (b *builtinSubDateStringIntSig) vecEvalString(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ReserveString(n) - result.SetNulls(0, n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromInt(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - dateBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(dateBuf) - if err := b.vecGetDateFromString(&b.baseBuiltinFunc, input, unit, dateBuf); err != nil { - return err - } - - isClockUnit := types.IsClockUnit(unit) - - result.ReserveString(n) - - dateBuf.MergeNulls(intervalBuf) - for i := 0; i < n; i++ { - if dateBuf.IsNull(i) { - result.AppendNull() - continue - } - resDate, isNull, err := b.sub(b.ctx, dateBuf.Times()[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.AppendNull() - } else { - dateTp := mysql.TypeDate - if dateBuf.Times()[i].Type() == mysql.TypeDatetime || isClockUnit { - dateTp = mysql.TypeDatetime - } - resDate.SetType(dateTp) - result.AppendString(resDate.String()) - } - } - return nil -} - -func (b *builtinSubDateStringIntSig) vectorized() bool { - return true -} - -func (b *builtinSubDateStringRealSig) vecEvalString(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ReserveString(n) - result.SetNulls(0, n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromReal(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - dateBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(dateBuf) - if err := b.vecGetDateFromString(&b.baseBuiltinFunc, input, unit, dateBuf); err != nil { - return err - } - - isClockUnit := types.IsClockUnit(unit) - - result.ReserveString(n) - - dateBuf.MergeNulls(intervalBuf) - for i := 0; i < n; i++ { - if dateBuf.IsNull(i) { - result.AppendNull() - continue - } - resDate, isNull, err := b.sub(b.ctx, dateBuf.Times()[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.AppendNull() - } else { - dateTp := mysql.TypeDate - if dateBuf.Times()[i].Type() == mysql.TypeDatetime || isClockUnit { - dateTp = mysql.TypeDatetime - } - resDate.SetType(dateTp) - result.AppendString(resDate.String()) - } - } - return nil -} - -func (b *builtinSubDateStringRealSig) vectorized() bool { - return true -} - -func (b *builtinSubDateStringDecimalSig) vecEvalString(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ReserveString(n) - result.SetNulls(0, n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromDecimal(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - dateBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(dateBuf) - if err := b.vecGetDateFromString(&b.baseBuiltinFunc, input, unit, dateBuf); err != nil { - return err - } - - isClockUnit := types.IsClockUnit(unit) - - result.ReserveString(n) - - dateBuf.MergeNulls(intervalBuf) - for i := 0; i < n; i++ { - if dateBuf.IsNull(i) { - result.AppendNull() - continue - } - resDate, isNull, err := b.sub(b.ctx, dateBuf.Times()[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.AppendNull() - } else { - dateTp := mysql.TypeDate - if dateBuf.Times()[i].Type() == mysql.TypeDatetime || isClockUnit { - dateTp = mysql.TypeDatetime - } - resDate.SetType(dateTp) - result.AppendString(resDate.String()) - } - } - return nil -} - -func (b *builtinSubDateStringDecimalSig) vectorized() bool { - return true -} - -func (b *builtinSubDateIntStringSig) vecEvalTime(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeTime(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromString(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - if err := b.vecGetDateFromInt(&b.baseBuiltinFunc, input, unit, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDates := result.Times() - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - resDate, isNull, err := b.sub(b.ctx, resDates[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDates[i] = resDate - } - } - return nil -} - -func (b *builtinSubDateIntStringSig) vectorized() bool { - return true -} - -func (b *builtinSubDateIntIntSig) vecEvalTime(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeTime(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromInt(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - if err := b.vecGetDateFromInt(&b.baseBuiltinFunc, input, unit, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDates := result.Times() - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - resDate, isNull, err := b.sub(b.ctx, resDates[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDates[i] = resDate - } - } - return nil -} - -func (b *builtinSubDateIntIntSig) vectorized() bool { - return true -} - -func (b *builtinSubDateIntRealSig) vecEvalTime(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeTime(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromReal(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - if err := b.vecGetDateFromInt(&b.baseBuiltinFunc, input, unit, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDates := result.Times() - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - resDate, isNull, err := b.sub(b.ctx, resDates[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDates[i] = resDate - } - } - return nil -} - -func (b *builtinSubDateIntRealSig) vectorized() bool { - return true -} - -func (b *builtinSubDateIntDecimalSig) vecEvalTime(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeTime(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromDecimal(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - if err := b.vecGetDateFromInt(&b.baseBuiltinFunc, input, unit, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDates := result.Times() - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - resDate, isNull, err := b.sub(b.ctx, resDates[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDates[i] = resDate - } - } - return nil -} - -func (b *builtinSubDateIntDecimalSig) vectorized() bool { - return true -} - -func (b *builtinSubDateDatetimeStringSig) vecEvalTime(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeTime(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromString(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - if err := b.vecGetDateFromDatetime(&b.baseBuiltinFunc, input, unit, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDates := result.Times() - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - resDate, isNull, err := b.sub(b.ctx, resDates[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDates[i] = resDate - } - } - return nil -} - -func (b *builtinSubDateDatetimeStringSig) vectorized() bool { - return true -} - -func (b *builtinSubDateDatetimeIntSig) vecEvalTime(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeTime(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromInt(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - if err := b.vecGetDateFromDatetime(&b.baseBuiltinFunc, input, unit, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDates := result.Times() - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - resDate, isNull, err := b.sub(b.ctx, resDates[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDates[i] = resDate - } - } - return nil -} - -func (b *builtinSubDateDatetimeIntSig) vectorized() bool { - return true -} - -func (b *builtinSubDateDatetimeRealSig) vecEvalTime(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeTime(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromReal(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - if err := b.vecGetDateFromDatetime(&b.baseBuiltinFunc, input, unit, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDates := result.Times() - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - resDate, isNull, err := b.sub(b.ctx, resDates[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDates[i] = resDate - } - } - return nil -} - -func (b *builtinSubDateDatetimeRealSig) vectorized() bool { - return true -} - -func (b *builtinSubDateDatetimeDecimalSig) vecEvalTime(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeTime(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromDecimal(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - if err := b.vecGetDateFromDatetime(&b.baseBuiltinFunc, input, unit, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDates := result.Times() - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - resDate, isNull, err := b.sub(b.ctx, resDates[i], intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDates[i] = resDate - } - } - return nil -} - -func (b *builtinSubDateDatetimeDecimalSig) vectorized() bool { - return true -} - -func (b *builtinSubDateDurationStringSig) vecEvalDuration(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeGoDuration(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromString(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - result.ResizeGoDuration(n, false) - if err := b.args[0].VecEvalDuration(b.ctx, input, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDurations := result.GoDurations() - iterDuration := types.Duration{Fsp: types.MaxFsp} - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - iterDuration.Duration = resDurations[i] - resDuration, isNull, err := b.subDuration(b.ctx, iterDuration, intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDurations[i] = resDuration.Duration - } - } - return nil -} - -func (b *builtinSubDateDurationStringSig) vectorized() bool { - return true -} - -func (b *builtinSubDateDurationIntSig) vecEvalDuration(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeGoDuration(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromInt(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - result.ResizeGoDuration(n, false) - if err := b.args[0].VecEvalDuration(b.ctx, input, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDurations := result.GoDurations() - iterDuration := types.Duration{Fsp: types.MaxFsp} - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - iterDuration.Duration = resDurations[i] - resDuration, isNull, err := b.subDuration(b.ctx, iterDuration, intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDurations[i] = resDuration.Duration - } - } - return nil -} - -func (b *builtinSubDateDurationIntSig) vectorized() bool { - return true -} - -func (b *builtinSubDateDurationRealSig) vecEvalDuration(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeGoDuration(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromReal(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - result.ResizeGoDuration(n, false) - if err := b.args[0].VecEvalDuration(b.ctx, input, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDurations := result.GoDurations() - iterDuration := types.Duration{Fsp: types.MaxFsp} - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - iterDuration.Duration = resDurations[i] - resDuration, isNull, err := b.subDuration(b.ctx, iterDuration, intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDurations[i] = resDuration.Duration - } - } - return nil -} - -func (b *builtinSubDateDurationRealSig) vectorized() bool { - return true -} - -func (b *builtinSubDateDurationDecimalSig) vecEvalDuration(input *chunk.Chunk, result *chunk.Column) error { - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ResizeGoDuration(n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFromDecimal(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - result.ResizeGoDuration(n, false) - if err := b.args[0].VecEvalDuration(b.ctx, input, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDurations := result.GoDurations() - iterDuration := types.Duration{Fsp: types.MaxFsp} - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - iterDuration.Duration = resDurations[i] - resDuration, isNull, err := b.subDuration(b.ctx, iterDuration, intervalBuf.GetString(i), unit) - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - resDurations[i] = resDuration.Duration - } - } - return nil -} - -func (b *builtinSubDateDurationDecimalSig) vectorized() bool { - return true -} diff --git a/expression/builtin_time_vec_generated_test.go b/expression/builtin_time_vec_generated_test.go index a6a2fb0c73b3f..ae59037755098 100644 --- a/expression/builtin_time_vec_generated_test.go +++ b/expression/builtin_time_vec_generated_test.go @@ -264,8 +264,8 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ // builtinDurationDurationTimeDiffSig {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDuration, types.ETDuration}}, // builtinDurationStringTimeDiffSig - {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDuration, types.ETString}, geners: []dataGenerator{nil, &dateTimeStrGener{Year: 2019, Month: 11, randGen: newDefaultRandGen()}}}, - {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDuration, types.ETString}, geners: []dataGenerator{nil, &dateTimeStrGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, + {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDuration, types.ETString}, geners: []dataGenerator{nil, &dateTimeStrGener{Year: 2019, Month: 11, Fsp: 0, randGen: newDefaultRandGen()}}}, + {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDuration, types.ETString}, geners: []dataGenerator{nil, &dateTimeStrGener{Year: 2019, Month: 10, Fsp: 0, randGen: newDefaultRandGen()}}}, {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDuration, types.ETString}, geners: []dataGenerator{nil, &dateTimeStrGener{Year: 2019, Month: 10, Fsp: 4, randGen: newDefaultRandGen()}}}, // builtinTimeTimeTimeDiffSig {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDatetime, types.ETDatetime}, geners: []dataGenerator{&dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, @@ -273,15 +273,15 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETTimestamp, types.ETTimestamp}, geners: []dataGenerator{&dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETTimestamp, types.ETDatetime}, geners: []dataGenerator{&dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, // builtinTimeStringTimeDiffSig - {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDatetime, types.ETString}, geners: []dataGenerator{&dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeStrGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, - {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETTimestamp, types.ETString}, geners: []dataGenerator{&dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeStrGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, + {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDatetime, types.ETString}, geners: []dataGenerator{&dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeStrGener{Year: 2019, Month: 10, Fsp: 0, randGen: newDefaultRandGen()}}}, + {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETTimestamp, types.ETString}, geners: []dataGenerator{&dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeStrGener{Year: 2019, Month: 10, Fsp: 0, randGen: newDefaultRandGen()}}}, // builtinStringDurationTimeDiffSig - {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETString, types.ETDuration}, geners: []dataGenerator{&dateTimeStrGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, nil}}, + {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETString, types.ETDuration}, geners: []dataGenerator{&dateTimeStrGener{Year: 2019, Month: 10, Fsp: 0, randGen: newDefaultRandGen()}, nil}}, // builtinStringTimeTimeDiffSig - {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETString, types.ETDatetime}, geners: []dataGenerator{&dateTimeStrGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, - {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETString, types.ETTimestamp}, geners: []dataGenerator{&dateTimeStrGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, + {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETString, types.ETDatetime}, geners: []dataGenerator{&dateTimeStrGener{Year: 2019, Month: 10, Fsp: 0, randGen: newDefaultRandGen()}, &dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, + {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETString, types.ETTimestamp}, geners: []dataGenerator{&dateTimeStrGener{Year: 2019, Month: 10, Fsp: 0, randGen: newDefaultRandGen()}, &dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, // builtinStringStringTimeDiffSig - {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETString, types.ETString}, geners: []dataGenerator{&dateTimeStrGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeStrGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, + {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETString, types.ETString}, geners: []dataGenerator{&dateTimeStrGener{Year: 2019, Month: 10, Fsp: 0, randGen: newDefaultRandGen()}, &dateTimeStrGener{Year: 2019, Month: 10, Fsp: 0, randGen: newDefaultRandGen()}}}, }, ast.AddDate: { @@ -290,7 +290,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -300,7 +300,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -310,7 +310,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -320,7 +320,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -330,127 +330,127 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -460,7 +460,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -470,7 +470,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -480,7 +480,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -491,7 +491,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -501,7 +501,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -511,7 +511,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -521,7 +521,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -531,127 +531,127 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -661,7 +661,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -671,7 +671,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -681,7 +681,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -692,7 +692,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -702,7 +702,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -712,7 +712,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -722,7 +722,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -732,127 +732,127 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -862,7 +862,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -872,7 +872,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -882,7 +882,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -893,7 +893,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -903,7 +903,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -913,7 +913,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -923,7 +923,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -933,127 +933,127 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -1063,7 +1063,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -1073,7 +1073,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -1083,7 +1083,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -1091,200 +1091,200 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, // builtinAddDateIntStringSig { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -1292,200 +1292,200 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, // builtinAddDateIntIntSig { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -1493,200 +1493,200 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, // builtinAddDateIntRealSig { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -1694,2626 +1694,2703 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, // builtinAddDateIntDecimalSig { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, - // builtinAddDateDatetimeStringSig + // builtinAddDateRealStringSig { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, - // builtinAddDateDatetimeIntSig + // builtinAddDateRealIntSig { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, - // builtinAddDateDatetimeRealSig + // builtinAddDateRealRealSig { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, - // builtinAddDateDatetimeDecimalSig + // builtinAddDateRealDecimalSig { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDatetime), + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, - // builtinAddDateDurationStringSig + // builtinAddDateDecimalStringSig { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, - // builtinAddDateDurationIntSig + // builtinAddDateDecimalIntSig { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, - // builtinAddDateDurationRealSig + // builtinAddDateDecimalRealSig { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, - // builtinAddDateDurationDecimalSig + // builtinAddDateDecimalDecimalSig { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - newDefaultGener(0.2, types.ETDuration), + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, - }, - - ast.SubDate: { - // builtinSubDateStringStringSig + // builtinAddDateDatetimeStringSig { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, - // builtinSubDateStringIntSig + // builtinAddDateDatetimeIntSig { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, - // builtinSubDateStringRealSig + // builtinAddDateDatetimeRealSig { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, - // builtinSubDateStringDecimalSig + // builtinAddDateDatetimeDecimalSig { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETString, - childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, - // builtinSubDateIntStringSig + // builtinAddDateDatetimeStringSig { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4321,9 +4398,9 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4331,9 +4408,9 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4341,9 +4418,9 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4351,129 +4428,129 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4481,9 +4558,9 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4491,9 +4568,9 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4501,20 +4578,20 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, - // builtinSubDateIntIntSig + // builtinAddDateDatetimeIntSig { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4522,9 +4599,9 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4532,9 +4609,9 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4542,9 +4619,9 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4552,129 +4629,129 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4682,9 +4759,9 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4692,9 +4769,9 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4702,20 +4779,20 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, - // builtinSubDateIntRealSig + // builtinAddDateDatetimeRealSig { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4723,9 +4800,9 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4733,9 +4810,9 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4743,9 +4820,9 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4753,129 +4830,129 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4883,9 +4960,9 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4893,9 +4970,9 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4903,20 +4980,20 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, - // builtinSubDateIntDecimalSig + // builtinAddDateDatetimeDecimalSig { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4924,9 +5001,9 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4934,9 +5011,9 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4944,9 +5021,9 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -4954,159 +5031,5070 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDatetime), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDatetime), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDatetime), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDatetime), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDatetime), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDatetime), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDatetime), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDatetime), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinAddDateDurationStringSig + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinAddDateDurationIntSig + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinAddDateDurationRealSig + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinAddDateDurationDecimalSig + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDuration, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinAddDateDurationStringSig// TODO: Make the following cases stable, i.e., shouldn't be affected by crossing a day (date part is padded to current date). + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinAddDateDurationIntSig// TODO: Make the following cases stable, i.e., shouldn't be affected by crossing a day (date part is padded to current date). + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinAddDateDurationRealSig// TODO: Make the following cases stable, i.e., shouldn't be affected by crossing a day (date part is padded to current date). + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinAddDateDurationDecimalSig// TODO: Make the following cases stable, i.e., shouldn't be affected by crossing a day (date part is padded to current date). + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ETDuration), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + }, + + ast.SubDate: { + // builtinSubDateStringStringSig + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinSubDateStringIntSig + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinSubDateStringRealSig + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinSubDateStringDecimalSig + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETString, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinSubDateIntStringSig + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinSubDateIntIntSig + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinSubDateIntRealSig + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinSubDateIntDecimalSig + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinSubDateRealStringSig + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinSubDateRealIntSig + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinSubDateRealRealSig + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinSubDateRealDecimalSig + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETReal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinSubDateDecimalStringSig + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETString, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinSubDateDecimalIntSig + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETInt, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinSubDateDecimalRealSig + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETReal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinSubDateDecimalDecimalSig + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETString, + childrenTypes: []types.EvalType{types.ETDecimal, types.ETDecimal, types.ETString}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinSubDateDatetimeStringSig + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETString, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeString)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinSubDateDatetimeIntSig + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETInt, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeLonglong)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETInt), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinSubDateDatetimeRealSig + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETReal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeDouble)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETReal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + // builtinSubDateDatetimeDecimalSig + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + newDefaultGener(0.2, types.ETDecimal), + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + { + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, + geners: []dataGenerator{ + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, - childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDatetime, types.ETDecimal, types.ETString}, + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.TypeDate), types.NewFieldType(mysql.TypeNewDecimal)}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -5160,7 +10148,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5170,7 +10158,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5180,7 +10168,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5190,7 +10178,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5200,7 +10188,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5210,7 +10198,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5220,7 +10208,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5230,7 +10218,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5240,7 +10228,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5250,7 +10238,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5260,7 +10248,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5270,7 +10258,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5361,7 +10349,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5371,7 +10359,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5381,7 +10369,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5391,7 +10379,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5401,7 +10389,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5411,7 +10399,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5421,7 +10409,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5431,7 +10419,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5441,7 +10429,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5451,7 +10439,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5461,7 +10449,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5471,7 +10459,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5562,7 +10550,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5572,7 +10560,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5582,7 +10570,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5592,7 +10580,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5602,7 +10590,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5612,7 +10600,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5622,7 +10610,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5632,7 +10620,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5642,7 +10630,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5652,7 +10640,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5662,7 +10650,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5672,7 +10660,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5763,7 +10751,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5773,7 +10761,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5783,7 +10771,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5793,7 +10781,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5803,7 +10791,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5813,7 +10801,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5823,7 +10811,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5833,7 +10821,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5843,7 +10831,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5853,7 +10841,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5863,7 +10851,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5873,7 +10861,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDatetime), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5964,7 +10952,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDuration), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5974,7 +10962,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDuration), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5984,7 +10972,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDuration), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -5994,7 +10982,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDuration), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -6004,7 +10992,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDuration), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -6014,7 +11002,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDuration), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -6024,100 +11012,100 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDuration), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, + // builtinSubDateDurationIntSig { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, - // builtinSubDateDurationIntSig { retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, @@ -6125,7 +11113,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDuration), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { @@ -6135,553 +11123,557 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ newDefaultGener(0.2, types.ETDuration), newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, + // builtinSubDateDurationRealSig { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETInt), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETInt), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETInt), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETInt), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETInt), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETInt), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETInt), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETInt), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETInt), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETInt), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETInt), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, + // builtinSubDateDurationDecimalSig { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETInt), + newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETInt), + newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETInt), + newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETInt), + newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETInt), + newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETInt), + newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETInt), + newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, - // builtinSubDateDurationRealSig { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, + // builtinSubDateDurationStringSig// TODO: Make the following cases stable, i.e., shouldn't be affected by crossing a day (date part is padded to current date). { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETString, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, + // builtinSubDateDurationIntSig// TODO: Make the following cases stable, i.e., shouldn't be affected by crossing a day (date part is padded to current date). { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETReal), + newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, - // builtinSubDateDurationDecimalSig { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETDecimal), + newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETInt, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETDecimal), + newDefaultGener(0.2, types.ETInt), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, + // builtinSubDateDurationRealSig// TODO: Make the following cases stable, i.e., shouldn't be affected by crossing a day (date part is padded to current date). { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETDecimal), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETDecimal), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETDecimal), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETDecimal), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETDecimal), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETDecimal), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETDecimal), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETDecimal), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("SECOND_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_HOUR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, - childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, + retEvalType: types.ETDatetime, + childrenTypes: []types.EvalType{types.ETDuration, types.ETReal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), - newDefaultGener(0.2, types.ETDecimal), + newDefaultGener(0.2, types.ETReal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR_MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, + // builtinSubDateDurationDecimalSig// TODO: Make the following cases stable, i.e., shouldn't be affected by crossing a day (date part is padded to current date). { - retEvalType: types.ETDuration, + retEvalType: types.ETDatetime, childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MINUTE_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, + retEvalType: types.ETDatetime, childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("WEEK"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, + retEvalType: types.ETDatetime, childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_SECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MONTH"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, + retEvalType: types.ETDatetime, childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("HOUR_MINUTE"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("QUARTER"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, + retEvalType: types.ETDatetime, childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), newDefaultGener(0.2, types.ETDecimal), }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("DAY_MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("YEAR"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDuration, + retEvalType: types.ETDatetime, childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), @@ -6691,7 +11683,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ chunkSize: 128, }, { - retEvalType: types.ETDuration, + retEvalType: types.ETDatetime, childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), @@ -6701,7 +11693,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ chunkSize: 128, }, { - retEvalType: types.ETDuration, + retEvalType: types.ETDatetime, childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), @@ -6711,7 +11703,7 @@ var vecBuiltinTimeGeneratedCases = map[string][]vecExprBenchCase{ chunkSize: 128, }, { - retEvalType: types.ETDuration, + retEvalType: types.ETDatetime, childrenTypes: []types.EvalType{types.ETDuration, types.ETDecimal, types.ETString}, geners: []dataGenerator{ newDefaultGener(0.2, types.ETDuration), diff --git a/expression/builtin_time_vec_test.go b/expression/builtin_time_vec_test.go index 3f4adb0635cfa..6c4bbbfc36137 100644 --- a/expression/builtin_time_vec_test.go +++ b/expression/builtin_time_vec_test.go @@ -247,40 +247,40 @@ var vecBuiltinTimeCases = map[string][]vecExprBenchCase{ chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETDecimal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETDecimal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, @@ -329,30 +329,30 @@ var vecBuiltinTimeCases = map[string][]vecExprBenchCase{ chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETString, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}), &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETInt, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETInt), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, chunkSize: 128, }, { - retEvalType: types.ETDatetime, + retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETInt, types.ETReal, types.ETString}, geners: []dataGenerator{ - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, + newNullWrappedGener(0.2, dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}), newDefaultGener(0.2, types.ETReal), }, constants: []*Constant{nil, nil, {Value: types.NewStringDatum("MICROSECOND"), RetType: types.NewFieldType(mysql.TypeString)}}, diff --git a/expression/generator/time_vec.go b/expression/generator/time_vec.go index fcd53107db523..1266812f6507e 100644 --- a/expression/generator/time_vec.go +++ b/expression/generator/time_vec.go @@ -522,184 +522,44 @@ func (b *{{.SigName}}) vectorized() bool { {{ end }}{{/* range */}} `)) -var addOrSubDate = template.Must(template.New("").Parse(` -{{ range .Sigs }} -{{- if eq .TypeA.TypeName "String"}} -func (b *{{.SigName}}) vecEvalString(input *chunk.Chunk, result *chunk.Column) error { -n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - result.ReserveString(n) - result.SetNulls(0, n, true) - return nil - } - - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err - } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFrom{{.TypeB.ETName}}(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - dateBuf, err := b.bufAllocator.get() - if err != nil { - return err +func getIntervalUnitListForDurationAsDuration() []string { + return []string{ + "MICROSECOND", + "SECOND", + "MINUTE", + "HOUR", + "SECOND_MICROSECOND", + "MINUTE_MICROSECOND", + "MINUTE_SECOND", + "HOUR_MICROSECOND", + "HOUR_SECOND", + "HOUR_MINUTE", + "DAY_MICROSECOND", } - defer b.bufAllocator.put(dateBuf) - if err := b.vecGetDateFromString(&b.baseBuiltinFunc, input, unit, dateBuf); err != nil { - return err - } - - isClockUnit := types.IsClockUnit(unit) - - result.ReserveString(n) - - dateBuf.MergeNulls(intervalBuf) - for i := 0; i < n; i++ { - if dateBuf.IsNull(i) { - result.AppendNull() - continue - } - {{- if eq $.FuncName "AddDate" }} - resDate, isNull, err := b.add(b.ctx, dateBuf.Times()[i], intervalBuf.GetString(i), unit) - {{- else }} - resDate, isNull, err := b.sub(b.ctx, dateBuf.Times()[i], intervalBuf.GetString(i), unit) - {{- end }} - if err != nil { - return err - } - if isNull { - result.AppendNull() - } else { - dateTp := mysql.TypeDate - if dateBuf.Times()[i].Type() == mysql.TypeDatetime || isClockUnit { - dateTp = mysql.TypeDatetime - } - resDate.SetType(dateTp) - result.AppendString(resDate.String()) - } - } - return nil } -{{- else }} -{{- if eq .TypeA.TypeName "Duration" }} -func (b *{{.SigName}}) vecEvalDuration(input *chunk.Chunk, result *chunk.Column) error { -{{- else }} -func (b *{{.SigName}}) vecEvalTime(input *chunk.Chunk, result *chunk.Column) error { -{{- end }} - n := input.NumRows() - unit, isNull, err := b.args[2].EvalString(b.ctx, chunk.Row{}) - if err != nil { - return err - } - if isNull { - {{- if eq .TypeA.TypeName "Duration" }} - result.ResizeGoDuration(n, true) - {{- else }} - result.ResizeTime(n, true) - {{- end }} - return nil - } - intervalBuf, err := b.bufAllocator.get() - if err != nil { - return err +func getIntervalUnitListForDurationAsDatetime() []string { + return []string{ + "DAY", + "WEEK", + "MONTH", + "QUARTER", + "YEAR", + "DAY_SECOND", + "DAY_MINUTE", + "DAY_HOUR", + "YEAR_MONTH", } - defer b.bufAllocator.put(intervalBuf) - if err := b.vecGetIntervalFrom{{.TypeB.ETName}}(&b.baseBuiltinFunc, input, unit, intervalBuf); err != nil { - return err - } - - {{ if eq .TypeA.TypeName "Duration" }} - result.ResizeGoDuration(n, false) - if err := b.args[0].VecEvalDuration(b.ctx, input, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDurations := result.GoDurations() - iterDuration := types.Duration{Fsp: types.MaxFsp} - {{ else }} - if err := b.vecGetDateFrom{{.TypeA.ETName}}(&b.baseBuiltinFunc, input, unit, result); err != nil { - return err - } - - result.MergeNulls(intervalBuf) - resDates := result.Times() - {{ end -}} - - for i := 0; i < n; i++ { - if result.IsNull(i) { - continue - } - - {{- if eq .TypeA.TypeName "Duration" }} - iterDuration.Duration = resDurations[i] - {{- if eq $.FuncName "AddDate" }} - resDuration, isNull, err := b.addDuration(b.ctx, iterDuration, intervalBuf.GetString(i), unit) - {{- else }} - resDuration, isNull, err := b.subDuration(b.ctx, iterDuration, intervalBuf.GetString(i), unit) - {{- end }} - {{- else }} - {{- if eq $.FuncName "AddDate" }} - resDate, isNull, err := b.add(b.ctx, resDates[i], intervalBuf.GetString(i), unit) - {{- else }} - resDate, isNull, err := b.sub(b.ctx, resDates[i], intervalBuf.GetString(i), unit) - {{- end }} - {{- end }} - if err != nil { - return err - } - if isNull { - result.SetNull(i, true) - } else { - {{- if eq .TypeA.TypeName "Duration" }} - resDurations[i] = resDuration.Duration - {{- else }} - resDates[i] = resDate - {{- end }} - } - } - return nil } -{{- end }} -func (b *{{.SigName}}) vectorized() bool { - return true +func getIntervalUnitList() []string { + return append(getIntervalUnitListForDurationAsDuration(), getIntervalUnitListForDurationAsDatetime()...) } -{{ end }}{{/* range */}} -`)) var testFileFuncs = template.FuncMap{ - "getIntervalUnitList": func() []string { - return []string{ - "MICROSECOND", - "SECOND", - "MINUTE", - "HOUR", - "DAY", - "WEEK", - "MONTH", - "QUARTER", - "YEAR", - "SECOND_MICROSECOND", - "MINUTE_MICROSECOND", - "MINUTE_SECOND", - "HOUR_MICROSECOND", - "HOUR_SECOND", - "HOUR_MINUTE", - "DAY_MICROSECOND", - "DAY_SECOND", - "DAY_MINUTE", - "DAY_HOUR", - "YEAR_MONTH", - } - }, + "getIntervalUnitListForDurationAsDuration": getIntervalUnitListForDurationAsDuration, + "getIntervalUnitListForDurationAsDatetime": getIntervalUnitListForDurationAsDatetime, + "getIntervalUnitList": getIntervalUnitList, } var testFile = template.Must(template.New("").Funcs(testFileFuncs).Parse(` @@ -750,31 +610,81 @@ func (g gener) gen() interface{} { } {{ define "addOrSubDateCases" }} - {{- $unitList := getIntervalUnitList -}} {{- range $sig := .Sigs }} // {{ $sig.SigName }} - {{- range $unit := $unitList }} - { - retEvalType: types.ET{{ $sig.Output.ETName }}, - childrenTypes: []types.EvalType{types.ET{{ $sig.TypeA.ETName }}, types.ET{{ $sig.TypeB.ETName }}, types.ETString}, - geners: []dataGenerator{ - {{- if eq $sig.TypeA.ETName "String"}} - &dateStrGener{NullRation: 0.2, randGen: newDefaultRandGen()}, - {{- else if eq $sig.TypeA.ETName "Int"}} - &dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}, nullRation: 0.2}, - {{- else }} + {{- if and (eq $sig.TypeA.ETName "Duration") (eq $sig.Output.ETName "Duration") -}} + {{- $unitList := getIntervalUnitListForDurationAsDuration -}} + {{- range $unit := $unitList }} + { + retEvalType: types.ET{{ $sig.Output.ETName }}, + childrenTypes: []types.EvalType{types.ET{{ $sig.TypeA.ETName }}, types.ET{{ $sig.TypeB.ETName }}, types.ETString}, + geners: []dataGenerator{ newDefaultGener(0.2, types.ET{{$sig.TypeA.ETName}}), - {{- end }} - {{- if eq $sig.TypeB.ETName "String" }} - &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, - {{- else }} - newDefaultGener(0.2, types.ET{{$sig.TypeB.ETName}}), + {{- if eq $sig.TypeB.ETName "String" }} + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + {{- else }} + newDefaultGener(0.2, types.ET{{$sig.TypeB.ETName}}), + {{- end }} + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("{{$unit}}"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + {{- end }} + {{- else if and (eq $sig.TypeA.ETName "Duration") (eq $sig.Output.ETName "Datetime") -}} + // TODO: Make the following cases stable, i.e., shouldn't be affected by crossing a day (date part is padded to current date). + {{- $unitList := getIntervalUnitListForDurationAsDatetime -}} + {{- range $unit := $unitList }} + { + retEvalType: types.ET{{ $sig.Output.ETName }}, + childrenTypes: []types.EvalType{types.ET{{ $sig.TypeA.ETName }}, types.ET{{ $sig.TypeB.ETName }}, types.ETString}, + geners: []dataGenerator{ + newDefaultGener(0.2, types.ET{{$sig.TypeA.ETName}}), + + {{- if eq $sig.TypeB.ETName "String" }} + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + {{- else }} + newDefaultGener(0.2, types.ET{{$sig.TypeB.ETName}}), + {{- end }} + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("{{$unit}}"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, + }, + {{- end }} + {{- else -}} + {{- $unitList := getIntervalUnitList -}} + {{- range $unit := $unitList }} + { + retEvalType: types.ET{{ $sig.Output.ETName }}, + childrenTypes: []types.EvalType{types.ET{{ $sig.TypeA.ETName }}, types.ET{{ $sig.TypeB.ETName }}, types.ETString}, + {{- if ne $sig.FieldTypeA "" }} + childrenFieldTypes: []*types.FieldType{types.NewFieldType(mysql.Type{{$sig.FieldTypeA}}), types.NewFieldType(mysql.Type{{$sig.FieldTypeB}})}, {{- end }} + geners: []dataGenerator{ + {{- if eq $sig.FieldTypeA "Date" }} + newNullWrappedGener(0.2, dateGener{randGen: newDefaultRandGen()}), + {{- else if eq $sig.TypeA.ETName "String"}} + newNullWrappedGener(0.2, dateOrDatetimeStrGener{dateRatio: 0.2, dateStrGener: dateStrGener{randGen: newDefaultRandGen()}, dateTimeStrGener: dateTimeStrGener{Fsp: -1, randGen: newDefaultRandGen()}}), + {{- else if eq $sig.TypeA.ETName "Int"}} + newNullWrappedGener(0.2, dateOrDatetimeIntGener{dateRatio: 0.2, dateIntGener: dateIntGener{dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeIntGener: dateTimeIntGener{dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + {{- else if eq $sig.TypeA.ETName "Real"}} + newNullWrappedGener(0.2, dateOrDatetimeRealGener{dateRatio: 0.2, dateRealGener: dateRealGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeRealGener: dateTimeRealGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + {{- else if eq $sig.TypeA.ETName "Decimal"}} + newNullWrappedGener(0.2, dateOrDatetimeDecimalGener{dateRatio: 0.2, dateDecimalGener: dateDecimalGener{fspRatio: 0.5, dateGener: dateGener{randGen: newDefaultRandGen()}}, dateTimeDecimalGener: dateTimeDecimalGener{fspRatio: 0.5, dateTimeGener: dateTimeGener{randGen: newDefaultRandGen()}}}), + {{- else }} + newDefaultGener(0.2, types.ET{{$sig.TypeA.ETName}}), + {{- end }} + + {{- if eq $sig.TypeB.ETName "String" }} + &numStrGener{rangeInt64Gener{math.MinInt32 + 1, math.MaxInt32, newDefaultRandGen()}}, + {{- else }} + newDefaultGener(0.2, types.ET{{$sig.TypeB.ETName}}), + {{- end }} + }, + constants: []*Constant{nil, nil, {Value: types.NewStringDatum("{{$unit}}"), RetType: types.NewFieldType(mysql.TypeString)}}, + chunkSize: 128, }, - constants: []*Constant{nil, nil, {Value: types.NewStringDatum("{{$unit}}"), RetType: types.NewFieldType(mysql.TypeString)}}, - chunkSize: 128, - }, + {{- end }} {{- end }} {{- end }} {{ end }} @@ -828,8 +738,8 @@ var vecBuiltin{{.Category}}GeneratedCases = map[string][]vecExprBenchCase{ // builtinDurationDurationTimeDiffSig {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDuration, types.ETDuration}}, // builtinDurationStringTimeDiffSig - {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDuration, types.ETString}, geners: []dataGenerator{nil, &dateTimeStrGener{Year: 2019, Month: 11, randGen: newDefaultRandGen()}}}, - {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDuration, types.ETString}, geners: []dataGenerator{nil, &dateTimeStrGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, + {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDuration, types.ETString}, geners: []dataGenerator{nil, &dateTimeStrGener{Year: 2019, Month: 11, Fsp: 0, randGen: newDefaultRandGen()}}}, + {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDuration, types.ETString}, geners: []dataGenerator{nil, &dateTimeStrGener{Year: 2019, Month: 10, Fsp: 0, randGen: newDefaultRandGen()}}}, {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDuration, types.ETString}, geners: []dataGenerator{nil, &dateTimeStrGener{Year: 2019, Month: 10, Fsp: 4, randGen: newDefaultRandGen()}}}, // builtinTimeTimeTimeDiffSig {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDatetime, types.ETDatetime}, geners: []dataGenerator{&dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, @@ -837,15 +747,15 @@ var vecBuiltin{{.Category}}GeneratedCases = map[string][]vecExprBenchCase{ {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETTimestamp, types.ETTimestamp}, geners: []dataGenerator{&dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETTimestamp, types.ETDatetime}, geners: []dataGenerator{&dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, // builtinTimeStringTimeDiffSig - {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDatetime, types.ETString}, geners: []dataGenerator{&dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeStrGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, - {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETTimestamp, types.ETString}, geners: []dataGenerator{&dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeStrGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, + {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDatetime, types.ETString}, geners: []dataGenerator{&dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeStrGener{Year: 2019, Month: 10, Fsp: 0, randGen: newDefaultRandGen()}}}, + {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETTimestamp, types.ETString}, geners: []dataGenerator{&dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeStrGener{Year: 2019, Month: 10, Fsp: 0, randGen: newDefaultRandGen()}}}, // builtinStringDurationTimeDiffSig - {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETString, types.ETDuration}, geners: []dataGenerator{&dateTimeStrGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, nil}}, + {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETString, types.ETDuration}, geners: []dataGenerator{&dateTimeStrGener{Year: 2019, Month: 10, Fsp: 0, randGen: newDefaultRandGen()}, nil}}, // builtinStringTimeTimeDiffSig - {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETString, types.ETDatetime}, geners: []dataGenerator{&dateTimeStrGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, - {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETString, types.ETTimestamp}, geners: []dataGenerator{&dateTimeStrGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, + {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETString, types.ETDatetime}, geners: []dataGenerator{&dateTimeStrGener{Year: 2019, Month: 10, Fsp: 0, randGen: newDefaultRandGen()}, &dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, + {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETString, types.ETTimestamp}, geners: []dataGenerator{&dateTimeStrGener{Year: 2019, Month: 10, Fsp: 0, randGen: newDefaultRandGen()}, &dateTimeGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, // builtinStringStringTimeDiffSig - {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETString, types.ETString}, geners: []dataGenerator{&dateTimeStrGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}, &dateTimeStrGener{Year: 2019, Month: 10, randGen: newDefaultRandGen()}}}, + {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETString, types.ETString}, geners: []dataGenerator{&dateTimeStrGener{Year: 2019, Month: 10, Fsp: 0, randGen: newDefaultRandGen()}, &dateTimeStrGener{Year: 2019, Month: 10, Fsp: 0, randGen: newDefaultRandGen()}}}, }, {{ end }} {{- if eq .FuncName "AddDate" }} @@ -919,15 +829,27 @@ var timeDiffSigsTmpl = []sig{ {SigName: "builtinTimeTimeTimeDiffSig", TypeA: TypeDatetime, TypeB: TypeDatetime, Output: TypeDuration}, } -var addDataSigsTmpl = []sig{ +var addDateSigsTmpl = []sig{ {SigName: "builtinAddDateStringStringSig", TypeA: TypeString, TypeB: TypeString, Output: TypeString}, {SigName: "builtinAddDateStringIntSig", TypeA: TypeString, TypeB: TypeInt, Output: TypeString}, {SigName: "builtinAddDateStringRealSig", TypeA: TypeString, TypeB: TypeReal, Output: TypeString}, {SigName: "builtinAddDateStringDecimalSig", TypeA: TypeString, TypeB: TypeDecimal, Output: TypeString}, - {SigName: "builtinAddDateIntStringSig", TypeA: TypeInt, TypeB: TypeString, Output: TypeDatetime}, - {SigName: "builtinAddDateIntIntSig", TypeA: TypeInt, TypeB: TypeInt, Output: TypeDatetime}, - {SigName: "builtinAddDateIntRealSig", TypeA: TypeInt, TypeB: TypeReal, Output: TypeDatetime}, - {SigName: "builtinAddDateIntDecimalSig", TypeA: TypeInt, TypeB: TypeDecimal, Output: TypeDatetime}, + {SigName: "builtinAddDateIntStringSig", TypeA: TypeInt, TypeB: TypeString, Output: TypeString}, + {SigName: "builtinAddDateIntIntSig", TypeA: TypeInt, TypeB: TypeInt, Output: TypeString}, + {SigName: "builtinAddDateIntRealSig", TypeA: TypeInt, TypeB: TypeReal, Output: TypeString}, + {SigName: "builtinAddDateIntDecimalSig", TypeA: TypeInt, TypeB: TypeDecimal, Output: TypeString}, + {SigName: "builtinAddDateRealStringSig", TypeA: TypeReal, TypeB: TypeString, Output: TypeString}, + {SigName: "builtinAddDateRealIntSig", TypeA: TypeReal, TypeB: TypeInt, Output: TypeString}, + {SigName: "builtinAddDateRealRealSig", TypeA: TypeReal, TypeB: TypeReal, Output: TypeString}, + {SigName: "builtinAddDateRealDecimalSig", TypeA: TypeReal, TypeB: TypeDecimal, Output: TypeString}, + {SigName: "builtinAddDateDecimalStringSig", TypeA: TypeDecimal, TypeB: TypeString, Output: TypeString}, + {SigName: "builtinAddDateDecimalIntSig", TypeA: TypeDecimal, TypeB: TypeInt, Output: TypeString}, + {SigName: "builtinAddDateDecimalRealSig", TypeA: TypeDecimal, TypeB: TypeReal, Output: TypeString}, + {SigName: "builtinAddDateDecimalDecimalSig", TypeA: TypeDecimal, TypeB: TypeDecimal, Output: TypeString}, + {SigName: "builtinAddDateDatetimeStringSig", TypeA: TypeDatetime, TypeB: TypeString, Output: TypeDatetime, FieldTypeA: "Date", FieldTypeB: "String"}, + {SigName: "builtinAddDateDatetimeIntSig", TypeA: TypeDatetime, TypeB: TypeInt, Output: TypeDatetime, FieldTypeA: "Date", FieldTypeB: "Longlong"}, + {SigName: "builtinAddDateDatetimeRealSig", TypeA: TypeDatetime, TypeB: TypeReal, Output: TypeDatetime, FieldTypeA: "Date", FieldTypeB: "Double"}, + {SigName: "builtinAddDateDatetimeDecimalSig", TypeA: TypeDatetime, TypeB: TypeDecimal, Output: TypeDatetime, FieldTypeA: "Date", FieldTypeB: "NewDecimal"}, {SigName: "builtinAddDateDatetimeStringSig", TypeA: TypeDatetime, TypeB: TypeString, Output: TypeDatetime}, {SigName: "builtinAddDateDatetimeIntSig", TypeA: TypeDatetime, TypeB: TypeInt, Output: TypeDatetime}, {SigName: "builtinAddDateDatetimeRealSig", TypeA: TypeDatetime, TypeB: TypeReal, Output: TypeDatetime}, @@ -936,17 +858,33 @@ var addDataSigsTmpl = []sig{ {SigName: "builtinAddDateDurationIntSig", TypeA: TypeDuration, TypeB: TypeInt, Output: TypeDuration}, {SigName: "builtinAddDateDurationRealSig", TypeA: TypeDuration, TypeB: TypeReal, Output: TypeDuration}, {SigName: "builtinAddDateDurationDecimalSig", TypeA: TypeDuration, TypeB: TypeDecimal, Output: TypeDuration}, + {SigName: "builtinAddDateDurationStringSig", TypeA: TypeDuration, TypeB: TypeString, Output: TypeDatetime}, + {SigName: "builtinAddDateDurationIntSig", TypeA: TypeDuration, TypeB: TypeInt, Output: TypeDatetime}, + {SigName: "builtinAddDateDurationRealSig", TypeA: TypeDuration, TypeB: TypeReal, Output: TypeDatetime}, + {SigName: "builtinAddDateDurationDecimalSig", TypeA: TypeDuration, TypeB: TypeDecimal, Output: TypeDatetime}, } -var subDataSigsTmpl = []sig{ +var subDateSigsTmpl = []sig{ {SigName: "builtinSubDateStringStringSig", TypeA: TypeString, TypeB: TypeString, Output: TypeString}, {SigName: "builtinSubDateStringIntSig", TypeA: TypeString, TypeB: TypeInt, Output: TypeString}, {SigName: "builtinSubDateStringRealSig", TypeA: TypeString, TypeB: TypeReal, Output: TypeString}, {SigName: "builtinSubDateStringDecimalSig", TypeA: TypeString, TypeB: TypeDecimal, Output: TypeString}, - {SigName: "builtinSubDateIntStringSig", TypeA: TypeInt, TypeB: TypeString, Output: TypeDatetime}, - {SigName: "builtinSubDateIntIntSig", TypeA: TypeInt, TypeB: TypeInt, Output: TypeDatetime}, - {SigName: "builtinSubDateIntRealSig", TypeA: TypeInt, TypeB: TypeReal, Output: TypeDatetime}, - {SigName: "builtinSubDateIntDecimalSig", TypeA: TypeInt, TypeB: TypeDecimal, Output: TypeDatetime}, + {SigName: "builtinSubDateIntStringSig", TypeA: TypeInt, TypeB: TypeString, Output: TypeString}, + {SigName: "builtinSubDateIntIntSig", TypeA: TypeInt, TypeB: TypeInt, Output: TypeString}, + {SigName: "builtinSubDateIntRealSig", TypeA: TypeInt, TypeB: TypeReal, Output: TypeString}, + {SigName: "builtinSubDateIntDecimalSig", TypeA: TypeInt, TypeB: TypeDecimal, Output: TypeString}, + {SigName: "builtinSubDateRealStringSig", TypeA: TypeReal, TypeB: TypeString, Output: TypeString}, + {SigName: "builtinSubDateRealIntSig", TypeA: TypeReal, TypeB: TypeInt, Output: TypeString}, + {SigName: "builtinSubDateRealRealSig", TypeA: TypeReal, TypeB: TypeReal, Output: TypeString}, + {SigName: "builtinSubDateRealDecimalSig", TypeA: TypeReal, TypeB: TypeDecimal, Output: TypeString}, + {SigName: "builtinSubDateDecimalStringSig", TypeA: TypeDecimal, TypeB: TypeString, Output: TypeString}, + {SigName: "builtinSubDateDecimalIntSig", TypeA: TypeDecimal, TypeB: TypeInt, Output: TypeString}, + {SigName: "builtinSubDateDecimalRealSig", TypeA: TypeDecimal, TypeB: TypeReal, Output: TypeString}, + {SigName: "builtinSubDateDecimalDecimalSig", TypeA: TypeDecimal, TypeB: TypeDecimal, Output: TypeString}, + {SigName: "builtinSubDateDatetimeStringSig", TypeA: TypeDatetime, TypeB: TypeString, Output: TypeDatetime, FieldTypeA: "Date", FieldTypeB: "String"}, + {SigName: "builtinSubDateDatetimeIntSig", TypeA: TypeDatetime, TypeB: TypeInt, Output: TypeDatetime, FieldTypeA: "Date", FieldTypeB: "Longlong"}, + {SigName: "builtinSubDateDatetimeRealSig", TypeA: TypeDatetime, TypeB: TypeReal, Output: TypeDatetime, FieldTypeA: "Date", FieldTypeB: "Double"}, + {SigName: "builtinSubDateDatetimeDecimalSig", TypeA: TypeDatetime, TypeB: TypeDecimal, Output: TypeDatetime, FieldTypeA: "Date", FieldTypeB: "NewDecimal"}, {SigName: "builtinSubDateDatetimeStringSig", TypeA: TypeDatetime, TypeB: TypeString, Output: TypeDatetime}, {SigName: "builtinSubDateDatetimeIntSig", TypeA: TypeDatetime, TypeB: TypeInt, Output: TypeDatetime}, {SigName: "builtinSubDateDatetimeRealSig", TypeA: TypeDatetime, TypeB: TypeReal, Output: TypeDatetime}, @@ -955,6 +893,10 @@ var subDataSigsTmpl = []sig{ {SigName: "builtinSubDateDurationIntSig", TypeA: TypeDuration, TypeB: TypeInt, Output: TypeDuration}, {SigName: "builtinSubDateDurationRealSig", TypeA: TypeDuration, TypeB: TypeReal, Output: TypeDuration}, {SigName: "builtinSubDateDurationDecimalSig", TypeA: TypeDuration, TypeB: TypeDecimal, Output: TypeDuration}, + {SigName: "builtinSubDateDurationStringSig", TypeA: TypeDuration, TypeB: TypeString, Output: TypeDatetime}, + {SigName: "builtinSubDateDurationIntSig", TypeA: TypeDuration, TypeB: TypeInt, Output: TypeDatetime}, + {SigName: "builtinSubDateDurationRealSig", TypeA: TypeDuration, TypeB: TypeReal, Output: TypeDatetime}, + {SigName: "builtinSubDateDurationDecimalSig", TypeA: TypeDuration, TypeB: TypeDecimal, Output: TypeDatetime}, } type sig struct { @@ -979,8 +921,8 @@ var tmplVal = struct { {FuncName: "AddTime", Sigs: addTimeSigsTmpl}, {FuncName: "SubTime", Sigs: subTimeSigsTmpl}, {FuncName: "TimeDiff", Sigs: timeDiffSigsTmpl}, - {FuncName: "AddDate", Sigs: addDataSigsTmpl}, - {FuncName: "SubDate", Sigs: subDataSigsTmpl}, + {FuncName: "AddDate", Sigs: addDateSigsTmpl}, + {FuncName: "SubDate", Sigs: subDateSigsTmpl}, }, } @@ -998,14 +940,6 @@ func generateDotGo(fileName string) error { if err != nil { return err } - err = addOrSubDate.Execute(w, function{FuncName: "AddDate", Sigs: addDataSigsTmpl}) - if err != nil { - return err - } - err = addOrSubDate.Execute(w, function{FuncName: "SubDate", Sigs: subDataSigsTmpl}) - if err != nil { - return err - } data, err := format.Source(w.Bytes()) if err != nil { log.Println("[Warn]", fileName+": gofmt failed", err) diff --git a/expression/integration_serial_test.go b/expression/integration_serial_test.go index d43a5342d8b23..396195256f0e6 100644 --- a/expression/integration_serial_test.go +++ b/expression/integration_serial_test.go @@ -2769,6 +2769,7 @@ func TestTimeBuiltin(t *testing.T) { {"\"2011-11-11 00:00:00\"", "10", "HOUR", "2011-11-11 10:00:00", "2011-11-10 14:00:00"}, {"\"2011-11-11 00:00:00\"", "10", "MINUTE", "2011-11-11 00:10:00", "2011-11-10 23:50:00"}, {"\"2011-11-11 00:00:00\"", "10", "SECOND", "2011-11-11 00:00:10", "2011-11-10 23:59:50"}, + {"\"2011-11-11 00:00:00.500\"", "500000", "MICROSECOND", "2011-11-11 00:00:01", "2011-11-11 00:00:00"}, {"\"2011-11-11\"", "\"abc1000\"", "MICROSECOND", "2011-11-11 00:00:00", "2011-11-11 00:00:00"}, {"\"20111111 10:10:10\"", "\"1\"", "DAY", "", ""}, @@ -2777,6 +2778,7 @@ func TestTimeBuiltin(t *testing.T) { {"\"2011-11-11\"", "\"10:10:10\"", "MINUTE_MICROSECOND", "2011-11-11 00:10:10.100000", "2011-11-10 23:49:49.900000"}, {"cast(\"2011-11-11\" as datetime)", "\"10:10:10\"", "MINUTE_MICROSECOND", "2011-11-11 00:10:10.100000", "2011-11-10 23:49:49.900000"}, + {"cast(\"2011-11-11\" as datetime)", "\"1000000\"", "MICROSECOND", "2011-11-11 00:00:01.000000", "2011-11-10 23:59:59.000000"}, {"cast(\"2011-11-11 00:00:00\" as datetime)", "1", "DAY", "2011-11-12 00:00:00", "2011-11-10 00:00:00"}, {"cast(\"2011-11-11 00:00:00\" as datetime)", "10", "HOUR", "2011-11-11 10:00:00", "2011-11-10 14:00:00"}, {"cast(\"2011-11-11 00:00:00\" as datetime)", "10", "MINUTE", "2011-11-11 00:10:00", "2011-11-10 23:50:00"}, @@ -2785,9 +2787,10 @@ func TestTimeBuiltin(t *testing.T) { {"cast(\"2011-11-11 00:00:00\" as datetime)", "\"1\"", "DAY", "2011-11-12 00:00:00", "2011-11-10 00:00:00"}, {"cast(\"2011-11-11 00:00:00\" as datetime)", "\"10\"", "HOUR", "2011-11-11 10:00:00", "2011-11-10 14:00:00"}, {"cast(\"2011-11-11 00:00:00\" as datetime)", "\"10\"", "MINUTE", "2011-11-11 00:10:00", "2011-11-10 23:50:00"}, - {"cast(\"2011-11-11 00:00:00\" as datetime)", "\"10\"", "SECOND", "2011-11-11 00:00:10", "2011-11-10 23:59:50"}, + {"cast(\"2011-11-11 00:00:00\" as datetime)", "\"10\"", "SECOND", "2011-11-11 00:00:10.000000", "2011-11-10 23:59:50.000000"}, {"cast(\"2011-11-11\" as date)", "\"10:10:10\"", "MINUTE_MICROSECOND", "2011-11-11 00:10:10.100000", "2011-11-10 23:49:49.900000"}, + {"cast(\"2011-11-11\" as date)", "\"1000000\"", "MINUTE_MICROSECOND", "2011-11-11 00:00:01.000000", "2011-11-10 23:59:59.000000"}, {"cast(\"2011-11-11 00:00:00\" as date)", "1", "DAY", "2011-11-12", "2011-11-10"}, {"cast(\"2011-11-11 00:00:00\" as date)", "10", "HOUR", "2011-11-11 10:00:00", "2011-11-10 14:00:00"}, {"cast(\"2011-11-11 00:00:00\" as date)", "10", "MINUTE", "2011-11-11 00:10:00", "2011-11-10 23:50:00"}, @@ -2796,7 +2799,7 @@ func TestTimeBuiltin(t *testing.T) { {"cast(\"2011-11-11 00:00:00\" as date)", "\"1\"", "DAY", "2011-11-12", "2011-11-10"}, {"cast(\"2011-11-11 00:00:00\" as date)", "\"10\"", "HOUR", "2011-11-11 10:00:00", "2011-11-10 14:00:00"}, {"cast(\"2011-11-11 00:00:00\" as date)", "\"10\"", "MINUTE", "2011-11-11 00:10:00", "2011-11-10 23:50:00"}, - {"cast(\"2011-11-11 00:00:00\" as date)", "\"10\"", "SECOND", "2011-11-11 00:00:10", "2011-11-10 23:59:50"}, + {"cast(\"2011-11-11 00:00:00\" as date)", "\"10\"", "SECOND", "2011-11-11 00:00:10.000000", "2011-11-10 23:59:50.000000"}, // interval decimal support {"\"2011-01-01 00:00:00\"", "10.10", "YEAR_MONTH", "2021-11-01 00:00:00", "2000-03-01 00:00:00"}, @@ -2820,6 +2823,9 @@ func TestTimeBuiltin(t *testing.T) { {"\"2011-01-01 00:00:00\"", "10.10", "SECOND", "2011-01-01 00:00:10.100000", "2010-12-31 23:59:49.900000"}, {"\"2011-01-01 00:00:00\"", "10.10", "MICROSECOND", "2011-01-01 00:00:00.000010", "2010-12-31 23:59:59.999990"}, {"\"2011-01-01 00:00:00\"", "10.90", "MICROSECOND", "2011-01-01 00:00:00.000011", "2010-12-31 23:59:59.999989"}, + {"cast(\"2011-01-01\" as date)", "1.1", "SECOND", "2011-01-01 00:00:01.1", "2010-12-31 23:59:58.9"}, + {"cast(\"2011-01-01\" as datetime)", "1.1", "SECOND", "2011-01-01 00:00:01.1", "2010-12-31 23:59:58.9"}, + {"cast(\"2011-01-01\" as datetime(3))", "1.1", "SECOND", "2011-01-01 00:00:01.100", "2010-12-31 23:59:58.900"}, {"\"2009-01-01\"", "6/4", "HOUR_MINUTE", "2009-01-04 12:20:00", "2008-12-28 11:40:00"}, {"\"2009-01-01\"", "6/0", "HOUR_MINUTE", "", ""}, @@ -2838,6 +2844,65 @@ func TestTimeBuiltin(t *testing.T) { result = tk.MustQuery(subDate) result.Check(testkit.Rows(tc.SubResult)) } + + // Customized check for the cases of adddate(time, ...) - it returns datetime with current date padded. + // 1. Check if the result contains space, that is, it must contain YMD part. + // 2. Check if the result's suffix matches expected, that is, the HMS part is an exact match. + checkHmsMatch := func(actual []string, expected []interface{}) bool { + return strings.Contains(actual[0], " ") && strings.HasSuffix(actual[0], expected[0].(string)) + } + + // for date_add/sub(duration, ...) + dateAddSubDurationAnyTests := []struct { + Date string + Interval string + Unit string + AddResult string + SubResult string + checkHmsOnly bool // Duration + day returns datetime with current date padded, only check HMS part for them. + }{ + {"cast('01:02:03' as time)", "'1000'", "MICROSECOND", "01:02:03.001000", "01:02:02.999000", false}, + {"cast('01:02:03' as time)", "1000", "MICROSECOND", "01:02:03.001000", "01:02:02.999000", false}, + {"cast('01:02:03' as time)", "'1'", "SECOND", "01:02:04.000000", "01:02:02.000000", false}, + {"cast('01:02:03' as time)", "1", "SECOND", "01:02:04", "01:02:02", false}, + {"cast('01:02:03' as time)", "'1.1'", "SECOND", "01:02:04.100000", "01:02:01.900000", false}, + {"cast('01:02:03' as time)", "1.1", "SECOND", "01:02:04.1", "01:02:01.9", false}, + {"cast('01:02:03' as time(3))", "1.1", "SECOND", "01:02:04.100", "01:02:01.900", false}, + {"cast('01:02:03' as time)", "cast(1.1 as decimal(10, 3))", "SECOND", "01:02:04.100", "01:02:01.900", false}, + {"cast('01:02:03' as time)", "cast('1.5' as double)", "SECOND", "01:02:04.500000", "01:02:01.500000", false}, + {"cast('01:02:03' as time)", "1", "DAY_MICROSECOND", "01:02:03.100000", "01:02:02.900000", false}, + {"cast('01:02:03' as time)", "1.1", "DAY_MICROSECOND", "01:02:04.100000", "01:02:01.900000", false}, + {"cast('01:02:03' as time)", "100", "DAY_MICROSECOND", "01:02:03.100000", "01:02:02.900000", false}, + {"cast('01:02:03' as time)", "1000000", "DAY_MICROSECOND", "01:02:04.000000", "01:02:02.000000", false}, + {"cast('01:02:03' as time)", "1", "DAY_SECOND", "01:02:04", "01:02:02", true}, + {"cast('01:02:03' as time)", "1.1", "DAY_SECOND", "01:03:04", "01:01:02", true}, + {"cast('01:02:03' as time)", "1", "DAY_MINUTE", "01:03:03", "01:01:03", true}, + {"cast('01:02:03' as time)", "1.1", "DAY_MINUTE", "02:03:03", "00:01:03", true}, + {"cast('01:02:03' as time)", "1", "DAY_HOUR", "02:02:03", "00:02:03", true}, + {"cast('01:02:03' as time)", "1.1", "DAY_HOUR", "02:02:03", "00:02:03", true}, + {"cast('01:02:03' as time)", "1", "DAY", "01:02:03", "01:02:03", true}, + {"cast('01:02:03' as time)", "1", "WEEK", "01:02:03", "01:02:03", true}, + {"cast('01:02:03' as time)", "1", "MONTH", "01:02:03", "01:02:03", true}, + {"cast('01:02:03' as time)", "1", "QUARTER", "01:02:03", "01:02:03", true}, + {"cast('01:02:03' as time)", "1", "YEAR", "01:02:03", "01:02:03", true}, + {"cast('01:02:03' as time)", "1", "YEAR_MONTH", "01:02:03", "01:02:03", true}, + } + for _, tc := range dateAddSubDurationAnyTests { + addDate := fmt.Sprintf("select date_add(%s, interval %s %s);", tc.Date, tc.Interval, tc.Unit) + subDate := fmt.Sprintf("select date_sub(%s, interval %s %s);", tc.Date, tc.Interval, tc.Unit) + if tc.checkHmsOnly { + result = tk.MustQuery(addDate) + result.CheckWithFunc(testkit.Rows(tc.AddResult), checkHmsMatch) + result = tk.MustQuery(subDate) + result.CheckWithFunc(testkit.Rows(tc.SubResult), checkHmsMatch) + } else { + result = tk.MustQuery(addDate) + result.Check(testkit.Rows(tc.AddResult)) + result = tk.MustQuery(subDate) + result.Check(testkit.Rows(tc.SubResult)) + } + } + tk.MustQuery(`select subdate(cast("2000-02-01" as datetime), cast(1 as decimal))`).Check(testkit.Rows("2000-01-31 00:00:00")) tk.MustQuery(`select subdate(cast("2000-02-01" as datetime), cast(null as decimal))`).Check(testkit.Rows("")) tk.MustQuery(`select subdate(cast(null as datetime), cast(1 as decimal))`).Check(testkit.Rows("")) @@ -2859,8 +2924,8 @@ func TestTimeBuiltin(t *testing.T) { tk.MustQuery(`select adddate(cast("2000-02-01" as datetime), cast("xxx" as SIGNED))`).Check(testkit.Rows("2000-02-01 00:00:00")) tk.MustQuery(`select adddate(cast("xxx" as datetime), cast(1 as SIGNED))`).Check(testkit.Rows("")) tk.MustQuery(`select adddate(20100101, cast(1 as decimal))`).Check(testkit.Rows("2010-01-02")) - tk.MustQuery(`select adddate(cast('10:10:10' as time), 1)`).Check(testkit.Rows("34:10:10")) - tk.MustQuery(`select adddate(cast('10:10:10' as time), cast(1 as decimal))`).Check(testkit.Rows("34:10:10")) + tk.MustQuery(`select adddate(cast('10:10:10' as time), 1)`).CheckWithFunc(testkit.Rows("10:10:10"), checkHmsMatch) + tk.MustQuery(`select adddate(cast('10:10:10' as time), cast(1 as decimal))`).CheckWithFunc(testkit.Rows("10:10:10"), checkHmsMatch) // for localtime, localtimestamp result = tk.MustQuery(`select localtime() = now(), localtime = now(), localtimestamp() = now(), localtimestamp = now()`) diff --git a/expression/integration_test.go b/expression/integration_test.go index 99e72ff71e83f..7b19ba32fb39a 100644 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -3444,6 +3444,7 @@ func TestDateTimeAddReal(t *testing.T) { {`select date("1900-01-01") + interval 1.123456789e3 second;`, "1900-01-01 00:18:43.456789"}, {`SELECT "1900-01-01 00:18:43.456789" - INTERVAL 1.123456789e3 SECOND;`, "1900-01-01 00:00:00"}, {`SELECT 19000101001843.456789 - INTERVAL 1.123456789e3 SECOND;`, "1900-01-01 00:00:00"}, + {`SELECT 19000101000000.0005 + INTERVAL 0.0005 SECOND;`, "1900-01-01 00:00:00.001000"}, {`select date("1900-01-01") - interval 1.123456789e3 second;`, "1899-12-31 23:41:16.543211"}, {`select 19000101000000 - interval 1.123456789e3 second;`, "1899-12-31 23:41:16.543211"}, } @@ -7008,3 +7009,182 @@ func TestIssue33397(t *testing.T) { result := tk.MustQuery("select compress(a) from t").Rows() require.Equal(t, [][]interface{}{{""}, {""}}, result) } +<<<<<<< HEAD +======= + +func TestIssue34659(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t(a varchar(32))") + tk.MustExec("insert into t values(date_add(cast('00:00:00' as time), interval 1.1 second))") + result := tk.MustQuery("select * from t").Rows() + require.Equal(t, [][]interface{}{{"00:00:01.1"}}, result) + + result = tk.MustQuery("select cast(date_add(cast('00:00:00' as time), interval 1.1 second) as char)").Rows() + require.Equal(t, [][]interface{}{{"00:00:01.1"}}, result) + + result = tk.MustQuery("select cast(date_add(cast('00:00:00' as time), interval 1.1 microsecond) as char)").Rows() + require.Equal(t, [][]interface{}{{"00:00:00.000001"}}, result) + + result = tk.MustQuery("select cast(date_add(cast('00:00:00' as time), interval 1000000 microsecond) as char)").Rows() + require.Equal(t, [][]interface{}{{"00:00:01.000000"}}, result) + + result = tk.MustQuery("select cast(date_add(cast('00:00:00' as time), interval 1.1111119 second) as char)").Rows() + require.Equal(t, [][]interface{}{{"00:00:01.111111"}}, result) + + result = tk.MustQuery("select cast(date_add(cast('00:00:00' as time), interval 1.0 second) as char)").Rows() + require.Equal(t, [][]interface{}{{"00:00:01.0"}}, result) + + result = tk.MustQuery("select cast(date_add(cast('00:00:00' as time), interval 1.1 second_microsecond) as char)").Rows() + require.Equal(t, [][]interface{}{{"00:00:01.100000"}}, result) + + result = tk.MustQuery("select cast(date_add(cast('00:00:00' as time), interval 1111111 second_microsecond) as char)").Rows() + require.Equal(t, [][]interface{}{{"00:00:01.111111"}}, result) + + result = tk.MustQuery("select cast(date_add(cast('00:00:00' as time), interval 1.1 minute_microsecond) as char)").Rows() + require.Equal(t, [][]interface{}{{"00:00:01.100000"}}, result) + + result = tk.MustQuery("select cast(date_add(cast('00:00:00' as time), interval 1111111 minute_microsecond) as char)").Rows() + require.Equal(t, [][]interface{}{{"00:00:01.111111"}}, result) + + result = tk.MustQuery("select cast(date_add(cast('00:00:00' as time), interval 1.1 minute_second) as char)").Rows() + require.Equal(t, [][]interface{}{{"00:01:01"}}, result) + + result = tk.MustQuery("select cast(date_add(cast('00:00:00' as time), interval 1111111 minute_second) as char)").Rows() + require.Equal(t, [][]interface{}{{"308:38:31"}}, result) + + result = tk.MustQuery("select cast(date_add(cast('00:00:00' as time), interval 1.1 hour_microsecond) as char)").Rows() + require.Equal(t, [][]interface{}{{"00:00:01.100000"}}, result) + + result = tk.MustQuery("select cast(date_add(cast('00:00:00' as time), interval 1111111 hour_microsecond) as char)").Rows() + require.Equal(t, [][]interface{}{{"00:00:01.111111"}}, result) + + result = tk.MustQuery("select cast(date_add(cast('00:00:00' as time), interval 1.1 hour_second) as char)").Rows() + require.Equal(t, [][]interface{}{{"00:01:01"}}, result) + + result = tk.MustQuery("select cast(date_add(cast('00:00:00' as time), interval 1111111 hour_second) as char)").Rows() + require.Equal(t, [][]interface{}{{"308:38:31"}}, result) + + result = tk.MustQuery("select cast(date_add(cast('00:00:00' as time), interval 1.1 hour_minute) as char)").Rows() + require.Equal(t, [][]interface{}{{"01:01:00"}}, result) + + result = tk.MustQuery("select cast(date_add(cast('00:00:00' as time), interval 1.1 day_microsecond) as char)").Rows() + require.Equal(t, [][]interface{}{{"00:00:01.100000"}}, result) + + result = tk.MustQuery("select cast(date_add(cast('00:00:00' as time), interval 1111111 day_microsecond) as char)").Rows() + require.Equal(t, [][]interface{}{{"00:00:01.111111"}}, result) +} + +func TestIssue31799(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(i int, c varchar(32))") + tk.MustExec("insert into t values(1, date_add(cast('2001-01-01 00:00:00' as datetime), interval 1 second))") + tk.MustExec("insert into t values(2, date_add(cast('2001-01-01 00:00:00' as datetime(6)), interval 1 second))") + tk.MustExec("insert into t values(3, date_add(cast('2001-01-01 00:00:00' as datetime), interval 1.1 second))") + tk.MustExec("insert into t values(4, date_add(cast('2001-01-01 00:00:00' as datetime(6)), interval 1.1 second))") + tk.MustExec("insert into t values(5, date_add(cast('00:00:00' as time), interval 1.1 second))") + tk.MustQuery("select c from t order by i").Check([][]interface{}{{"2001-01-01 00:00:01"}, {"2001-01-01 00:00:01.000000"}, {"2001-01-01 00:00:01.1"}, {"2001-01-01 00:00:01.100000"}, {"00:00:01.1"}}) + tk.MustExec("drop table t") +} + +func TestIssue31867(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("set time_zone = '+00:00'") + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(ts timestamp(6) not null default current_timestamp(6) on update current_timestamp(6))") + tk.MustExec("insert into t values('1970-01-01 01:00:01.000000')") + tk.MustExec("insert into t values('1970-01-01 01:00:01.000001')") + tk.MustExec("insert into t values('1971-01-01 01:00:00.000000')") + tk.MustExec("insert into t values('1971-01-01 01:00:00.000001')") + tk.MustExec("insert into t values('2001-01-01 00:00:00.000000')") + tk.MustExec("insert into t values('2001-01-01 00:00:00.000001')") + tk.MustExec("insert into t values('2001-01-01 01:00:00.000000')") + tk.MustExec("insert into t values('2001-01-01 01:00:00.000001')") + tk.MustQuery("select date_add(ts, interval 1 minute) from t order by ts").Check([][]interface{}{ + {"1970-01-01 01:01:01.000000"}, + {"1970-01-01 01:01:01.000001"}, + {"1971-01-01 01:01:00.000000"}, + {"1971-01-01 01:01:00.000001"}, + {"2001-01-01 00:01:00.000000"}, + {"2001-01-01 00:01:00.000001"}, + {"2001-01-01 01:01:00.000000"}, + {"2001-01-01 01:01:00.000001"}, + }) + tk.MustQuery("select date_sub(ts, interval 1 minute) from t order by ts").Check([][]interface{}{ + {"1970-01-01 00:59:01.000000"}, + {"1970-01-01 00:59:01.000001"}, + {"1971-01-01 00:59:00.000000"}, + {"1971-01-01 00:59:00.000001"}, + {"2000-12-31 23:59:00.000000"}, + {"2000-12-31 23:59:00.000001"}, + {"2001-01-01 00:59:00.000000"}, + {"2001-01-01 00:59:00.000001"}, + }) + tk.MustExec("drop table t") +} + +func TestDateAddForNonExistingTimestamp(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("set time_zone = 'CET'") + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(ts timestamp)") + tk.MustExec("set time_zone = 'UTC'") + tk.MustExec("insert into t values('2022-03-27 00:30:00')") + tk.MustExec("insert into t values('2022-10-30 00:30:00')") + tk.MustExec("insert into t values('2022-10-30 01:30:00')") + tk.MustExec("set time_zone = 'Europe/Amsterdam'") + // Non-existing CET timestamp. + tk.MustGetErrCode("insert into t values('2022-03-27 02:30:00')", errno.ErrTruncatedWrongValue) + tk.MustQuery("select date_add(ts, interval 1 hour) from t order by ts").Check([][]interface{}{ + {"2022-03-27 02:30:00"}, + {"2022-10-30 03:30:00"}, + {"2022-10-30 03:30:00"}, + }) + tk.MustExec("drop table t") +} + +func TestImcompleteDateFunc(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustQuery("select to_seconds('1998-10-00')").Check(testkit.Rows("")) + tk.MustQuery("select to_seconds('1998-00-11')").Check(testkit.Rows("")) + tk.MustQuery("SELECT CONVERT_TZ('2004-10-00 12:00:00','GMT','MET');").Check(testkit.Rows("")) + tk.MustQuery("SELECT CONVERT_TZ('2004-00-01 12:00:00','GMT','MET');").Check(testkit.Rows("")) + tk.MustQuery("SELECT DATE_ADD('1998-10-00',INTERVAL 1 DAY);").Check(testkit.Rows("")) + tk.MustQuery("SELECT DATE_ADD('2004-00-01',INTERVAL 1 DAY);").Check(testkit.Rows("")) + tk.MustQuery("SELECT DATE_SUB('1998-10-00', INTERVAL 31 DAY);").Check(testkit.Rows("")) + tk.MustQuery("SELECT DATE_SUB('2004-00-01', INTERVAL 31 DAY);").Check(testkit.Rows("")) + tk.MustQuery("SELECT DAYOFYEAR('2007-00-03');").Check(testkit.Rows("")) + tk.MustQuery("SELECT DAYOFYEAR('2007-02-00');;").Check(testkit.Rows("")) + tk.MustQuery("SELECT TIMESTAMPDIFF(MONTH,'2003-00-01','2003-05-01');").Check(testkit.Rows("")) + tk.MustQuery("SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-00');;").Check(testkit.Rows("")) + tk.MustQuery("select to_days('1998-10-00')").Check(testkit.Rows("")) + tk.MustQuery("select to_days('1998-10-00')").Check(testkit.Rows("")) + tk.MustQuery("select week('1998-10-00')").Check(testkit.Rows("")) + tk.MustQuery("select week('1998-00-11')").Check(testkit.Rows("")) + tk.MustQuery("select WEEKDAY('1998-10-00')").Check(testkit.Rows("")) + tk.MustQuery("select WEEKDAY('1998-00-11')").Check(testkit.Rows("")) + tk.MustQuery("select WEEKOFYEAR('1998-10-00')").Check(testkit.Rows("")) + tk.MustQuery("select WEEKOFYEAR('1998-00-11')").Check(testkit.Rows("")) + tk.MustQuery("select YEARWEEK('1998-10-00')").Check(testkit.Rows("")) + tk.MustQuery("select YEARWEEK('1998-00-11')").Check(testkit.Rows("")) +} +>>>>>>> 4ae78cdea... expression: refine date_add/sub return type and precision (#35009) diff --git a/expression/typeinfer_test.go b/expression/typeinfer_test.go index e8874017826a8..ad818ffe7298e 100644 --- a/expression/typeinfer_test.go +++ b/expression/typeinfer_test.go @@ -103,6 +103,7 @@ func TestInferType(t *testing.T) { tests = append(tests, s.createTestCase4OpFuncs()...) tests = append(tests, s.createTestCase4OtherFuncs()...) tests = append(tests, s.createTestCase4TimeFuncs()...) + tests = append(tests, s.createTestCase4DateAddSubFuncs()...) tests = append(tests, s.createTestCase4LikeFuncs()...) tests = append(tests, s.createTestCase4Literals()...) tests = append(tests, s.createTestCase4JSONFuncs()...) @@ -1906,7 +1907,10 @@ func (s *InferTypeSuite) createTestCase4TimeFuncs() []typeInferTestCase { {"extract(day from c_char)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxIntWidth, 0}, {"extract(hour from c_char)", mysql.TypeLonglong, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxIntWidth, 0}, + } +} +<<<<<<< HEAD {"date_add('20121212', interval 1 day)", mysql.TypeVarString, charset.CharsetBin, mysql.BinaryFlag | mysql.NotNullFlag, mysql.MaxDatetimeFullWidth, types.UnspecifiedLength}, {"date_sub('20121212', interval 1 day)", mysql.TypeVarString, charset.CharsetBin, mysql.BinaryFlag | mysql.NotNullFlag, mysql.MaxDatetimeFullWidth, types.UnspecifiedLength}, {"date_add(c_datetime, interval 1 day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 26, 6}, @@ -1917,6 +1921,989 @@ func (s *InferTypeSuite) createTestCase4TimeFuncs() []typeInferTestCase { {"date_sub(c_date, interval 1 day)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, 0}, {"date_add(c_date, interval 1 hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 26, 6}, {"date_sub(c_date, interval 1 hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 26, 6}, +======= +func (s *InferTypeSuite) createTestCase4DateAddSubFuncs() []typeInferTestCase { + return []typeInferTestCase{ + // Legacy. + {"date_add('20121212', interval 1 day)", mysql.TypeVarString, charset.CharsetUTF8MB4, mysql.NotNullFlag, mysql.MaxDatetimeFullWidth, types.MinFsp}, + {"date_sub('20121212', interval 1 day)", mysql.TypeVarString, charset.CharsetUTF8MB4, mysql.NotNullFlag, mysql.MaxDatetimeFullWidth, types.MinFsp}, + {"date_add(c_datetime, interval 1 day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_sub(c_datetime, interval 1 day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval 1 hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_sub(c_datetime, interval 1 hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_date, interval 1 day)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_sub(c_date, interval 1 day)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval 1 hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_sub(c_date, interval 1 hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // date + microsecond. + {"date_add(c_date, interval c_char microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_varchar microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_int_d microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_bigint_d microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_double_d microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_decimal microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // date + second_microsecond. + {"date_add(c_date, interval c_char second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_varchar second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_int_d second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_bigint_d second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_double_d second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_decimal second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // date + minute_microsecond. + {"date_add(c_date, interval c_char minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_varchar minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_int_d minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_bigint_d minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_double_d minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_decimal minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // date + hour_microsecond. + {"date_add(c_date, interval c_char hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_varchar hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_int_d hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_bigint_d hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_double_d hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_decimal hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // date + day_microsecond. + {"date_add(c_date, interval c_char day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_varchar day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_int_d day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_bigint_d day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_double_d day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_decimal day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // date + second. + {"date_add(c_date, interval c_char second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_varchar second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_int_d second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_bigint_d second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_double_d second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_date, interval c_decimal second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + + // date + minute_second. + {"date_add(c_date, interval c_char minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_varchar minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_int_d minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_bigint_d minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_double_d minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_decimal minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // date + hour_second. + {"date_add(c_date, interval c_char hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_varchar hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_int_d hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_bigint_d hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_double_d hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_decimal hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // date + day_second. + {"date_add(c_date, interval c_char day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_varchar day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_int_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_bigint_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_double_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_decimal day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // date + minute. + {"date_add(c_date, interval c_char minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_varchar minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_int_d minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_bigint_d minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_double_d minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_decimal minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // date + hour_minute. + {"date_add(c_date, interval c_char hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_varchar hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_int_d hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_bigint_d hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_double_d hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_decimal hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // date + day_minute. + {"date_add(c_date, interval c_char day_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_varchar day_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_int_d day_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_bigint_d day_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_double_d day_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_decimal day_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // date + hour. + {"date_add(c_date, interval c_char hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_varchar hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_int_d hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_bigint_d hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_double_d hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_decimal hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // date + day_hour. + {"date_add(c_date, interval c_char day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_varchar day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_int_d day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_bigint_d day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_double_d day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_date, interval c_decimal day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // date + day. + {"date_add(c_date, interval c_char day)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_varchar day)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_int_d day)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_bigint_d day)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_double_d day)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_decimal day)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + + // date + week. + {"date_add(c_date, interval c_char week)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_varchar week)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_int_d week)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_bigint_d week)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_double_d week)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_decimal week)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + + // date + month. + {"date_add(c_date, interval c_char month)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_varchar month)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_int_d month)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_bigint_d month)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_double_d month)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_decimal month)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + + // date + year_month. + {"date_add(c_date, interval c_char year_month)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_varchar year_month)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_int_d year_month)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_bigint_d year_month)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_double_d year_month)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_decimal year_month)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + + // date + quarter. + {"date_add(c_date, interval c_char quarter)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_varchar quarter)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_int_d quarter)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_bigint_d quarter)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_double_d quarter)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_decimal quarter)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + + // date + year. + {"date_add(c_date, interval c_char year)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_varchar year)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_int_d year)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_bigint_d year)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_double_d year)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + {"date_add(c_date, interval c_decimal year)", mysql.TypeDate, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDateWidth, types.MinFsp}, + + // time(3) + microsecond. + {"date_add(c_time, interval c_char microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_varchar microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_int_d microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_bigint_d microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_double_d microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_decimal microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + + // time(3) + second_microsecond. + {"date_add(c_time, interval c_char second_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_varchar second_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_int_d second_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_bigint_d second_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_double_d second_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_decimal second_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + + // time(3) + minute_microsecond. + {"date_add(c_time, interval c_char minute_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_varchar minute_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_int_d minute_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_bigint_d minute_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_double_d minute_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_decimal minute_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + + // time(3) + hour_microsecond. + {"date_add(c_time, interval c_char hour_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_varchar hour_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_int_d hour_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_bigint_d hour_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_double_d hour_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_decimal hour_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + + // time(3) + day_microsecond. + {"date_add(c_time, interval c_char day_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_varchar day_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_int_d day_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_bigint_d day_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_double_d day_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_decimal day_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + + // time(3) + second. + {"date_add(c_time, interval c_char second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_varchar second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_int_d second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_bigint_d second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_double_d second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time, interval c_decimal second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + + // time(3) + minute_second. + {"date_add(c_time, interval c_char minute_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_varchar minute_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_int_d minute_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_bigint_d minute_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_double_d minute_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_decimal minute_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + + // time(3) + hour_second. + {"date_add(c_time, interval c_char hour_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_varchar hour_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_int_d hour_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_bigint_d hour_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_double_d hour_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_decimal hour_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + + // time(3) + day_second. + {"date_add(c_time, interval c_char day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_varchar day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_int_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_bigint_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_double_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_decimal day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + + // time(3) + minute. + {"date_add(c_time, interval c_char minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_varchar minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_int_d minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_bigint_d minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_double_d minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_decimal minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + + // time(3) + hour_minute. + {"date_add(c_time, interval c_char hour_minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_varchar hour_minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_int_d hour_minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_bigint_d hour_minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_double_d hour_minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_decimal hour_minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + + // time(3) + day_minute. + {"date_add(c_time, interval c_char day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_varchar day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_int_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_bigint_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_double_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_decimal day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + + // time(3) + hour. + {"date_add(c_time, interval c_char hour)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_varchar hour)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_int_d hour)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_bigint_d hour)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_double_d hour)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + {"date_add(c_time, interval c_decimal hour)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + + // time(3) + day_hour. + {"date_add(c_time, interval c_char day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_varchar day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_int_d day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_bigint_d day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_double_d day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_decimal day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + + // time(3) + day. + {"date_add(c_time, interval c_char day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_varchar day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_int_d day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_bigint_d day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_double_d day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_decimal day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + + // time(3) + week. + {"date_add(c_time, interval c_char week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_varchar week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_int_d week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_bigint_d week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_double_d week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_decimal week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + + // time(3) + month. + {"date_add(c_time, interval c_char month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_varchar month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_int_d month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_bigint_d month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_double_d month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_decimal month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + + // time(3) + year_month. + {"date_add(c_time, interval c_char year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_varchar year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_int_d year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_bigint_d year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_double_d year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_decimal year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + + // time(3) + quarter. + {"date_add(c_time, interval c_char quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_varchar quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_int_d quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_bigint_d quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_double_d quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_decimal quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + + // time(3) + year. + {"date_add(c_time, interval c_char year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_varchar year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_int_d year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_bigint_d year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_double_d year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + {"date_add(c_time, interval c_decimal year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + + // time + microsecond. + {"date_add(c_time_d, interval c_char microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_varchar microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_int_d microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_bigint_d microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_double_d microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_decimal microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + + // time + second_microsecond. + {"date_add(c_time_d, interval c_char second_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_varchar second_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_int_d second_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_bigint_d second_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_double_d second_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_decimal second_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + + // time + minute_microsecond. + {"date_add(c_time_d, interval c_char minute_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_varchar minute_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_int_d minute_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_bigint_d minute_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_double_d minute_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_decimal minute_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + + // time + hour_microsecond. + {"date_add(c_time_d, interval c_char hour_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_varchar hour_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_int_d hour_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_bigint_d hour_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_double_d hour_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_decimal hour_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + + // time + day_microsecond. + {"date_add(c_time_d, interval c_char day_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_varchar day_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_int_d day_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_bigint_d day_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_double_d day_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_decimal day_microsecond)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + + // time + second. + {"date_add(c_time_d, interval c_char second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_varchar second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_int_d second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_bigint_d second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_double_d second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthWithFsp, types.MaxFsp}, + {"date_add(c_time_d, interval c_decimal second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, 14, 3}, + + // time + minute_second. + {"date_add(c_time_d, interval c_char minute_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_varchar minute_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_int_d minute_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_bigint_d minute_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_double_d minute_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_decimal minute_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + + // time + hour_second. + {"date_add(c_time_d, interval c_char hour_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_varchar hour_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_int_d hour_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_bigint_d hour_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_double_d hour_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_decimal hour_second)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + + // time + day_second. + {"date_add(c_time_d, interval c_char day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_varchar day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_int_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_bigint_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_double_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_decimal day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // time + minute. + {"date_add(c_time_d, interval c_char minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_varchar minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_int_d minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_bigint_d minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_double_d minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_decimal minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + + // time + hour_minute. + {"date_add(c_time_d, interval c_char hour_minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_varchar hour_minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_int_d hour_minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_bigint_d hour_minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_double_d hour_minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_decimal hour_minute)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + + // time + day_minute. + {"date_add(c_time_d, interval c_char day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_varchar day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_int_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_bigint_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_double_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_decimal day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // time + hour. + {"date_add(c_time_d, interval c_char hour)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_varchar hour)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_int_d hour)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_bigint_d hour)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_double_d hour)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_decimal hour)", mysql.TypeDuration, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDurationWidthNoFsp, types.MinFsp}, + + // time + day_hour. + {"date_add(c_time_d, interval c_char day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_varchar day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_int_d day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_bigint_d day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_double_d day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_decimal day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // time + day. + {"date_add(c_time_d, interval c_char day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_varchar day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_int_d day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_bigint_d day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_double_d day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_decimal day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // time + week. + {"date_add(c_time_d, interval c_char week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_varchar week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_int_d week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_bigint_d week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_double_d week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_decimal week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // time + month. + {"date_add(c_time_d, interval c_char month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_varchar month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_int_d month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_bigint_d month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_double_d month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_decimal month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // time + year_month. + {"date_add(c_time_d, interval c_char year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_varchar year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_int_d year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_bigint_d year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_double_d year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_decimal year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // time + quarter. + {"date_add(c_time_d, interval c_char quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_varchar quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_int_d quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_bigint_d quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_double_d quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_decimal quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // time + year. + {"date_add(c_time_d, interval c_char year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_varchar year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_int_d year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_bigint_d year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_double_d year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_time_d, interval c_decimal year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // datetime(2) + microsecond. + {"date_add(c_datetime, interval c_char microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_varchar microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_int_d microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_bigint_d microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_double_d microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_decimal microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // datetime(2) + second_microsecond. + {"date_add(c_datetime, interval c_char second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_varchar second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_int_d second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_bigint_d second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_double_d second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_decimal second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // datetime(2) + minute_microsecond. + {"date_add(c_datetime, interval c_char minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_varchar minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_int_d minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_bigint_d minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_double_d minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_decimal minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // datetime(2) + hour_microsecond. + {"date_add(c_datetime, interval c_char hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_varchar hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_int_d hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_bigint_d hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_double_d hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_decimal hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // datetime(2) + day_microsecond. + {"date_add(c_datetime, interval c_char day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_varchar day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_int_d day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_bigint_d day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_double_d day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_decimal day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // datetime(2) + second. + {"date_add(c_datetime, interval c_char second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_varchar second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_int_d second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_bigint_d second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_double_d second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime, interval c_decimal second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + + // datetime(2) + minute_second. + {"date_add(c_datetime, interval c_char minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_varchar minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_int_d minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_bigint_d minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_double_d minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_decimal minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + + // datetime(2) + hour_second. + {"date_add(c_datetime, interval c_char hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_varchar hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_int_d hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_bigint_d hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_double_d hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_decimal hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + + // datetime(2) + day_second. + {"date_add(c_datetime, interval c_char day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_varchar day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_int_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_bigint_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_double_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_decimal day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + + // datetime(2) + minute. + {"date_add(c_datetime, interval c_char minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_varchar minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_int_d minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_bigint_d minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_double_d minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_decimal minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + + // datetime(2) + hour_minute. + {"date_add(c_datetime, interval c_char hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_varchar hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_int_d hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_bigint_d hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_double_d hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_decimal hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + + // datetime(2) + day_minute. + {"date_add(c_datetime, interval c_char day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_varchar day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_int_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_bigint_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_double_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_decimal day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + + // datetime(2) + hour. + {"date_add(c_datetime, interval c_char hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_varchar hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_int_d hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_bigint_d hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_double_d hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_decimal hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + + // datetime(2) + day_hour. + {"date_add(c_datetime, interval c_char day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_varchar day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_int_d day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_bigint_d day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_double_d day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_decimal day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + + // datetime(2) + day. + {"date_add(c_datetime, interval c_char day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_varchar day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_int_d day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_bigint_d day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_double_d day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_decimal day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + + // datetime(2) + week. + {"date_add(c_datetime, interval c_char week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_varchar week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_int_d week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_bigint_d week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_double_d week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_decimal week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + + // datetime(2) + month. + {"date_add(c_datetime, interval c_char month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_varchar month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_int_d month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_bigint_d month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_double_d month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_decimal month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + + // datetime(2) + year_month. + {"date_add(c_datetime, interval c_char year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_varchar year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_int_d year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_bigint_d year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_double_d year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_decimal year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + + // datetime(2) + quarter. + {"date_add(c_datetime, interval c_char quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_varchar quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_int_d quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_bigint_d quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_double_d quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_decimal quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + + // datetime(2) + year. + {"date_add(c_datetime, interval c_char year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_varchar year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_int_d year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_bigint_d year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_double_d year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + {"date_add(c_datetime, interval c_decimal year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 22, 2}, + + // datetime + microsecond. + {"date_add(c_datetime_d, interval c_char microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_varchar microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_int_d microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_bigint_d microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_double_d microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_decimal microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // datetime + second_microsecond. + {"date_add(c_datetime_d, interval c_char second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_varchar second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_int_d second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_bigint_d second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_double_d second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_decimal second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // datetime + minute_microsecond. + {"date_add(c_datetime_d, interval c_char minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_varchar minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_int_d minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_bigint_d minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_double_d minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_decimal minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // datetime + hour_microsecond. + {"date_add(c_datetime_d, interval c_char hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_varchar hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_int_d hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_bigint_d hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_double_d hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_decimal hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // datetime + day_microsecond. + {"date_add(c_datetime_d, interval c_char day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_varchar day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_int_d day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_bigint_d day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_double_d day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_decimal day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // datetime + second. + {"date_add(c_datetime_d, interval c_char second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_varchar second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_int_d second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_bigint_d second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_double_d second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_datetime_d, interval c_decimal second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + + // datetime + minute_second. + {"date_add(c_datetime_d, interval c_char minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_varchar minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_int_d minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_bigint_d minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_double_d minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_decimal minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // datetime + hour_second. + {"date_add(c_datetime_d, interval c_char hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_varchar hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_int_d hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_bigint_d hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_double_d hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_decimal hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // datetime + day_second. + {"date_add(c_datetime_d, interval c_char day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_varchar day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_int_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_bigint_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_double_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_decimal day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // datetime + minute. + {"date_add(c_datetime_d, interval c_char minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_varchar minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_int_d minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_bigint_d minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_double_d minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_decimal minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // datetime + hour_minute. + {"date_add(c_datetime_d, interval c_char hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_varchar hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_int_d hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_bigint_d hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_double_d hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_decimal hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // datetime + day_minute. + {"date_add(c_datetime_d, interval c_char day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_varchar day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_int_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_bigint_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_double_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_decimal day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // datetime + hour. + {"date_add(c_datetime_d, interval c_char hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_varchar hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_int_d hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_bigint_d hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_double_d hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_decimal hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // datetime + day_hour. + {"date_add(c_datetime_d, interval c_char day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_varchar day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_int_d day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_bigint_d day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_double_d day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_decimal day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // datetime + day. + {"date_add(c_datetime_d, interval c_char day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_varchar day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_int_d day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_bigint_d day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_double_d day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_decimal day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // datetime + week. + {"date_add(c_datetime_d, interval c_char week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_varchar week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_int_d week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_bigint_d week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_double_d week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_decimal week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // datetime + month. + {"date_add(c_datetime_d, interval c_char month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_varchar month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_int_d month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_bigint_d month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_double_d month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_decimal month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // datetime + year_month. + {"date_add(c_datetime_d, interval c_char year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_varchar year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_int_d year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_bigint_d year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_double_d year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_decimal year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // datetime + quarter. + {"date_add(c_datetime_d, interval c_char quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_varchar quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_int_d quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_bigint_d quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_double_d quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_decimal quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // datetime + year. + {"date_add(c_datetime_d, interval c_char year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_varchar year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_int_d year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_bigint_d year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_double_d year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_datetime_d, interval c_decimal year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // timestamp + microsecond. + {"date_add(c_timestamp_d, interval c_char microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_varchar microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_int_d microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_double_d microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_decimal microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // timestamp + second_microsecond. + {"date_add(c_timestamp_d, interval c_char second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_varchar second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_int_d second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_double_d second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_decimal second_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // timestamp + minute_microsecond. + {"date_add(c_timestamp_d, interval c_char minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_varchar minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_int_d minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_double_d minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_decimal minute_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // timestamp + hour_microsecond. + {"date_add(c_timestamp_d, interval c_char hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_varchar hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_int_d hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_double_d hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_decimal hour_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // timestamp + day_microsecond. + {"date_add(c_timestamp_d, interval c_char day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_varchar day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_int_d day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_double_d day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_decimal day_microsecond)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + + // timestamp + second. + {"date_add(c_timestamp_d, interval c_char second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_varchar second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_int_d second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_double_d second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthWithFsp, types.MaxFsp}, + {"date_add(c_timestamp_d, interval c_decimal second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, 23, 3}, + + // timestamp + minute_second. + {"date_add(c_timestamp_d, interval c_char minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_varchar minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_int_d minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_double_d minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_decimal minute_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // timestamp + hour_second. + {"date_add(c_timestamp_d, interval c_char hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_varchar hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_int_d hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_double_d hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_decimal hour_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // timestamp + day_second. + {"date_add(c_timestamp_d, interval c_char day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_varchar day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_int_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_double_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_decimal day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // timestamp + minute. + {"date_add(c_timestamp_d, interval c_char minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_varchar minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_int_d minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_double_d minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_decimal minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // timestamp + hour_minute. + {"date_add(c_timestamp_d, interval c_char hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_varchar hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_int_d hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_double_d hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_decimal hour_minute)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // timestamp + day_minute. + {"date_add(c_timestamp_d, interval c_char day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_varchar day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_int_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_double_d day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_decimal day_second)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // timestamp + hour. + {"date_add(c_timestamp_d, interval c_char hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_varchar hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_int_d hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_double_d hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_decimal hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // timestamp + day_hour. + {"date_add(c_timestamp_d, interval c_char day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_varchar day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_int_d day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_double_d day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_decimal day_hour)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // timestamp + day. + {"date_add(c_timestamp_d, interval c_char day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_varchar day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_int_d day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_double_d day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_decimal day)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // timestamp + week. + {"date_add(c_timestamp_d, interval c_char week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_varchar week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_int_d week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_double_d week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_decimal week)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // timestamp + month. + {"date_add(c_timestamp_d, interval c_char month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_varchar month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_int_d month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_double_d month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_decimal month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // timestamp + year_month. + {"date_add(c_timestamp_d, interval c_char year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_varchar year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_int_d year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_double_d year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_decimal year_month)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // timestamp + quarter. + {"date_add(c_timestamp_d, interval c_char quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_varchar quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_int_d quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_double_d quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_decimal quarter)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // timestamp + year. + {"date_add(c_timestamp_d, interval c_char year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_varchar year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_int_d year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_bigint_d year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_double_d year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + {"date_add(c_timestamp_d, interval c_decimal year)", mysql.TypeDatetime, charset.CharsetBin, mysql.BinaryFlag, mysql.MaxDatetimeWidthNoFsp, types.MinFsp}, + + // Rest + *. + {"date_add(c_bit, interval c_char microsecond)", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, mysql.MaxDatetimeFullWidth, types.MinFsp}, + {"date_add(c_int_d, interval c_varchar second)", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, mysql.MaxDatetimeFullWidth, types.MinFsp}, + {"date_add(c_double_d, interval c_int_d day_microsecond)", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, mysql.MaxDatetimeFullWidth, types.MinFsp}, + {"date_add(c_decimal, interval c_bigint_d hour)", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, mysql.MaxDatetimeFullWidth, types.MinFsp}, + {"date_add(c_varchar, interval c_double_d day)", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, mysql.MaxDatetimeFullWidth, types.MinFsp}, + {"date_add(c_binary, interval c_decimal year)", mysql.TypeVarString, charset.CharsetUTF8MB4, 0, mysql.MaxDatetimeFullWidth, types.MinFsp}, +>>>>>>> 4ae78cdea... expression: refine date_add/sub return type and precision (#35009) } } diff --git a/expression/util_test.go b/expression/util_test.go index 5ad6331863db2..638cd5f07df05 100644 --- a/expression/util_test.go +++ b/expression/util_test.go @@ -145,12 +145,8 @@ func TestClone(t *testing.T) { &builtinQuarterSig{}, &builtinSecToTimeSig{}, &builtinTimeToSecSig{}, &builtinTimestampAddSig{}, &builtinToDaysSig{}, &builtinToSecondsSig{}, &builtinUTCTimeWithArgSig{}, &builtinUTCTimeWithoutArgSig{}, &builtinTimestamp1ArgSig{}, &builtinTimestamp2ArgsSig{}, &builtinTimestampLiteralSig{}, &builtinLastDaySig{}, &builtinStrToDateDateSig{}, &builtinStrToDateDatetimeSig{}, &builtinStrToDateDurationSig{}, - &builtinFromUnixTime1ArgSig{}, &builtinFromUnixTime2ArgSig{}, &builtinExtractDatetimeFromStringSig{}, &builtinExtractDatetimeSig{}, &builtinExtractDurationSig{}, &builtinAddDateStringStringSig{}, - &builtinAddDateStringIntSig{}, &builtinAddDateStringRealSig{}, &builtinAddDateStringDecimalSig{}, &builtinAddDateIntStringSig{}, &builtinAddDateIntIntSig{}, - &builtinAddDateIntRealSig{}, &builtinAddDateIntDecimalSig{}, &builtinAddDateDatetimeStringSig{}, &builtinAddDateDatetimeIntSig{}, &builtinAddDateDatetimeRealSig{}, - &builtinAddDateDatetimeDecimalSig{}, &builtinSubDateStringStringSig{}, &builtinSubDateStringIntSig{}, &builtinSubDateStringRealSig{}, &builtinSubDateStringDecimalSig{}, - &builtinSubDateIntStringSig{}, &builtinSubDateIntIntSig{}, &builtinSubDateIntRealSig{}, &builtinSubDateIntDecimalSig{}, &builtinSubDateDatetimeStringSig{}, - &builtinSubDateDatetimeIntSig{}, &builtinSubDateDatetimeRealSig{}, &builtinSubDateDatetimeDecimalSig{}, + &builtinFromUnixTime1ArgSig{}, &builtinFromUnixTime2ArgSig{}, &builtinExtractDatetimeFromStringSig{}, &builtinExtractDatetimeSig{}, &builtinExtractDurationSig{}, &builtinAddSubDateAsStringSig{}, + &builtinAddSubDateDatetimeAnySig{}, &builtinAddSubDateDurationAnySig{}, } for _, f := range builtinFuncs { cf := f.Clone() diff --git a/go.mod b/go.mod index 4866a22539b1f..5a253c4728a40 100644 --- a/go.mod +++ b/go.mod @@ -58,8 +58,13 @@ require ( github.com/pingcap/sysutil v0.0.0-20211208032423-041a72e5860d github.com/pingcap/tidb-tools v5.2.2-0.20211019062242-37a8bef2fa17+incompatible github.com/pingcap/tidb/parser v0.0.0-20211011031125-9b13dc409c5e +<<<<<<< HEAD github.com/pingcap/tipb v0.0.0-20220107024056-3b91949a18a7 github.com/prometheus/client_golang v1.11.1 +======= + github.com/pingcap/tipb v0.0.0-20220602075447-4847c5d68e73 + github.com/prometheus/client_golang v1.12.2 +>>>>>>> 4ae78cdea... expression: refine date_add/sub return type and precision (#35009) github.com/prometheus/client_model v0.2.0 github.com/prometheus/common v0.26.0 github.com/shirou/gopsutil v3.21.3+incompatible diff --git a/go.sum b/go.sum index 8f6a06adb1b30..76e0b0efc3966 100644 --- a/go.sum +++ b/go.sum @@ -650,6 +650,7 @@ github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9/go.mod h1:4rbK1p9ILyIf github.com/pingcap/log v0.0.0-20200511115504-543df19646ad/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= github.com/pingcap/log v0.0.0-20210317133921-96f4fcab92a4/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= github.com/pingcap/log v0.0.0-20210625125904-98ed8e2eb1c7/go.mod h1:8AanEdAHATuRurdGxZXBz0At+9avep+ub7U1AGYLIMM= +<<<<<<< HEAD github.com/pingcap/log v0.0.0-20210906054005-afc726e70354 h1:SvWCbCPh1YeHd9yQLksvJYAgft6wLTY1aNG81tpyscQ= github.com/pingcap/log v0.0.0-20210906054005-afc726e70354/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= github.com/pingcap/sysutil v0.0.0-20210315073920-cc0985d983a3/go.mod h1:tckvA041UWP+NqYzrJ3fMgC/Hw9wnmQ/tUkp/JaHly8= @@ -662,6 +663,15 @@ github.com/pingcap/tidb-tools v5.2.2-0.20211019062242-37a8bef2fa17+incompatible github.com/pingcap/tidb-tools v5.2.2-0.20211019062242-37a8bef2fa17+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= github.com/pingcap/tipb v0.0.0-20220107024056-3b91949a18a7 h1:DHU4vw0o15qdKsf7d/Pyhun4YtX8FwoDQxG0plPByUg= github.com/pingcap/tipb v0.0.0-20220107024056-3b91949a18a7/go.mod h1:A7mrd7WHBl1o63LE2bIBGEJMTNWXqhgmYiOvMLxozfs= +======= +github.com/pingcap/log v0.0.0-20211215031037-e024ba4eb0ee/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= +github.com/pingcap/log v1.1.0 h1:ELiPxACz7vdo1qAvvaWJg1NrYFoY6gqAh/+Uo6aXdD8= +github.com/pingcap/log v1.1.0/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= +github.com/pingcap/sysutil v0.0.0-20220114020952-ea68d2dbf5b4 h1:HYbcxtnkN3s5tqrZ/z3eJS4j3Db8wMphEm1q10lY/TM= +github.com/pingcap/sysutil v0.0.0-20220114020952-ea68d2dbf5b4/go.mod h1:sDCsM39cGiv2vwunZkaFA917vVkqDTGSPbbV7z4Oops= +github.com/pingcap/tipb v0.0.0-20220602075447-4847c5d68e73 h1:L4nZwfYSrIsWPAZR8zMwHaNQJy0Rjy3Od6Smj5mlOms= +github.com/pingcap/tipb v0.0.0-20220602075447-4847c5d68e73/go.mod h1:A7mrd7WHBl1o63LE2bIBGEJMTNWXqhgmYiOvMLxozfs= +>>>>>>> 4ae78cdea... expression: refine date_add/sub return type and precision (#35009) github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 h1:49lOXmGaUpV9Fz3gd7TFZY106KVlPVa5jcYD1gaQf98= github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/testkit/result.go b/testkit/result.go index 6950120d6a2a0..e66bdbc0c258e 100644 --- a/testkit/result.go +++ b/testkit/result.go @@ -50,6 +50,16 @@ func (res *Result) Check(expected [][]interface{}) { res.require.Equal(needBuff.String(), resBuff.String(), res.comment) } +// CheckWithFunc asserts the result match the expected results in the way `f` specifies. +func (res *Result) CheckWithFunc(expected [][]interface{}, f func([]string, []interface{}) bool) { + res.require.Equal(len(res.rows), len(expected), res.comment+"\nResult length mismatch") + + for i, resRow := range res.rows { + expectedRow := expected[i] + res.require.Truef(f(resRow, expectedRow), res.comment+"\nCheck with function failed\nactual: %s\nexpected: %s", resRow, expectedRow) + } +} + // Rows is similar to RowsWithSep, use white space as separator string. func Rows(args ...string) [][]interface{} { return RowsWithSep(" ", args...) diff --git a/types/time.go b/types/time.go index 7dfdb7c2d1fbe..430a021a5618b 100644 --- a/types/time.go +++ b/types/time.go @@ -25,9 +25,11 @@ import ( "unicode" "github.com/pingcap/errors" + "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/parser/mysql" "github.com/pingcap/tidb/parser/terror" "github.com/pingcap/tidb/sessionctx/stmtctx" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/logutil" tidbMath "github.com/pingcap/tidb/util/math" "github.com/pingcap/tidb/util/parser" @@ -2539,13 +2541,36 @@ func ExtractDurationValue(unit string, format string) (Duration, error) { } } -// IsClockUnit returns true when unit is interval unit with hour, minute or second. +// IsClockUnit returns true when unit is interval unit with hour, minute, second or microsecond. func IsClockUnit(unit string) bool { switch strings.ToUpper(unit) { case "MICROSECOND", "SECOND", "MINUTE", "HOUR", - "SECOND_MICROSECOND", "MINUTE_MICROSECOND", "MINUTE_SECOND", - "HOUR_MICROSECOND", "HOUR_SECOND", "HOUR_MINUTE", - "DAY_MICROSECOND", "DAY_SECOND", "DAY_MINUTE", "DAY_HOUR": + "SECOND_MICROSECOND", "MINUTE_MICROSECOND", "HOUR_MICROSECOND", "DAY_MICROSECOND", + "MINUTE_SECOND", "HOUR_SECOND", "DAY_SECOND", + "HOUR_MINUTE", "DAY_MINUTE", + "DAY_HOUR": + return true + default: + return false + } +} + +// IsDateUnit returns true when unit is interval unit with year, quarter, month, week or day. +func IsDateUnit(unit string) bool { + switch strings.ToUpper(unit) { + case "DAY", "WEEK", "MONTH", "QUARTER", "YEAR", + "DAY_MICROSECOND", "DAY_SECOND", "DAY_MINUTE", "DAY_HOUR", + "YEAR_MONTH": + return true + default: + return false + } +} + +// IsMicrosecondUnit returns true when unit is interval unit with microsecond. +func IsMicrosecondUnit(unit string) bool { + switch strings.ToUpper(unit) { + case "MICROSECOND", "SECOND_MICROSECOND", "MINUTE_MICROSECOND", "HOUR_MICROSECOND", "DAY_MICROSECOND": return true default: return false @@ -2574,6 +2599,68 @@ func ParseTimeFromInt64(sc *stmtctx.StatementContext, num int64) (Time, error) { return parseDateTimeFromNum(sc, num) } +// ParseTimeFromFloat64 parses mysql time value from float64. +// It is used in scenarios that distinguish date and datetime, e.g., date_add/sub() with first argument being real. +// For example, 20010203 parses to date (no HMS) and 20010203040506 parses to datetime (with HMS). +func ParseTimeFromFloat64(sc *stmtctx.StatementContext, f float64) (Time, error) { + intPart := int64(f) + t, err := parseDateTimeFromNum(sc, intPart) + if err != nil { + return ZeroTime, err + } + if t.Type() == mysql.TypeDatetime { + // US part is only kept when the integral part is recognized as datetime. + fracPart := uint32((f - float64(intPart)) * 1000000.0) + ct := t.CoreTime() + ct.setMicrosecond(fracPart) + t.SetCoreTime(ct) + } + return t, err +} + +// ParseTimeFromDecimal parses mysql time value from decimal. +// It is used in scenarios that distinguish date and datetime, e.g., date_add/sub() with first argument being decimal. +// For example, 20010203 parses to date (no HMS) and 20010203040506 parses to datetime (with HMS). +func ParseTimeFromDecimal(sc *stmtctx.StatementContext, dec *MyDecimal) (t Time, err error) { + intPart, err := dec.ToInt() + if err != nil && !terror.ErrorEqual(err, ErrTruncated) { + return ZeroTime, err + } + fsp := mathutil.Min(MaxFsp, int(dec.GetDigitsFrac())) + t, err = parseDateTimeFromNum(sc, intPart) + if err != nil { + return ZeroTime, err + } + t.SetFsp(fsp) + if fsp == 0 || t.Type() == mysql.TypeDate { + // Shortcut for integer value or date value (fractional part omitted). + return t, err + } + + intPartDec := new(MyDecimal).FromInt(intPart) + fracPartDec := new(MyDecimal) + err = DecimalSub(dec, intPartDec, fracPartDec) + if err != nil { + return ZeroTime, errors.Trace(dbterror.ClassTypes.NewStd(errno.ErrIncorrectDatetimeValue).GenWithStackByArgs(dec.ToString())) + } + million := new(MyDecimal).FromInt(1000000) + msPartDec := new(MyDecimal) + err = DecimalMul(fracPartDec, million, msPartDec) + if err != nil && !terror.ErrorEqual(err, ErrTruncated) { + return ZeroTime, errors.Trace(dbterror.ClassTypes.NewStd(errno.ErrIncorrectDatetimeValue).GenWithStackByArgs(dec.ToString())) + } + msPart, err := msPartDec.ToInt() + if err != nil && !terror.ErrorEqual(err, ErrTruncated) { + return ZeroTime, errors.Trace(dbterror.ClassTypes.NewStd(errno.ErrIncorrectDatetimeValue).GenWithStackByArgs(dec.ToString())) + } + + ct := t.CoreTime() + ct.setMicrosecond(uint32(msPart)) + t.SetCoreTime(ct) + + return t, nil +} + // DateFormat returns a textual representation of the time value formatted // according to layout. // See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format diff --git a/types/time_test.go b/types/time_test.go index 15f4e3a35806b..fc503309dbae1 100644 --- a/types/time_test.go +++ b/types/time_test.go @@ -1682,6 +1682,7 @@ func TestIsClockUnit(t *testing.T) { {"DAY_MINUTE", true}, {"DAY_HOUR", true}, {"TEST", false}, + {"SOME_MICROSECOND", false}, } for _, col := range tbl { output := types.IsClockUnit(col.input) @@ -1689,6 +1690,64 @@ func TestIsClockUnit(t *testing.T) { } } +func TestIsDateUnit(t *testing.T) { + tbl := []struct { + input string + expected bool + }{ + {"Day", true}, + {"Week", true}, + {"month", true}, + {"quarter", true}, + {"YEAR", true}, + {"DAY_MICROSECOND", true}, + {"DAY_SECOND", true}, + {"DAY_MINUTE", true}, + {"DAY_HOUR", true}, + {"YEAR_MONTH", true}, + {"MICROSECOND", false}, + {"SECOND", false}, + {"MINUTE", false}, + {"HOUR", false}, + {"TEST", false}, + {"SOME_DAY", false}, + } + for _, col := range tbl { + output := types.IsDateUnit(col.input) + require.Equal(t, col.expected, output) + } +} + +func TestIsMicrosecondUnit(t *testing.T) { + tbl := []struct { + input string + expected bool + }{ + {"Microsecond", true}, + {"Second_microsecond", true}, + {"minute_microsecond", true}, + {"hour_microsecond", true}, + {"DAY_MICROSECOND", true}, + {"SECOND", false}, + {"MINUTE", false}, + {"HOUR", false}, + {"DAY_SECOND", false}, + {"DAY_MINUTE", false}, + {"DAY_HOUR", false}, + {"DAY", false}, + {"WEEK", false}, + {"MONTH", false}, + {"QUARTER", false}, + {"YEAR", false}, + {"TEST", false}, + {"SOME_MICROSECOND", false}, + } + for _, col := range tbl { + output := types.IsMicrosecondUnit(col.input) + require.Equal(t, col.expected, output) + } +} + func TestIsDateFormat(t *testing.T) { input := "1234:321" output := types.IsDateFormat(input) @@ -1725,6 +1784,94 @@ func TestParseTimeFromInt64(t *testing.T) { require.Equal(t, 00, output.Microsecond()) } +func TestParseTimeFromFloat64(t *testing.T) { + sc := mock.NewContext().GetSessionVars().StmtCtx + sc.IgnoreZeroInDate = true + + cases := []struct { + f float64 + t byte // type: date or datetime. + Y int + M int + D int + h int + m int + s int + us int + err *terror.Error + }{ + {20000102, mysql.TypeDate, 2000, 1, 2, 0, 0, 0, 0, nil}, + {20000102.9, mysql.TypeDate, 2000, 1, 2, 0, 0, 0, 0, nil}, + {0.0, mysql.TypeDate, 0, 0, 0, 0, 0, 0, 0, nil}, + {20000102030405, mysql.TypeDatetime, 2000, 1, 2, 3, 4, 5, 0, nil}, + {20000102030405.015625, mysql.TypeDatetime, 2000, 1, 2, 3, 4, 5, 15625, nil}, + {20000102030405.0078125, mysql.TypeDatetime, 2000, 1, 2, 3, 4, 5, 7812, nil}, + {2000, mysql.TypeDatetime, 0, 0, 0, 0, 0, 0, 0, types.ErrTruncatedWrongVal}, + {20000000000000, mysql.TypeDatetime, 2000, 0, 0, 0, 0, 0, 0, nil}, + } + + for _, c := range cases { + res, err := types.ParseTimeFromFloat64(sc, c.f) + require.Equalf(t, c.t, res.Type(), "Type mismatch for case %v", c) + require.Equalf(t, c.Y, res.Year(), "Year mismatch for case %v", c) + require.Equalf(t, c.M, res.Month(), "Month mismatch for case %v", c) + require.Equalf(t, c.D, res.Day(), "Day mismatch for case %v", c) + require.Equalf(t, c.h, res.Hour(), "Hour mismatch for case %v", c) + require.Equalf(t, c.m, res.Minute(), "Minute mismatch for case %v", c) + require.Equalf(t, c.s, res.Second(), "Second mismatch for case %v", c) + require.Equalf(t, c.us, res.Microsecond(), "Microsecond mismatch for case %v", c) + if c.err == nil { + require.NoErrorf(t, err, "Unexpected error for case %v", c) + } else { + require.Truef(t, c.err.Equal(err), "Error mismatch for case %v", c) + } + } +} + +func TestParseTimeFromDecimal(t *testing.T) { + sc := mock.NewContext().GetSessionVars().StmtCtx + sc.IgnoreZeroInDate = true + + cases := []struct { + d *types.MyDecimal + t byte // type: date or datetime. + Y int + M int + D int + h int + m int + s int + us int + err *terror.Error + }{ + {types.NewDecFromStringForTest("20000102"), mysql.TypeDate, 2000, 1, 2, 0, 0, 0, 0, nil}, + {types.NewDecFromStringForTest("20000102.9"), mysql.TypeDate, 2000, 1, 2, 0, 0, 0, 0, nil}, + {types.NewDecFromStringForTest("0.0"), mysql.TypeDate, 0, 0, 0, 0, 0, 0, 0, nil}, + {types.NewDecFromStringForTest("20000102030405"), mysql.TypeDatetime, 2000, 1, 2, 3, 4, 5, 0, nil}, + {types.NewDecFromStringForTest("20000102030405.015625"), mysql.TypeDatetime, 2000, 1, 2, 3, 4, 5, 15625, nil}, + {types.NewDecFromStringForTest("20000102030405.0078125"), mysql.TypeDatetime, 2000, 1, 2, 3, 4, 5, 7812, nil}, + {types.NewDecFromStringForTest("2000"), mysql.TypeDatetime, 0, 0, 0, 0, 0, 0, 0, types.ErrTruncatedWrongVal}, + {types.NewDecFromStringForTest("20000000000000"), mysql.TypeDatetime, 2000, 0, 0, 0, 0, 0, 0, nil}, + } + + for _, c := range cases { + res, err := types.ParseTimeFromDecimal(sc, c.d) + require.Equalf(t, c.t, res.Type(), "Type mismatch for case %v", c) + require.Equalf(t, c.Y, res.Year(), "Year mismatch for case %v", c) + require.Equalf(t, c.M, res.Month(), "Month mismatch for case %v", c) + require.Equalf(t, c.D, res.Day(), "Day mismatch for case %v", c) + require.Equalf(t, c.h, res.Hour(), "Hour mismatch for case %v", c) + require.Equalf(t, c.m, res.Minute(), "Minute mismatch for case %v", c) + require.Equalf(t, c.s, res.Second(), "Second mismatch for case %v", c) + require.Equalf(t, c.us, res.Microsecond(), "Microsecond mismatch for case %v", c) + if c.err == nil { + require.NoErrorf(t, err, "Unexpected error for case %v", c) + } else { + require.Truef(t, c.err.Equal(err), "Error mismatch for case %v", c) + } + } +} + func TestGetFormatType(t *testing.T) { input := "TEST" isDuration, isDate := types.GetFormatType(input)