Hi Patrick, The SQLServer specific stuff in RowImpl dealing with null values was already there in the code. I did not add or change that.
The change I made was to delegate to DBDictionary to generate the syntax of column names in UPDATE WHERE clause. When dealing with DB Generated values such as version column, different db vendors have special keywords or functions to do comparision of the these db generated columns. For example, a normal column predicate would be <col_name> = ? but for a dbgenerated column name the syntax might be ROW CHANGE TIMESTAMP FOR <table name> = ? On 7/9/07, Patrick Linskey <[EMAIL PROTECTED]> wrote:
Some questions: 1. What is a platform-specific where column? 2. It's a bit disconcerting to see SQLServer-specific stuff in RowImpl -- what are you trying to accomplish there? Maybe we can put that logic into DBDictionary somehow. I think it's valuable to isolate all of the database-specific craziness into DBDictionary, rather than spreading it about. -Patrick On 7/9/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: > Author: wisneskid > Date: Mon Jul 9 19:28:11 2007 > New Revision: 554803 > > URL: http://svn.apache.org/viewvc?view=rev&rev=554803 > Log: > OPENJPA-266, extensibility for platform specific version column > Passed TCK with Derby > > Modified: > openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java > openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/RowImpl.java > > Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java > URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?view=diff&rev=554803&r1=554802&r2=554803 > ============================================================================== > --- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java (original) > +++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java Mon Jul 9 19:28:11 2007 > @@ -3839,4 +3839,14 @@ > this.bytes = bytes; > } > } > + > + /** > + * Return version column name > + * @param column > + * @param tableAlias : this is needed for platform specific version column > + * @return > + */ > + public String getVersionColumn(Column column, String tableAlias) { > + return column.toString(); > + } > } > > Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/RowImpl.java > URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/RowImpl.java?view=diff&rev=554803&r1=554802&r2=554803 > ============================================================================== > --- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/RowImpl.java (original) > +++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/RowImpl.java Mon Jul 9 19:28:11 2007 > @@ -20,6 +20,7 @@ > > import java.io.InputStream; > import java.io.Reader; > +import java.lang.reflect.Method; > import java.math.BigDecimal; > import java.math.BigInteger; > import java.sql.Array; > @@ -756,7 +757,7 @@ > hasVal = true; > } > > - appendWhere(buf); > + appendWhere(buf, dict); > return buf.toString(); > } > > @@ -797,14 +798,14 @@ > StringBuffer buf = new StringBuffer(); > buf.append("DELETE FROM "). > append(dict.getFullName(getTable(), false)); > - appendWhere(buf); > + appendWhere(buf, dict); > return buf.toString(); > } > > /** > * Appends the where clause onto the given sql buffer. > */ > - private void appendWhere(StringBuffer buf) { > + private void appendWhere(StringBuffer buf, DBDictionary dict) { > boolean hasWhere = false; > for (int i = 0; i < _cols.length; i++) { > if (_vals[getWhereIndex(_cols[i])] == null) > @@ -815,9 +816,13 @@ > else > buf.append(" AND "); > > + // Get platform specific version column name > + if (_cols[i].getVersionStrategy() != null) > + buf.append(dict.getVersionColumn(_cols[i], _cols[i] > + .getTableName())).append(" = ?"); > // sqlserver seems to have problems using null parameters in the > // where clause > - if (_vals[getWhereIndex(_cols[i])] == NULL) > + else if (_vals[getWhereIndex(_cols[i])] == NULL) > buf.append(_cols[i]).append(" IS NULL"); > else if (_types[i] == RAW) > buf.append(_cols[i]).append(" = ").append(_vals[i]); > > > -- Patrick Linskey 202 669 5907
