This is an automated email from the ASF dual-hosted git repository.
yashmayya pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new e89ac9490e Override return type for NOW to TIMESTAMP in the v2 engine
(#14614)
e89ac9490e is described below
commit e89ac9490e83224526a7e0b5a91e30276d4b9906
Author: Yash Mayya <[email protected]>
AuthorDate: Sun Dec 15 12:27:26 2024 +0700
Override return type for NOW to TIMESTAMP in the v2 engine (#14614)
---
.../tests/MultiStageEngineIntegrationTest.java | 18 ++++++++++--------
.../tests/OfflineClusterIntegrationTest.java | 14 ++++++++------
.../pinot/calcite/sql/fun/PinotOperatorTable.java | 4 +++-
.../apache/pinot/query/QueryEnvironmentTestBase.java | 3 ++-
4 files changed, 23 insertions(+), 16 deletions(-)
diff --git
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/MultiStageEngineIntegrationTest.java
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/MultiStageEngineIntegrationTest.java
index 40ae6920e2..bc19bace53 100644
---
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/MultiStageEngineIntegrationTest.java
+++
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/MultiStageEngineIntegrationTest.java
@@ -631,10 +631,11 @@ public class MultiStageEngineIntegrationTest extends
BaseClusterIntegrationTestS
throws Exception {
long queryStartTimeMs = System.currentTimeMillis();
String sqlQuery =
- "SELECT 1, now() as currentTs, ago('PT1H') as oneHourAgoTs, 'abc',
toDateTime(now(), 'yyyy-MM-dd z') as "
- + "today, now(), ago('PT1H'), encodeUrl('key1=value
1&key2=value@!$2&key3=value%3') as encodedUrl, "
- +
"decodeUrl('key1%3Dvalue+1%26key2%3Dvalue%40%21%242%26key3%3Dvalue%253') as
decodedUrl, toBase64"
- + "(toUtf8('hello!')) as toBase64,
fromUtf8(fromBase64('aGVsbG8h')) as fromBase64";
+ "SELECT 1, cast(now() as bigint) as currentTs, ago('PT1H') as
oneHourAgoTs, 'abc', "
+ + "toDateTime(now(), 'yyyy-MM-dd z') as today, cast(now() as
bigint), ago('PT1H'), "
+ + "encodeUrl('key1=value 1&key2=value@!$2&key3=value%3') as
encodedUrl, "
+ +
"decodeUrl('key1%3Dvalue+1%26key2%3Dvalue%40%21%242%26key3%3Dvalue%253') as
decodedUrl, "
+ + "toBase64(toUtf8('hello!')) as toBase64,
fromUtf8(fromBase64('aGVsbG8h')) as fromBase64";
JsonNode response = postQuery(sqlQuery);
long queryEndTimeMs = System.currentTimeMillis();
@@ -656,8 +657,9 @@ public class MultiStageEngineIntegrationTest extends
BaseClusterIntegrationTestS
JsonNode results = resultTable.get("rows").get(0);
assertEquals(results.get(0).asInt(), 1);
long nowResult = results.get(1).asLong();
- assertTrue(nowResult >= queryStartTimeMs);
- assertTrue(nowResult <= queryEndTimeMs);
+ // Timestamp granularity is seconds
+ assertTrue(nowResult >= ((queryStartTimeMs / 1000) * 1000));
+ assertTrue(nowResult <= ((queryEndTimeMs / 1000) * 1000));
long oneHourAgoResult = results.get(2).asLong();
assertTrue(oneHourAgoResult >= queryStartTimeMs -
TimeUnit.HOURS.toMillis(1));
assertTrue(oneHourAgoResult <= queryEndTimeMs -
TimeUnit.HOURS.toMillis(1));
@@ -669,8 +671,8 @@ public class MultiStageEngineIntegrationTest extends
BaseClusterIntegrationTestS
String dateTimeResult = results.get(4).asText();
assertTrue(dateTimeResult.equals(queryStartTimeDay) ||
dateTimeResult.equals(queryEndTimeDay));
nowResult = results.get(5).asLong();
- assertTrue(nowResult >= queryStartTimeMs);
- assertTrue(nowResult <= queryEndTimeMs);
+ assertTrue(nowResult >= ((queryStartTimeMs / 1000) * 1000));
+ assertTrue(nowResult <= ((queryEndTimeMs / 1000) * 1000));
oneHourAgoResult = results.get(6).asLong();
assertTrue(oneHourAgoResult >= queryStartTimeMs -
TimeUnit.HOURS.toMillis(1));
assertTrue(oneHourAgoResult <= queryEndTimeMs -
TimeUnit.HOURS.toMillis(1));
diff --git
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
index 4c3c50bb87..f788eeb5ac 100644
---
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
+++
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
@@ -1218,10 +1218,11 @@ public class OfflineClusterIntegrationTest extends
BaseClusterIntegrationTestSet
setUseMultiStageQueryEngine(true);
long queryStartTimeMs = System.currentTimeMillis();
String sqlQuery =
- "SELECT 1, now() as currentTs, ago('PT1H') as oneHourAgoTs, 'abc',
toDateTime(now(), 'yyyy-MM-dd z') as "
- + "today, now(), ago('PT1H'), encodeUrl('key1=value
1&key2=value@!$2&key3=value%3') as encodedUrl, "
- +
"decodeUrl('key1%3Dvalue+1%26key2%3Dvalue%40%21%242%26key3%3Dvalue%253') as
decodedUrl, toBase64"
- + "(toUtf8('hello!')) as toBase64,
fromUtf8(fromBase64('aGVsbG8h')) as fromBase64";
+ "SELECT 1, cast(now() as bigint) as currentTs, ago('PT1H') as
oneHourAgoTs, 'abc', "
+ + "toDateTime(now(), 'yyyy-MM-dd z') as today, cast(now() as
bigint), ago('PT1H'), "
+ + "encodeUrl('key1=value 1&key2=value@!$2&key3=value%3') as
encodedUrl, "
+ +
"decodeUrl('key1%3Dvalue+1%26key2%3Dvalue%40%21%242%26key3%3Dvalue%253') as
decodedUrl, "
+ + "toBase64(toUtf8('hello!')) as toBase64,
fromUtf8(fromBase64('aGVsbG8h')) as fromBase64";
JsonNode response = postQuery(sqlQuery);
long queryEndTimeMs = System.currentTimeMillis();
@@ -1256,8 +1257,9 @@ public class OfflineClusterIntegrationTest extends
BaseClusterIntegrationTestSet
JsonNode results = resultTable.get("rows").get(0);
assertEquals(results.get(0).asInt(), 1);
long nowResult = results.get(1).asLong();
- assertTrue(nowResult >= queryStartTimeMs);
- assertTrue(nowResult <= queryEndTimeMs);
+ // Timestamp granularity is seconds
+ assertTrue(nowResult >= ((queryStartTimeMs / 1000) * 1000));
+ assertTrue(nowResult <= ((queryEndTimeMs / 1000) * 1000));
long oneHourAgoResult = results.get(2).asLong();
assertTrue(oneHourAgoResult >= queryStartTimeMs -
TimeUnit.HOURS.toMillis(1));
assertTrue(oneHourAgoResult <= queryEndTimeMs -
TimeUnit.HOURS.toMillis(1));
diff --git
a/pinot-query-planner/src/main/java/org/apache/pinot/calcite/sql/fun/PinotOperatorTable.java
b/pinot-query-planner/src/main/java/org/apache/pinot/calcite/sql/fun/PinotOperatorTable.java
index d549ca4149..c48cbe19a0 100644
---
a/pinot-query-planner/src/main/java/org/apache/pinot/calcite/sql/fun/PinotOperatorTable.java
+++
b/pinot-query-planner/src/main/java/org/apache/pinot/calcite/sql/fun/PinotOperatorTable.java
@@ -270,7 +270,9 @@ public class PinotOperatorTable implements SqlOperatorTable
{
// TODO: Consider unifying the return type to Timestamp
new PinotSqlFunction("FROM_DATE_TIME", ReturnTypes.TIMESTAMP_NULLABLE,
OperandTypes.family(
List.of(SqlTypeFamily.CHARACTER, SqlTypeFamily.CHARACTER,
SqlTypeFamily.CHARACTER, SqlTypeFamily.ANY),
- i -> i > 1))
+ i -> i > 1)),
+
+ new PinotSqlFunction("NOW", ReturnTypes.TIMESTAMP, OperandTypes.NILADIC)
);
private static final List<Pair<SqlOperator, List<String>>>
PINOT_OPERATORS_WITH_ALIASES = List.of(
diff --git
a/pinot-query-planner/src/test/java/org/apache/pinot/query/QueryEnvironmentTestBase.java
b/pinot-query-planner/src/test/java/org/apache/pinot/query/QueryEnvironmentTestBase.java
index 685252bbbe..830ec42a88 100644
---
a/pinot-query-planner/src/test/java/org/apache/pinot/query/QueryEnvironmentTestBase.java
+++
b/pinot-query-planner/src/test/java/org/apache/pinot/query/QueryEnvironmentTestBase.java
@@ -252,7 +252,8 @@ public class QueryEnvironmentTestBase {
new Object[]{"SELECT JSON_EXTRACT_SCALAR(col1, '$.foo',
'STRING_ARRAY') FROM a"},
new Object[]{"SELECT ts_timestamp FROM a WHERE ts_timestamp BETWEEN
TIMESTAMP '2016-01-01 00:00:00' AND "
+ "TIMESTAMP '2016-01-01 10:00:00'"},
- new Object[]{"SELECT ts_timestamp FROM a WHERE ts_timestamp >=
CAST(1454284798000 AS TIMESTAMP)"}
+ new Object[]{"SELECT ts_timestamp FROM a WHERE ts_timestamp >=
CAST(1454284798000 AS TIMESTAMP)"},
+ new Object[]{"SELECT TIMESTAMPADD(day, 10, NOW()) FROM a"}
};
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]