Eli Mesika has uploaded a new change for review.

Change subject: core: Adding cleandb.sh script
......................................................................

core: Adding cleandb.sh script

The script enables to drop all database objects installed by oVirt and
leaving a clean database.

Basic usage:
             cleandb -u <user> -d <database>

Change-Id: I7ff33e4ccb8cb66bbe06f5d1c8a00f22d28a2e31
Signed-off-by: Eli Mesika <emes...@redhat.com>
---
A packaging/dbscripts/cleandb.sh
M packaging/dbscripts/common_sp.sql
M packaging/dbscripts/dbfunctions.sh
3 files changed, 96 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/32/16832/1

diff --git a/packaging/dbscripts/cleandb.sh b/packaging/dbscripts/cleandb.sh
new file mode 100755
index 0000000..a21ae0d
--- /dev/null
+++ b/packaging/dbscripts/cleandb.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+
+################################################################################
+# Cleans DB by dropping all DB objects
+################################################################################
+
+#include db general functions
+pushd $(dirname ${0})>/dev/null
+source ./dbfunctions.sh
+source ./dbcustomfunctions.sh
+
+#setting defaults
+set_defaults
+
+usage() {
+    printf "Usage: ${ME} [-h] [-s SERVERNAME] [-p PORT] [-d DATABASE] [-u 
USERNAME] [-l LOGFILE] [-v]\n"
+    printf "\n"
+    printf "\t-s SERVERNAME - The database servername for the database (def. 
${SERVERNAME})\n"
+    printf "\t-p PORT       - The database port for the database       (def. 
${PORT})\n"
+    printf "\t-d DATABASE   - The database name                        (def. 
${DATABASE})\n"
+    printf "\t-u USERNAME   - The username for the database            (def. 
engine)\n"
+    printf "\t-l LOGFILE    - The logfile for capturing output         (def. 
${LOGFILE}\n"
+    printf "\t-v            - Turn on verbosity (WARNING: lots of output)\n"
+    printf "\t-h            - This help text.\n"
+    printf "\n"
+    popd>/dev/null
+    exit $ret
+}
+
+DEBUG () {
+    if $VERBOSE; then
+        printf "DEBUG: $*"
+    fi
+}
+
+while getopts hs:d:u:p:lv option; do
+    case $option in
+        s) SERVERNAME=$OPTARG;;
+        p) PORT=$OPTARG;;
+        d) DATABASE=$OPTARG;;
+        u) USERNAME=$OPTARG;;
+        l) LOGFILE=$OPTARG;;
+        v) VERBOSE=true;;
+        h) ret=0 && usage;;
+       \?) ret=1 && usage;;
+    esac
+done
+
+echo "Cleaning database..."
+cleandb
+
+ret=$?
+printf "Done.\n"
+popd>/dev/null
+exit $ret
diff --git a/packaging/dbscripts/common_sp.sql 
b/packaging/dbscripts/common_sp.sql
index d2374f4..3495052 100644
--- a/packaging/dbscripts/common_sp.sql
+++ b/packaging/dbscripts/common_sp.sql
@@ -296,6 +296,19 @@
 END; $procedure$
 LANGUAGE plpgsql;
 
+Create or replace FUNCTION generate_drop_all_tables_syntax() RETURNS SETOF text
+   AS $procedure$
+BEGIN
+RETURN QUERY select 'DROP TABLE if exists ' || table_name || ' CASCADE;' from 
information_schema.tables where table_schema = 'public' and table_type = 'BASE 
TABLE' order by table_name;
+END; $procedure$
+LANGUAGE plpgsql;
+
+Create or replace FUNCTION generate_drop_all_seq_syntax() RETURNS SETOF text
+   AS $procedure$
+BEGIN
+RETURN QUERY select 'DROP SEQUENCE if exists ' || sequence_name || ' CASCADE;' 
from information_schema.sequences  where sequence_schema = 'public' order by 
sequence_name;
+END; $procedure$
+LANGUAGE plpgsql;
 
 Create or replace FUNCTION fn_get_column_size( v_table varchar(64), v_column 
varchar(64)) returns integer
    AS $procedure$
diff --git a/packaging/dbscripts/dbfunctions.sh 
b/packaging/dbscripts/dbfunctions.sh
index 7ce554c..4032233 100755
--- a/packaging/dbscripts/dbfunctions.sh
+++ b/packaging/dbscripts/dbfunctions.sh
@@ -68,6 +68,34 @@
     return $retval
 }
 
+#cleans db by dropping all objects
+cleandb() {
+# common stored procedures are executed first (for new added functions to be 
valid)
+execute_file "common_sp.sql" ${DATABASE} ${SERVERNAME} ${PORT} > /dev/null
+    CMD="select * from generate_drop_all_seq_syntax();"
+    execute_command "$CMD" ${DATABASE} ${SERVERNAME} ${PORT} > drop_all_seq.sql
+    execute_file "drop_all_seq.sql" ${DATABASE} ${SERVERNAME} ${PORT}> 
/dev/null
+    \rm -f drop_all_seq.sql
+    CMD="select * from generate_drop_all_tables_syntax();"
+    execute_command "$CMD" ${DATABASE} ${SERVERNAME} ${PORT} > 
drop_all_tables.sql
+    execute_file "drop_all_tables.sql" ${DATABASE} ${SERVERNAME} ${PORT}> 
/dev/null
+    \rm -f drop_all_tables.sql
+    CMD="select * from generate_drop_all_views_syntax();"
+    execute_command "$CMD" ${DATABASE} ${SERVERNAME} ${PORT} > 
drop_all_views.sql
+    execute_file "drop_all_views.sql" ${DATABASE} ${SERVERNAME} ${PORT}> 
/dev/null
+    \rm -f drop_all_views.sql
+    CMD="select * from generate_drop_all_functions_syntax();"
+    execute_command "$CMD"  ${DATABASE} ${SERVERNAME} ${PORT} > 
drop_all_functions.sql
+    execute_file "drop_all_functions.sql" ${DATABASE} ${SERVERNAME} ${PORT} > 
/dev/null
+    \rm -f drop_all_functions.sql
+    CMD="select count(*) from pg_proc where proname = 'uuid_nil';"
+    if [ "$(execute_command "$CMD" ${DATABASE} ${SERVERNAME} ${PORT} | sed -e 
's/ //g' -e '/^$/d')" != 0 ]; then
+        psql -U postgres -h ${SERVERNAME} -p ${PORT} -f 
drop_old_uuid_functions.sql ${DATABASE} > /dev/null
+    fi
+    CMD="DROP FUNCTION IF EXISTS uuid_generate_v1();"
+    execute_command "$CMD" ${DATABASE} ${SERVERNAME} ${PORT} > /dev/null
+}
+
 #drops views before upgrade or refresh operations
 drop_views() {
 # common stored procedures are executed first (for new added functions to be 
valid)


-- 
To view, visit http://gerrit.ovirt.org/16832
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7ff33e4ccb8cb66bbe06f5d1c8a00f22d28a2e31
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Eli Mesika <emes...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to