This is an automated email from the ASF dual-hosted git repository.
lincoln pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git
The following commit(s) were added to refs/heads/master by this push:
new 2f6743bc686 [FLINK-39183][table] Support BITMAP type in Calcite parser
2f6743bc686 is described below
commit 2f6743bc686edd3e9d9e3bfddefc056c4365e915
Author: dylanhz <[email protected]>
AuthorDate: Thu Mar 19 17:11:16 2026 +0800
[FLINK-39183][table] Support BITMAP type in Calcite parser
This closes #27720.
---
.../src/main/codegen/data/Parser.tdd | 3 +
.../src/main/codegen/includes/parserImpls.ftl | 11 ++++
.../sql/parser/type/SqlBitmapTypeNameSpec.java | 64 ++++++++++++++++++++++
.../table/calcite/ExtendedRelTypeFactory.java | 6 ++
.../flink/sql/parser/FlinkSqlParserImplTest.java | 17 ++++++
.../flink/sql/parser/TestRelDataTypeFactory.java | 17 ++++++
6 files changed, 118 insertions(+)
diff --git a/flink-table/flink-sql-parser/src/main/codegen/data/Parser.tdd
b/flink-table/flink-sql-parser/src/main/codegen/data/Parser.tdd
index c6269db8c83..92487c2ab36 100644
--- a/flink-table/flink-sql-parser/src/main/codegen/data/Parser.tdd
+++ b/flink-table/flink-sql-parser/src/main/codegen/data/Parser.tdd
@@ -170,6 +170,7 @@
"org.apache.flink.sql.parser.dql.SqlDescribeJob"
"org.apache.flink.sql.parser.type.ExtendedSqlCollectionTypeNameSpec"
"org.apache.flink.sql.parser.type.ExtendedSqlRowTypeNameSpec"
+ "org.apache.flink.sql.parser.type.SqlBitmapTypeNameSpec"
"org.apache.flink.sql.parser.type.SqlRawTypeNameSpec"
"org.apache.flink.sql.parser.type.SqlStructuredTypeNameSpec"
"org.apache.flink.sql.parser.type.SqlTimestampLtzTypeNameSpec"
@@ -195,6 +196,7 @@
keywords: [
"ANALYZE"
"ARTIFACT"
+ "BITMAP"
"BUCKETS"
"BYTES"
"CATALOGS"
@@ -698,6 +700,7 @@
"SqlRawTypeName()"
"ExtendedSqlRowTypeName()"
"SqlStructuredTypeName()"
+ "SqlBitmapTypeName()"
]
# List of methods for parsing builtin function calls.
diff --git
a/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl
b/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl
index cdf2767a212..7b081a38f31 100644
--- a/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl
+++ b/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl
@@ -2560,6 +2560,17 @@ SqlTypeNameSpec SqlRawTypeName() :
}
}
+/** Parses BITMAP type. */
+SqlTypeNameSpec SqlBitmapTypeName() :
+{
+}
+{
+ <BITMAP>
+ {
+ return new SqlBitmapTypeNameSpec(getPos());
+ }
+}
+
/**
* Parse a "name1 type1 [ NULL | NOT NULL] [ comment ]
* [, name2 type2 [ NULL | NOT NULL] [ comment ] ]* ..." list.
diff --git
a/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/type/SqlBitmapTypeNameSpec.java
b/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/type/SqlBitmapTypeNameSpec.java
new file mode 100644
index 00000000000..60914b1e8c6
--- /dev/null
+++
b/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/type/SqlBitmapTypeNameSpec.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.flink.sql.parser.type;
+
+import org.apache.flink.annotation.Internal;
+import org.apache.flink.table.calcite.ExtendedRelTypeFactory;
+
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.sql.SqlIdentifier;
+import org.apache.calcite.sql.SqlTypeNameSpec;
+import org.apache.calcite.sql.SqlWriter;
+import org.apache.calcite.sql.parser.SqlParserPos;
+import org.apache.calcite.sql.validate.SqlValidator;
+import org.apache.calcite.util.Litmus;
+
+/**
+ * Represents the BITMAP data type, a compressed data structure for storing
sets of unsigned
+ * integers.
+ *
+ * <p>The BITMAP type does not belong to standard SQL.
+ */
+@Internal
+public final class SqlBitmapTypeNameSpec extends SqlTypeNameSpec {
+
+ private static final String BITMAP_TYPE_NAME = "BITMAP";
+
+ public SqlBitmapTypeNameSpec(SqlParserPos pos) {
+ super(new SqlIdentifier(BITMAP_TYPE_NAME, pos), pos);
+ }
+
+ @Override
+ public RelDataType deriveType(SqlValidator validator) {
+ return ((ExtendedRelTypeFactory)
validator.getTypeFactory()).createBitmapType();
+ }
+
+ @Override
+ public void unparse(SqlWriter writer, int leftPrec, int rightPrec) {
+ writer.keyword(BITMAP_TYPE_NAME);
+ }
+
+ @Override
+ public boolean equalsDeep(SqlTypeNameSpec spec, Litmus litmus) {
+ if (!(spec instanceof SqlBitmapTypeNameSpec)) {
+ return litmus.fail("{} != {}", this, spec);
+ }
+ return litmus.succeed();
+ }
+}
diff --git
a/flink-table/flink-sql-parser/src/main/java/org/apache/flink/table/calcite/ExtendedRelTypeFactory.java
b/flink-table/flink-sql-parser/src/main/java/org/apache/flink/table/calcite/ExtendedRelTypeFactory.java
index eef102e9238..dba4dd59789 100644
---
a/flink-table/flink-sql-parser/src/main/java/org/apache/flink/table/calcite/ExtendedRelTypeFactory.java
+++
b/flink-table/flink-sql-parser/src/main/java/org/apache/flink/table/calcite/ExtendedRelTypeFactory.java
@@ -41,4 +41,10 @@ public interface ExtendedRelTypeFactory extends
RelDataTypeFactory {
*/
RelDataType createStructuredType(
String className, List<RelDataType> typeList, List<String>
fieldNameList);
+
+ /** Creates a BITMAP type. */
+ default RelDataType createBitmapType() {
+ // The actual implementation will be provided by FlinkTypeFactory as
part of FLINK-39185.
+ throw new UnsupportedOperationException("BITMAP type is not supported
yet.");
+ }
}
diff --git
a/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/FlinkSqlParserImplTest.java
b/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/FlinkSqlParserImplTest.java
index a65ad52c566..c147caec32f 100644
---
a/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/FlinkSqlParserImplTest.java
+++
b/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/FlinkSqlParserImplTest.java
@@ -3907,4 +3907,21 @@ class FlinkSqlParserImplTest extends SqlParserTest {
sql("CREATE TABLE t (\n" + "v VARIANT NOT NULL" + "\n)")
.ok("CREATE TABLE `T` (\n" + " `V` VARIANT NOT NULL\n" + ")");
}
+
+ @Test
+ void testBitmapType() {
+ sql("CREATE TABLE t (\n" + "bm bitmap" + "\n)")
+ .ok("CREATE TABLE `T` (\n" + " `BM` BITMAP\n" + ")");
+
+ sql("CREATE TABLE t (\n" + "bm bitmap NOT NULL" + "\n)")
+ .ok("CREATE TABLE `T` (\n" + " `BM` BITMAP NOT NULL\n" + ")");
+
+ // BITMAP takes no parameters
+ sql("CREATE TABLE t (\n" + "bm bitmap^(^1)" + "\n)")
+ .fails("(?s).*Encountered \"\\(\" at line 2, column 10.\n.*");
+
+ // BITMAP is a reserved keyword and cannot be used as an identifier
without escaping
+ sql("CREATE TABLE t (\n" + "^bitmap^ INT" + "\n)")
+ .fails("(?s).*Encountered \"bitmap\" at line 2, column
1.\n.*");
+ }
}
diff --git
a/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/TestRelDataTypeFactory.java
b/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/TestRelDataTypeFactory.java
index 32af2b17f33..34fe9926079 100644
---
a/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/TestRelDataTypeFactory.java
+++
b/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/TestRelDataTypeFactory.java
@@ -48,6 +48,11 @@ final class TestRelDataTypeFactory extends
SqlTypeFactoryImpl implements Extende
return canonize(new DummyStructuredType(className, typeList,
fieldNameList));
}
+ @Override
+ public RelDataType createBitmapType() {
+ return canonize(new DummyBitmapType());
+ }
+
private static class DummyRawType extends RelDataTypeImpl {
private final String className;
@@ -100,4 +105,16 @@ final class TestRelDataTypeFactory extends
SqlTypeFactoryImpl implements Extende
sb.append(">");
}
}
+
+ private static class DummyBitmapType extends RelDataTypeImpl {
+
+ DummyBitmapType() {
+ computeDigest();
+ }
+
+ @Override
+ protected void generateTypeString(StringBuilder sb, boolean
withDetail) {
+ sb.append("BITMAP");
+ }
+ }
}