You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by do...@apache.org on 2012/07/11 13:43:28 UTC

svn commit: r1360126 - /empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java

Author: doebele
Date: Wed Jul 11 11:43:27 2012
New Revision: 1360126

URL: http://svn.apache.org/viewvc?rev=1360126&view=rev
Log:
EMPIREDB-141
Allow drop and create indexes

Modified:
    empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java

Modified: empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java?rev=1360126&r1=1360125&r2=1360126&view=diff
==============================================================================
--- empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java (original)
+++ empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java Wed Jul 11 11:43:27 2012
@@ -268,6 +268,20 @@ public abstract class DBDDLGenerator<T e
                     throw new NotImplementedException(this, "getDDLScript." + dbo.getClass().getName() + "." + type);
             }
         } 
+        else if (dbo instanceof DBIndex)
+        { // Relation
+            switch (type)
+            {
+                case CREATE:
+                    createIndex(((DBIndex) dbo).getTable(), (DBIndex) dbo, script);
+                    return;
+                case DROP:
+                    dropObject(((DBIndex) dbo).getName(), "INDEX", script);
+                    return;
+                default:
+                    throw new NotImplementedException(this, "getDDLScript." + dbo.getClass().getName() + "." + type);
+            }
+        } 
         else if (dbo instanceof DBTableColumn)
         { // Table Column
             alterTable((DBTableColumn) dbo, type, script);
@@ -386,7 +400,6 @@ public abstract class DBDDLGenerator<T e
      */
     protected void createTableIndexes(DBTable t, DBIndex pk, DBSQLScript script)
     {
-        StringBuilder sql = new StringBuilder();
         // Create other Indexes (except primary key)
         Iterator<DBIndex> indexes = t.getIndexes().iterator();
         while (indexes.hasNext())
@@ -396,27 +409,40 @@ public abstract class DBDDLGenerator<T e
                 continue;
 
             // Create Index
-            sql.setLength(0);
-            sql.append((idx.getType() == DBIndex.UNIQUE) ? "CREATE UNIQUE INDEX " : "CREATE INDEX ");
-            appendElementName(sql, idx.getName());
-            sql.append(" ON ");
-            t.addSQL(sql, DBExpr.CTX_FULLNAME);
-            sql.append(" (");
+            createIndex(t, idx, script);
+        }
+    }
 
-            // columns
-            boolean addSeparator = false;
-            DBExpr[] idxColumns = idx.getExpressions();
-            for (int i = 0; i < idxColumns.length; i++)
-            {
-                sql.append((addSeparator) ? ", " : "");
-                idxColumns[i].addSQL(sql, DBExpr.CTX_NAME);
-                sql.append("");
-                addSeparator = true;
-            }
-            sql.append(")");
-            // Create Index
-            addCreateIndexStmt(idx, sql, script);
+    /**
+     * Appends the DDL-Script for creating a single index to an SQL-Script 
+     * @param t the table
+     * @param index the index to create
+     * @param script the sql script to which to append the dll command(s)
+     */
+    protected void createIndex(DBTable t, DBIndex idx, DBSQLScript script)
+    {
+        StringBuilder sql = new StringBuilder();
+
+        // Create Index
+        sql.append((idx.getType() == DBIndex.UNIQUE) ? "CREATE UNIQUE INDEX " : "CREATE INDEX ");
+        appendElementName(sql, idx.getName());
+        sql.append(" ON ");
+        t.addSQL(sql, DBExpr.CTX_FULLNAME);
+        sql.append(" (");
+
+        // columns
+        boolean addSeparator = false;
+        DBExpr[] idxColumns = idx.getExpressions();
+        for (int i = 0; i < idxColumns.length; i++)
+        {
+            sql.append((addSeparator) ? ", " : "");
+            idxColumns[i].addSQL(sql, DBExpr.CTX_NAME);
+            sql.append("");
+            addSeparator = true;
         }
+        sql.append(")");
+        // Create Index
+        addCreateIndexStmt(idx, sql, script);
     }
     
     /**