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<>();