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 2022/01/23 23:43:37 UTC
[empire-db] branch version3 updated: EMPIREDB-362 DBDatabaseDriverBase cleanup
This is an automated email from the ASF dual-hosted git repository.
doebele pushed a commit to branch version3
in repository https://gitbox.apache.org/repos/asf/empire-db.git
The following commit(s) were added to refs/heads/version3 by this push:
new b604d88 EMPIREDB-362 DBDatabaseDriverBase cleanup
b604d88 is described below
commit b604d88cef324f1b3a7b938a990f7b22661196d5
Author: Rainer Döbele <do...@apache.org>
AuthorDate: Mon Jan 24 00:43:35 2022 +0100
EMPIREDB-362 DBDatabaseDriverBase cleanup
---
.../empire/samples/db/advanced/SampleAdvApp.java | 14 +-
.../jsf2/pageelements/BeanListPageElement.java | 2 +-
.../main/java/org/apache/empire/db/DBCmdType.java | 31 --
.../java/org/apache/empire/db/DBColumnExpr.java | 1 +
.../main/java/org/apache/empire/db/DBCommand.java | 1 +
.../java/org/apache/empire/db/DBDDLGenerator.java | 16 +-
.../main/java/org/apache/empire/db/DBDatabase.java | 6 +-
.../org/apache/empire/db/DBDatabaseDriver.java | 7 +-
.../main/java/org/apache/empire/db/DBRecord.java | 24 +-
.../java/org/apache/empire/db/DBRecordData.java | 11 +-
.../main/java/org/apache/empire/db/DBRowSet.java | 2 +
.../empire/db/driver/DBDatabaseDriverBase.java | 418 ++++++++++-----------
.../empire/db/{ => driver}/DBDriverFeature.java | 2 +-
.../apache/empire/db/{ => driver}/DBSqlPhrase.java | 2 +-
.../db/driver/derby/DBDatabaseDriverDerby.java | 10 +-
.../empire/db/driver/h2/DBDatabaseDriverH2.java | 10 +-
.../db/driver/hsql/DBDatabaseDriverHSql.java | 10 +-
.../empire/db/driver/hsql/HSqlDDLGenerator.java | 5 +-
.../db/driver/mysql/DBDatabaseDriverMySQL.java | 10 +-
.../db/driver/oracle/DBDatabaseDriverOracle.java | 11 +-
.../db/driver/oracle/OracleDDLGenerator.java | 5 +-
.../postgresql/DBDatabaseDriverPostgreSQL.java | 10 +-
.../db/driver/sqlite/DBDatabaseDriverSQLite.java | 53 +--
.../db/driver/sqlserver/DBDatabaseDriverMSSQL.java | 13 +-
.../apache/empire/db/expr/column/DBAliasExpr.java | 2 +-
.../apache/empire/db/expr/column/DBConcatExpr.java | 2 +-
.../apache/empire/db/expr/column/DBDecodeExpr.java | 2 +-
.../apache/empire/db/expr/column/DBFuncExpr.java | 2 +-
.../java/org/apache/empire/db/IntegerTest.java | 3 +-
.../test/java/org/apache/empire/db/MockDriver.java | 10 +
.../empire/db/hsql/DBDatabaseDriverHSqlTest.java | 8 +-
.../db/sqlite/DBDatabaseDriverSQLiteTest.java | 8 +-
32 files changed, 326 insertions(+), 385 deletions(-)
diff --git a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java
index 958ba5f..4ee2718 100644
--- a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java
+++ b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java
@@ -28,10 +28,10 @@ import org.apache.empire.commons.Options;
import org.apache.empire.commons.StringUtils;
import org.apache.empire.data.DataType;
import org.apache.empire.db.DBCmdParam;
-import org.apache.empire.db.DBCmdType;
import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBCommand;
import org.apache.empire.db.DBContext;
+import org.apache.empire.db.DBDDLGenerator.DDLAlterType;
import org.apache.empire.db.DBDatabaseDriver;
import org.apache.empire.db.DBQuery;
import org.apache.empire.db.DBReader;
@@ -191,7 +191,7 @@ public class SampleAdvApp
log.info("As H2 does not support changing a table with a view defined we remove the view");
System.out.println("*** drop EMPLOYEE_INFO_VIEW ***");
DBSQLScript script = new DBSQLScript(context);
- db.getDriver().getDDLScript(DBCmdType.DROP, db.V_EMPLOYEE_INFO, script);
+ db.getDriver().getDDLScript(DDLAlterType.DROP, db.V_EMPLOYEE_INFO, script);
script.executeAll();
}
ddlSample(idEmp2);
@@ -199,7 +199,7 @@ public class SampleAdvApp
log.info("And put back the view");
System.out.println("*** create EMPLOYEE_INFO_VIEW ***");
DBSQLScript script = new DBSQLScript(context);
- db.getDriver().getDDLScript(DBCmdType.CREATE, db.V_EMPLOYEE_INFO, script);
+ db.getDriver().getDDLScript(DDLAlterType.CREATE, db.V_EMPLOYEE_INFO, script);
script.executeAll();
}
@@ -540,7 +540,7 @@ public class SampleAdvApp
/**
* This method demonstrates how to add, modify and delete a database column.<BR>
- * This function demonstrates the use of the {@link DBDatabaseDriver#getDDLScript(org.apache.empire.db.DBCmdType, org.apache.empire.db.DBObject, DBSQLScript)}<BR>
+ * This function demonstrates the use of the {@link DBDatabaseDriver#getDDLScript(org.apache.empire.db.DDLAlterType, org.apache.empire.db.DBObject, DBSQLScript)}<BR>
*
*/
private static void ddlSample(int idTestPerson)
@@ -551,7 +551,7 @@ public class SampleAdvApp
// Now create the corresponding DDL statement
System.out.println("Creating new column named FOO as varchar(20) for the EMPLOYEES table:");
DBSQLScript script = new DBSQLScript(context);
- db.getDriver().getDDLScript(DBCmdType.CREATE, C_FOO, script);
+ db.getDriver().getDDLScript(DDLAlterType.CREATE, C_FOO, script);
script.executeAll();
// Now load a record from that table and set the value for foo
@@ -565,7 +565,7 @@ public class SampleAdvApp
System.out.println("Extending size of column FOO to 40 characters:");
C_FOO.setSize(40);
script.clear();
- db.getDriver().getDDLScript(DBCmdType.ALTER, C_FOO, script);
+ db.getDriver().getDDLScript(DDLAlterType.ALTER, C_FOO, script);
script.executeAll();
// Now set a longer value for the record
@@ -576,7 +576,7 @@ public class SampleAdvApp
// Finally, drop the column again
System.out.println("Dropping the FOO column from the employee table:");
script.clear();
- db.getDriver().getDDLScript(DBCmdType.DROP, C_FOO, script);
+ db.getDriver().getDDLScript(DDLAlterType.DROP, C_FOO, script);
script.executeAll();
}
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/BeanListPageElement.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/BeanListPageElement.java
index c293f43..7b959cb 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/BeanListPageElement.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/BeanListPageElement.java
@@ -33,10 +33,10 @@ import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBCommand;
import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBDatabaseDriver;
-import org.apache.empire.db.DBDriverFeature;
import org.apache.empire.db.DBReader;
import org.apache.empire.db.DBRecordData;
import org.apache.empire.db.DBRowSet;
+import org.apache.empire.db.driver.DBDriverFeature;
import org.apache.empire.db.expr.order.DBOrderByExpr;
import org.apache.empire.exceptions.InternalException;
import org.apache.empire.exceptions.InvalidArgumentException;
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBCmdType.java b/empire-db/src/main/java/org/apache/empire/db/DBCmdType.java
deleted file mode 100644
index f7cf86d..0000000
--- a/empire-db/src/main/java/org/apache/empire/db/DBCmdType.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.empire.db;
-
-/**
- * This enum allocates the available command types.
- *
- *
- */
-public enum DBCmdType
-{
- CREATE, // = 0;
- DROP, // = 1;
- ALTER, // = 2;
-}
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBColumnExpr.java b/empire-db/src/main/java/org/apache/empire/db/DBColumnExpr.java
index 13cf611..840ee29 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBColumnExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBColumnExpr.java
@@ -31,6 +31,7 @@ import org.apache.empire.commons.StringUtils;
import org.apache.empire.data.Column;
import org.apache.empire.data.ColumnExpr;
import org.apache.empire.data.DataType;
+import org.apache.empire.db.driver.DBSqlPhrase;
import org.apache.empire.db.expr.column.DBAliasExpr;
import org.apache.empire.db.expr.column.DBCalcExpr;
import org.apache.empire.db.expr.column.DBCaseExpr;
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBCommand.java b/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
index 8dc1c5a..0bb4400 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
@@ -29,6 +29,7 @@ import java.util.Vector;
import org.apache.empire.commons.StringUtils;
import org.apache.empire.data.DataType;
+import org.apache.empire.db.driver.DBSqlPhrase;
import org.apache.empire.db.expr.compare.DBCompareColExpr;
import org.apache.empire.db.expr.compare.DBCompareExpr;
import org.apache.empire.db.expr.join.DBColumnJoinExpr;
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java b/empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java
index 69c7ae2..b788a2b 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java
@@ -22,15 +22,25 @@ import org.apache.empire.commons.StringUtils;
import org.apache.empire.data.DataType;
import org.apache.empire.db.DBIndex.DBIndexType;
import org.apache.empire.exceptions.InvalidArgumentException;
-import org.apache.empire.exceptions.UnspecifiedErrorException;
import org.apache.empire.exceptions.NotImplementedException;
import org.apache.empire.exceptions.NotSupportedException;
+import org.apache.empire.exceptions.UnspecifiedErrorException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class DBDDLGenerator<T extends DBDatabaseDriver>
{
private static final Logger log = LoggerFactory.getLogger(DBDDLGenerator.class);
+
+ /**
+ * DDLAlterType for DDLScript generation
+ */
+ public enum DDLAlterType
+ {
+ CREATE, // = 0;
+ DROP, // = 1;
+ ALTER, // = 2;
+ }
protected T driver;
@@ -230,7 +240,7 @@ public abstract class DBDDLGenerator<T extends DBDatabaseDriver>
* @param dbo the object for which to perform the operation (DBDatabase, DBTable, DBView, DBColumn, DBRelation)
* @param script the script to which to add the DDL command(s)
*/
- public void getDDLScript(DBCmdType type, DBObject dbo, DBSQLScript script)
+ public void getDDLScript(DDLAlterType type, DBObject dbo, DBSQLScript script)
{
// The Object's database must be attached to this driver
if (dbo==null || dbo.getDatabase().getDriver()!=driver)
@@ -519,7 +529,7 @@ public abstract class DBDDLGenerator<T extends DBDatabaseDriver>
* @param type the type of operation to perform (CREATE | MODIFY | DROP)
* @param script the sql script to which to append the dll command(s)
*/
- protected void alterTable(DBTableColumn col, DBCmdType type, DBSQLScript script)
+ protected void alterTable(DBTableColumn col, DDLAlterType type, DBSQLScript script)
{
StringBuilder sql = new StringBuilder();
sql.append("ALTER TABLE ");
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java b/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java
index ff39288..da9d7bb 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java
@@ -36,7 +36,9 @@ import java.util.Set;
import org.apache.empire.commons.ObjectUtils;
import org.apache.empire.data.Column;
import org.apache.empire.data.DataType;
+import org.apache.empire.db.DBDDLGenerator.DDLAlterType;
import org.apache.empire.db.DBRelation.DBCascadeAction;
+import org.apache.empire.db.driver.DBSqlPhrase;
import org.apache.empire.db.exceptions.DatabaseNotOpenException;
import org.apache.empire.db.exceptions.FieldIllegalValueException;
import org.apache.empire.db.exceptions.FieldNotNullException;
@@ -67,7 +69,7 @@ import org.slf4j.LoggerFactory;
public abstract class DBDatabase extends DBObject
{
// *Deprecated* private static final long serialVersionUID = 1L;
-
+
/**
* This class represents the database systems current date and time.
* <P>
@@ -406,7 +408,7 @@ public abstract class DBDatabase extends DBObject
*/
protected void generateDDLScript(DBSQLScript script)
{
- this.driver.getDDLScript(DBCmdType.CREATE, this, script);
+ this.driver.getDDLScript(DDLAlterType.CREATE, this, script);
}
/**
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java b/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java
index 23cef15..8249a71 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java
@@ -24,6 +24,9 @@ import java.sql.SQLException;
import java.sql.Timestamp;
import org.apache.empire.data.DataType;
+import org.apache.empire.db.DBDDLGenerator.DDLAlterType;
+import org.apache.empire.db.driver.DBDriverFeature;
+import org.apache.empire.db.driver.DBSqlPhrase;
/**
* The DBDatabaseDriver interface implements all RDBMS specific logic
@@ -208,14 +211,14 @@ public interface DBDatabaseDriver
* @param rset a ResultSet object
*/
void closeResultSet(ResultSet rset);
-
+
/**
* Appends the required DLL commands to create, drop or alter an object to the supplied DBDQLScript.
* @param type operation to perform (CREATE, DROP, ALTER)
* @param dbo the object for which to perform the operation (DBDatabase, DBTable, DBView, DBColumn, DBRelation)
* @param script the script to which to add the DDL command(s)
*/
- void getDDLScript(DBCmdType type, DBObject dbo, DBSQLScript script);
+ void getDDLScript(DDLAlterType type, DBObject dbo, DBSQLScript script);
/**
* Appends a statement to enable or disable a foreign key relation.<br>
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRecord.java b/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
index 8fea524..dfc3906 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
@@ -52,11 +52,29 @@ import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
-
/**
+ * This class represents a record from a database table, view or query
*
- * This class handles one record from a database table.
- *
+ * The class provides methods to create, read, update and delete records
+ * The class provides methods to obtain as well as to modify its fields
+ *
+ * If an Idendity-column (AUTOINC) is defined, the value will be set upon creation by the driver to the next value
+ * If a Timestamp-column is defined the value will be automatically set and concurrent changes of the record will be detected
+ *
+ * If changes to the record are made, but a rollback on the connection is performed, the changes will be reverted (Rollback-Handling)
+ *
+ * The class provides methods that are useful for frontend-form development like
+ * - providing information about the allowed values for a field (field options)
+ * - providing information about whether or not a field is visible to the user
+ * - providing information about whether or not a field is required (mandantory)
+ * - providing information about whether or not a field is read-only
+ * - providing information about whether a particular field value is valid
+ * - providing information about whether a field was modified since it was read from the database
+ * - providing information about whether the record was modified
+ *
+ * Also, field value changes, can be handled using the onFieldChanged event.
+ *
+ * The record is Serializable either if the provided DBContext is serializable, or if the Context is provided on deserialization in a derived class.
*/
public class DBRecord extends DBRecordData implements DBContextAware, Record, Cloneable, Serializable
{
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRecordData.java b/empire-db/src/main/java/org/apache/empire/db/DBRecordData.java
index 2f65f4c..0e29bef 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRecordData.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRecordData.java
@@ -43,10 +43,11 @@ import org.w3c.dom.Element;
/**
- * This interface defines for the classes DDRecordSet and DBRecord.
- * <P>
- *
- *
+ * This class provides access to the fields of one data-row of a table, view or query
+ * The fields can be accessed either by Column or by index
+ * There are various accessor functions for many data types.
+ * The field values are converted to the desired type if possible.
+ * The field values can be transferred to a classical Java-bean (aka Pojo)
*/
public abstract class DBRecordData extends DBObject
implements RecordData
@@ -54,7 +55,7 @@ public abstract class DBRecordData extends DBObject
// *Deprecated* private static final long serialVersionUID = 1L;
// Logger
- private static final Logger log = LoggerFactory.getLogger(DBRecordData.class);
+ private static final Logger log = LoggerFactory.getLogger(DBRecordData.class);
// Field Info
@Override
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java b/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
index 3382cfc..05e14cc 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
@@ -34,6 +34,8 @@ import org.apache.empire.data.Column;
import org.apache.empire.data.DataType;
import org.apache.empire.db.DBRelation.DBCascadeAction;
import org.apache.empire.db.DBRelation.DBReference;
+import org.apache.empire.db.driver.DBDriverFeature;
+import org.apache.empire.db.driver.DBSqlPhrase;
import org.apache.empire.db.exceptions.FieldNotNullException;
import org.apache.empire.db.exceptions.InvalidKeyException;
import org.apache.empire.db.exceptions.NoPrimaryKeyException;
diff --git a/empire-db/src/main/java/org/apache/empire/db/driver/DBDatabaseDriverBase.java b/empire-db/src/main/java/org/apache/empire/db/driver/DBDatabaseDriverBase.java
index 3fcfa10..5887820 100644
--- a/empire-db/src/main/java/org/apache/empire/db/driver/DBDatabaseDriverBase.java
+++ b/empire-db/src/main/java/org/apache/empire/db/driver/DBDatabaseDriverBase.java
@@ -39,26 +39,22 @@ import org.apache.empire.data.DataType;
import org.apache.empire.db.DBBlobData;
import org.apache.empire.db.DBClobData;
import org.apache.empire.db.DBCmdParam;
-import org.apache.empire.db.DBCmdType;
import org.apache.empire.db.DBColumn;
import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBCombinedCmd;
import org.apache.empire.db.DBCommand;
import org.apache.empire.db.DBCommandExpr;
+import org.apache.empire.db.DBDDLGenerator.DDLAlterType;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
-import org.apache.empire.db.DBDriverFeature;
import org.apache.empire.db.DBExpr;
-import org.apache.empire.db.DBObject;
import org.apache.empire.db.DBRelation;
import org.apache.empire.db.DBSQLScript;
-import org.apache.empire.db.DBSqlPhrase;
import org.apache.empire.db.DBTable;
import org.apache.empire.db.DBTableColumn;
import org.apache.empire.db.exceptions.EmpireSQLException;
import org.apache.empire.db.exceptions.QueryFailedException;
import org.apache.empire.exceptions.InvalidArgumentException;
-import org.apache.empire.exceptions.NotImplementedException;
import org.apache.empire.exceptions.NotSupportedException;
import org.apache.empire.exceptions.UnexpectedReturnValueException;
import org.slf4j.Logger;
@@ -313,6 +309,19 @@ public abstract class DBDatabaseDriverBase implements DBDatabaseDriver
}
/**
+ * Returns a timestamp that is used for record updates.
+ * @param conn the connection that might be used
+ * @return the current date and time.
+ */
+ @Override
+ public Timestamp getUpdateTimestamp(Connection conn)
+ {
+ // Default implementation
+ java.util.Date date = new java.util.Date();
+ return new java.sql.Timestamp(date.getTime());
+ }
+
+ /**
* Returns the next value of a named sequence The numbers are used for fields of type DBExpr.DT_AUTOINC.<BR>
* If a driver supports this function it must return true for isSupported(DBDriverFeature.SEQUENCES).
*
@@ -366,95 +375,6 @@ public abstract class DBDatabaseDriverBase implements DBDatabaseDriver
// Other types
throw new NotSupportedException(this, "getColumnAutoValue() for "+type);
}
-
- /**
- * Prepares an sql statement by setting the supplied objects as parameters.
- *
- * @param pstmt the prepared statement
- * @param sqlParams list of objects
- */
- protected void prepareStatement(PreparedStatement pstmt, Object[] sqlParams)
- throws SQLException
- {
- for (int i=0; i<sqlParams.length; i++)
- {
- Object value = sqlParams[i];
- try {
- addStatementParam(pstmt, i+1, value); // , conn
- } catch(SQLException e) {
- log.error("SQLException: Unable to set prepared statement parameter {} to '{}'", i+1, StringUtils.toString(value));
- throw e;
- }
- }
- }
-
- /**
- * Adds a statement parameter to a prepared statement
- *
- * @param pstmt the prepared statement
- * @param paramIndex the parameter index
- * @param value the parameter value
- */
- protected void addStatementParam(PreparedStatement pstmt, int paramIndex, Object value)
- throws SQLException
- {
- if (value instanceof DBBlobData)
- {
- // handling for blobs
- DBBlobData blobData = (DBBlobData)value;
- pstmt.setBinaryStream(paramIndex, blobData.getInputStream(), blobData.getLength());
- // log
- if (log.isDebugEnabled())
- log.debug("Statement param {} set to BLOB data", paramIndex);
- }
- else if(value instanceof DBClobData)
- {
- // handling for clobs
- DBClobData clobData = (DBClobData)value;
- pstmt.setCharacterStream(paramIndex, clobData.getReader(), clobData.getLength());
- // log
- if (log.isDebugEnabled())
- log.debug("Statement param {} set to CLOB data", paramIndex);
- }
- else if(value instanceof Date && !(value instanceof Timestamp))
- {
- // handling for dates
- Timestamp ts = new Timestamp(((Date)value).getTime());
- pstmt.setObject(paramIndex, ts);
- // log
- if (log.isDebugEnabled())
- log.debug("Statement param {} set to date '{}'", paramIndex, ts);
- }
- else if((value instanceof Character)
- || (value instanceof Enum<?>))
- {
- // Objects that need String conversion
- String strval = value.toString();
- pstmt.setObject(paramIndex, strval);
- // log
- if (log.isDebugEnabled())
- log.debug("Statement param {} set to '{}'", paramIndex, strval);
- }
- else
- { // simple parameter value
- pstmt.setObject(paramIndex, value);
- // log
- if (log.isDebugEnabled())
- log.debug("Statement param {} set to '{}'", paramIndex, value);
- }
- }
-
- /**
- * Extracts native error message of an sqlExeption.
- *
- * @param e the SQLException
- * @return the error message of the database
- */
- @Override
- public String extractErrorMessage(SQLException e)
- {
- return e.getMessage();
- }
/**
* <P>
@@ -495,6 +415,73 @@ public abstract class DBDatabaseDriverBase implements DBDatabaseDriver
return rset.getObject(columnIndex);
}
}
+
+ /**
+ * Returns a sql string for a given value.
+ * Text will be enclosed in single quotes and existing single quotes will be doubled.
+ * Empty strings are treated as null.
+ * The syntax of Date, Datetime and Boolean values are DBMS specific.
+ *
+ * @param value the value which is inserted to the new String
+ * @param type the sql data type of the supplied value
+ * @return the sql string representing this value
+ */
+ @Override
+ public String getValueString(Object value, DataType type)
+ {
+ if (value instanceof Enum<?>)
+ { // convert enum
+ log.warn("Enum of type {} supplied for getValueString. Converting value...", value.getClass().getName());
+ value = ObjectUtils.getEnumValue((Enum<?>)value, type.isNumeric());
+ }
+ if (ObjectUtils.isEmpty(value))
+ { // null
+ return getSQLPhrase(DBSqlPhrase.SQL_NULL);
+ }
+ // set string buffer
+ switch (type)
+ {
+ case DATE:
+ return getSQLDateTimeString(value, DBSqlPhrase.SQL_DATE_TEMPLATE, DBSqlPhrase.SQL_DATE_PATTERN, DBSqlPhrase.SQL_CURRENT_DATE);
+ case DATETIME:
+ // Only date (without time) provided?
+ if (!DBDatabase.SYSDATE.equals(value) && !(value instanceof Date) && ObjectUtils.lengthOf(value)<=10)
+ return getSQLDateTimeString(value, DBSqlPhrase.SQL_DATE_TEMPLATE, DBSqlPhrase.SQL_DATE_PATTERN, DBSqlPhrase.SQL_CURRENT_TIMESTAMP);
+ // Complete Date-Time Object with time
+ return getSQLDateTimeString(value, DBSqlPhrase.SQL_DATETIME_TEMPLATE, DBSqlPhrase.SQL_DATETIME_PATTERN, DBSqlPhrase.SQL_CURRENT_TIMESTAMP);
+ case TIMESTAMP:
+ return getSQLDateTimeString(value, DBSqlPhrase.SQL_TIMESTAMP_TEMPLATE, DBSqlPhrase.SQL_TIMESTAMP_PATTERN, DBSqlPhrase.SQL_CURRENT_TIMESTAMP);
+ case VARCHAR:
+ case CHAR:
+ case CLOB:
+ case UNIQUEID:
+ return getSQLTextString(type, value);
+ case BOOL:
+ // Get Boolean value
+ boolean boolVal = false;
+ if (value instanceof Boolean)
+ { boolVal = ((Boolean) value).booleanValue();
+ }
+ else
+ { // Boolean from String
+ boolVal = stringToBoolean(value.toString());
+ }
+ return getSQLPhrase((boolVal) ? DBSqlPhrase.SQL_BOOLEAN_TRUE : DBSqlPhrase.SQL_BOOLEAN_FALSE);
+ case INTEGER:
+ case DECIMAL:
+ case FLOAT:
+ return getSQLNumberString(value, type);
+ case BLOB:
+ throw new NotSupportedException(this, "getValueString(?, DataType.BLOB)");
+ case AUTOINC:
+ case UNKNOWN:
+ /* Allow expressions */
+ return value.toString();
+ default:
+ log.warn("Unknown DataType {} for getValueString().", type);
+ return value.toString();
+ }
+ }
/**
* Executes the select, update or delete SQL-Command with a Statement object.
@@ -696,24 +683,33 @@ public abstract class DBDatabaseDriverBase implements DBDatabaseDriver
}
}
- /**
- * Convenience function for closing a JDBC Resultset<BR>
- * Use it instead of stmt.close()<BR>
- * <P>
- * @param stmt a Statement object
+ /**
+ * Appends a statement to enable or disable a foreign key relation.<br>
+ * The default is to drop or create the relation
+ * Override this method to provide different behavior for your database.
+ * @param r the foreign key relation which should be enabled or disabled
+ * @param enable true to enable the relation or false to disable
+ * @param script the script to which to add the DDL command(s)
*/
- public void closeStatement(Statement stmt)
+ @Override
+ public void appendEnableRelationStmt(DBRelation r, boolean enable, DBSQLScript script)
{
- try
- { // Statement close
- if (stmt != null)
- stmt.close();
- // done
- return;
- } catch (SQLException sqle) {
- // Commit failed!
- throw new EmpireSQLException(this, sqle);
- }
+ if (enable)
+ getDDLScript(DDLAlterType.CREATE, r, script);
+ else
+ getDDLScript(DDLAlterType.DROP, r, script);
+ }
+
+ /**
+ * Extracts native error message of an sqlExeption.
+ *
+ * @param e the SQLException
+ * @return the error message of the database
+ */
+ @Override
+ public String extractErrorMessage(SQLException e)
+ {
+ return e.getMessage();
}
/**
@@ -744,71 +740,101 @@ public abstract class DBDatabaseDriverBase implements DBDatabaseDriver
throw new EmpireSQLException(this, sqle);
}
}
-
+
+ /**
+ * Convenience function for closing a JDBC Resultset<BR>
+ * Use it instead of stmt.close()<BR>
+ * <P>
+ * @param stmt a Statement object
+ */
+ protected void closeStatement(Statement stmt)
+ {
+ try
+ { // Statement close
+ if (stmt != null)
+ stmt.close();
+ // done
+ return;
+ } catch (SQLException sqle) {
+ // Commit failed!
+ throw new EmpireSQLException(this, sqle);
+ }
+ }
+
/**
- * Creates a sql string for a given value.
- * Text will be enclosed in single quotes and existing single quotes will be doubled.
- * Empty strings are treated as null.
- * Syntax of Date, Datetime and Boolean values are vendor specific.
+ * Prepares an sql statement by setting the supplied objects as parameters.
*
- * @param value the value which is inserted to the new String
- * @param type the sql data type of the supplied value
- * @return the sql string representing this value
+ * @param pstmt the prepared statement
+ * @param sqlParams list of objects
*/
- @Override
- public String getValueString(Object value, DataType type)
- {
- if (value instanceof Enum<?>)
- { // convert enum
- log.warn("Enum of type {} supplied for getValueString. Converting value...", value.getClass().getName());
- value = ObjectUtils.getEnumValue((Enum<?>)value, type.isNumeric());
+ protected void prepareStatement(PreparedStatement pstmt, Object[] sqlParams)
+ throws SQLException
+ {
+ for (int i=0; i<sqlParams.length; i++)
+ {
+ Object value = sqlParams[i];
+ try {
+ addStatementParam(pstmt, i+1, value); // , conn
+ } catch(SQLException e) {
+ log.error("SQLException: Unable to set prepared statement parameter {} to '{}'", i+1, StringUtils.toString(value));
+ throw e;
+ }
}
- if (ObjectUtils.isEmpty(value))
- { // null
- return getSQLPhrase(DBSqlPhrase.SQL_NULL);
+ }
+
+ /**
+ * Adds a statement parameter to a prepared statement
+ *
+ * @param pstmt the prepared statement
+ * @param paramIndex the parameter index
+ * @param value the parameter value
+ */
+ protected void addStatementParam(PreparedStatement pstmt, int paramIndex, Object value)
+ throws SQLException
+ {
+ if (value instanceof DBBlobData)
+ {
+ // handling for blobs
+ DBBlobData blobData = (DBBlobData)value;
+ pstmt.setBinaryStream(paramIndex, blobData.getInputStream(), blobData.getLength());
+ // log
+ if (log.isDebugEnabled())
+ log.debug("Statement param {} set to BLOB data", paramIndex);
}
- // set string buffer
- switch (type)
+ else if(value instanceof DBClobData)
{
- case DATE:
- return getSQLDateTimeString(value, DBSqlPhrase.SQL_DATE_TEMPLATE, DBSqlPhrase.SQL_DATE_PATTERN, DBSqlPhrase.SQL_CURRENT_DATE);
- case DATETIME:
- // Only date (without time) provided?
- if (!DBDatabase.SYSDATE.equals(value) && !(value instanceof Date) && ObjectUtils.lengthOf(value)<=10)
- return getSQLDateTimeString(value, DBSqlPhrase.SQL_DATE_TEMPLATE, DBSqlPhrase.SQL_DATE_PATTERN, DBSqlPhrase.SQL_CURRENT_TIMESTAMP);
- // Complete Date-Time Object with time
- return getSQLDateTimeString(value, DBSqlPhrase.SQL_DATETIME_TEMPLATE, DBSqlPhrase.SQL_DATETIME_PATTERN, DBSqlPhrase.SQL_CURRENT_TIMESTAMP);
- case TIMESTAMP:
- return getSQLDateTimeString(value, DBSqlPhrase.SQL_TIMESTAMP_TEMPLATE, DBSqlPhrase.SQL_TIMESTAMP_PATTERN, DBSqlPhrase.SQL_CURRENT_TIMESTAMP);
- case VARCHAR:
- case CHAR:
- case CLOB:
- case UNIQUEID:
- return getSQLTextString(type, value);
- case BOOL:
- // Get Boolean value
- boolean boolVal = false;
- if (value instanceof Boolean)
- { boolVal = ((Boolean) value).booleanValue();
- }
- else
- { // Boolean from String
- boolVal = stringToBoolean(value.toString());
- }
- return getSQLPhrase((boolVal) ? DBSqlPhrase.SQL_BOOLEAN_TRUE : DBSqlPhrase.SQL_BOOLEAN_FALSE);
- case INTEGER:
- case DECIMAL:
- case FLOAT:
- return getSQLNumberString(value, type);
- case BLOB:
- throw new NotSupportedException(this, "getValueString(?, DataType.BLOB)");
- case AUTOINC:
- case UNKNOWN:
- /* Allow expressions */
- return value.toString();
- default:
- log.warn("Unknown DataType {} for getValueString().", type);
- return value.toString();
+ // handling for clobs
+ DBClobData clobData = (DBClobData)value;
+ pstmt.setCharacterStream(paramIndex, clobData.getReader(), clobData.getLength());
+ // log
+ if (log.isDebugEnabled())
+ log.debug("Statement param {} set to CLOB data", paramIndex);
+ }
+ else if(value instanceof Date && !(value instanceof Timestamp))
+ {
+ // handling for dates
+ Timestamp ts = new Timestamp(((Date)value).getTime());
+ pstmt.setObject(paramIndex, ts);
+ // log
+ if (log.isDebugEnabled())
+ log.debug("Statement param {} set to date '{}'", paramIndex, ts);
+ }
+ else if((value instanceof Character)
+ || (value instanceof Enum<?>))
+ {
+ // Objects that need String conversion
+ String strval = value.toString();
+ pstmt.setObject(paramIndex, strval);
+ // log
+ if (log.isDebugEnabled())
+ log.debug("Statement param {} set to '{}'", paramIndex, strval);
+ }
+ else
+ { // simple parameter value
+ pstmt.setObject(paramIndex, value);
+ // log
+ if (log.isDebugEnabled())
+ log.debug("Statement param {} set to '{}'", paramIndex, value);
}
}
@@ -954,58 +980,4 @@ public abstract class DBDatabaseDriverBase implements DBDatabaseDriver
"y".equalsIgnoreCase(value);
}
- /**
- * Checks the database whether or not it is consistent with the description.
- *
- * @param db the database
- * @param owner the owner
- * @param conn the connection
- */
- public void checkDatabase(DBDatabase db, String owner, Connection conn)
- {
- throw new NotImplementedException(this, "checkDatabase");
- }
-
- /**
- * Appends the required DLL commands to create, drop or alter an object to the supplied DBDQLScript.
- * @param type operation to perform (CREATE, DROP, ALTER)
- * @param dbo the object for which to perform the operation (DBDatabase, DBTable, DBView, DBColumn, DBRelation)
- * @param script the script to which to add the DDL command(s)
- */
- @Override
- public void getDDLScript(DBCmdType type, DBObject dbo, DBSQLScript script)
- {
- throw new NotImplementedException(this, "getDDLScript");
- }
-
- /**
- * Appends a statement to enable or disable a foreign key relation.<br>
- * The default is to drop or create the relation
- * Override this method to provide different behavior for your database.
- * @param r the foreign key relation which should be enabled or disabled
- * @param enable true to enable the relation or false to disable
- * @param script the script to which to add the DDL command(s)
- */
- @Override
- public void appendEnableRelationStmt(DBRelation r, boolean enable, DBSQLScript script)
- {
- if (enable)
- getDDLScript(DBCmdType.CREATE, r, script);
- else
- getDDLScript(DBCmdType.DROP, r, script);
- }
-
- /**
- * Returns a timestamp that is used for record updates.
- * @param conn the connection that might be used
- * @return the current date and time.
- */
- @Override
- public Timestamp getUpdateTimestamp(Connection conn)
- {
- // Default implementation
- java.util.Date date = new java.util.Date();
- return new java.sql.Timestamp(date.getTime());
- }
-
}
\ No newline at end of file
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBDriverFeature.java b/empire-db/src/main/java/org/apache/empire/db/driver/DBDriverFeature.java
similarity index 96%
rename from empire-db/src/main/java/org/apache/empire/db/DBDriverFeature.java
rename to empire-db/src/main/java/org/apache/empire/db/driver/DBDriverFeature.java
index 833c220..291166e 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBDriverFeature.java
+++ b/empire-db/src/main/java/org/apache/empire/db/driver/DBDriverFeature.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.empire.db;
+package org.apache.empire.db.driver;
/**
* This enum is used with the DBDatabaseDriver::isSupported method to query database driver capabilities.
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBSqlPhrase.java b/empire-db/src/main/java/org/apache/empire/db/driver/DBSqlPhrase.java
similarity index 99%
rename from empire-db/src/main/java/org/apache/empire/db/DBSqlPhrase.java
rename to empire-db/src/main/java/org/apache/empire/db/driver/DBSqlPhrase.java
index 4f2e245..c4a7b68 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBSqlPhrase.java
+++ b/empire-db/src/main/java/org/apache/empire/db/driver/DBSqlPhrase.java
@@ -1,4 +1,4 @@
-package org.apache.empire.db;
+package org.apache.empire.db.driver;
/**
* Enum for all SQL phrases that may be supplied by the driver
diff --git a/empire-db/src/main/java/org/apache/empire/db/driver/derby/DBDatabaseDriverDerby.java b/empire-db/src/main/java/org/apache/empire/db/driver/derby/DBDatabaseDriverDerby.java
index 286c6e2..71a865e 100644
--- a/empire-db/src/main/java/org/apache/empire/db/driver/derby/DBDatabaseDriverDerby.java
+++ b/empire-db/src/main/java/org/apache/empire/db/driver/derby/DBDatabaseDriverDerby.java
@@ -22,19 +22,19 @@ import java.sql.Connection;
import java.util.GregorianCalendar;
import org.apache.empire.data.DataType;
-import org.apache.empire.db.DBCmdType;
import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBCommand;
import org.apache.empire.db.DBDDLGenerator;
+import org.apache.empire.db.DBDDLGenerator.DDLAlterType;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
-import org.apache.empire.db.DBDriverFeature;
import org.apache.empire.db.DBObject;
import org.apache.empire.db.DBSQLScript;
-import org.apache.empire.db.DBSqlPhrase;
import org.apache.empire.db.DBTable;
import org.apache.empire.db.DBTableColumn;
import org.apache.empire.db.driver.DBDatabaseDriverBase;
+import org.apache.empire.db.driver.DBDriverFeature;
+import org.apache.empire.db.driver.DBSqlPhrase;
import org.apache.empire.exceptions.NotSupportedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -313,10 +313,10 @@ public class DBDatabaseDriverDerby extends DBDatabaseDriverBase
}
/**
- * @see DBDatabaseDriver#getDDLScript(DBCmdType, DBObject, DBSQLScript)
+ * @see DBDatabaseDriver#getDDLScript(DDLAlterType, DBObject, DBSQLScript)
*/
@Override
- public void getDDLScript(DBCmdType type, DBObject dbo, DBSQLScript script)
+ public void getDDLScript(DDLAlterType type, DBObject dbo, DBSQLScript script)
{
if (ddlGenerator==null)
ddlGenerator = new DerbyDDLGenerator(this);
diff --git a/empire-db/src/main/java/org/apache/empire/db/driver/h2/DBDatabaseDriverH2.java b/empire-db/src/main/java/org/apache/empire/db/driver/h2/DBDatabaseDriverH2.java
index 5f9e8b3..7f6e43a 100644
--- a/empire-db/src/main/java/org/apache/empire/db/driver/h2/DBDatabaseDriverH2.java
+++ b/empire-db/src/main/java/org/apache/empire/db/driver/h2/DBDatabaseDriverH2.java
@@ -22,19 +22,19 @@ import java.sql.Connection;
import java.util.GregorianCalendar;
import org.apache.empire.data.DataType;
-import org.apache.empire.db.DBCmdType;
import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBCommand;
import org.apache.empire.db.DBDDLGenerator;
+import org.apache.empire.db.DBDDLGenerator.DDLAlterType;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
-import org.apache.empire.db.DBDriverFeature;
import org.apache.empire.db.DBObject;
import org.apache.empire.db.DBSQLScript;
-import org.apache.empire.db.DBSqlPhrase;
import org.apache.empire.db.DBTable;
import org.apache.empire.db.DBTableColumn;
import org.apache.empire.db.driver.DBDatabaseDriverBase;
+import org.apache.empire.db.driver.DBDriverFeature;
+import org.apache.empire.db.driver.DBSqlPhrase;
import org.apache.empire.exceptions.InvalidArgumentException;
import org.apache.empire.exceptions.NotSupportedException;
import org.slf4j.Logger;
@@ -360,10 +360,10 @@ public class DBDatabaseDriverH2 extends DBDatabaseDriverBase
}
/**
- * @see DBDatabaseDriver#getDDLScript(DBCmdType, DBObject, DBSQLScript)
+ * @see DBDatabaseDriver#getDDLScript(DDLAlterType, DBObject, DBSQLScript)
*/
@Override
- public void getDDLScript(DBCmdType type, DBObject dbo, DBSQLScript script)
+ public void getDDLScript(DDLAlterType type, DBObject dbo, DBSQLScript script)
{
if (ddlGenerator==null)
ddlGenerator = new H2DDLGenerator(this);
diff --git a/empire-db/src/main/java/org/apache/empire/db/driver/hsql/DBDatabaseDriverHSql.java b/empire-db/src/main/java/org/apache/empire/db/driver/hsql/DBDatabaseDriverHSql.java
index 9eea6de..e7741db 100644
--- a/empire-db/src/main/java/org/apache/empire/db/driver/hsql/DBDatabaseDriverHSql.java
+++ b/empire-db/src/main/java/org/apache/empire/db/driver/hsql/DBDatabaseDriverHSql.java
@@ -23,18 +23,18 @@ import java.util.GregorianCalendar;
import org.apache.empire.commons.ObjectUtils;
import org.apache.empire.data.DataType;
-import org.apache.empire.db.DBCmdType;
import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBCommand;
import org.apache.empire.db.DBDDLGenerator;
+import org.apache.empire.db.DBDDLGenerator.DDLAlterType;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
-import org.apache.empire.db.DBDriverFeature;
import org.apache.empire.db.DBObject;
import org.apache.empire.db.DBSQLScript;
-import org.apache.empire.db.DBSqlPhrase;
import org.apache.empire.db.DBTableColumn;
import org.apache.empire.db.driver.DBDatabaseDriverBase;
+import org.apache.empire.db.driver.DBDriverFeature;
+import org.apache.empire.db.driver.DBSqlPhrase;
import org.apache.empire.db.exceptions.QueryNoResultException;
import org.apache.empire.exceptions.NotSupportedException;
import org.slf4j.Logger;
@@ -282,10 +282,10 @@ public class DBDatabaseDriverHSql extends DBDatabaseDriverBase
}
/**
- * @see DBDatabaseDriver#getDDLScript(DBCmdType, DBObject, DBSQLScript)
+ * @see DBDatabaseDriver#getDDLScript(DDLAlterType, DBObject, DBSQLScript)
*/
@Override
- public void getDDLScript(DBCmdType type, DBObject dbo, DBSQLScript script)
+ public void getDDLScript(DDLAlterType type, DBObject dbo, DBSQLScript script)
{
if (ddlGenerator==null)
ddlGenerator = new HSqlDDLGenerator(this);
diff --git a/empire-db/src/main/java/org/apache/empire/db/driver/hsql/HSqlDDLGenerator.java b/empire-db/src/main/java/org/apache/empire/db/driver/hsql/HSqlDDLGenerator.java
index 17dac74..7d88903 100644
--- a/empire-db/src/main/java/org/apache/empire/db/driver/hsql/HSqlDDLGenerator.java
+++ b/empire-db/src/main/java/org/apache/empire/db/driver/hsql/HSqlDDLGenerator.java
@@ -19,7 +19,6 @@
package org.apache.empire.db.driver.hsql;
import org.apache.empire.data.DataType;
-import org.apache.empire.db.DBCmdType;
import org.apache.empire.db.DBColumn;
import org.apache.empire.db.DBDDLGenerator;
import org.apache.empire.db.DBDatabase;
@@ -81,11 +80,11 @@ public class HSqlDDLGenerator extends DBDDLGenerator<DBDatabaseDriverHSql>
}
@Override
- public void getDDLScript(DBCmdType type, DBObject dbo, DBSQLScript script)
+ public void getDDLScript(DDLAlterType type, DBObject dbo, DBSQLScript script)
{
super.getDDLScript(type, dbo, script);
// Additional tasks
- if ((type==DBCmdType.DROP) && (dbo instanceof DBTable))
+ if ((type==DDLAlterType.DROP) && (dbo instanceof DBTable))
{ // Drop Sequences
for (DBColumn c : ((DBTable) dbo).getColumns())
{
diff --git a/empire-db/src/main/java/org/apache/empire/db/driver/mysql/DBDatabaseDriverMySQL.java b/empire-db/src/main/java/org/apache/empire/db/driver/mysql/DBDatabaseDriverMySQL.java
index e6b2394..5359b8b 100644
--- a/empire-db/src/main/java/org/apache/empire/db/driver/mysql/DBDatabaseDriverMySQL.java
+++ b/empire-db/src/main/java/org/apache/empire/db/driver/mysql/DBDatabaseDriverMySQL.java
@@ -24,21 +24,21 @@ import java.util.GregorianCalendar;
import org.apache.empire.commons.StringUtils;
import org.apache.empire.data.DataType;
-import org.apache.empire.db.DBCmdType;
import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBCombinedCmd;
import org.apache.empire.db.DBCommand;
import org.apache.empire.db.DBCommandExpr;
import org.apache.empire.db.DBDDLGenerator;
+import org.apache.empire.db.DBDDLGenerator.DDLAlterType;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
-import org.apache.empire.db.DBDriverFeature;
import org.apache.empire.db.DBObject;
import org.apache.empire.db.DBSQLScript;
-import org.apache.empire.db.DBSqlPhrase;
import org.apache.empire.db.DBTable;
import org.apache.empire.db.DBTableColumn;
import org.apache.empire.db.driver.DBDatabaseDriverBase;
+import org.apache.empire.db.driver.DBDriverFeature;
+import org.apache.empire.db.driver.DBSqlPhrase;
import org.apache.empire.db.exceptions.EmpireSQLException;
import org.apache.empire.exceptions.NotSupportedException;
import org.slf4j.Logger;
@@ -1127,10 +1127,10 @@ public class DBDatabaseDriverMySQL extends DBDatabaseDriverBase
}
/**
- * @see DBDatabaseDriver#getDDLScript(DBCmdType, DBObject, DBSQLScript)
+ * @see DBDatabaseDriver#getDDLScript(DDLAlterType, DBObject, DBSQLScript)
*/
@Override
- public void getDDLScript(DBCmdType type, DBObject dbo, DBSQLScript script)
+ public void getDDLScript(DDLAlterType type, DBObject dbo, DBSQLScript script)
{
if (ddlGenerator==null)
ddlGenerator = new MySQLDDLGenerator(this);
diff --git a/empire-db/src/main/java/org/apache/empire/db/driver/oracle/DBDatabaseDriverOracle.java b/empire-db/src/main/java/org/apache/empire/db/driver/oracle/DBDatabaseDriverOracle.java
index 8660339..e3f86eb 100644
--- a/empire-db/src/main/java/org/apache/empire/db/driver/oracle/DBDatabaseDriverOracle.java
+++ b/empire-db/src/main/java/org/apache/empire/db/driver/oracle/DBDatabaseDriverOracle.java
@@ -26,26 +26,26 @@ import java.sql.Statement;
import org.apache.empire.commons.ObjectUtils;
import org.apache.empire.commons.StringUtils;
import org.apache.empire.data.DataType;
-import org.apache.empire.db.DBCmdType;
import org.apache.empire.db.DBColumn;
import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBCommand;
import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBDDLGenerator;
+import org.apache.empire.db.DBDDLGenerator.DDLAlterType;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
-import org.apache.empire.db.DBDriverFeature;
import org.apache.empire.db.DBExpr;
import org.apache.empire.db.DBObject;
import org.apache.empire.db.DBReader;
import org.apache.empire.db.DBRelation;
import org.apache.empire.db.DBSQLScript;
-import org.apache.empire.db.DBSqlPhrase;
import org.apache.empire.db.DBTable;
import org.apache.empire.db.DBTableColumn;
import org.apache.empire.db.DBView;
import org.apache.empire.db.context.DBContextStatic;
import org.apache.empire.db.driver.DBDatabaseDriverBase;
+import org.apache.empire.db.driver.DBDriverFeature;
+import org.apache.empire.db.driver.DBSqlPhrase;
import org.apache.empire.db.exceptions.EmpireSQLException;
import org.apache.empire.db.exceptions.QueryNoResultException;
import org.apache.empire.db.expr.column.DBValueExpr;
@@ -392,10 +392,10 @@ public class DBDatabaseDriverOracle extends DBDatabaseDriverBase
}
/**
- * @see DBDatabaseDriver#getDDLScript(DBCmdType, DBObject, DBSQLScript)
+ * @see DBDatabaseDriver#getDDLScript(DDLAlterType, DBObject, DBSQLScript)
*/
@Override
- public void getDDLScript(DBCmdType type, DBObject dbo, DBSQLScript script)
+ public void getDDLScript(DDLAlterType type, DBObject dbo, DBSQLScript script)
{
if (ddlGenerator==null)
ddlGenerator = new OracleDDLGenerator(this);
@@ -423,7 +423,6 @@ public class DBDatabaseDriverOracle extends DBDatabaseDriverBase
/**
* Checks whether the database definition matches the real database structure.
*/
- @Override
public void checkDatabase(DBDatabase db, String owner, Connection conn)
{
DBContext context = new DBContextStatic(this, conn);
diff --git a/empire-db/src/main/java/org/apache/empire/db/driver/oracle/OracleDDLGenerator.java b/empire-db/src/main/java/org/apache/empire/db/driver/oracle/OracleDDLGenerator.java
index ddfa022..a7e09c8 100644
--- a/empire-db/src/main/java/org/apache/empire/db/driver/oracle/OracleDDLGenerator.java
+++ b/empire-db/src/main/java/org/apache/empire/db/driver/oracle/OracleDDLGenerator.java
@@ -19,7 +19,6 @@
package org.apache.empire.db.driver.oracle;
import org.apache.empire.data.DataType;
-import org.apache.empire.db.DBCmdType;
import org.apache.empire.db.DBColumn;
import org.apache.empire.db.DBDDLGenerator;
import org.apache.empire.db.DBDatabase;
@@ -117,11 +116,11 @@ public class OracleDDLGenerator extends DBDDLGenerator<DBDatabaseDriverOracle>
}
@Override
- public void getDDLScript(DBCmdType type, DBObject dbo, DBSQLScript script)
+ public void getDDLScript(DDLAlterType type, DBObject dbo, DBSQLScript script)
{
super.getDDLScript(type, dbo, script);
// Additional tasks
- if ((type==DBCmdType.DROP) && (dbo instanceof DBTable))
+ if ((type==DDLAlterType.DROP) && (dbo instanceof DBTable))
{ // Drop Sequences
for (DBColumn c : ((DBTable) dbo).getColumns())
{
diff --git a/empire-db/src/main/java/org/apache/empire/db/driver/postgresql/DBDatabaseDriverPostgreSQL.java b/empire-db/src/main/java/org/apache/empire/db/driver/postgresql/DBDatabaseDriverPostgreSQL.java
index 8ae0229..01d7a50 100644
--- a/empire-db/src/main/java/org/apache/empire/db/driver/postgresql/DBDatabaseDriverPostgreSQL.java
+++ b/empire-db/src/main/java/org/apache/empire/db/driver/postgresql/DBDatabaseDriverPostgreSQL.java
@@ -26,18 +26,18 @@ import java.util.GregorianCalendar;
import org.apache.empire.commons.ObjectUtils;
import org.apache.empire.commons.StringUtils;
import org.apache.empire.data.DataType;
-import org.apache.empire.db.DBCmdType;
import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBCommand;
import org.apache.empire.db.DBDDLGenerator;
+import org.apache.empire.db.DBDDLGenerator.DDLAlterType;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
-import org.apache.empire.db.DBDriverFeature;
import org.apache.empire.db.DBObject;
import org.apache.empire.db.DBSQLScript;
-import org.apache.empire.db.DBSqlPhrase;
import org.apache.empire.db.DBTableColumn;
import org.apache.empire.db.driver.DBDatabaseDriverBase;
+import org.apache.empire.db.driver.DBDriverFeature;
+import org.apache.empire.db.driver.DBSqlPhrase;
import org.apache.empire.db.exceptions.EmpireSQLException;
import org.apache.empire.db.exceptions.QueryNoResultException;
import org.apache.empire.db.expr.column.DBValueExpr;
@@ -477,10 +477,10 @@ public class DBDatabaseDriverPostgreSQL extends DBDatabaseDriverBase
}
/**
- * @see DBDatabaseDriver#getDDLScript(DBCmdType, DBObject, DBSQLScript)
+ * @see DBDatabaseDriver#getDDLScript(DDLAlterType, DBObject, DBSQLScript)
*/
@Override
- public void getDDLScript(DBCmdType type, DBObject dbo, DBSQLScript script)
+ public void getDDLScript(DDLAlterType type, DBObject dbo, DBSQLScript script)
{
if (ddlGenerator==null)
ddlGenerator = new PostgreDDLGenerator(this);
diff --git a/empire-db/src/main/java/org/apache/empire/db/driver/sqlite/DBDatabaseDriverSQLite.java b/empire-db/src/main/java/org/apache/empire/db/driver/sqlite/DBDatabaseDriverSQLite.java
index 9ae7336..ca5482f 100644
--- a/empire-db/src/main/java/org/apache/empire/db/driver/sqlite/DBDatabaseDriverSQLite.java
+++ b/empire-db/src/main/java/org/apache/empire/db/driver/sqlite/DBDatabaseDriverSQLite.java
@@ -31,19 +31,19 @@ import java.util.GregorianCalendar;
import java.util.List;
import org.apache.empire.data.DataType;
-import org.apache.empire.db.DBCmdType;
import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBCommand;
import org.apache.empire.db.DBDDLGenerator;
+import org.apache.empire.db.DBDDLGenerator.DDLAlterType;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
-import org.apache.empire.db.DBDriverFeature;
import org.apache.empire.db.DBJoinType;
import org.apache.empire.db.DBObject;
import org.apache.empire.db.DBSQLScript;
-import org.apache.empire.db.DBSqlPhrase;
import org.apache.empire.db.DBTableColumn;
import org.apache.empire.db.driver.DBDatabaseDriverBase;
+import org.apache.empire.db.driver.DBDriverFeature;
+import org.apache.empire.db.driver.DBSqlPhrase;
import org.apache.empire.db.expr.join.DBColumnJoinExpr;
import org.apache.empire.db.expr.join.DBJoinExpr;
import org.apache.empire.exceptions.NotImplementedException;
@@ -371,49 +371,6 @@ public class DBDatabaseDriverSQLite extends DBDatabaseDriverBase
return phrase.getSqlDefault();
}
}
-
- @Override
- public int executeSQL(String sqlCmd, Object[] sqlParams, Connection conn, DBSetGenKeys genKeys) throws SQLException
- {
- Statement stmt = null;
- int count = 0;
- try
- {
- if (sqlParams != null)
- { // Use a prepared statement
- PreparedStatement pstmt = conn.prepareStatement(sqlCmd);
- stmt = pstmt;
- prepareStatement(pstmt, sqlParams);
- count = pstmt.executeUpdate();
- }
- else
- { // Execute a simple statement
- stmt = conn.createStatement();
- count = stmt.executeUpdate(sqlCmd);
- }
- // Retrieve any auto-generated keys
- if (genKeys != null && count > 0)
- { // Return Keys
- ResultSet rs = stmt.getGeneratedKeys();
- try
- {
- while (rs.next())
- {
- genKeys.set(rs.getObject(1));
- }
- }
- finally
- {
- rs.close();
- }
- }
- }
- finally
- {
- closeStatement(stmt);
- }
- return count;
- }
@Override
public Object getResultValue(ResultSet rset, int columnIndex, DataType dataType) throws SQLException
@@ -507,10 +464,10 @@ public class DBDatabaseDriverSQLite extends DBDatabaseDriverBase
}
/**
- * @see DBDatabaseDriver#getDDLScript(DBCmdType, DBObject, DBSQLScript)
+ * @see DBDatabaseDriver#getDDLScript(DDLAlterType, DBObject, DBSQLScript)
*/
@Override
- public void getDDLScript(DBCmdType type, DBObject dbo, DBSQLScript script)
+ public void getDDLScript(DDLAlterType type, DBObject dbo, DBSQLScript script)
{
if (ddlGenerator == null)
ddlGenerator = new SQLiteDDLGenerator(this);
diff --git a/empire-db/src/main/java/org/apache/empire/db/driver/sqlserver/DBDatabaseDriverMSSQL.java b/empire-db/src/main/java/org/apache/empire/db/driver/sqlserver/DBDatabaseDriverMSSQL.java
index 5a5de91..6456979 100644
--- a/empire-db/src/main/java/org/apache/empire/db/driver/sqlserver/DBDatabaseDriverMSSQL.java
+++ b/empire-db/src/main/java/org/apache/empire/db/driver/sqlserver/DBDatabaseDriverMSSQL.java
@@ -26,21 +26,21 @@ import java.util.GregorianCalendar;
import org.apache.empire.commons.StringUtils;
import org.apache.empire.data.DataType;
-import org.apache.empire.db.DBCmdType;
import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBCommand;
import org.apache.empire.db.DBDDLGenerator;
+import org.apache.empire.db.DBDDLGenerator.DDLAlterType;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
-import org.apache.empire.db.DBDriverFeature;
import org.apache.empire.db.DBExpr;
import org.apache.empire.db.DBObject;
import org.apache.empire.db.DBRelation;
import org.apache.empire.db.DBSQLScript;
-import org.apache.empire.db.DBSqlPhrase;
import org.apache.empire.db.DBTable;
import org.apache.empire.db.DBTableColumn;
import org.apache.empire.db.driver.DBDatabaseDriverBase;
+import org.apache.empire.db.driver.DBDriverFeature;
+import org.apache.empire.db.driver.DBSqlPhrase;
import org.apache.empire.db.exceptions.EmpireSQLException;
import org.apache.empire.exceptions.NotSupportedException;
import org.slf4j.Logger;
@@ -48,9 +48,6 @@ import org.slf4j.LoggerFactory;
/**
* This class provides support for the Microsoft SQL-Server database system.
- *
- *
- *
*/
public class DBDatabaseDriverMSSQL extends DBDatabaseDriverBase
{
@@ -510,10 +507,10 @@ public class DBDatabaseDriverMSSQL extends DBDatabaseDriverBase
}
/**
- * @see DBDatabaseDriver#getDDLScript(DBCmdType, DBObject, DBSQLScript)
+ * @see DBDatabaseDriver#getDDLScript(DDLAlterType, DBObject, DBSQLScript)
*/
@Override
- public void getDDLScript(DBCmdType type, DBObject dbo, DBSQLScript script)
+ public void getDDLScript(DDLAlterType type, DBObject dbo, DBSQLScript script)
{
if (ddlGenerator==null)
ddlGenerator = new MSSqlDDLGenerator(this);
diff --git a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAliasExpr.java b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAliasExpr.java
index b3a644f..6a64aa8 100644
--- a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAliasExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAliasExpr.java
@@ -27,7 +27,7 @@ import org.apache.empire.db.DBColumn;
import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
-import org.apache.empire.db.DBSqlPhrase;
+import org.apache.empire.db.driver.DBSqlPhrase;
import org.w3c.dom.Element;
// XML
diff --git a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBConcatExpr.java b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBConcatExpr.java
index c22f1a5..b70e1a3 100644
--- a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBConcatExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBConcatExpr.java
@@ -27,7 +27,7 @@ import org.apache.empire.db.DBColumn;
import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBExpr;
-import org.apache.empire.db.DBSqlPhrase;
+import org.apache.empire.db.driver.DBSqlPhrase;
import org.apache.empire.xml.XMLUtil;
import org.w3c.dom.Element;
diff --git a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBDecodeExpr.java b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBDecodeExpr.java
index 6923426..e4e9351 100644
--- a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBDecodeExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBDecodeExpr.java
@@ -28,7 +28,7 @@ import org.apache.empire.db.DBColumn;
import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBDatabaseDriver;
import org.apache.empire.db.DBExpr;
-import org.apache.empire.db.DBSqlPhrase;
+import org.apache.empire.db.driver.DBSqlPhrase;
/**
* This class is used to decode a set of keys to the corresponding target values.
diff --git a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBFuncExpr.java b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBFuncExpr.java
index dd358fe..393a645 100644
--- a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBFuncExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBFuncExpr.java
@@ -25,7 +25,7 @@ import org.apache.empire.data.DataType;
import org.apache.empire.db.DBColumn;
import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBExpr;
-import org.apache.empire.db.DBSqlPhrase;
+import org.apache.empire.db.driver.DBSqlPhrase;
/**
diff --git a/empire-db/src/test/java/org/apache/empire/db/IntegerTest.java b/empire-db/src/test/java/org/apache/empire/db/IntegerTest.java
index d940e0c..598cec7 100644
--- a/empire-db/src/test/java/org/apache/empire/db/IntegerTest.java
+++ b/empire-db/src/test/java/org/apache/empire/db/IntegerTest.java
@@ -27,6 +27,7 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.empire.data.DataType;
+import org.apache.empire.db.DBDDLGenerator.DDLAlterType;
import org.apache.empire.db.context.DBContextStatic;
import org.apache.empire.db.driver.derby.DBDatabaseDriverDerby;
import org.apache.empire.db.driver.h2.DBDatabaseDriverH2;
@@ -193,7 +194,7 @@ public class IntegerTest {
DBSQLScript script2 = new DBSQLScript(context);
for(DBTable table:db.getTables()){
if(tables.contains(table.getName())){
- db.getDriver().getDDLScript(DBCmdType.DROP, table, script2);
+ db.getDriver().getDDLScript(DDLAlterType.DROP, table, script2);
}
}
script2.executeAll(false);
diff --git a/empire-db/src/test/java/org/apache/empire/db/MockDriver.java b/empire-db/src/test/java/org/apache/empire/db/MockDriver.java
index d6b7ee2..013036b 100644
--- a/empire-db/src/test/java/org/apache/empire/db/MockDriver.java
+++ b/empire-db/src/test/java/org/apache/empire/db/MockDriver.java
@@ -21,7 +21,11 @@ package org.apache.empire.db;
import java.sql.Connection;
import org.apache.empire.data.DataType;
+import org.apache.empire.db.DBDDLGenerator.DDLAlterType;
import org.apache.empire.db.driver.DBDatabaseDriverBase;
+import org.apache.empire.db.driver.DBDriverFeature;
+import org.apache.empire.db.driver.DBSqlPhrase;
+import org.apache.empire.exceptions.NotImplementedException;
public class MockDriver extends DBDatabaseDriverBase {
// *Deprecated* private static final long serialVersionUID = 1L;
@@ -65,6 +69,12 @@ public class MockDriver extends DBDatabaseDriverBase {
}
@Override
+ public void getDDLScript(DDLAlterType type, DBObject dbo, DBSQLScript script)
+ {
+ throw new NotImplementedException(this, "getDDLScript");
+ }
+
+ @Override
public boolean isSupported(DBDriverFeature type)
{
return false;
diff --git a/empire-db/src/test/java/org/apache/empire/db/hsql/DBDatabaseDriverHSqlTest.java b/empire-db/src/test/java/org/apache/empire/db/hsql/DBDatabaseDriverHSqlTest.java
index 33c7461..034a118 100644
--- a/empire-db/src/test/java/org/apache/empire/db/hsql/DBDatabaseDriverHSqlTest.java
+++ b/empire-db/src/test/java/org/apache/empire/db/hsql/DBDatabaseDriverHSqlTest.java
@@ -29,8 +29,8 @@ import org.apache.empire.DBResource;
import org.apache.empire.DBResource.DB;
import org.apache.empire.data.DataType;
import org.apache.empire.db.CompanyDB;
-import org.apache.empire.db.DBCmdType;
import org.apache.empire.db.DBContext;
+import org.apache.empire.db.DBDDLGenerator.DDLAlterType;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
import org.apache.empire.db.DBRecord;
@@ -107,8 +107,8 @@ public class DBDatabaseDriverHSqlTest{
script = new DBSQLScript(context);
- db.getDriver().getDDLScript(DBCmdType.DROP, db.EMPLOYEE, script);
- db.getDriver().getDDLScript(DBCmdType.DROP, db.DEPARTMENT, script);
+ db.getDriver().getDDLScript(DDLAlterType.DROP, db.EMPLOYEE, script);
+ db.getDriver().getDDLScript(DDLAlterType.DROP, db.DEPARTMENT, script);
script.executeAll(true);
}
@@ -140,7 +140,7 @@ public class DBDatabaseDriverHSqlTest{
assertEquals("test", read.getString(db.DATA.VALUE));
script = new DBSQLScript(context);
- db.getDriver().getDDLScript(DBCmdType.DROP, db.DATA, script);
+ db.getDriver().getDDLScript(DDLAlterType.DROP, db.DATA, script);
script.executeAll(true);
}
diff --git a/empire-db/src/test/java/org/apache/empire/db/sqlite/DBDatabaseDriverSQLiteTest.java b/empire-db/src/test/java/org/apache/empire/db/sqlite/DBDatabaseDriverSQLiteTest.java
index 0e223fb..78f5f93 100644
--- a/empire-db/src/test/java/org/apache/empire/db/sqlite/DBDatabaseDriverSQLiteTest.java
+++ b/empire-db/src/test/java/org/apache/empire/db/sqlite/DBDatabaseDriverSQLiteTest.java
@@ -29,8 +29,8 @@ import org.apache.empire.DBResource;
import org.apache.empire.DBResource.DB;
import org.apache.empire.data.DataType;
import org.apache.empire.db.CompanyDB;
-import org.apache.empire.db.DBCmdType;
import org.apache.empire.db.DBContext;
+import org.apache.empire.db.DBDDLGenerator.DDLAlterType;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
import org.apache.empire.db.DBRecord;
@@ -97,8 +97,8 @@ public class DBDatabaseDriverSQLiteTest{
assertEquals("123456", emp.getString(db.EMPLOYEE.PHONE_NUMBER));
script = new DBSQLScript(context);
- db.getDriver().getDDLScript(DBCmdType.DROP, db.EMPLOYEE, script);
- db.getDriver().getDDLScript(DBCmdType.DROP, db.DEPARTMENT, script);
+ db.getDriver().getDDLScript(DDLAlterType.DROP, db.EMPLOYEE, script);
+ db.getDriver().getDDLScript(DDLAlterType.DROP, db.DEPARTMENT, script);
script.executeAll(true);
}
@@ -132,7 +132,7 @@ public class DBDatabaseDriverSQLiteTest{
assertEquals("test", read.getString(db.DATA.VALUE));
script = new DBSQLScript(context);
- db.getDriver().getDDLScript(DBCmdType.DROP, db.DATA, script);
+ db.getDriver().getDDLScript(DDLAlterType.DROP, db.DATA, script);
script.executeAll(true);
}