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 fr...@apache.org on 2012/07/25 16:24:24 UTC

svn commit: r1365599 - in /empire-db/trunk/empire-db/src: main/java/org/apache/empire/db/ main/java/org/apache/empire/db/oracle/ main/java/org/apache/empire/db/postgresql/ test/java/org/apache/empire/db/hsql/

Author: francisdb
Date: Wed Jul 25 14:24:23 2012
New Revision: 1365599

URL: http://svn.apache.org/viewvc?rev=1365599&view=rev
Log:
EMPIREDB-151 DBDatabaseDriverHSQL fails on selection of NEXT VALUE

Modified:
    empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java
    empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBTableColumn.java
    empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/oracle/OracleDDLGenerator.java
    empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/postgresql/PostgreDDLGenerator.java
    empire-db/trunk/empire-db/src/test/java/org/apache/empire/db/hsql/DBDatabaseDriverHSqlTest.java

Modified: empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java?rev=1365599&r1=1365598&r2=1365599&view=diff
==============================================================================
--- empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java (original)
+++ empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java Wed Jul 25 14:24:23 2012
@@ -374,9 +374,7 @@ public abstract class DBDatabaseDriver i
         {   // Use a numeric sequence
             if (isSupported(DBDriverFeature.SEQUENCES)==false)
                 return null; // Create Later
-            // Detect the Sequence Name
-            Object defValue= column.getDefaultValue();
-            String SeqName = (defValue != null) ? defValue.toString() : this.toString();
+            String SeqName = column.getSequenceName();
             return db.getNextSequenceValue(SeqName, conn);
         }
         else if (type== DataType.UNIQUEID)

Modified: empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBTableColumn.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBTableColumn.java?rev=1365599&r1=1365598&r2=1365599&view=diff
==============================================================================
--- empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBTableColumn.java (original)
+++ empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBTableColumn.java Wed Jul 25 14:24:23 2012
@@ -439,4 +439,31 @@ public class DBTableColumn extends DBCol
         // done
         return elem;
     }
+    
+    /**
+     * Gets the sequence name for this table's sequence (if it has one)
+     * This is derived form the default value or auto generated if no default value is set
+     * @return the sequence name
+     */
+	public String getSequenceName()
+	{
+		String seqName;
+		Object defValue = getDefaultValue();
+		if(defValue != null)
+		{
+			seqName = defValue.toString();
+		}
+		else
+		{
+			if (rowset != null) 
+			{
+				seqName = rowset.getName() + "." + name;
+			} 
+			else 
+			{
+				seqName = name;
+			}
+		}
+		return seqName;
+	}
 }
\ No newline at end of file

Modified: empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/oracle/OracleDDLGenerator.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/oracle/OracleDDLGenerator.java?rev=1365599&r1=1365598&r2=1365599&view=diff
==============================================================================
--- empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/oracle/OracleDDLGenerator.java (original)
+++ empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/oracle/OracleDDLGenerator.java Wed Jul 25 14:24:23 2012
@@ -123,8 +123,7 @@ public class OracleDDLGenerator extends 
      */
     protected void createSequence(DBDatabase db, DBTableColumn c, DBSQLScript script)
     {
-        Object defValue = c.getDefaultValue();
-        String seqName = (defValue != null) ? defValue.toString() : c.toString();
+        String seqName = c.getSequenceName();
         // createSQL
         StringBuilder sql = new StringBuilder();
         sql.append("-- creating sequence for column ");

Modified: empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/postgresql/PostgreDDLGenerator.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/postgresql/PostgreDDLGenerator.java?rev=1365599&r1=1365598&r2=1365599&view=diff
==============================================================================
--- empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/postgresql/PostgreDDLGenerator.java (original)
+++ empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/postgresql/PostgreDDLGenerator.java Wed Jul 25 14:24:23 2012
@@ -108,8 +108,7 @@ public class PostgreDDLGenerator extends
      */
     protected void createSequence(DBDatabase db, DBTableColumn c, DBSQLScript script)
     {
-        Object defValue = c.getDefaultValue();
-        String seqName = (defValue != null) ? defValue.toString() : c.toString();
+    	String seqName = c.getSequenceName();
         // createSQL
         StringBuilder sql = new StringBuilder();
         sql.append("-- creating sequence for column ");

Modified: empire-db/trunk/empire-db/src/test/java/org/apache/empire/db/hsql/DBDatabaseDriverHSqlTest.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db/src/test/java/org/apache/empire/db/hsql/DBDatabaseDriverHSqlTest.java?rev=1365599&r1=1365598&r2=1365599&view=diff
==============================================================================
--- empire-db/trunk/empire-db/src/test/java/org/apache/empire/db/hsql/DBDatabaseDriverHSqlTest.java (original)
+++ empire-db/trunk/empire-db/src/test/java/org/apache/empire/db/hsql/DBDatabaseDriverHSqlTest.java Wed Jul 25 14:24:23 2012
@@ -27,11 +27,16 @@ import java.util.Date;
 
 import org.apache.empire.DBResource;
 import org.apache.empire.DBResource.DB;
+import org.apache.empire.data.DataMode;
+import org.apache.empire.data.DataType;
 import org.apache.empire.db.CompanyDB;
 import org.apache.empire.db.DBCmdType;
+import org.apache.empire.db.DBDatabase;
 import org.apache.empire.db.DBDatabaseDriver;
 import org.apache.empire.db.DBRecord;
 import org.apache.empire.db.DBSQLScript;
+import org.apache.empire.db.DBTable;
+import org.apache.empire.db.DBTableColumn;
 import org.junit.Rule;
 import org.junit.Test;
 
@@ -90,9 +95,70 @@ public class DBDatabaseDriverHSqlTest{
         
         assertEquals("123456", emp.getString(db.EMPLOYEE.PHONE_NUMBER));
         
+        
         script = new DBSQLScript();
         db.getDriver().getDDLScript(DBCmdType.DROP, db.EMPLOYEE, script);
         db.getDriver().getDDLScript(DBCmdType.DROP, db.DEPARTMENT, script);
         script.run(db.getDriver(), conn, true);
     }
+    
+    
+    /**
+     * See https://issues.apache.org/jira/browse/EMPIREDB-151
+     */
+    @Test
+    public void testSequence(){
+    	Connection conn = dbResource.getConnection();
+        
+        DBDatabaseDriver driver = dbResource.newDriver();
+        SeqDB db = new SeqDB();
+        db.open(driver, dbResource.getConnection());
+        DBSQLScript script = new DBSQLScript();
+        db.getCreateDDLScript(db.getDriver(), script);
+        script.run(db.getDriver(), dbResource.getConnection(), false);
+        
+        DBRecord data = new DBRecord();
+        data.create(db.DATA);
+        data.setValue(db.DATA.VALUE, "test");
+        data.update(conn);
+        
+        final Object id = data.getLong(db.DATA.ID);
+        
+        DBRecord read = new DBRecord();
+        read.read(db.DATA, id, conn);
+        
+        assertEquals("test", read.getString(db.DATA.VALUE));
+        
+        script = new DBSQLScript();
+        db.getDriver().getDDLScript(DBCmdType.DROP, db.DATA, script);
+        script.run(db.getDriver(), conn, true);
+    }
+    
+    /**
+     * This is the basic database for testing
+     *
+     */
+    private class SeqDB extends DBDatabase
+    {
+        private final static long serialVersionUID = 1L;
+        public final Data DATA = new Data(this);
+    }
+    
+    /**
+     * For testing SEQUENCE auto generation stuff
+     */
+    public static class Data extends DBTable
+    {
+        private final static long serialVersionUID = 1L;
+        public final DBTableColumn ID;
+        public final DBTableColumn VALUE;
+
+        public Data(DBDatabase db)
+        {
+            super("DATA", db);
+            ID    = addColumn("DATA_ID",  		DataType.AUTOINC,       0, DataMode.AutoGenerated);
+            VALUE = addColumn("VALUE",          DataType.TEXT,          256, DataMode.NotNull);
+            setPrimaryKey(ID);
+        }
+    }
 }