diff --git a/export.php b/export.php
index 3a2bd6eea8..d002b6b46e 100644
--- a/export.php
+++ b/export.php
@@ -139,6 +139,7 @@ $post_params = [
'sql_create_trigger',
'sql_view_current_user',
'sql_if_not_exists',
+ 'sql_or_replace_view',
'sql_auto_increment',
'sql_backquotes',
'sql_truncate',
diff --git a/libraries/classes/Config/Descriptions.php b/libraries/classes/Config/Descriptions.php
index 9aa6d7af20..c119cf61dd 100644
--- a/libraries/classes/Config/Descriptions.php
+++ b/libraries/classes/Config/Descriptions.php
@@ -253,6 +253,7 @@ class Descriptions
. ' table creation)'
),
'Export_sql_view_current_user' => __('Exclude definition of current user'),
+ 'Export_sql_or_replace_view_name' => sprintf(__('%s view'), 'OR REPLACE'),
'Export_sql_ignore_name' => __('Use ignore inserts'),
'Export_sql_include_comments_name' => __('Comments'),
'Export_sql_insert_syntax_name' => __('Syntax to use when inserting data'),
diff --git a/libraries/classes/Config/Forms/User/ExportForm.php b/libraries/classes/Config/Forms/User/ExportForm.php
index 6102e8c4c0..8eb04a3a52 100644
--- a/libraries/classes/Config/Forms/User/ExportForm.php
+++ b/libraries/classes/Config/Forms/User/ExportForm.php
@@ -65,6 +65,7 @@ class ExportForm extends BaseForm
':group:end',
'Export/sql_create_view' => ':group',
'Export/sql_view_current_user',
+ 'Export/sql_or_replace_view',
':group:end',
'Export/sql_procedure_function',
'Export/sql_create_trigger',
diff --git a/libraries/classes/Plugins/Export/ExportSql.php b/libraries/classes/Plugins/Export/ExportSql.php
index 8927df796e..98efc1bc3a 100644
--- a/libraries/classes/Plugins/Export/ExportSql.php
+++ b/libraries/classes/Plugins/Export/ExportSql.php
@@ -311,11 +311,19 @@ class ExportSql extends ExportPlugin
sprintf(__('Add %s statement'), 'CREATE VIEW')
);
$subgroup_create_view->setSubgroupHeader($leaf);
+
$leaf = new BoolPropertyItem(
'view_current_user',
__('Exclude definition of current user')
);
$subgroup_create_view->addProperty($leaf);
+
+ $leaf = new BoolPropertyItem(
+ 'or_replace_view',
+ sprintf(__('%s view'), 'OR REPLACE')
+ );
+ $subgroup_create_view->addProperty($leaf);
+
$subgroup->addProperty($subgroup_create_view);
$leaf = new BoolPropertyItem(
@@ -1469,6 +1477,14 @@ class ExportSql extends ExportPlugin
$schema_create .= $new_crlf;
+ if (!empty($sql_drop_table)
+ && $GLOBALS['dbi']->getTable($db, $table)->isView()
+ ) {
+ $schema_create .= 'DROP VIEW IF EXISTS '
+ . Util::backquote($table_alias, $sql_backquotes) . ';'
+ . $crlf;
+ }
+
// no need to generate a DROP VIEW here, it was done earlier
if (!empty($sql_drop_table)
&& !$GLOBALS['dbi']->getTable($db, $table)->isView()
@@ -1551,6 +1567,15 @@ class ExportSql extends ExportPlugin
$create_query
);
}
+
+ // whether to replace existing view or not
+ if ($GLOBALS['sql_or_replace_view']) {
+ $create_query = preg_replace(
+ '/^CREATE/',
+ 'CREATE OR REPLACE',
+ $create_query
+ );
+ }
}
// Substitute aliases in `CREATE` query.
diff --git a/libraries/config.default.php b/libraries/config.default.php
index 9876f9c664..c84ad3c3bc 100644
--- a/libraries/config.default.php
+++ b/libraries/config.default.php
@@ -1959,13 +1959,14 @@ $cfg['Export']['sql_drop_table'] = false;
$cfg['Export']['sql_if_not_exists'] = false;
/**
- *
- *
- *
* @global boolean $cfg['Export']['sql_view_current_user']
*/
$cfg['Export']['sql_view_current_user'] = false;
+/**
+ * @global boolean $cfg['Export']['sql_or_replace']
+ */
+$cfg['Export']['sql_or_replace_view'] = false;
/**
*