openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Craig L Russell <Craig.Russ...@Sun.COM>
Subject Re: svn commit: r525252 - in /incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql: AbstractDB2Dictionary.java DB2Dictionary.java
Date Tue, 03 Apr 2007 20:03:08 GMT
Never mind. I fixed it. I guess we still need to decide whether the  
change goes in, but meantime it should compile...

Craig

On Apr 3, 2007, at 12:58 PM, Ritika Maheshwari wrote:

> yes will do that
>
> ritika
>
>
> On 4/3/07, Craig L Russell <Craig.Russell@sun.com> wrote:
>>
>> Hi David,
>>
>> The DB2Dictionary class doesn't compile with 1.4 due to autoboxing.
>> Can you please fix this?
>>
>> Craig
>>
>>     public String getForUpdateClause(JDBCFetchConfiguration fetch,
>> boolean forUpdate) {
>>         String isolationLevel = null;
>>         Boolean updateClause = null;
>>         DatabaseMetaData metaData = null;
>>         StringBuffer forUpdateString = new StringBuffer();
>>         try {
>>             // Determine the update clause/isolationLevel the hint
>>             // overrides the persistence.xml value
>>             if (fetch != null && fetch.getHint
>> ("openjpa.hint.updateClause")
>>                 !=null )
>>                 updateClause = (Boolean)fetch.
>>                 getHint("openjpa.hint.updateClause");
>>             else
>>                 updateClause = forUpdate;
>> <=========================================== here
>>             if (fetch != null &&fetch.getHint
>> ("openjpa.hint.isolationLevel")
>>                 !=null )
>>                 isolationLevel = (String)fetch.
>>                 getHint("openjpa.hint.isolationLevel");
>>             else
>>                 isolationLevel = conf.getTransactionIsolation();
>>             if (updateClause == false)
>> <=========================================== here
>>                 //This sql is not for update so add FOR Read Only
>> clause
>>                 forUpdateString.append(" ").append(forReadOnlyClause)
>>                 .append(" ");
>>             else if (updateClause == true)
>> { <=========================================== here
>>
>>
>> On Apr 3, 2007, at 12:35 PM, wisneskid@apache.org wrote:
>>
>> > Author: wisneskid
>> > Date: Tue Apr  3 12:34:59 2007
>> > New Revision: 525252
>> >
>> > URL: http://svn.apache.org/viewvc?view=rev&rev=525252
>> > Log:
>> > changes for JIRA OPENJPA-182
>> >
>> > Modified:
>> >     incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/
>> > openjpa/jdbc/sql/AbstractDB2Dictionary.java
>> >     incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/
>> > openjpa/jdbc/sql/DB2Dictionary.java
>> >
>> > Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/
>> > apache/openjpa/jdbc/sql/AbstractDB2Dictionary.java
>> > URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-
>> > jdbc/src/main/java/org/apache/openjpa/jdbc/sql/
>> > AbstractDB2Dictionary.java?view=diff&rev=525252&r1=525251&r2=525252
>> >  
>> ===================================================================== 
>> =
>> > ========
>> > --- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/
>> > openjpa/jdbc/sql/AbstractDB2Dictionary.java (original)
>> > +++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/
>> > openjpa/jdbc/sql/AbstractDB2Dictionary.java Tue Apr  3 12:34:59  
>> 2007
>> > @@ -52,7 +52,7 @@
>> >          supportsLockingWithOrderClause = false;
>> >          supportsLockingWithOuterJoin = false;
>> >          supportsLockingWithInnerJoin = false;
>> > -        supportsLockingWithSelectRange = false;
>> > +        supportsLockingWithSelectRange = true;
>> >
>> >          requiresAutoCommitForMetaData = true;
>> >          requiresAliasForSubselect = true;
>> >
>> > Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/
>> > apache/openjpa/jdbc/sql/DB2Dictionary.java
>> > URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-
>> > jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java?
>> > view=diff&rev=525252&r1=525251&r2=525252
>> >  
>> ===================================================================== 
>> =
>> > ========
>> > --- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/
>> > openjpa/jdbc/sql/DB2Dictionary.java (original)
>> > +++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/
>> > openjpa/jdbc/sql/DB2Dictionary.java Tue Apr  3 12:34:59 2007
>> > @@ -15,13 +15,15 @@
>> >   */
>> >  package org.apache.openjpa.jdbc.sql;
>> >
>> > +import java.lang.reflect.Method;
>> >  import java.sql.Connection;
>> >  import java.sql.DatabaseMetaData;
>> >  import java.sql.SQLException;
>> >  import java.util.Arrays;
>> > -
>> > +import java.util.StringTokenizer;
>> >  import org.apache.openjpa.jdbc.kernel.JDBCFetchConfiguration;
>> >  import org.apache.openjpa.jdbc.schema.Sequence;
>> > +import org.apache.openjpa.lib.log.Log;
>> >
>> >  /**
>> >   * Dictionary for IBM DB2 database.
>> > @@ -31,7 +33,18 @@
>> >
>> >      public String optimizeClause = "optimize for";
>> >      public String rowClause = "row";
>> > -
>> > +    private int db2ServerType = 0;
>> > +    private static final int  db2ISeriesV5R3AndEarlier = 1;
>> > +    private static final int db2UDBV81OrEarlier = 2;
>> > +    private static final int db2ZOSV8x = 3;
>> > +    private static final int db2UDBV82AndLater = 4;
>> > +    private static final int  db2ISeriesV5R4AndLater = 5;
>> > +     private static final String  forUpdateOfClause="FOR UPDATE  
>> OF";
>> > +    private static final String  withRSClause="WITH RS";
>> > +    private static final String  withRRClause="WITH RR";
>> > +    private static final String  useKeepUpdateLockClause= "USE AND
>> > KEEP UPDATE LOCKS";
>> > +    private static final String  useKeepExclusiveLockClause="USE
>> > AND KEEP EXCLUSIVE LOCKS";
>> > +    private static final String  forReadOnlyClause = "FOR READ  
>> ONLY";
>> >      public DB2Dictionary() {
>> >          platform = "DB2";
>> >          validationSQL = "SELECT DISTINCT(CURRENT TIMESTAMP) FROM "
>> > @@ -170,6 +183,18 @@
>> >       if (isJDBC3(metaData)) {
>> >                       int maj = metaData.getDatabaseMajorVersion();
>> >               int min = metaData.getDatabaseMinorVersion();
>> > +
>> > +             // Determine the type of DB2 database
>> > +             if (isDB2ISeriesV5R3AndEarlier(metaData))
>> > +                 db2ServerType =db2ISeriesV5R3AndEarlier;
>> > +             else if (isDB2UDBV81OrEarlier(metaData,maj,min))
>> > +                 db2ServerType =db2UDBV81OrEarlier;
>> > +             else if (isDB2ZOSV8x(metaData,maj))
>> > +                 db2ServerType =db2ZOSV8x;
>> > +             else if (isDB2UDBV82AndLater(metaData,maj,min))
>> > +                 db2ServerType=db2UDBV82AndLater;
>> > +             else if (isDB2ISeriesV5R4AndLater(metaData))
>> > +                 db2ServerType=db2ISeriesV5R4AndLater;
>> >
>> >               if (maj >= 9 || (maj == 8 && min >= 2)) {
>> >                       supportsLockingWithMultipleTables = true;
>> > @@ -198,13 +223,221 @@
>> >          }
>> >      }
>> >
>> > +    /** Get the update clause for the query based on the
>> > +     * updateClause and isolationLevel hints
>> > +     */
>> > +    public String getForUpdateClause(JDBCFetchConfiguration fetch,
>> > boolean forUpdate) {
>> > +        String isolationLevel = null;
>> > +        Boolean updateClause = null;
>> > +        DatabaseMetaData metaData = null;
>> > +        StringBuffer forUpdateString = new StringBuffer();
>> > +        try {
>> > +            // Determine the update clause/isolationLevel the hint
>> > +            // overrides the persistence.xml value
>> > +            if (fetch != null && fetch.getHint
>> > ("openjpa.hint.updateClause")
>> > +                !=null )
>> > +                updateClause = (Boolean)fetch.
>> > +                getHint("openjpa.hint.updateClause");
>> > +            else
>> > +                updateClause = forUpdate;
>> > +            if (fetch != null &&fetch.getHint
>> > ("openjpa.hint.isolationLevel")
>> > +                !=null )
>> > +                isolationLevel = (String)fetch.
>> > +                getHint("openjpa.hint.isolationLevel");
>> > +            else
>> > +                isolationLevel = conf.getTransactionIsolation();
>> > +            if (updateClause == false)
>> > +                //This sql is not for update so add FOR Read Only
>> > clause
>> > +                forUpdateString.append(" ").append 
>> (forReadOnlyClause)
>> > +                .append(" ");
>> > +            else if (updateClause == true){
>> > +
>> > +                switch(db2ServerType){
>> > +                case db2ISeriesV5R3AndEarlier:
>> > +                case db2UDBV81OrEarlier:
>> > +                    if (isolationLevel.equals("read-uncommitted"))
>> > +                        forUpdateString.append(" ").append
>> > (withRSClause)
>> > +                        .append(" ").append
>> > (forUpdateOfClause).append(" ");
>> > +                    else
>> > +                        forUpdateString.append(" ").append
>> > (forUpdateOfClause)
>> > +                        .append(" ");
>> > +                    break;
>> > +                case db2ZOSV8x:
>> > +                case db2UDBV82AndLater:
>> > +                    if (isolationLevel.equals("serializable"))
>> > +                        forUpdateString.append(" ").append
>> > (withRRClause)
>> > +                        .append(" ").append 
>> (useKeepUpdateLockClause)
>> > +                        .append(" ");
>> > +                    else
>> > +                        forUpdateString.append(" ").append
>> > (withRSClause)
>> > +                        .append(" ").append 
>> (useKeepUpdateLockClause)
>> > +                        .append(" ");
>> > +                    break;
>> > +                case db2ISeriesV5R4AndLater:
>> > +                    if (isolationLevel.equals("serializable"))
>> > +                        forUpdateString.append(" ").append
>> > (withRRClause)
>> > +                        .append(" ").append
>> > (useKeepExclusiveLockClause)
>> > +                        .append(" ");
>> > +                    else
>> > +                        forUpdateString.append(" ").append
>> > (withRSClause)
>> > +                        .append(" ").append
>> > (useKeepExclusiveLockClause)
>> > +                        .append(" ");
>> > +                }
>> > +            }
>> > +        }
>> > +        catch (Exception e) {
>> > +            if (log.isTraceEnabled())
>> > +                log.error(e.toString(),e);
>> > +        }
>> > +        return forUpdateString.toString();
>> > +    }
>> > +
>> > +
>> > +    /** Override the DBDictionary toSelect to call
>> > getOptimizeClause and append
>> > +     *   to the select string
>> > +     */
>> > +    public SQLBuffer toSelect(SQLBuffer selects,
>> > JDBCFetchConfiguration fetch,
>> > +       SQLBuffer from, SQLBuffer where, SQLBuffer group,
>> > +       SQLBuffer having, SQLBuffer order,
>> > +       boolean distinct, boolean forUpdate, long start, long end,
>> > +       int expectedResultCount) {
>> > +       String forUpdateString = getForUpdateClause 
>> (fetch,forUpdate);
>> > +       SQLBuffer selString = toOperation(getSelectOperation 
>> (fetch),
>> > +            selects, from, where,
>> > +            group, having, order, distinct,
>> > +            forUpdate, start, end,forUpdateString);
>> > +        return selString;
>> > +    }
>> > +
>> > +    public boolean isDB2UDBV82AndLater(DatabaseMetaData metadata,
>> > int maj,
>> > +        int min) throws SQLException {
>> > +        boolean match = false;
>> > +        if (metadata.getDatabaseProductVersion().indexOf 
>> ("SQL") != -1
>> > +            && ((maj ==8 && min >=2) ||(maj >=8)))
>> > +            match = true;
>> > +        return match;
>> > +    }
>> > +
>> > +    public boolean isDB2ZOSV8x(DatabaseMetaData metadata,int maj)
>> > +       throws SQLException {
>> > +       boolean match = false;
>> > +       if (metadata.getDatabaseProductVersion().indexOf("DSN") ! 
>> = -1
>> > +           && maj ==8 )
>> > +           match = true;
>> > +        return match;
>> > +    }
>> > +
>> > +    public boolean isDB2ISeriesV5R3AndEarlier(DatabaseMetaData
>> > metadata)
>> > +       throws SQLException {
>> > +       boolean match = false;
>> > +       if (metadata.getDatabaseProductVersion().indexOf("AS") ! 
>> = -1
>> > +           && generateVersionNumber
>> > (metadata.getDatabaseProductVersion())
>> > +           <= 530 )
>> > +           match = true;
>> > +       return match;
>> > +    }
>> > +
>> > +    public boolean isDB2ISeriesV5R4AndLater(DatabaseMetaData
>> > metadata)
>> > +       throws SQLException {
>> > +       boolean match = false;
>> > +       if (metadata.getDatabaseProductVersion().indexOf("AS") ! 
>> = -1
>> > +           && generateVersionNumber
>> > (metadata.getDatabaseProductVersion())
>> > +           >= 540 )
>> > +           match = true;
>> > +      return match;
>> > +    }
>> > +
>> > +    public boolean isDB2UDBV81OrEarlier(DatabaseMetaData
>> > metadata,int maj,
>> > +        int min) throws SQLException {
>> > +        boolean match = false;
>> > +        if (metadata.getDatabaseProductVersion().indexOf("SQL") !=
>> > -1 &&
>> > +           ((maj ==8 && min <=1)|| maj <8 ))
>> > +            match = true;
>> > +        return match;
>> > +    }
>> > +
>> > +    /** Get the version number for the ISeries
>> > +     */
>> > +    protected  int generateVersionNumber(String versionString) {
>> > +        String s = versionString.substring(versionString.indexOf
>> > ('V'));
>> > +        s = s.toUpperCase();
>> > +        int i = -1;
>> > +        StringTokenizer stringtokenizer = new StringTokenizer(s,
>> > "VRM", false);
>> > +        if (stringtokenizer.countTokens() == 3)
>> > +        {
>> > +            String s1 = stringtokenizer.nextToken();
>> > +            s1 = s1 + stringtokenizer.nextToken();
>> > +            s1 = s1 + stringtokenizer.nextToken();
>> > +            i = Integer.parseInt(s1);
>> > +        }
>> > +        return i;
>> > +    }
>> > +
>> > +
>> > +    /**
>> > +     * Override the toOperationMethod of DBDictionary to pass the
>> > +     * forUpdateString.
>> > +     */
>> > +    protected SQLBuffer toOperation(String op, SQLBuffer selects,
>> > +        SQLBuffer from, SQLBuffer where, SQLBuffer group,
>> > SQLBuffer having,
>> > +        SQLBuffer order, boolean distinct, boolean forUpdate, long
>> > start,
>> > +        long end,String forUpdateString) {
>> > +        SQLBuffer buf = new SQLBuffer(this);
>> > +        buf.append(op);
>> > +        boolean range = start != 0 || end != Long.MAX_VALUE;
>> > +        if (range && rangePosition == RANGE_PRE_DISTINCT)
>> > +            appendSelectRange(buf, start, end);
>> > +        if (distinct)
>> > +            buf.append(" DISTINCT");
>> > +        if (range && rangePosition == RANGE_POST_DISTINCT)
>> > +            appendSelectRange(buf, start, end);
>> > +        buf.append(" ").append(selects).append(" FROM ").append
>> > (from);
>> > +
>> > +        if (where != null && !where.isEmpty())
>> > +            buf.append(" WHERE ").append(where);
>> > +        if (group != null && !group.isEmpty())
>> > +            buf.append(" GROUP BY ").append(group);
>> > +        if (having != null && !having.isEmpty()) {
>> > +            assertSupport(supportsHaving, "SupportsHaving");
>> > +            buf.append(" HAVING ").append(having);
>> > +        }
>> > +        if (order != null && !order.isEmpty())
>> > +            buf.append(" ORDER BY ").append(order);
>> > +        if (range && rangePosition == RANGE_POST_SELECT)
>> > +            appendSelectRange(buf, start, end);
>> > +
>> > +        if (!simulateLocking ) {
>> > +            assertSupport(supportsSelectForUpdate,
>> > "SupportsSelectForUpdate");
>> > +            buf.append(" ").append(forUpdateString);
>> > +        }
>> > +        if (range && rangePosition == RANGE_POST_LOCK)
>> > +            appendSelectRange(buf, start, end);
>> > +        return buf;
>> > +    }
>> > +
>> >      public SQLBuffer toSelect(Select sel, boolean forUpdate,
>> >          JDBCFetchConfiguration fetch) {
>> > -        SQLBuffer buf = super.toSelect(sel, forUpdate, fetch);
>> > +        sel.addJoinClassConditions();
>> > +        boolean update = forUpdate && sel.getFromSelect() == null;
>> > +        SQLBuffer select = getSelects(sel, false, update);
>> > +        SQLBuffer ordering = null;
>> > +        if (!sel.isAggregate() || sel.getGrouping() != null)
>> > +            ordering = sel.getOrdering();
>> > +        SQLBuffer from;
>> > +        if (sel.getFromSelect() != null)
>> > +            from = getFromSelect(sel, forUpdate);
>> > +        else
>> > +            from = getFrom(sel, update);
>> > +        SQLBuffer where = getWhere(sel, update);
>> > +        String forUpdateString = getForUpdateClause 
>> (fetch,forUpdate);
>> > +        SQLBuffer buf = toOperation(getSelectOperation(fetch),
>> > select,
>> > +            from, where,sel.getGrouping(), sel.getHaving(),
>> > ordering,
>> > +            sel.isDistinct(), forUpdate, sel.getStartIndex(),
>> > +            sel.getEndIndex(),forUpdateString);
>> >          if (sel.getExpectedResultCount() > 0)
>> >              buf.append(" ").append(optimizeClause).append(" ").
>> > -                append(String.valueOf(sel.getExpectedResultCount 
>> ())).
>> > -                append(" ").append(rowClause);
>> > +            append(String.valueOf(sel.getExpectedResultCount())).
>> > +            append(" ").append(rowClause);
>> >          return buf;
>> >      }
>> >  }
>> >
>> >
>>
>> Craig Russell
>> Architect, Sun Java Enterprise System http://java.sun.com/products/ 
>> jdo
>> 408 276-5638 mailto:Craig.Russell@sun.com
>> P.S. A good JDO? O, Gasp!
>>
>>
>>

Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:Craig.Russell@sun.com
P.S. A good JDO? O, Gasp!


Mime
View raw message