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

Reply via email to