You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by pp...@apache.org on 2025/05/01 07:37:38 UTC

(ignite-3) branch ignite-25174 created (now 6c158037b57)

This is an automated email from the ASF dual-hosted git repository.

ppa pushed a change to branch ignite-25174
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


      at 6c158037b57 IGNITE-25174 Fix CURRENT_DATE.

This branch includes the following new commits:

     new 6c158037b57 IGNITE-25174 Fix CURRENT_DATE.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(ignite-3) 01/01: IGNITE-25174 Fix CURRENT_DATE.

Posted by pp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ppa pushed a commit to branch ignite-25174
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit 6c158037b579fdf873acecb471ae81c72837d5c5
Author: Pavel Pereslegin <xx...@gmail.com>
AuthorDate: Thu May 1 10:37:26 2025 +0300

    IGNITE-25174 Fix CURRENT_DATE.
---
 .../engine/datatypes/ItCastToTsWithLocalTimeZoneTest.java |  1 -
 .../ignite/internal/sql/engine/exec/exp/RexImpTable.java  | 10 +++++++---
 .../internal/sql/engine/exec/exp/RexToLixTranslator.java  |  4 ++--
 .../ignite/internal/sql/engine/util/IgniteMethod.java     |  7 +++++++
 .../internal/sql/engine/util/IgniteSqlDateTimeUtils.java  | 15 +++++++++++++++
 5 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/datatypes/ItCastToTsWithLocalTimeZoneTest.java b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/datatypes/ItCastToTsWithLocalTimeZoneTest.java
index 63b3983a1ad..5bdf6c65f2e 100644
--- a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/datatypes/ItCastToTsWithLocalTimeZoneTest.java
+++ b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/datatypes/ItCastToTsWithLocalTimeZoneTest.java
@@ -56,7 +56,6 @@ import org.junit.jupiter.params.provider.MethodSource;
  * type pairs supported by cast specification.
  */
 @WithSystemProperty(key = "IMPLICIT_PK_ENABLED", value = "true")
-@Disabled("https://issues.apache.org/jira/browse/IGNITE-25174")
 public class ItCastToTsWithLocalTimeZoneTest extends BaseSqlIntegrationTest {
     @Override
     protected int initialNodes() {
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexImpTable.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexImpTable.java
index 30635a30d61..866dc2ea320 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexImpTable.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexImpTable.java
@@ -1238,7 +1238,7 @@ public class RexImpTable {
       // Current time functions
       //define(CURRENT_TIME, systemFunctionImplementor);
       define(CURRENT_TIMESTAMP, systemFunctionImplementor);
-      define(CURRENT_DATE, systemFunctionImplementor);
+      //define(CURRENT_DATE, systemFunctionImplementor);
       define(CURRENT_DATETIME, systemFunctionImplementor);
       define(LOCALTIME, systemFunctionImplementor);
       define(LOCALTIMESTAMP, systemFunctionImplementor);
@@ -1321,6 +1321,7 @@ public class RexImpTable {
       define(LOG10, new LogImplementor(null));
 
       define(TYPEOF, systemFunctionImplementor);
+      define(CURRENT_DATE, systemFunctionImplementor);
     }
 
     private static class IgniteSystemFunctionImplementor
@@ -1339,6 +1340,8 @@ public class RexImpTable {
 
             return implementor.implement(translator, call, NullAs.NOT_POSSIBLE);
           }
+        } else if (op == CURRENT_DATE) {
+            return Expressions.call(IgniteMethod.CURRENT_DATE.method(), translator.getRoot());
         }
 
         throw new AssertionError("unknown function " + op);
@@ -3980,8 +3983,9 @@ public class RexImpTable {
         return Expressions.call(BuiltInMethod.CURRENT_TIMESTAMP.method, root);
       } else if (op == CURRENT_TIME) {
         return Expressions.call(BuiltInMethod.CURRENT_TIME.method, root);
-      } else if (op == CURRENT_DATE) {
-        return Expressions.call(BuiltInMethod.CURRENT_DATE.method, root);
+      // TODO comment
+      // } else if (op == CURRENT_DATE) {
+      //   return Expressions.call(BuiltInMethod.CURRENT_DATE.method, root);
       } else if (op == CURRENT_DATETIME) {
         if (call.getOperands().isEmpty()) {
           return Expressions.call(BuiltInMethod.CURRENT_DATETIME.method, root);
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexToLixTranslator.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexToLixTranslator.java
index bc3398e9b8d..5cf6cac04d3 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexToLixTranslator.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexToLixTranslator.java
@@ -749,7 +749,7 @@ public class RexToLixTranslator implements RexVisitor<RexToLixTranslator.Result>
           Expressions.add(
               Expressions.multiply(
                   Expressions.convert_(
-                      Expressions.call(BuiltInMethod.CURRENT_DATE.method, root),
+                      Expressions.call(IgniteMethod.CURRENT_DATE.method(), root),
                       long.class),
                   Expressions.constant(DateTimeUtils.MILLIS_PER_DAY)),
               Expressions.convert_(operand, long.class));
@@ -817,7 +817,7 @@ public class RexToLixTranslator implements RexVisitor<RexToLixTranslator.Result>
                       Expressions.add(
                           Expressions.multiply(
                               Expressions.convert_(
-                                  Expressions.call(BuiltInMethod.CURRENT_DATE.method, root),
+                                  Expressions.call(IgniteMethod.CURRENT_DATE.method(), root),
                                   long.class),
                               Expressions.constant(DateTimeUtils.MILLIS_PER_DAY)),
                           Expressions.convert_(operand, long.class)))),
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteMethod.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteMethod.java
index dfbb8c608c0..f9eddc16aac 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteMethod.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteMethod.java
@@ -26,6 +26,7 @@ import java.util.Arrays;
 import java.util.Objects;
 import java.util.TimeZone;
 import java.util.UUID;
+import org.apache.calcite.DataContext;
 import org.apache.calcite.avatica.util.ByteString;
 import org.apache.calcite.linq4j.tree.Types;
 import org.apache.calcite.runtime.SqlFunctions;
@@ -143,6 +144,12 @@ public enum IgniteMethod {
      */
     STRING_TO_TIME(IgniteSqlDateTimeUtils.class, "timeStringToUnixDate", String.class),
 
+    /**
+     * SQL {@code CURRENT_DATE} function.
+     * See {@link IgniteSqlDateTimeUtils#currentDate(DataContext)}.
+     */
+    CURRENT_DATE(IgniteSqlDateTimeUtils.class, "currentDate", DataContext.class),
+
     ;
 
     private final Method method;
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteSqlDateTimeUtils.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteSqlDateTimeUtils.java
index cb85e6cc787..78dc7a34dac 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteSqlDateTimeUtils.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteSqlDateTimeUtils.java
@@ -23,7 +23,9 @@ import java.time.Year;
 import java.util.TimeZone;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import org.apache.calcite.DataContext;
 import org.apache.calcite.avatica.util.DateTimeUtils;
+import org.apache.calcite.runtime.SqlFunctions;
 import org.apache.ignite.internal.lang.IgniteStringBuilder;
 import org.apache.ignite.internal.sql.engine.exec.exp.IgniteSqlFunctions;
 import org.jetbrains.annotations.Nullable;
@@ -54,6 +56,19 @@ public class IgniteSqlDateTimeUtils {
         return IgniteSqlFunctions.toTimestampLtzExact(timestamp - offset);
     }
 
+    /**
+     * SQL {@code CURRENT_DATE} function.
+     */
+    public static int currentDate(DataContext ctx) {
+        long timestamp = DataContext.Variable.LOCAL_TIMESTAMP.get(ctx);
+        int date = SqlFunctions.timestampToDate(timestamp);
+        int time = SqlFunctions.timestampToTime(timestamp);
+        if (time < 0) {
+            --date;
+        }
+        return date;
+    }
+
     /**
      * Helper for CAST({time} AS VARCHAR(n)).
      *