This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 2a8cc401d9d Feat: Support parsing Oracle CREATE MATERIALIZED sql 
(#27994)
2a8cc401d9d is described below

commit 2a8cc401d9d1c1387df410507a6126e2822a3a9a
Author: Feng Zhang <[email protected]>
AuthorDate: Mon Sep 18 18:02:49 2023 -0700

    Feat: Support parsing Oracle CREATE MATERIALIZED sql (#27994)
    
    * Feat: Support parsing Oracle CREATE MATERIALIZED sql
    
    * add final
    
    * refactor ddl g4 to inline grammer
    
    * refactor ddl and dml g4
    
    * add back additional ddl g4 rules
---
 .../src/main/antlr4/imports/oracle/DDLStatement.g4 | 50 ++++++++++++++++++++++
 .../sql/parser/autogen/OracleStatement.g4          |  2 +
 .../statement/type/OracleDDLStatementVisitor.java  | 14 ++++++
 .../core/database/visitor/SQLVisitorRule.java      |  2 +
 .../OracleCreateMaterializedViewLogStatement.java  | 27 ++++++++++++
 .../ddl/OracleCreateMaterializedViewStatement.java | 27 ++++++++++++
 .../cases/parser/jaxb/RootSQLParserTestCases.java  |  4 ++
 ...CreateMaterializedViewLogStatementTestCase.java | 26 +++++++++++
 ...d-view.xml => create-materialized-view-log.xml} | 11 ++---
 .../case/ddl/create-materialized-view.xml          |  2 +
 .../supported/ddl/create-materialized-view-log.xml | 31 ++++++++++++++
 .../sql/supported/ddl/create-materialized-view.xml | 11 +++++
 12 files changed, 202 insertions(+), 5 deletions(-)

diff --git 
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4 
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
index 7a35c2a4372..568a20d1a74 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
@@ -3397,6 +3397,56 @@ arryDMLSubClause
     : LP_ typeName (COMMA_ varrayType)? RP_
     ;
 
+createMaterializedView
+    : CREATE MATERIALIZED VIEW materializedViewName (OF typeName )? 
materializedViewColumnClause? materializedViewPrebuiltClause 
materializedViewUsingClause? createMvRefresh? (FOR UPDATE)? ( (DISABLE | 
ENABLE) QUERY REWRITE )? AS selectSubquery
+    ;
+
+materializedViewColumnClause
+    : ( LP_ (scopedTableRefConstraint | mvColumnAlias) (COMMA_ 
(scopedTableRefConstraint | mvColumnAlias))* RP_ )
+    ;
+
+materializedViewPrebuiltClause
+    : ( ON PREBUILT TABLE ( (WITH | WITHOUT) REDUCED PRECISION)? | 
physicalProperties?  (CACHE | NOCACHE)? parallelClause? buildClause?)
+    ;
+
+materializedViewUsingClause
+    : ( USING INDEX ( (physicalAttributesClause | TABLESPACE tablespaceName)+ 
)* | USING NO INDEX)
+    ;
+
+mvColumnAlias
+    : (identifier | quotedString) (ENCRYPT encryptionSpecification)?
+    ;
+
+createMvRefresh
+    : ( NEVER REFRESH | REFRESH createMvRefreshOptions+)
+    ;
+
+createMvRefreshOptions
+    : ( (FAST | COMPLETE | FORCE) | ON (DEMAND | COMMIT) | (START WITH | NEXT) 
| WITH (PRIMARY KEY | ROWID) | USING ( DEFAULT (MASTER LOCAL)? ROLLBACK SEGMENT 
| (MASTER | LOCAL)? ROLLBACK SEGMENT rb_segment=REGULAR_ID ) | USING (ENFORCED 
| TRUSTED) CONSTRAINTS)
+    ;
+
+quotedString
+    : variableName
+    | CHAR_STRING
+    | NATIONAL_CHAR_STRING_LIT
+    ;
+
+buildClause
+    : BUILD (IMMEDIATE | DEFERRED)
+    ;
+
+createMaterializedViewLog
+    : CREATE MATERIALIZED VIEW LOG ON tableName materializedViewLogAttribute? 
parallelClause? ( WITH ( COMMA_? ( OBJECT ID | PRIMARY KEY | ROWID | SEQUENCE | 
COMMIT SCN ) )* (LP_ ( COMMA_? identifier )+ RP_ newViewValuesClause? )? 
mvLogPurgeClause? )*
+    ;
+
+materializedViewLogAttribute
+    : ( ( physicalAttributesClause | TABLESPACE tablespaceName | loggingClause 
| (CACHE | NOCACHE))+ )
+    ;
+
+newViewValuesClause
+    : (INCLUDING | EXCLUDING ) NEW VALUES
+    ;
+
 alterMaterializedView
     : ALTER MATERIALIZED VIEW materializedViewName materializedViewAttribute? 
alterIotClauses? (USING INDEX physicalAttributesClause)?
     ((MODIFY scopedTableRefConstraint) | alterMvRefresh)? 
evaluationEditionClause?
diff --git 
a/parser/sql/dialect/oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
 
b/parser/sql/dialect/oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
index c8a8306d123..92800a99bca 100644
--- 
a/parser/sql/dialect/oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
+++ 
b/parser/sql/dialect/oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
@@ -121,6 +121,8 @@ execute
     | alterRollbackSegment
     | alterDiskgroup
     | alterIndexType
+    | createMaterializedView
+    | createMaterializedViewLog
     | alterMaterializedView
     | alterMaterializedViewLog
     | alterFunction
diff --git 
a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
 
b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
index 926dba4f3d2..20c623fc534 100644
--- 
a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
+++ 
b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
@@ -94,6 +94,8 @@ import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.Create
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.CreateSynonymContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.CreateTableContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.CreateTablespaceContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.CreateMaterializedViewContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.CreateMaterializedViewLogContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.CreateTypeContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.CreateViewContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DataTypeDefinitionContext;
@@ -256,6 +258,8 @@ import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.Ora
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleCreateSynonymStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleCreateTableStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleCreateTablespaceStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleCreateMaterializedViewStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleCreateMaterializedViewLogStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleCreateViewStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleCreateVarrayTypeStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleDisassociateStatisticsStatement;
@@ -1299,6 +1303,16 @@ public final class OracleDDLStatementVisitor extends 
OracleStatementVisitor impl
         return new OracleCreateTablespaceStatement();
     }
     
+    @Override
+    public ASTNode visitCreateMaterializedView(final 
CreateMaterializedViewContext ctx) {
+        return new OracleCreateMaterializedViewStatement();
+    }
+    
+    @Override
+    public ASTNode visitCreateMaterializedViewLog(final 
CreateMaterializedViewLogContext ctx) {
+        return new OracleCreateMaterializedViewLogStatement();
+    }
+    
     @Override
     public ASTNode visitCreateCluster(final CreateClusterContext ctx) {
         return new OracleCreateClusterStatement();
diff --git 
a/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorRule.java
 
b/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorRule.java
index 197fcb86fb8..14edbebacd0 100644
--- 
a/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorRule.java
+++ 
b/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorRule.java
@@ -667,6 +667,8 @@ public enum SQLVisitorRule {
     
     CREATE_MATERIALIZED_VIEW("CreateMaterializedView", SQLStatementType.DDL),
     
+    CREATE_MATERIALIZED_VIEW_LOG("CreateMaterializedViewLog", 
SQLStatementType.DDL),
+    
     CREATE_OPERATOR("CreateOperator", SQLStatementType.DDL),
     
     CREATE_POLICY("CreatePolicy", SQLStatementType.DDL),
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateMaterializedViewLogStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateMaterializedViewLogStatement.java
new file mode 100644
index 00000000000..983760bf84a
--- /dev/null
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateMaterializedViewLogStatement.java
@@ -0,0 +1,27 @@
+/*
+ * 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.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl;
+
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.OracleStatement;
+
+/**
+ * Oracle create materialized view log statement.
+ */
+public final class OracleCreateMaterializedViewLogStatement extends 
AbstractSQLStatement implements OracleStatement {
+}
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateMaterializedViewStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateMaterializedViewStatement.java
new file mode 100644
index 00000000000..c3e1c98549c
--- /dev/null
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateMaterializedViewStatement.java
@@ -0,0 +1,27 @@
+/*
+ * 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.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl;
+
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateMaterializedViewStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.OracleStatement;
+
+/**
+ * OracleSQL create materialized view statement.
+ */
+public final class OracleCreateMaterializedViewStatement extends 
CreateMaterializedViewStatement implements OracleStatement {
+}
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
index 191e946c8c7..88821886f53 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
@@ -183,6 +183,7 @@ import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.s
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreateInmemoryJoinGroupStatementTestCase;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreateLanguageStatementTestCase;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreateLockdownProfileStatementTestCase;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreateMaterializedViewLogStatementTestCase;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreateMaterializedViewStatementTestCase;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreateOperatorStatementTestCase;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreatePFileStatementTestCase;
@@ -1666,6 +1667,9 @@ public final class RootSQLParserTestCases {
     @XmlElement(name = "create-materialized-view")
     private final List<CreateMaterializedViewStatementTestCase> 
createMaterializedViewStatementTestCases = new LinkedList<>();
     
+    @XmlElement(name = "create-materialized-view-log")
+    private final List<CreateMaterializedViewLogStatementTestCase> 
createMaterializedViewLogStatementTestCases = new LinkedList<>();
+    
     @XmlElement(name = "create-operator")
     private final List<CreateOperatorStatementTestCase> 
createOperatorStatementTestCases = new LinkedList<>();
     
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/CreateMaterializedViewLogStatementTestCase.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/CreateMaterializedViewLogStatementTestCase.java
new file mode 100644
index 00000000000..7366ded65db
--- /dev/null
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/CreateMaterializedViewLogStatementTestCase.java
@@ -0,0 +1,26 @@
+/*
+ * 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.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl;
+
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
+
+/**
+ * Create materialized view statement test case.
+ */
+public final class CreateMaterializedViewLogStatementTestCase extends 
SQLParserTestCase {
+}
diff --git 
a/test/it/parser/src/main/resources/case/ddl/create-materialized-view.xml 
b/test/it/parser/src/main/resources/case/ddl/create-materialized-view-log.xml
similarity index 61%
copy from 
test/it/parser/src/main/resources/case/ddl/create-materialized-view.xml
copy to 
test/it/parser/src/main/resources/case/ddl/create-materialized-view-log.xml
index ffbdfdded5f..71de1e31278 100644
--- a/test/it/parser/src/main/resources/case/ddl/create-materialized-view.xml
+++ 
b/test/it/parser/src/main/resources/case/ddl/create-materialized-view-log.xml
@@ -17,9 +17,10 @@
   -->
 
 <sql-parser-test-cases>
-    <create-materialized-view 
sql-case-id="create_materialized_view_with_if_not_exists" />
-    <create-materialized-view sql-case-id="create_materialized_view" />
-    <create-materialized-view 
sql-case-id="create_materialized_view_with_using" />
-    <create-materialized-view 
sql-case-id="create_materialized_view_with_no_data" />
-    <create-materialized-view sql-case-id="create_materialized_view_with_data" 
/>
+    <create-materialized-view-log 
sql-case-id="create_materialized_view_log_with" />
+    <create-materialized-view-log 
sql-case-id="create_materialized_view_log_with_including_new" />
+    <create-materialized-view-log 
sql-case-id="create_materialized_view_log_with_tablespace" />
+    <create-materialized-view-log 
sql-case-id="create_materialized_view_log_with_table_schema" />
+    <create-materialized-view-log 
sql-case-id="create_materialized_view_log_with_object_id" />
+    <create-materialized-view-log 
sql-case-id="create_materialized_view_log_with_row_id" />
 </sql-parser-test-cases>
diff --git 
a/test/it/parser/src/main/resources/case/ddl/create-materialized-view.xml 
b/test/it/parser/src/main/resources/case/ddl/create-materialized-view.xml
index ffbdfdded5f..20e6f11f159 100644
--- a/test/it/parser/src/main/resources/case/ddl/create-materialized-view.xml
+++ b/test/it/parser/src/main/resources/case/ddl/create-materialized-view.xml
@@ -22,4 +22,6 @@
     <create-materialized-view 
sql-case-id="create_materialized_view_with_using" />
     <create-materialized-view 
sql-case-id="create_materialized_view_with_no_data" />
     <create-materialized-view sql-case-id="create_materialized_view_with_data" 
/>
+    <create-materialized-view 
sql-case-id="create_materialized_view_with_refresh_fast" />
+    <create-materialized-view 
sql-case-id="create_materialized_view_with_refresh_fast_query_rewrite" />
 </sql-parser-test-cases>
diff --git 
a/test/it/parser/src/main/resources/sql/supported/ddl/create-materialized-view-log.xml
 
b/test/it/parser/src/main/resources/sql/supported/ddl/create-materialized-view-log.xml
new file mode 100644
index 00000000000..0baea22fa2a
--- /dev/null
+++ 
b/test/it/parser/src/main/resources/sql/supported/ddl/create-materialized-view-log.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<sql-cases>
+    <sql-case id="create_materialized_view_log_with" value="CREATE 
MATERIALIZED VIEW LOG ON inventories WITH (quantity_on_hand);" 
db-types="Oracle" />
+    <sql-case id="create_materialized_view_log_with_including_new" 
value="CREATE MATERIALIZED VIEW
+    LOG ON employees WITH PRIMARY KEY INCLUDING NEW VALUES;" db-types="Oracle" 
/>
+    <sql-case id="create_materialized_view_log_with_tablespace" value="CREATE 
MATERIALIZED VIEW
+    LOG ON emp_data PCTFREE 5 PCTUSED 60 TABLESPACE example STORAGE (INITIAL 
50K)
+    REFRESH FAST NEXT sysdate + 7 AS SELECT * FROM employees;" 
db-types="Oracle" />
+    <sql-case id="create_materialized_view_log_with_table_schema" 
value="CREATE MATERIALIZED VIEW
+    LOG ON &quot;SH&quot;.&quot;CUSTOMERS&quot; WITH ROWID, 
SEQUENCE(&quot;CUST_ID&quot;)
+    INCLUDING NEW VALUES;" db-types="Oracle" />
+    <sql-case id="create_materialized_view_log_with_object_id" value="CREATE 
MATERIALIZED VIEW LOG ON oe.categories_tab_sys WITH OBJECT ID;" 
db-types="Oracle" />
+    <sql-case id="create_materialized_view_log_with_row_id" value="CREATE 
MATERIALIZED VIEW LOG ON sales WITH ROWID;" db-types="Oracle" />
+</sql-cases>
diff --git 
a/test/it/parser/src/main/resources/sql/supported/ddl/create-materialized-view.xml
 
b/test/it/parser/src/main/resources/sql/supported/ddl/create-materialized-view.xml
index 3bc8aa4d22e..1db36d160a4 100644
--- 
a/test/it/parser/src/main/resources/sql/supported/ddl/create-materialized-view.xml
+++ 
b/test/it/parser/src/main/resources/sql/supported/ddl/create-materialized-view.xml
@@ -22,4 +22,15 @@
     <sql-case id="create_materialized_view_with_using" value="CREATE 
MATERIALIZED VIEW mat_view_heap_psql USING heap_psql AS SELECT f1 from 
tbl_heap_psql;" db-types="PostgreSQL" />
     <sql-case id="create_materialized_view_with_no_data" value="CREATE 
MATERIALIZED VIEW matview_schema.mv_nodata1 (a) AS   SELECT generate_series(1, 
10) WITH NO DATA;" db-types="PostgreSQL" />
     <sql-case id="create_materialized_view_with_data" value="CREATE 
MATERIALIZED VIEW matview_schema.mv_withdata1 (a) AS   SELECT 
generate_series(1, 10) WITH DATA;" db-types="PostgreSQL" />
+    <sql-case id="create_materialized_view_with_refresh_fast" value="CREATE 
MATERIALIZED VIEW warranty_orders REFRESH FAST AS
+    SELECT order_id, line_item_id, product_id FROM order_items WHERE EXISTS
+    (SELECT * FROM inventories i WHERE o.product_id = i.product_id AND 
i.quantity_on_hand IS NOT NULL)
+    UNION
+    SELECT order_id, line_item_id, product_id FROM order_items WHERE quantity 
> 5;" db-types="Oracle" />
+    <sql-case id="create_materialized_view_with_refresh_fast_query_rewrite" 
value="CREATE MATERIALIZED VIEW SH.CUST_MV$SUB1
+    REFRESH FAST WITH ROWID ON COMMIT ENABLE QUERY REWRITE
+    AS SELECT SH.SALES.PROD_ID C1, SH.CUSTOMERS.CUST_ID C2,
+    SUM(SH.SALES.AMOUNT_SOLD) M1, COUNT(SH.SALES.AMOUNT_SOLD) M2, COUNT(*) M3 
FROM SH.SALES, SH.CUSTOMERS
+    WHERE SH.CUSTOMERS.CUST_ID = SH.SALES.CUST_ID AND (SH.SALES.CUST_ID IN 
(1012, 1010, 1005))
+    GROUP BY SH.SALES.PROD_ID, SH.CUSTOMERS.CUST_ID;" db-types="Oracle" />
 </sql-cases>

Reply via email to