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

mbudiu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/main by this push:
     new 1bf07c5b7c [CALCITE-7013] Support building RexLiterals from Character 
values
1bf07c5b7c is described below

commit 1bf07c5b7c90eba901cb8123661d8b78dcc16fce
Author: Yu Xu <[email protected]>
AuthorDate: Tue May 13 23:25:36 2025 +0800

    [CALCITE-7013] Support building RexLiterals from Character values
---
 core/src/main/java/org/apache/calcite/rex/RexBuilder.java      | 3 +++
 core/src/main/java/org/apache/calcite/tools/RelBuilder.java    | 3 +++
 core/src/test/java/org/apache/calcite/plan/RelOptUtilTest.java | 9 +++++++++
 3 files changed, 15 insertions(+)

diff --git a/core/src/main/java/org/apache/calcite/rex/RexBuilder.java 
b/core/src/main/java/org/apache/calcite/rex/RexBuilder.java
index 19036f75b2..d2729da71f 100644
--- a/core/src/main/java/org/apache/calcite/rex/RexBuilder.java
+++ b/core/src/main/java/org/apache/calcite/rex/RexBuilder.java
@@ -2266,6 +2266,9 @@ public RexNode makeLambdaCall(RexNode expr, 
List<RexLambdaRef> parameters) {
       if (charset == null) {
         throw new AssertionError(type + ".getCharset() must not be null");
       }
+      if (o instanceof Character) {
+        return new NlsString(o.toString(), charset.name(), 
type.getCollation());
+      }
       return new NlsString((String) o, charset.name(), type.getCollation());
     case TIME:
       if (o instanceof TimeString) {
diff --git a/core/src/main/java/org/apache/calcite/tools/RelBuilder.java 
b/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
index 158326b6bb..9f21055f97 100644
--- a/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
+++ b/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
@@ -477,6 +477,9 @@ public RexLiteral literal(@Nullable Object value) {
       return rexBuilder.makeNullLiteral(type);
     } else if (value instanceof Boolean) {
       return rexBuilder.makeLiteral((Boolean) value);
+    } else if (value instanceof Character) {
+      return rexBuilder.makeLiteral(value,
+          getTypeFactory().createSqlType(SqlTypeName.CHAR));
     } else if (value instanceof BigDecimal) {
       return rexBuilder.makeExactLiteral((BigDecimal) value);
     } else if (value instanceof Float || value instanceof Double) {
diff --git a/core/src/test/java/org/apache/calcite/plan/RelOptUtilTest.java 
b/core/src/test/java/org/apache/calcite/plan/RelOptUtilTest.java
index ab058c55a2..63086de4c7 100644
--- a/core/src/test/java/org/apache/calcite/plan/RelOptUtilTest.java
+++ b/core/src/test/java/org/apache/calcite/plan/RelOptUtilTest.java
@@ -405,6 +405,15 @@ private static Frameworks.ConfigBuilder config() {
         relBuilder.literal(true));
   }
 
+  /**
+   * Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-7013";>[CALCITE-7013]
+   * Support building RexLiterals from Character values</a>. */
+  @Test void testCharacterLiteral() {
+    char c = 'c';
+    relBuilder.literal(c);
+  }
+
   private void splitJoinConditionHelper(RexNode joinCond, List<Integer> 
expLeftKeys,
       List<Integer> expRightKeys, List<Boolean> expFilterNulls, RexNode 
expRemaining) {
     List<Integer> actLeftKeys = new ArrayList<>();

Reply via email to