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");
+        }
+    }
 }

Reply via email to