@@ -13169,8 +13169,13 @@ TEST_F(Select, TimestampPrecision_HighPrecision) {
13169
13169
v<int64_t>(run_simple_agg("select count(*) from test where m_3 = m;", dt)));
13170
13170
ASSERT_EQ(0,
13171
13171
v<int64_t>(run_simple_agg("select count(*) from test where m_3 < m;", dt)));
13172
- ASSERT_EQ(20,
13172
+ // increasing precision should result in 0 rows passing the filter, since the lower
13173
+ // precision value is appended with zeros in higher precision
13174
+ ASSERT_EQ(0,
13173
13175
v<int64_t>(run_simple_agg("select count(*) from test where m = m_3;", dt)));
13176
+ ASSERT_EQ(20,
13177
+ v<int64_t>(run_simple_agg(
13178
+ "select count(*) from test where m = CAST(m_3 AS TIMESTAMP(0));", dt)));
13174
13179
ASSERT_EQ(0,
13175
13180
v<int64_t>(run_simple_agg("select count(*) from test where m > m_3;", dt)));
13176
13181
ASSERT_EQ(20,
@@ -13212,8 +13217,11 @@ TEST_F(Select, TimestampPrecision_HighPrecision) {
13212
13217
v<int64_t>(run_simple_agg("select count(*) from test where m > m_6;", dt)));
13213
13218
ASSERT_EQ(10,
13214
13219
v<int64_t>(run_simple_agg("select count(*) from test where m < m_6;", dt)));
13215
- ASSERT_EQ(10 ,
13220
+ ASSERT_EQ(0 ,
13216
13221
v<int64_t>(run_simple_agg("select count(*) from test where m = m_6;", dt)));
13222
+ ASSERT_EQ(10,
13223
+ v<int64_t>(run_simple_agg(
13224
+ "select count(*) from test where m = CAST(m_6 AS TIMESTAMP(0));", dt)));
13217
13225
13218
13226
ASSERT_EQ(
13219
13227
10, v<int64_t>(run_simple_agg("select count(*) from test where m_9 > m_3;", dt)));
@@ -13238,8 +13246,11 @@ TEST_F(Select, TimestampPrecision_HighPrecision) {
13238
13246
v<int64_t>(run_simple_agg("select count(*) from test where m > m_9;", dt)));
13239
13247
ASSERT_EQ(10,
13240
13248
v<int64_t>(run_simple_agg("select count(*) from test where m < m_9;", dt)));
13241
- ASSERT_EQ(10 ,
13249
+ ASSERT_EQ(0 ,
13242
13250
v<int64_t>(run_simple_agg("select count(*) from test where m = m_9;", dt)));
13251
+ ASSERT_EQ(10,
13252
+ v<int64_t>(run_simple_agg(
13253
+ "select count(*) from test where m = CAST(m_9 AS TIMESTAMP(0));", dt)));
13243
13254
ASSERT_EQ(
13244
13255
15,
13245
13256
v<int64_t>(run_simple_agg(
@@ -13401,21 +13412,18 @@ TEST_F(Select, TimestampPrecision_FunctionCompositions) {
13401
13412
ASSERT_EQ(
13402
13413
1,
13403
13414
v<int64_t>(run_simple_agg(
13404
- "select dateadd('minute',1,dateadd('millisecond',1,cast(m_3 as "
13405
- "timestamp(0)))) = TIMESTAMP(3) '2014-12-13 22:24:15.456' from test limit 1;",
13415
+ R"(select dateadd('minute',1,dateadd('millisecond',1,cast(m_3 as timestamp(0)))) = TIMESTAMP(0) '2014-12-13 22:24:15' from test limit 1;)",
13406
13416
dt)));
13407
13417
ASSERT_EQ(
13408
13418
1,
13409
13419
v<int64_t>(run_simple_agg(
13410
- "select dateadd('minute',1, dateadd('millisecond',111 , cast(m_6 as "
13411
- "timestamp(0)))) = TIMESTAMP(3) '1999-07-11 14:03:53.985' from test limit 1;",
13420
+ R"(select dateadd('minute',1, dateadd('millisecond',111 , cast(m_6 as timestamp(0)))) = TIMESTAMP(3) '1999-07-11 14:03:53' from test limit 1;)",
13421
+ dt)));
13422
+ ASSERT_EQ(
13423
+ 1,
13424
+ v<int64_t>(run_simple_agg(
13425
+ R"(select dateadd('year',1,dateadd('millisecond',220,cast(m_9 as timestamp(0)))) = TIMESTAMP(3) '2007-04-26 03:49:04' from test limit 1;)",
13412
13426
dt)));
13413
- ASSERT_EQ(1,
13414
- v<int64_t>(run_simple_agg(
13415
- "select dateadd('year',1,dateadd('millisecond',220,cast(m_9 as "
13416
- "timestamp(0)))) = TIMESTAMP(3) '2007-04-26 03:49:04.827' from test "
13417
- "limit 1;",
13418
- dt)));
13419
13427
ASSERT_EQ(
13420
13428
1,
13421
13429
v<int64_t>(run_simple_agg(
@@ -13531,16 +13539,16 @@ TEST_F(Select, TimestampPrecision_FunctionsWithHighPrecisionsAndDates) {
13531
13539
"SELECT count(*) from test where PG_DATE_TRUNC('millisecond', m_9) = "
13532
13540
"TIMESTAMP(3) '2006-04-26 03:49:04.607435125';",
13533
13541
dt)));
13534
- ASSERT_EQ(10,
13535
- v<int64_t>(run_simple_agg(
13536
- "SELECT count(*) from test where PG_DATE_TRUNC('nanosecond', m_6) = "
13537
- " TIMESTAMP(9) '1999-07-11 14:02:53.874533123'; ",
13538
- dt)));
13539
- ASSERT_EQ(10,
13540
- v<int64_t>(run_simple_agg(
13541
- "SELECT count(*) from test where PG_DATE_TRUNC('microsecond', m_6) = "
13542
- " TIMESTAMP(9) '1999-07-11 14:02:53.874533123'; ",
13543
- dt)));
13542
+ ASSERT_EQ(
13543
+ 10,
13544
+ v<int64_t>(run_simple_agg(
13545
+ R"(SELECT count(*) from test where PG_DATE_TRUNC('nanosecond', m_6) = TIMESTAMP(9) '1999-07-11 14:02:53.874533';) ",
13546
+ dt)));
13547
+ ASSERT_EQ(
13548
+ 10,
13549
+ v<int64_t>(run_simple_agg(
13550
+ R"(SELECT count(*) from test where PG_DATE_TRUNC('microsecond', m_6) = TIMESTAMP(9) '1999-07-11 14:02:53.874533';) ",
13551
+ dt)));
13544
13552
ASSERT_EQ(10,
13545
13553
v<int64_t>(run_simple_agg(
13546
13554
"SELECT count(*) from test where PG_DATE_TRUNC('microsecond', m_6) = "
@@ -13556,37 +13564,38 @@ TEST_F(Select, TimestampPrecision_FunctionsWithHighPrecisionsAndDates) {
13556
13564
"SELECT count(*) from test where PG_DATE_TRUNC('millisecond', m_6) = "
13557
13565
"TIMESTAMP(3) '1999-07-11 14:02:53.874533123';",
13558
13566
dt)));
13559
- ASSERT_EQ(15,
13560
- v<int64_t>(run_simple_agg(
13561
- "SELECT count(*) from test where PG_DATE_TRUNC('nanosecond', m_3) = "
13562
- "TIMESTAMP(9) '2014-12-13 22:23:15.323533123';",
13563
- dt)));
13564
- ASSERT_EQ(15,
13565
- v<int64_t>(run_simple_agg(
13566
- "SELECT count(*) from test where PG_DATE_TRUNC('microsecond', m_3) = "
13567
- "TIMESTAMP(9) '2014-12-13 22:23:15.323533123';",
13568
- dt)));
13569
- ASSERT_EQ(15,
13570
- v<int64_t>(run_simple_agg(
13571
- "SELECT count(*) from test where PG_DATE_TRUNC('microsecond', m_3) = "
13572
- "TIMESTAMP(6) '2014-12-13 22:23:15.323533123';",
13573
- dt)));
13574
- ASSERT_EQ(15,
13575
- v<int64_t>(run_simple_agg(
13576
- "SELECT count(*) from test where PG_DATE_TRUNC('millisecond', m_3) = "
13577
- "TIMESTAMP(6) '2014-12-13 22:23:15.323533123';",
13578
- dt)));
13579
- ASSERT_EQ(15,
13580
- v<int64_t>(run_simple_agg(
13581
- "SELECT count(*) from test where PG_DATE_TRUNC('millisecond', m_3) = "
13582
- "TIMESTAMP(3) '2014-12-13 22:23:15.323533123';",
13583
- dt)));
13567
+ // the underling column is millisecond, so the high precision timestamps are no-ops
13568
+ // regardless of the date-trunc type.
13569
+ ASSERT_EQ(
13570
+ 15,
13571
+ v<int64_t>(run_simple_agg(
13572
+ R"(SELECT count(*) from test where PG_DATE_TRUNC('nanosecond', m_3) = TIMESTAMP(9) '2014-12-13 22:23:15.323';)",
13573
+ dt)));
13574
+ ASSERT_EQ(
13575
+ 15,
13576
+ v<int64_t>(run_simple_agg(
13577
+ R"(SELECT count(*) from test where PG_DATE_TRUNC('microsecond', m_3) = TIMESTAMP(9) '2014-12-13 22:23:15.323';)",
13578
+ dt)));
13579
+ ASSERT_EQ(
13580
+ 15,
13581
+ v<int64_t>(run_simple_agg(
13582
+ R"(SELECT count(*) from test where PG_DATE_TRUNC('microsecond', m_3) = TIMESTAMP(6) '2014-12-13 22:23:15.323';)",
13583
+ dt)));
13584
+ ASSERT_EQ(
13585
+ 15,
13586
+ v<int64_t>(run_simple_agg(
13587
+ R"(SELECT count(*) from test where PG_DATE_TRUNC('millisecond', m_3) = TIMESTAMP(6) '2014-12-13 22:23:15.323';)",
13588
+ dt)));
13589
+ ASSERT_EQ(
13590
+ 15,
13591
+ v<int64_t>(run_simple_agg(
13592
+ R"(SELECT count(*) from test where PG_DATE_TRUNC('millisecond', m_3) = TIMESTAMP(3) '2014-12-13 22:23:15.323';)",
13593
+ dt)));
13584
13594
13585
13595
ASSERT_EQ(
13586
13596
10,
13587
13597
v<int64_t>(run_simple_agg(
13588
- "SELECT count(*) from test where cast(DATEADD('nanosecond', 101, m_9) as "
13589
- "DATE) = cast(TIMESTAMP(9) '2006-04-26 03:49:04.607435226' as DATE);",
13598
+ R"(SELECT count(*) from test where cast(DATEADD('nanosecond', 101, m_9) as DATE) = cast(TIMESTAMP(9) '2006-04-26 03:49:04.607435226' as DATE);)",
13590
13599
dt)));
13591
13600
ASSERT_EQ(
13592
13601
10,
@@ -17301,9 +17310,8 @@ TEST_F(Select, Interop) {
17301
17310
std::string part2 = ", y ASC, r1 ASC, r2 ASC, r3 ASC;";
17302
17311
c(part1 + " NULLS FIRST" + part2, part1 + part2, dt);
17303
17312
}
17304
- c("SELECT CAST(('fake_' || SUBSTRING(real_str, 6)) LIKE '%_ba%' AS INT) b from test "
17305
- "ORDER BY b;",
17306
- "SELECT ('fake_' || SUBSTR(real_str, 6)) LIKE '%_ba%' b from test ORDER BY b;",
17313
+ c(R"(SELECT ('fake_' || SUBSTRING(real_str, 6)) LIKE '%_ba%' b from test ORDER BY b;)",
17314
+ R"(SELECT ('fake_' || SUBSTR(real_str, 6)) LIKE '%_ba%' b from test ORDER BY b;)",
17307
17315
dt);
17308
17316
}
17309
17317
config().exec.enable_interop = false;
0 commit comments