Skip to content

Commit a4db157

Browse files
committed
Fix charset mismatch by overriding getDefaultCharset() with UTF-8
The previous fix patched createSqlType() for the no-arg and boolean variants, but Calcite has many code paths for char type creation: - createSqlType(SqlTypeName, int precision) - RexBuilder.makeLiteral(String) → getDefaultCharset() - RelBuilder.literal(String) → getDefaultCharset() All of these bypassed the per-method overrides, causing residual 'VARCHAR CHARACTER SET UTF-8 is not comparable to CHAR(1)' errors in RangeFormatter and other callers (e.g. bin command). Fix: override getDefaultCharset() in OpenSearchTypeFactory to return UTF-8. This is the single source of truth Calcite uses across all char type creation paths, making every VARCHAR/CHAR consistently UTF-8 without needing per-call patches. The per-method createSqlType overrides are removed as redundant. Signed-off-by: Radhakrishnan Pachyappan <gingeekrishna@gmail.com>
1 parent 4c7bf03 commit a4db157

1 file changed

Lines changed: 6 additions & 14 deletions

File tree

core/src/main/java/org/opensearch/sql/calcite/utils/OpenSearchTypeFactory.java

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,11 @@ public RelDataType createTypeWithNullability(RelDataType type, boolean nullable)
9696
return super.createTypeWithNullability(type, nullable);
9797
}
9898

99+
@Override
100+
public Charset getDefaultCharset() {
101+
return StandardCharsets.UTF_8;
102+
}
103+
99104
@Override
100105
public RelDataType createTypeWithCharsetAndCollation(
101106
RelDataType type, Charset charset, SqlCollation collation) {
@@ -105,21 +110,8 @@ public RelDataType createTypeWithCharsetAndCollation(
105110
return super.createTypeWithCharsetAndCollation(type, charset, collation);
106111
}
107112

108-
@Override
109-
public RelDataType createSqlType(SqlTypeName typeName) {
110-
RelDataType type = super.createSqlType(typeName);
111-
if (typeName == SqlTypeName.VARCHAR || typeName == SqlTypeName.CHAR) {
112-
return createTypeWithCharsetAndCollation(type, StandardCharsets.UTF_8, SqlCollation.IMPLICIT);
113-
}
114-
return type;
115-
}
116-
117113
public RelDataType createSqlType(SqlTypeName typeName, boolean nullable) {
118-
RelDataType type = createTypeWithNullability(super.createSqlType(typeName), nullable);
119-
if (typeName == SqlTypeName.VARCHAR || typeName == SqlTypeName.CHAR) {
120-
return createTypeWithCharsetAndCollation(type, StandardCharsets.UTF_8, SqlCollation.IMPLICIT);
121-
}
122-
return type;
114+
return createTypeWithNullability(super.createSqlType(typeName), nullable);
123115
}
124116

125117
public RelDataType createStructType(

0 commit comments

Comments
 (0)