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