Skip to content

Commit 0dbfd61

Browse files
committed
Extend spark dialect to support cast null to IP (1880/2028)
Signed-off-by: Yuanchun Shen <yuanchu@amazon.com>
1 parent 4580458 commit 0dbfd61

1 file changed

Lines changed: 20 additions & 0 deletions

File tree

core/src/main/java/org/opensearch/sql/calcite/validate/OpenSearchSparkSqlDialect.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,17 @@
88
import com.google.common.collect.ImmutableMap;
99
import java.util.Map;
1010
import lombok.experimental.Delegate;
11+
import org.apache.calcite.rel.type.RelDataType;
12+
import org.apache.calcite.sql.SqlAlienSystemTypeNameSpec;
1113
import org.apache.calcite.sql.SqlCall;
14+
import org.apache.calcite.sql.SqlDataTypeSpec;
15+
import org.apache.calcite.sql.SqlNode;
1216
import org.apache.calcite.sql.SqlWriter;
1317
import org.apache.calcite.sql.dialect.SparkSqlDialect;
18+
import org.apache.calcite.sql.parser.SqlParserPos;
1419
import org.apache.calcite.sql.validate.SqlConformance;
20+
import org.checkerframework.checker.nullness.qual.Nullable;
21+
import org.opensearch.sql.calcite.utils.OpenSearchTypeFactory;
1522

1623
/**
1724
* Custom Spark SQL dialect that extends Calcite's SparkSqlDialect to handle OpenSearch-specific
@@ -53,6 +60,19 @@ public void unparseCall(SqlWriter writer, SqlCall call, int leftPrec, int rightP
5360
}
5461
}
5562

63+
@Override
64+
public @Nullable SqlNode getCastSpec(RelDataType type) {
65+
// ExprIPType has sql type name OTHER, which can not be handled by spark dialect
66+
if (OpenSearchTypeFactory.isIp(type)) {
67+
return new SqlDataTypeSpec(
68+
// It will use SqlTypeName.OTHER by type.getSqlTypeName() as OTHER is "borrowed" to
69+
// represent IP type (see also: PplTypeCoercionRule.java)
70+
new SqlAlienSystemTypeNameSpec("IP", type.getSqlTypeName(), SqlParserPos.ZERO),
71+
SqlParserPos.ZERO);
72+
}
73+
return super.getCastSpec(type);
74+
}
75+
5676
private void unparseFunction(
5777
SqlWriter writer,
5878
SqlCall call,

0 commit comments

Comments
 (0)