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

doebele pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/empire-db.git


The following commit(s) were added to refs/heads/master by this push:
     new 6ab7a1e6 EMPIREDB-467: DBMateralizedView: new interface to indicate a 
view is materialized. Added support for Oracle.
6ab7a1e6 is described below

commit 6ab7a1e6fa8f05dc4af12f7c6901389aaa5688ca
Author: Rainer Döbele <doeb...@apache.org>
AuthorDate: Sun Jun 8 14:00:44 2025 +0200

    EMPIREDB-467:
    DBMateralizedView: new interface to indicate a view is materialized. Added 
support for Oracle.
---
 .../org/apache/empire/db/DBMaterializedView.java   | 34 ++++++++++++++++++++++
 .../empire/dbms/oracle/DBMSHandlerOracle.java      | 16 ++++++++++
 .../empire/dbms/oracle/OracleDDLGenerator.java     |  8 ++++-
 3 files changed, 57 insertions(+), 1 deletion(-)

diff --git 
a/empire-db/src/main/java/org/apache/empire/db/DBMaterializedView.java 
b/empire-db/src/main/java/org/apache/empire/db/DBMaterializedView.java
new file mode 100644
index 00000000..4d6a4d9c
--- /dev/null
+++ b/empire-db/src/main/java/org/apache/empire/db/DBMaterializedView.java
@@ -0,0 +1,34 @@
+/*
+ * 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.empire.db;
+
+/**
+ * DBMaterializedView
+ * This interface should be used in conjunction with a DBView to indicate 
+ * that the view is materialized 
+ * @author doebele
+ */
+public interface DBMaterializedView
+{
+    DBDatabase getDatabase();
+    
+    String getFullName();
+    
+    void refreshView(DBContext context);
+}
diff --git 
a/empire-db/src/main/java/org/apache/empire/dbms/oracle/DBMSHandlerOracle.java 
b/empire-db/src/main/java/org/apache/empire/dbms/oracle/DBMSHandlerOracle.java
index 5fdcf44a..976a04b6 100644
--- 
a/empire-db/src/main/java/org/apache/empire/dbms/oracle/DBMSHandlerOracle.java
+++ 
b/empire-db/src/main/java/org/apache/empire/dbms/oracle/DBMSHandlerOracle.java
@@ -35,6 +35,7 @@ import org.apache.empire.db.DBDDLGenerator;
 import org.apache.empire.db.DBDDLGenerator.DDLActionType;
 import org.apache.empire.db.DBDatabase;
 import org.apache.empire.db.DBExpr;
+import org.apache.empire.db.DBMaterializedView;
 import org.apache.empire.db.DBObject;
 import org.apache.empire.db.DBReader;
 import org.apache.empire.db.DBRelation;
@@ -572,6 +573,21 @@ public class DBMSHandlerOracle extends DBMSHandlerBase
         OracleDBModelParser modelParser = createModelParser(null, (db!=null ? 
db.getSchema() : null));
         return new OracleDBModelChecker(modelParser, getBooleanType());
     }
+                             
+    /**
+     * Immediately refreshes a Materialized View
+     * @param matView the materialized view to refresh
+     * @param context the database context
+     */
+    public void refreshMView(DBMaterializedView matView, DBContext context)
+    {
+        // check param
+        if (matView==null || matView.getDatabase().getDbms()!=this)
+            throw new InvalidArgumentException("matView", matView);
+        // refresh command
+        String refreshSqlCmd = StringUtils.concat("BEGIN 
DBMS_MVIEW.REFRESH('", matView.getFullName() , "'); END;");
+        context.executeSQL(refreshSqlCmd, null);
+    }
 
 }
 
diff --git 
a/empire-db/src/main/java/org/apache/empire/dbms/oracle/OracleDDLGenerator.java 
b/empire-db/src/main/java/org/apache/empire/dbms/oracle/OracleDDLGenerator.java
index f7b5706d..f1250608 100644
--- 
a/empire-db/src/main/java/org/apache/empire/dbms/oracle/OracleDDLGenerator.java
+++ 
b/empire-db/src/main/java/org/apache/empire/dbms/oracle/OracleDDLGenerator.java
@@ -24,6 +24,7 @@ import org.apache.empire.db.DBColumn;
 import org.apache.empire.db.DBDDLGenerator;
 import org.apache.empire.db.DBDatabase;
 import org.apache.empire.db.DBExpr;
+import org.apache.empire.db.DBMaterializedView;
 import org.apache.empire.db.DBObject;
 import org.apache.empire.db.DBSQLBuilder;
 import org.apache.empire.db.DBSQLScript;
@@ -174,7 +175,12 @@ public class OracleDDLGenerator extends 
DBDDLGenerator<DBMSHandlerOracle>
     {
         // log.info("Adding create statmement for view {}.", v.getName());
         String stmt = sql.toString();
-        stmt = StringUtils.replace(stmt, "CREATE VIEW", "CREATE OR REPLACE 
VIEW");
+        if (v instanceof DBMaterializedView) {
+            script.addStmt("-- DROP MATERIALIZED VIEW " + v.getFullName());
+            stmt = StringUtils.replace(stmt, "CREATE VIEW", "CREATE 
MATERIALIZED VIEW");
+        }
+        else
+            stmt = StringUtils.replace(stmt, "CREATE VIEW", "CREATE OR REPLACE 
VIEW");
         script.addStmt(stmt);
     }
 

Reply via email to