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 re...@apache.org on 2008/08/26 15:59:43 UTC

svn commit: r689083 - /incubator/empire-db/trunk/core/Empire-db/src/org/apache/empire/db/hsql/DBDatabaseDriverHSql.java

Author: reiher
Date: Tue Aug 26 06:59:42 2008
New Revision: 689083

URL: http://svn.apache.org/viewvc?rev=689083&view=rev
Log:
JIRA EMPIREDB-4 fix.

Modified:
    incubator/empire-db/trunk/core/Empire-db/src/org/apache/empire/db/hsql/DBDatabaseDriverHSql.java

Modified: incubator/empire-db/trunk/core/Empire-db/src/org/apache/empire/db/hsql/DBDatabaseDriverHSql.java
URL: http://svn.apache.org/viewvc/incubator/empire-db/trunk/core/Empire-db/src/org/apache/empire/db/hsql/DBDatabaseDriverHSql.java?rev=689083&r1=689082&r2=689083&view=diff
==============================================================================
--- incubator/empire-db/trunk/core/Empire-db/src/org/apache/empire/db/hsql/DBDatabaseDriverHSql.java (original)
+++ incubator/empire-db/trunk/core/Empire-db/src/org/apache/empire/db/hsql/DBDatabaseDriverHSql.java Tue Aug 26 06:59:42 2008
@@ -115,7 +115,7 @@
             case SQL_NULL_VALUE:        return "null";
             case SQL_RENAME_COLUMN:     return " AS ";
             case SQL_PARAMETER:         return " ? ";
-            case SQL_CONCAT_EXPR:       return " + ";
+            case SQL_CONCAT_EXPR:       return "concat(?, {0})"; // " + " leads to problems if operands are case when statements that return empty string 
             case SQL_RENAME_TABLE:      return " ";
             case SQL_DATABASE_LINK:     return "@";
             // data types
@@ -188,9 +188,25 @@
             case CHAR:
                 if (format != null)
                 { // Convert using a format string
-                    return "to_char(?, '"+format.toString()+"')";
+                    if (srcType == DataType.INTEGER || srcType == DataType.AUTOINC)
+                    {
+                        log.error("getConvertPhrase: unknown type (" + String.valueOf(destType));
+                        return "?";
+                    }
+                    else
+                    {
+                        return "to_char(?, '"+format.toString()+"')";
+                    }
                 }
                 return "to_char(?)";
+            case INTEGER:
+            {
+                return "convert(?, BIGINT)";
+            }
+            case DECIMAL:
+            {
+                return "convert(?, DECIMAL)";
+            }
             // Unknown Type
             default:
                 log.error("getConvertPhrase: unknown type (" + String.valueOf(destType));
@@ -271,9 +287,9 @@
             switch (type)
             {
                 case CREATE:
-                    return createRelation((DBRelation) dbo, script);
+                    return alterRelation((DBRelation) dbo, type, script);
                 case DROP:
-                    return dropObject(((DBRelation) dbo).getName(), "CONSTRAINT", script);
+                    return alterRelation((DBRelation) dbo, type, script);
                 default:
                     return error(Errors.NotImplemented, "getDDLCommand."+dbo.getClass().getName()+"."+String.valueOf(type));
             }
@@ -332,7 +348,7 @@
         Iterator<DBRelation> relations = db.getRelations().iterator();
         while (relations.hasNext())
         {
-            if (!createRelation(relations.next(), script))
+            if (!alterRelation(relations.next(), DBCmdType.CREATE, script))
                 return false;
         }
         // Create Views
@@ -460,10 +476,10 @@
         switch (c.getDataType())
         {
             case INTEGER:
-                sql.append("INTEGER");
+                sql.append("BIGINT");
                 break;
             case AUTOINC:
-                sql.append("INTEGER");
+                sql.append("BIGINT");
                 break;
             case TEXT:
             { // Check fixed or variable length
@@ -489,7 +505,7 @@
                 sql.append("DATE");
                 break;
             case DATETIME:
-                sql.append("DATE");
+                sql.append("DATETIME");
                 break;
             case BOOL:
                 sql.append("BOOLEAN");
@@ -510,12 +526,10 @@
             }
                 break;
             case CLOB:
-                sql.append("CLOB");
+                sql.append("LONGVARCHAR");
                 break;
             case BLOB:
-                sql.append("BLOB");
-                if (c.getSize() > 0)
-                    sql.append(" (" + String.valueOf((long) c.getSize()) + ") ");
+                sql.append("LONGVARBINARY");
                 break;
             case UNKNOWN:
                  log.error("Cannot append column of Data-Type 'UNKNOWN'");
@@ -534,51 +548,75 @@
     }
 
     /**
-     * Returns true if the relation has been created successfully.
+     * Returns true if the relation has been altered successfully.
      * 
-     * @return true if the relation has been created successfully
+     * @return true if the relation has been altered successfully
      */
-    private boolean createRelation(DBRelation r, DBSQLScript script)
+    private boolean alterRelation(DBRelation r, DBCmdType type, DBSQLScript script)
     {
-        DBTable sourceTable = (DBTable) r.getReferences()[0].getSourceColumn().getRowSet();
-        DBTable targetTable = (DBTable) r.getReferences()[0].getTargetColumn().getRowSet();
-
-        StringBuilder sql = new StringBuilder();
-        sql.append("-- creating foreign key constraint ");
-        sql.append(r.getName());
-        sql.append(" --\r\n");
-        sql.append("ALTER TABLE ");
-        sql.append(sourceTable.getFullName());
-        sql.append(" ADD CONSTRAINT ");
-        sql.append(r.getFullName());
-        sql.append(" FOREIGN KEY (");
-        // Source Names
-        boolean addSeparator = false;
-        DBRelation.DBReference[] refs = r.getReferences();
-        for (int i = 0; i < refs.length; i++)
-        {
-            sql.append((addSeparator) ? ", " : "");
-            sql.append(refs[i].getSourceColumn().getName());
-            addSeparator = true;
-        }
-        // References
-        sql.append(") REFERENCES ");
-        sql.append(targetTable.getFullName());
-        sql.append(" (");
-        // Target Names
-        addSeparator = false;
-        for (int i = 0; i < refs.length; i++)
+        switch(type)
         {
-            sql.append((addSeparator) ? ", " : "");
-            sql.append(refs[i].getTargetColumn().getName());
-            addSeparator = true;
+            case CREATE:
+            {
+                DBTable sourceTable = (DBTable) r.getReferences()[0].getSourceColumn().getRowSet();
+                DBTable targetTable = (DBTable) r.getReferences()[0].getTargetColumn().getRowSet();
+
+                StringBuilder sql = new StringBuilder();
+                sql.append("-- creating foreign key constraint ");
+                sql.append(r.getName());
+                sql.append(" --\r\n");
+                sql.append("ALTER TABLE ");
+                sql.append(sourceTable.getFullName());
+                sql.append(" ADD CONSTRAINT ");
+                sql.append(r.getFullName());
+                sql.append(" FOREIGN KEY (");
+                // Source Names
+                boolean addSeparator = false;
+                DBRelation.DBReference[] refs = r.getReferences();
+                for (int i = 0; i < refs.length; i++)
+                {
+                    sql.append((addSeparator) ? ", " : "");
+                    sql.append(refs[i].getSourceColumn().getName());
+                    addSeparator = true;
+                }
+                // References
+                sql.append(") REFERENCES ");
+                sql.append(targetTable.getFullName());
+                sql.append(" (");
+                // Target Names
+                addSeparator = false;
+                for (int i = 0; i < refs.length; i++)
+                {
+                    sql.append((addSeparator) ? ", " : "");
+                    sql.append(refs[i].getTargetColumn().getName());
+                    addSeparator = true;
+                }
+                // done
+                sql.append(")");
+                if (script.addStmt(sql.toString()) == false)
+                    return false;
+                // done
+                return success();
+                
+            }
+            case DROP:
+            {
+                DBTable sourceTable = (DBTable) r.getReferences()[0].getSourceColumn().getRowSet();
+                StringBuilder sql = new StringBuilder();
+                sql.append("-- dropping constraint ");
+                sql.append(r.getName());
+                sql.append(" --\r\n");
+                sql.append("ALTER TABLE ");
+                sql.append(sourceTable.getFullName());
+                sql.append(" DROP CONSTRAINT ");
+                sql.append(r.getName());
+                // done
+                return script.addStmt(sql.toString());
+            }
+            default:
+                return error(Errors.NotImplemented, "Type not supported ("+String.valueOf(type)+")");
         }
-        // done
-        sql.append(")");
-        if (script.addStmt(sql.toString()) == false)
-            return false;
-        // done
-        return success();
+
     }
 
     /**
@@ -642,7 +680,7 @@
         {
             if (addSeparator)
                 sql.append(", ");
-            sql.append(c.getName());
+            c.addSQL(sql, DBExpr.CTX_NAME);
             // next
             addSeparator = true;
         }