Return-Path: Delivered-To: apmail-incubator-empire-db-commits-archive@minotaur.apache.org Received: (qmail 34884 invoked from network); 3 Dec 2010 02:04:17 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 3 Dec 2010 02:04:17 -0000 Received: (qmail 91635 invoked by uid 500); 3 Dec 2010 02:04:17 -0000 Delivered-To: apmail-incubator-empire-db-commits-archive@incubator.apache.org Received: (qmail 91619 invoked by uid 500); 3 Dec 2010 02:04:17 -0000 Mailing-List: contact empire-db-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: empire-db-dev@incubator.apache.org Delivered-To: mailing list empire-db-commits@incubator.apache.org Received: (qmail 91611 invoked by uid 99); 3 Dec 2010 02:04:17 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 03 Dec 2010 02:04:17 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 03 Dec 2010 02:04:12 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 5C20323888EA; Fri, 3 Dec 2010 02:02:39 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1041673 - in /incubator/empire-db/trunk: empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/ empire-db/src/main/java/org/apache/empire/db/ Date: Fri, 03 Dec 2010 02:02:39 -0000 To: empire-db-commits@incubator.apache.org From: doebele@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20101203020239.5C20323888EA@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: doebele Date: Fri Dec 3 02:02:38 2010 New Revision: 1041673 URL: http://svn.apache.org/viewvc?rev=1041673&view=rev Log: EMPIREDB-91 Futher improvements and fixed reorder issue Modified: incubator/empire-db/trunk/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBCombinedCmd.java incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBCommand.java incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBCommandExpr.java incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBQuery.java incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBReader.java incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java Modified: incubator/empire-db/trunk/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java URL: http://svn.apache.org/viewvc/incubator/empire-db/trunk/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java?rev=1041673&r1=1041672&r2=1041673&view=diff ============================================================================== --- incubator/empire-db/trunk/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java (original) +++ incubator/empire-db/trunk/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java Fri Dec 3 02:02:38 2010 @@ -46,7 +46,6 @@ import org.apache.empire.db.mysql.DBData import org.apache.empire.db.oracle.DBDatabaseDriverOracle; import org.apache.empire.db.postgresql.DBDatabaseDriverPostgreSQL; import org.apache.empire.db.sqlserver.DBDatabaseDriverMSSQL; -import org.apache.empire.samples.db.advanced.SampleAdvDB.EmployeeInfoView; public class SampleAdvApp @@ -427,8 +426,8 @@ public class SampleAdvApp // create a command DBCommand cmd = db.createCommand(); // Create cmd parameters - DBCommandParam genderParam = cmd.addCmdParam(); // Gender ('M' or 'F') DBCommandParam curDepParam = cmd.addCmdParam(); // Current Department + DBCommandParam genderParam = cmd.addCmdParam(); // Gender ('M' or 'F') // Define the query cmd.select(T_EMP.C_FULLNAME); cmd.join (T_EMP.C_EMPLOYEE_ID, db.V_EMPLOYEE_INFO.C_EMPLOYEE_ID); Modified: incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBCombinedCmd.java URL: http://svn.apache.org/viewvc/incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBCombinedCmd.java?rev=1041673&r1=1041672&r2=1041673&view=diff ============================================================================== --- incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBCombinedCmd.java (original) +++ incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBCombinedCmd.java Fri Dec 3 02:02:38 2010 @@ -97,10 +97,10 @@ public class DBCombinedCmd extends DBCom * @return the list of parameter values for a prepared statement */ @Override - public Object[] getCmdParams() + public Object[] getCmdParamValues() { - Object[] leftParams = left.getCmdParams(); - Object[] rightParams = right.getCmdParams(); + Object[] leftParams = left.getCmdParamValues(); + Object[] rightParams = right.getCmdParamValues(); // Check if (leftParams==null) return rightParams; Modified: incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBCommand.java URL: http://svn.apache.org/viewvc/incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBCommand.java?rev=1041673&r1=1041672&r2=1041673&view=diff ============================================================================== --- incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBCommand.java (original) +++ incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBCommand.java Fri Dec 3 02:02:38 2010 @@ -26,6 +26,7 @@ import java.util.List; import java.util.Set; import java.util.Vector; +import org.apache.empire.EmpireException; import org.apache.empire.commons.Errors; import org.apache.empire.data.DataType; import org.apache.empire.db.expr.compare.DBCompareColExpr; @@ -46,18 +47,47 @@ public abstract class DBCommand extends public static final class DBCommandParam extends DBExpr { protected DBCommand cmd; - protected int index; + protected DataType type; + protected Object value; - protected DBCommandParam(DBCommand cmd, int index) + protected DBCommandParam(DBCommand cmd, DataType type, Object value) { - this.cmd = cmd; - this.index = index; + this.cmd = cmd; + this.type = type; + this.value = getCmdParamValue(value); + } + + protected Object getCmdParamValue(Object value) + { + switch (type) + { + case BLOB: + if (value == null) + return null; + if (value instanceof DBBlobData) + return value; + if (value instanceof byte[]) + return new DBBlobData((byte[])value); + // create a blob data + return new DBBlobData(value.toString()); + case CLOB: + if (value == null) + return null; + if (value instanceof DBClobData) + return value; + // create a clob data + return new DBClobData(value.toString()); + default: + return value; + } } @Override public void addSQL(StringBuilder buf, long context) { buf.append("?"); //$NON-NLS-1$ + // Move to current usage position + cmd.notifyParamUsage(this); } /** @@ -77,12 +107,12 @@ public abstract class DBCommand extends public Object getValue() { - return cmd.cmdParams.get(index); + return value; } public void setValue(Object value) { - cmd.cmdParams.set(index, value); + this.value = getCmdParamValue(value); } } @@ -96,7 +126,8 @@ public abstract class DBCommand extends protected List having = null; protected List groupBy = null; // Parameters for prepared Statements - protected Vector cmdParams = null; + protected Vector cmdParams = null; + protected int paramUsageCount= 0; // Database private DBDatabase db; @@ -110,6 +141,28 @@ public abstract class DBCommand extends this.db = db; } + private void resetParamUsage() + { + paramUsageCount = 0; + } + + private synchronized void notifyParamUsage(DBCommandParam param) + { + int index = cmdParams.indexOf(param); + if (index < paramUsageCount) + { // Error: parameter probably used twice in statement! + String msg = "A parameter may only be used once in a command."; + error(Errors.Internal, msg); + throw new EmpireException(this); + } + if (index > paramUsageCount) + { // Correct parameter order + cmdParams.remove(index); + cmdParams.insertElementAt(param, paramUsageCount); + } + paramUsageCount++; + } + /** * Creates a clone of this class. */ @@ -229,31 +282,6 @@ public abstract class DBCommand extends DataType dt = col.getDataType(); return ( dt==DataType.BLOB || dt==DataType.CLOB ); } - - protected Object getCmdParamValue(DBColumn col, Object value) - { - switch (col.getDataType()) - { - case BLOB: - if (value == null) - return null; - if (value instanceof DBBlobData) - return value; - if (value instanceof byte[]) - return new DBBlobData((byte[])value); - // create a blob data - return new DBBlobData(value.toString()); - case CLOB: - if (value == null) - return null; - if (value instanceof DBClobData) - return value; - // create a clob data - return new DBClobData(value.toString()); - default: - return value; - } - } /** * Inserts DBSetExpr objects to the Vector 'set'. @@ -271,9 +299,10 @@ public abstract class DBCommand extends { // Overwrite existing value if (useCmdParam(expr.column) && (expr.value instanceof DBExpr) == false && chk.value instanceof DBCommandParam) - { // replace parameter - int index = ((DBCommandParam) chk.value).index; - this.setCmdParam(index, getCmdParamValue(expr.column, expr.value)); + { // replace parameter value + // int index = ((DBCommandParam) chk.value).index; + // this.setCmdParam(index, getCmdParamValue(expr.column, expr.value)); + ((DBCommandParam)chk.value).setValue(expr.value); } else { // replace value @@ -284,7 +313,7 @@ public abstract class DBCommand extends } // Replace with parameter if (useCmdParam(expr.column) && (expr.value instanceof DBExpr)==false) - expr.value = addCmdParam(getCmdParamValue(expr.column, expr.value)); + expr.value = addCmdParam(expr.column.getDataType(), expr.value); // new Value! set.add(expr); } @@ -309,45 +338,64 @@ public abstract class DBCommand extends } /** - * Sets a object to in the list of Parameters. + * Adds an command parameter which will be used in a prepared statement. + * The command parameter returned may be used to alter the value. * - * @param index the parameter index - * @param item the parameter value + * @param type the data type of the parameter + * @param value the initial parameter value * - * @return true on succes + * @return the command parameter object */ - public boolean setCmdParam(int index, Object item) + public DBCommandParam addCmdParam(DataType type, Object value) { - if (index<0 || index>999) - return error(Errors.InvalidArg, index, "index"); if (cmdParams==null) - cmdParams= new Vector(); - if (index>=cmdParams.size()) - { // extend the parameter list - cmdParams.setSize(index+1); - } - cmdParams.set(index, item); - return success(); + cmdParams= new Vector(); + // Adds the parameter + DBCommandParam param = new DBCommandParam(this, type, value); + if (cmdParams.add(param)==false) + return null; // unknown error + // Creates a Parameter expression + return param; } /** * Adds an command parameter which will be used in a prepared statement. - * The command parameter returned may be used to alter the value. - * + * The initial value of the command parameter is null but can be modified using the setValue method. + * + * @param colExpr the column expression for which to create the parameter * @param value the initial parameter value * * @return the command parameter object */ - public DBCommandParam addCmdParam(Object value) + public final DBCommandParam addCmdParam(DBColumnExpr colExpr, Object value) { - if (cmdParams==null) - cmdParams= new Vector(); - // Adds the parameter - int index = cmdParams.size(); - if (cmdParams.add(value)==false) - return null; // unknown error - // Creates a Parameter expression - return new DBCommandParam(this, index); + return addCmdParam(colExpr.getDataType(), value); + } + + /** + * Adds an command parameter which will be used in a prepared statement. + * The initial value of the command parameter is null but can be modified using the setValue method. + * + * @param colExpr the column expression for which to create the parameter + * + * @return the command parameter object + */ + public final DBCommandParam addCmdParam(DBColumnExpr colExpr) + { + return addCmdParam(colExpr.getDataType(), null); + } + + /** + * Adds an command parameter which will be used in a prepared statement. + * The initial value of the command parameter is null but can be modified using the setValue method. + * + * @param type the data type of the parameter + * + * @return the command parameter object + */ + public final DBCommandParam addCmdParam(DataType type) + { + return addCmdParam(type, null); } /** @@ -358,7 +406,7 @@ public abstract class DBCommand extends */ public final DBCommandParam addCmdParam() { - return addCmdParam(null); + return addCmdParam(DataType.UNKNOWN, null); } /** @@ -622,8 +670,9 @@ public abstract class DBCommand extends } @Override - public boolean getSelect(StringBuilder buf) + public synchronized boolean getSelect(StringBuilder buf) { + resetParamUsage(); if (select == null) return error(Errors.ObjectNotValid, getClass().getName()); // invalid! // Prepares statement @@ -834,12 +883,16 @@ public abstract class DBCommand extends * @return the list of parameter values for a prepared statement */ @Override - public Object[] getCmdParams() + public Object[] getCmdParamValues() { - if (cmdParams==null) + if (cmdParams==null || cmdParams.size()==0) return null; // return Params - return cmdParams.toArray(); + Object[] values = new Object[cmdParams.size()]; + for (int i=0; i