You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by Patrick Linskey <pl...@bea.com> on 2007/02/22 02:12:47 UTC

RE: svn commit: r510336 - /incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java

I don't get it..... wasn't there already an
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.jav
a?

-Patrick

-- 
Patrick Linskey
BEA Systems, Inc. 

_______________________________________________________________________
Notice:  This email message, together with any attachments, may contain
information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
entities,  that may be confidential,  proprietary,  copyrighted  and/or
legally privileged, and is intended solely for the use of the individual
or entity named in this message. If you are not the intended recipient,
and have received this message in error, please immediately return this
by email and then delete it. 

> -----Original Message-----
> From: wisneskid@apache.org [mailto:wisneskid@apache.org] 
> Sent: Wednesday, February 21, 2007 5:03 PM
> To: open-jpa-commits@incubator.apache.org
> Subject: svn commit: r510336 - 
> /incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache
/openjpa/jdbc/sql/DB2Dictionary.java
> 
> Author: wisneskid
> Date: Wed Feb 21 17:03:06 2007
> New Revision: 510336
> 
> URL: http://svn.apache.org/viewvc?view=rev&rev=510336
> Log:
> DB2 Optimize for clause enhancement
> 
> Added:
>     
> incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/
openjpa/jdbc/sql/DB2Dictionary.java
> 
> Added: 
> 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-j
dbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java?>
view=auto&rev=510336
> ==============================================================
> ================
> --- 
> incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/
openjpa/jdbc/sql/DB2Dictionary.java (added)
> +++ 
> incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/
openjpa/jdbc/sql/DB2Dictionary.java Wed Feb 21 17:03:06 2007
> @@ -0,0 +1,210 @@
> +/*
> + * Copyright 2006 The Apache Software Foundation.
> + *
> + * Licensed 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.openjpa.jdbc.sql;
> +
> +import java.sql.Connection;
> +import java.sql.DatabaseMetaData;
> +import java.sql.SQLException;
> +import java.util.Arrays;
> +
> +import org.apache.openjpa.jdbc.kernel.JDBCFetchConfiguration;
> +import org.apache.openjpa.jdbc.schema.Sequence;
> +
> +/**
> + * Dictionary for IBM DB2 database.
> + */
> +public class DB2Dictionary
> +    extends AbstractDB2Dictionary {
> +
> +    public DB2Dictionary() {
> +        platform = "DB2";
> +        validationSQL = "SELECT DISTINCT(CURRENT TIMESTAMP) FROM "
> +            + "SYSIBM.SYSTABLES";
> +        supportsSelectEndIndex = true;
> +        optimizeClause ="optimize for";
> +        nextSequenceQuery = "VALUES NEXTVAL FOR {0}";
> +
> +        sequenceSQL = "SELECT SEQSCHEMA AS SEQUENCE_SCHEMA, "
> +            + "SEQNAME AS SEQUENCE_NAME FROM SYSCAT.SEQUENCES";
> +        sequenceSchemaSQL = "SEQSCHEMA = ?";
> +        sequenceNameSQL = "SEQNAME = ?";
> +        characterColumnSize = 254;
> +
> +        binaryTypeName = "BLOB(1M)";
> +        longVarbinaryTypeName = "BLOB(1M)";
> +        varbinaryTypeName = "BLOB(1M)";
> +        clobTypeName = "CLOB(1M)";
> +        longVarcharTypeName = "LONG VARCHAR";
> +
> +        fixedSizeTypeNameSet.addAll(Arrays.asList(new String[]{
> +            "LONG VARCHAR FOR BIT DATA", "LONG VARCHAR", 
> "LONG VARGRAPHIC",
> +        }));
> +
> +        maxConstraintNameLength = 18;
> +        maxIndexNameLength = 18;
> +        maxColumnNameLength = 30;
> +        supportsDeferredConstraints = false;
> +        supportsDefaultDeleteAction = false;
> +        supportsAlterTableWithDropColumn = false;
> +
> +        supportsNullTableForGetColumns = false;
> +
> +        reservedWordSet.addAll(Arrays.asList(new String[]{
> +            "AFTER", "ALIAS", "ALLOW", "APPLICATION", 
> "ASSOCIATE", "ASUTIME",
> +            "AUDIT", "AUX", "AUXILIARY", "BEFORE", "BINARY", 
> "BUFFERPOOL",
> +            "CACHE", "CALL", "CALLED", "CAPTURE", 
> "CARDINALITY", "CCSID",
> +            "CLUSTER", "COLLECTION", "COLLID", "COMMENT", "CONCAT",
> +            "CONDITION", "CONTAINS", "COUNT_BIG", "CURRENT_LC_CTYPE",
> +            "CURRENT_PATH", "CURRENT_SERVER", 
> "CURRENT_TIMEZONE", "CYCLE",
> +            "DATA", "DATABASE", "DAYS", "DB2GENERAL", 
> "DB2GENRL", "DB2SQL",
> +            "DBINFO", "DEFAULTS", "DEFINITION", 
> "DETERMINISTIC", "DISALLOW",
> +            "DO", "DSNHATTR", "DSSIZE", "DYNAMIC", "EACH", 
> "EDITPROC", "ELSEIF",
> +            "ENCODING", "END-EXEC1", "ERASE", "EXCLUDING", 
> "EXIT", "FENCED",
> +            "FIELDPROC", "FILE", "FINAL", "FREE", 
> "FUNCTION", "GENERAL",
> +            "GENERATED", "GRAPHIC", "HANDLER", "HOLD", "HOURS", "IF",
> +            "INCLUDING", "INCREMENT", "INDEX", "INHERIT", 
> "INOUT", "INTEGRITY",
> +            "ISOBID", "ITERATE", "JAR", "JAVA", "LABEL", 
> "LC_CTYPE", "LEAVE",
> +            "LINKTYPE", "LOCALE", "LOCATOR", "LOCATORS", 
> "LOCK", "LOCKMAX",
> +            "LOCKSIZE", "LONG", "LOOP", "MAXVALUE", "MICROSECOND",
> +            "MICROSECONDS", "MINUTES", "MINVALUE", "MODE", 
> "MODIFIES", "MONTHS",
> +            "NEW", "NEW_TABLE", "NOCACHE", "NOCYCLE", 
> "NODENAME", "NODENUMBER",
> +            "NOMAXVALUE", "NOMINVALUE", "NOORDER", "NULLS", 
> "NUMPARTS", "OBID",
> +            "OLD", "OLD_TABLE", "OPTIMIZATION", "OPTIMIZE", 
> "OUT", "OVERRIDING",
> +            "PACKAGE", "PARAMETER", "PART", "PARTITION", 
> "PATH", "PIECESIZE",
> +            "PLAN", "PRIQTY", "PROGRAM", "PSID", "QUERYNO", 
> "READS", "RECOVERY",
> +            "REFERENCING", "RELEASE", "RENAME", "REPEAT", 
> "RESET", "RESIGNAL",
> +            "RESTART", "RESULT", "RESULT_SET_LOCATOR", 
> "RETURN", "RETURNS",
> +            "ROUTINE", "ROW", "RRN", "RUN", "SAVEPOINT", 
> "SCRATCHPAD",
> +            "SECONDS", "SECQTY", "SECURITY", "SENSITIVE", 
> "SIGNAL", "SIMPLE",
> +            "SOURCE", "SPECIFIC", "SQLID", "STANDARD", 
> "START", "STATIC",
> +            "STAY", "STOGROUP", "STORES", "STYLE", 
> "SUBPAGES", "SYNONYM",
> +            "SYSFUN", "SYSIBM", "SYSPROC", "SYSTEM", 
> "TABLESPACE", "TRIGGER",
> +            "TYPE", "UNDO", "UNTIL", "VALIDPROC", 
> "VARIABLE", "VARIANT", "VCAT",
> +            "VOLUMES", "WHILE", "WLM", "YEARS",
> +        }));
> +    }
> +
> +    public boolean supportsRandomAccessResultSet(Select sel,
> +        boolean forUpdate) {
> +        return !forUpdate
> +            && super.supportsRandomAccessResultSet(sel, forUpdate);
> +    }
> +
> +    protected void appendSelectRange(SQLBuffer buf, long 
> start, long end) {
> +        // appends the literal range string, since DB2 is 
> unable to handle
> +        // a bound parameter for it
> +        buf.append(" FETCH FIRST ").append(Long.toString(end)).
> +            append(" ROWS ONLY");
> +    }
> +
> +    public String[] getCreateSequenceSQL(Sequence seq) {
> +        String[] sql = super.getCreateSequenceSQL(seq);
> +        if (seq.getAllocate() > 1)
> +            sql[0] += " CACHE " + seq.getAllocate();
> +        return sql;
> +    }
> +
> +    protected String getSequencesSQL(String schemaName, 
> String sequenceName) {
> +        StringBuffer buf = new StringBuffer();
> +        buf.append(sequenceSQL);
> +        if (schemaName != null || sequenceName != null)
> +            buf.append(" WHERE ");
> +        if (schemaName != null) {
> +            buf.append(sequenceSchemaSQL);
> +            if (sequenceName != null)
> +                buf.append(" AND ");
> +        }
> +        if (sequenceName != null)
> +            buf.append(sequenceNameSQL);
> +        return buf.toString();
> +    }
> +
> +    public Connection decorate(Connection conn)
> +        throws SQLException {
> +        // some versions of the DB2 driver seem to default to
> +        // READ_UNCOMMITTED, which will prevent locking from working
> +        // (multiple SELECT ... FOR UPDATE statements are allowed on
> +        // the same instance); if we have not overridden the
> +        // transaction isolation in the configuration, default to
> +        // TRANSACTION_READ_COMMITTED
> +        conn = super.decorate(conn);
> +
> +        if (conf.getTransactionIsolationConstant() == -1
> +            && conn.getTransactionIsolation() < 
> conn.TRANSACTION_READ_COMMITTED)
> +            
> conn.setTransactionIsolation(conn.TRANSACTION_READ_COMMITTED);
> +
> +        return conn;
> +    }
> +
> +    private boolean isJDBC3(DatabaseMetaData meta) {
> +        try {
> +            // JDBC3-only method, so it might throw a 
> AbstractMethodError
> +            return meta.getJDBCMajorVersion() >= 3;
> +        } catch (Throwable t) {
> +            return false;
> +        }
> +    }
> +
> +    public void connectedConfiguration(Connection conn) 
> throws SQLException {
> +    	super.connectedConfiguration(conn);
> +
> +    	DatabaseMetaData metaData = conn.getMetaData();
> +    	if (isJDBC3(metaData)) {
> +			int maj = metaData.getDatabaseMajorVersion();
> +	    	int min = metaData.getDatabaseMinorVersion();
> +
> +	    	if (maj >= 9 || (maj == 8 && min >= 2)) {
> +	    		supportsLockingWithMultipleTables = true;
> +	    		supportsLockingWithInnerJoin = true;
> +	    		supportsLockingWithOuterJoin = true;
> +	    		forUpdateClause = "WITH RR USE AND KEEP 
> UPDATE LOCKS";
> +	    	}
> +
> +            if 
> (metaData.getDatabaseProductVersion().indexOf("DSN") != -1) {
> +                // DB2 Z/OS
> +                characterColumnSize = 255;
> +                lastGeneratedKeyQuery = "SELECT 
> IDENTITY_VAL_LOCAL() FROM "
> +                    + "SYSIBM.SYSDUMMY1";
> +                nextSequenceQuery = "SELECT NEXTVAL FOR {0} FROM "
> +                    + "SYSIBM.SYSDUMMY1";
> +                sequenceSQL = "SELECT SCHEMA AS SEQUENCE_SCHEMA, "
> +                    + "NAME AS SEQUENCE_NAME FROM 
> SYSIBM.SYSSEQUENCES";
> +                sequenceSchemaSQL = "SCHEMA = ?";
> +                sequenceNameSQL = "NAME = ?";
> +                if (maj == 8) {
> +                    // DB2 Z/OS Version 8: no bigint 
> support, hence map Java
> +                    // long to decimal
> +                    bigintTypeName = "DECIMAL(31,0)";
> +                }
> +            }
> +    	}
> +    }
> +
> +    public String getOptimizeClause(JDBCFetchConfiguration fetch) {
> +        Integer rows = null;
> +        StringBuffer optimizeString = new StringBuffer();
> +        if (fetch.getHint("openjpa.hint.optimize") != null) {
> +            rows = (Integer)fetch.getHint("openjpa.hint.optimize");
> +            optimizeString.append(" 
> ").append(optimizeClause).append(" ")
> +                .append(rows).append(" ");
> +            if (rows.intValue() > 1)
> +                optimizeString.append(rowsClause).append(" ");
> +            else
> +                optimizeString.append(rowClause).append(" ");
> +        }        
> +        return optimizeString.toString();    
> +    }
> +}
> 
> 
> 

Re: svn commit: r510336 - /incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java

Posted by Kevin Sutter <kw...@gmail.com>.
Need some help...

I can't seem to figure out how to restore the SVN revision history for the
DB2Dictionary.java file.  I can revert the contents of the file, but I can't
seem to recover the svn history.  Anybody know how to cleanly revert these
two svn commits so that we're basically back to revision 509885 (keeping
Abe's latest changes in revision 510638)?

I talked with Dave and I guess he was just trying to back out the previous
changes that were committed to DB2Dictionary.java.  He deleted the file
locally, re-checked out the part, and then did the commit.  I don't see any
record of a deletion in the svn repository, so I'm confused on what happened
to the history.

Any SVN experts care to guess?

Thanks,
Kevin

On 2/22/07, Kevin Sutter <kw...@gmail.com> wrote:
>
> Thanks for the confirmation of the optimization ideas.  We'll work through
> the issues and come back with another version.
>
> On 2/22/07, Patrick Linskey <pl...@bea.com> wrote:
> >
> > +1. FTR, despite Abe's and my barrage of design suggestions, I love the
> > optimization. Abe: good call on using it for ranged queries.
> >
> > -Patrick
> >
> > --
> > Patrick Linskey
> > BEA Systems, Inc.
> >
> > _______________________________________________________________________
> > Notice:  This email message, together with any attachments, may contain
> > information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
> > entities,  that may be confidential,  proprietary,  copyrighted  and/or
> > legally privileged, and is intended solely for the use of the individual
> >
> > or entity named in this message. If you are not the intended recipient,
> > and have received this message in error, please immediately return this
> > by email and then delete it.
> >
> > > -----Original Message-----
> > > From: Abe White
> > > Sent: Thursday, February 22, 2007 8:07 AM
> > > To: open-jpa-dev@incubator.apache.org
> > > Subject: Re: svn commit: r510336 -
> > > /incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache
> > /openjpa/jdbc/sql/DB2Dictionary.java
> > >
> > > > Okay, I think we need to back out these last two changes
> > > and revert
> > > > back to
> > > > revision 509885.  Dave needs to go back to the drawing board for
> > > > this "db2
> > > > optimization" change, probably create a JIRA report for
> > > this proposed
> > > > change, and use the design discussion associated with the JIRA
> > > > process to
> > > > get the proper fix in place.
> > >
> > > +1
> > > ______________________________________________________________
> > > _________
> > > Notice:  This email message, together with any attachments,
> > > may contain
> > > information  of  BEA Systems,  Inc.,  its subsidiaries  and
> > > affiliated
> > > entities,  that may be confidential,  proprietary,
> > > copyrighted  and/or
> > > legally privileged, and is intended solely for the use of the
> > > individual
> > > or entity named in this message. If you are not the intended
> > > recipient,
> > > and have received this message in error, please immediately
> > > return this
> > > by email and then delete it.
> > >
> >
>
>

Re: svn commit: r510336 - /incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java

Posted by Kevin Sutter <kw...@gmail.com>.
Thanks for the confirmation of the optimization ideas.  We'll work through
the issues and come back with another version.

On 2/22/07, Patrick Linskey <pl...@bea.com> wrote:
>
> +1. FTR, despite Abe's and my barrage of design suggestions, I love the
> optimization. Abe: good call on using it for ranged queries.
>
> -Patrick
>
> --
> Patrick Linskey
> BEA Systems, Inc.
>
> _______________________________________________________________________
> Notice:  This email message, together with any attachments, may contain
> information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
> entities,  that may be confidential,  proprietary,  copyrighted  and/or
> legally privileged, and is intended solely for the use of the individual
> or entity named in this message. If you are not the intended recipient,
> and have received this message in error, please immediately return this
> by email and then delete it.
>
> > -----Original Message-----
> > From: Abe White
> > Sent: Thursday, February 22, 2007 8:07 AM
> > To: open-jpa-dev@incubator.apache.org
> > Subject: Re: svn commit: r510336 -
> > /incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache
> /openjpa/jdbc/sql/DB2Dictionary.java
> >
> > > Okay, I think we need to back out these last two changes
> > and revert
> > > back to
> > > revision 509885.  Dave needs to go back to the drawing board for
> > > this "db2
> > > optimization" change, probably create a JIRA report for
> > this proposed
> > > change, and use the design discussion associated with the JIRA
> > > process to
> > > get the proper fix in place.
> >
> > +1
> > ______________________________________________________________
> > _________
> > Notice:  This email message, together with any attachments,
> > may contain
> > information  of  BEA Systems,  Inc.,  its subsidiaries  and
> > affiliated
> > entities,  that may be confidential,  proprietary,
> > copyrighted  and/or
> > legally privileged, and is intended solely for the use of the
> > individual
> > or entity named in this message. If you are not the intended
> > recipient,
> > and have received this message in error, please immediately
> > return this
> > by email and then delete it.
> >
>

RE: svn commit: r510336 - /incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java

Posted by Patrick Linskey <pl...@bea.com>.
+1. FTR, despite Abe's and my barrage of design suggestions, I love the
optimization. Abe: good call on using it for ranged queries.

-Patrick

-- 
Patrick Linskey
BEA Systems, Inc. 

_______________________________________________________________________
Notice:  This email message, together with any attachments, may contain
information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
entities,  that may be confidential,  proprietary,  copyrighted  and/or
legally privileged, and is intended solely for the use of the individual
or entity named in this message. If you are not the intended recipient,
and have received this message in error, please immediately return this
by email and then delete it. 

> -----Original Message-----
> From: Abe White 
> Sent: Thursday, February 22, 2007 8:07 AM
> To: open-jpa-dev@incubator.apache.org
> Subject: Re: svn commit: r510336 - 
> /incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache
/openjpa/jdbc/sql/DB2Dictionary.java
> 
> > Okay, I think we need to back out these last two changes 
> and revert  
> > back to
> > revision 509885.  Dave needs to go back to the drawing board for  
> > this "db2
> > optimization" change, probably create a JIRA report for 
> this proposed
> > change, and use the design discussion associated with the JIRA  
> > process to
> > get the proper fix in place.
> 
> +1
> ______________________________________________________________
> _________
> Notice:  This email message, together with any attachments, 
> may contain
> information  of  BEA Systems,  Inc.,  its subsidiaries  and  
> affiliated
> entities,  that may be confidential,  proprietary,  
> copyrighted  and/or
> legally privileged, and is intended solely for the use of the 
> individual
> or entity named in this message. If you are not the intended 
> recipient,
> and have received this message in error, please immediately 
> return this
> by email and then delete it.
> 

Re: svn commit: r510336 - /incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java

Posted by Abe White <aw...@bea.com>.
> Okay, I think we need to back out these last two changes and revert  
> back to
> revision 509885.  Dave needs to go back to the drawing board for  
> this "db2
> optimization" change, probably create a JIRA report for this proposed
> change, and use the design discussion associated with the JIRA  
> process to
> get the proper fix in place.

+1
_______________________________________________________________________
Notice:  This email message, together with any attachments, may contain
information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
entities,  that may be confidential,  proprietary,  copyrighted  and/or
legally privileged, and is intended solely for the use of the individual
or entity named in this message. If you are not the intended recipient,
and have received this message in error, please immediately return this
by email and then delete it.

Re: svn commit: r510336 - /incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java

Posted by Kevin Sutter <kw...@gmail.com>.
Okay, I think we need to back out these last two changes and revert back to
revision 509885.  Dave needs to go back to the drawing board for this "db2
optimization" change, probably create a JIRA report for this proposed
change, and use the design discussion associated with the JIRA process to
get the proper fix in place.

Something very strange happened with this latest commit and we lost the svn
history for the DB2Dictionary.java file.  We should still try to figure out
what happened with svn to allow this.  But, in the mean time, I think we
need to revert back to a known state.

I'll wait for some agreement (or disagreement) before doing any of the
cleanup.

Kevin

On 2/22/07, Kevin Sutter <kw...@gmail.com> wrote:
>
> Patrick,
> This is really strange.  At first, I thought this was just another case of
> the line ending character problem.  But, when I look at the svn history of
> the DB2Dictionary.java file, it's as if this latest commit is the only
> record of the file.  But, when I look at previous revisions, the file does
> exist.  It's as if, the commit operation did a replace instead of an update
> commit.  I wasn't aware that this operation was even possible.  I guess we
> need to hear from Dave as to what operation he did to accidentally cause
> this to happen.
>
> Kevin
>
> On 2/21/07, Patrick Linskey < plinskey@bea.com> wrote:
> >
> > I don't get it..... wasn't there already an
> > openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.jav
> > a?
> >
> > -Patrick
> >
> > --
> > Patrick Linskey
> > BEA Systems, Inc.
> >
> > _______________________________________________________________________
> > Notice:  This email message, together with any attachments, may contain
> > information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
> > entities,  that may be confidential,  proprietary,  copyrighted  and/or
> > legally privileged, and is intended solely for the use of the individual
> > or entity named in this message. If you are not the intended recipient,
> > and have received this message in error, please immediately return this
> > by email and then delete it.
> >
> > > -----Original Message-----
> > > From: wisneskid@apache.org [mailto: wisneskid@apache.org]
> > > Sent: Wednesday, February 21, 2007 5:03 PM
> > > To: open-jpa-commits@incubator.apache.org
> > > Subject: svn commit: r510336 -
> > > /incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache
> > /openjpa/jdbc/sql/DB2Dictionary.java
> > >
> > > Author: wisneskid
> > > Date: Wed Feb 21 17:03:06 2007
> > > New Revision: 510336
> > >
> > > URL: http://svn.apache.org/viewvc?view=rev&rev=510336
> > > Log:
> > > DB2 Optimize for clause enhancement
> > >
> > > Added:
> > >
> > > incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/
> > openjpa/jdbc/sql/DB2Dictionary.java
> > >
> > > Added:
> > > 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-j
> > dbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java?>
> > view=auto&rev=510336
> > > ==============================================================
> > > ================
> > > ---
> > > incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/
> > openjpa/jdbc/sql/DB2Dictionary.java (added)
> > > +++
> > > incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/
> > openjpa/jdbc/sql/DB2Dictionary.java Wed Feb 21 17:03:06 2007
> > > @@ -0,0 +1,210 @@
> > > +/*
> > > + * Copyright 2006 The Apache Software Foundation.
> > > + *
> > > + * Licensed 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.openjpa.jdbc.sql;
> > > +
> > > +import java.sql.Connection;
> > > +import java.sql.DatabaseMetaData;
> > > +import java.sql.SQLException;
> > > +import java.util.Arrays ;
> > > +
> > > +import org.apache.openjpa.jdbc.kernel.JDBCFetchConfiguration;
> > > +import org.apache.openjpa.jdbc.schema.Sequence;
> > > +
> > > +/**
> > > + * Dictionary for IBM DB2 database.
> > > + */
> > > +public class DB2Dictionary
> > > +    extends AbstractDB2Dictionary {
> > > +
> > > +    public DB2Dictionary() {
> > > +        platform = "DB2";
> > > +        validationSQL = "SELECT DISTINCT(CURRENT TIMESTAMP) FROM "
> > > +            + "SYSIBM.SYSTABLES";
> > > +        supportsSelectEndIndex = true;
> > > +        optimizeClause ="optimize for";
> > > +        nextSequenceQuery = "VALUES NEXTVAL FOR {0}";
> > > +
> > > +        sequenceSQL = "SELECT SEQSCHEMA AS SEQUENCE_SCHEMA, "
> > > +            + "SEQNAME AS SEQUENCE_NAME FROM SYSCAT.SEQUENCES";
> > > +        sequenceSchemaSQL = "SEQSCHEMA = ?";
> > > +        sequenceNameSQL = "SEQNAME = ?";
> > > +        characterColumnSize = 254;
> > > +
> > > +        binaryTypeName = "BLOB(1M)";
> > > +        longVarbinaryTypeName = "BLOB(1M)";
> > > +        varbinaryTypeName = "BLOB(1M)";
> > > +        clobTypeName = "CLOB(1M)";
> > > +        longVarcharTypeName = "LONG VARCHAR";
> > > +
> > > +        fixedSizeTypeNameSet.addAll (Arrays.asList(new String[]{
> > > +            "LONG VARCHAR FOR BIT DATA", "LONG VARCHAR",
> > > "LONG VARGRAPHIC",
> > > +        }));
> > > +
> > > +        maxConstraintNameLength = 18;
> > > +        maxIndexNameLength = 18;
> > > +        maxColumnNameLength = 30;
> > > +        supportsDeferredConstraints = false;
> > > +        supportsDefaultDeleteAction = false;
> > > +        supportsAlterTableWithDropColumn = false;
> > > +
> > > +        supportsNullTableForGetColumns = false;
> > > +
> > > +        reservedWordSet.addAll(Arrays.asList(new String[]{
> > > +            "AFTER", "ALIAS", "ALLOW", "APPLICATION",
> > > "ASSOCIATE", "ASUTIME",
> > > +            "AUDIT", "AUX", "AUXILIARY", "BEFORE", "BINARY",
> > > "BUFFERPOOL",
> > > +            "CACHE", "CALL", "CALLED", "CAPTURE",
> > > "CARDINALITY", "CCSID",
> > > +            "CLUSTER", "COLLECTION", "COLLID", "COMMENT", "CONCAT",
> > > +            "CONDITION", "CONTAINS", "COUNT_BIG", "CURRENT_LC_CTYPE",
> >
> > > +            "CURRENT_PATH", "CURRENT_SERVER",
> > > "CURRENT_TIMEZONE", "CYCLE",
> > > +            "DATA", "DATABASE", "DAYS", "DB2GENERAL",
> > > "DB2GENRL", "DB2SQL",
> > > +            "DBINFO", "DEFAULTS", "DEFINITION",
> > > "DETERMINISTIC", "DISALLOW",
> > > +            "DO", "DSNHATTR", "DSSIZE", "DYNAMIC", "EACH",
> > > "EDITPROC", "ELSEIF",
> > > +            "ENCODING", "END-EXEC1", "ERASE", "EXCLUDING",
> > > "EXIT", "FENCED",
> > > +            "FIELDPROC", "FILE", "FINAL", "FREE",
> > > "FUNCTION", "GENERAL",
> > > +            "GENERATED", "GRAPHIC", "HANDLER", "HOLD", "HOURS", "IF",
> > > +            "INCLUDING", "INCREMENT", "INDEX", "INHERIT",
> > > "INOUT", "INTEGRITY",
> > > +            "ISOBID", "ITERATE", "JAR", "JAVA", "LABEL",
> > > "LC_CTYPE", "LEAVE",
> > > +            "LINKTYPE", "LOCALE", "LOCATOR", "LOCATORS",
> > > "LOCK", "LOCKMAX",
> > > +            "LOCKSIZE", "LONG", "LOOP", "MAXVALUE", "MICROSECOND",
> > > +            "MICROSECONDS", "MINUTES", "MINVALUE", "MODE",
> > > "MODIFIES", "MONTHS",
> > > +            "NEW", "NEW_TABLE", "NOCACHE", "NOCYCLE",
> > > "NODENAME", "NODENUMBER",
> > > +            "NOMAXVALUE", "NOMINVALUE", "NOORDER", "NULLS",
> > > "NUMPARTS", "OBID",
> > > +            "OLD", "OLD_TABLE", "OPTIMIZATION", "OPTIMIZE",
> > > "OUT", "OVERRIDING",
> > > +            "PACKAGE", "PARAMETER", "PART", "PARTITION",
> > > "PATH", "PIECESIZE",
> > > +            "PLAN", "PRIQTY", "PROGRAM", "PSID", "QUERYNO",
> > > "READS", "RECOVERY",
> > > +            "REFERENCING", "RELEASE", "RENAME", "REPEAT",
> > > "RESET", "RESIGNAL",
> > > +            "RESTART", "RESULT", "RESULT_SET_LOCATOR",
> > > "RETURN", "RETURNS",
> > > +            "ROUTINE", "ROW", "RRN", "RUN", "SAVEPOINT",
> > > "SCRATCHPAD",
> > > +            "SECONDS", "SECQTY", "SECURITY", "SENSITIVE",
> > > "SIGNAL", "SIMPLE",
> > > +            "SOURCE", "SPECIFIC", "SQLID", "STANDARD",
> > > "START", "STATIC",
> > > +            "STAY", "STOGROUP", "STORES", "STYLE",
> > > "SUBPAGES", "SYNONYM",
> > > +            "SYSFUN", "SYSIBM", "SYSPROC", "SYSTEM",
> > > "TABLESPACE", "TRIGGER",
> > > +            "TYPE", "UNDO", "UNTIL", "VALIDPROC",
> > > "VARIABLE", "VARIANT", "VCAT",
> > > +            "VOLUMES", "WHILE", "WLM", "YEARS",
> > > +        }));
> > > +    }
> > > +
> > > +    public boolean supportsRandomAccessResultSet(Select sel,
> > > +        boolean forUpdate) {
> > > +        return !forUpdate
> > > +            && super.supportsRandomAccessResultSet(sel, forUpdate);
> > > +    }
> > > +
> > > +    protected void appendSelectRange(SQLBuffer buf, long
> > > start, long end) {
> > > +        // appends the literal range string, since DB2 is
> > > unable to handle
> > > +        // a bound parameter for it
> > > +        buf.append(" FETCH FIRST ").append( Long.toString(end)).
> > > +            append(" ROWS ONLY");
> > > +    }
> > > +
> > > +    public String[] getCreateSequenceSQL(Sequence seq) {
> > > +        String[] sql = super.getCreateSequenceSQL (seq);
> > > +        if (seq.getAllocate() > 1)
> > > +            sql[0] += " CACHE " + seq.getAllocate();
> > > +        return sql;
> > > +    }
> > > +
> > > +    protected String getSequencesSQL(String schemaName,
> > > String sequenceName) {
> > > +        StringBuffer buf = new StringBuffer();
> > > +        buf.append(sequenceSQL);
> > > +        if (schemaName != null || sequenceName != null)
> > > +            buf.append (" WHERE ");
> > > +        if (schemaName != null) {
> > > +            buf.append(sequenceSchemaSQL);
> > > +            if (sequenceName != null)
> > > +                buf.append(" AND ");
> > > +        }
> > > +        if (sequenceName != null)
> > > +            buf.append(sequenceNameSQL);
> > > +        return buf.toString();
> > > +    }
> > > +
> > > +    public Connection decorate(Connection conn)
> > > +        throws SQLException {
> > > +        // some versions of the DB2 driver seem to default to
> > > +        // READ_UNCOMMITTED, which will prevent locking from working
> > > +        // (multiple SELECT ... FOR UPDATE statements are allowed on
> > > +        // the same instance); if we have not overridden the
> > > +        // transaction isolation in the configuration, default to
> > > +        // TRANSACTION_READ_COMMITTED
> > > +        conn = super.decorate (conn);
> > > +
> > > +        if (conf.getTransactionIsolationConstant() == -1
> > > +            && conn.getTransactionIsolation() <
> > > conn.TRANSACTION_READ_COMMITTED)
> > > +
> > > conn.setTransactionIsolation (conn.TRANSACTION_READ_COMMITTED);
> > > +
> > > +        return conn;
> > > +    }
> > > +
> > > +    private boolean isJDBC3(DatabaseMetaData meta) {
> > > +        try {
> > > +            // JDBC3-only method, so it might throw a
> > > AbstractMethodError
> > > +            return meta.getJDBCMajorVersion() >= 3;
> > > +        } catch (Throwable t) {
> > > +            return false;
> > > +        }
> > > +    }
> > > +
> > > +    public void connectedConfiguration(Connection conn)
> > > throws SQLException {
> > > +     super.connectedConfiguration(conn);
> > > +
> > > +     DatabaseMetaData metaData = conn.getMetaData();
> > > +     if (isJDBC3(metaData)) {
> > > +                     int maj = metaData.getDatabaseMajorVersion();
> > > +             int min = metaData.getDatabaseMinorVersion();
> > > +
> > > +             if (maj >= 9 || (maj == 8 && min >= 2)) {
> > > +                     supportsLockingWithMultipleTables = true;
> > > +                     supportsLockingWithInnerJoin = true;
> > > +                     supportsLockingWithOuterJoin = true;
> > > +                     forUpdateClause = "WITH RR USE AND KEEP
> > > UPDATE LOCKS";
> > > +             }
> > > +
> > > +            if
> > > (metaData.getDatabaseProductVersion().indexOf("DSN") != -1) {
> > > +                // DB2 Z/OS
> > > +                characterColumnSize = 255;
> > > +                lastGeneratedKeyQuery = "SELECT
> > > IDENTITY_VAL_LOCAL() FROM "
> > > +                    + "SYSIBM.SYSDUMMY1";
> > > +                nextSequenceQuery = "SELECT NEXTVAL FOR {0} FROM "
> > > +                    + "SYSIBM.SYSDUMMY1";
> > > +                sequenceSQL = "SELECT SCHEMA AS SEQUENCE_SCHEMA, "
> > > +                    + "NAME AS SEQUENCE_NAME FROM
> > > SYSIBM.SYSSEQUENCES ";
> > > +                sequenceSchemaSQL = "SCHEMA = ?";
> > > +                sequenceNameSQL = "NAME = ?";
> > > +                if (maj == 8) {
> > > +                    // DB2 Z/OS Version 8: no bigint
> > > support, hence map Java
> > > +                    // long to decimal
> > > +                    bigintTypeName = "DECIMAL(31,0)";
> > > +                }
> > > +            }
> > > +     }
> > > +    }
> > > +
> > > +    public String getOptimizeClause(JDBCFetchConfiguration fetch) {
> > > +        Integer rows = null;
> > > +        StringBuffer optimizeString = new StringBuffer();
> > > +        if ( fetch.getHint("openjpa.hint.optimize") != null) {
> > > +            rows = (Integer)fetch.getHint("openjpa.hint.optimize");
> > > +            optimizeString.append("
> > > ").append(optimizeClause).append(" ")
> > > +                .append(rows).append(" ");
> > > +            if (rows.intValue() > 1)
> > > +                optimizeString.append(rowsClause).append(" ");
> > > +            else
> > > +                optimizeString.append(rowClause).append(" ");
> > > +        }
> > > +        return optimizeString.toString();
> > > +    }
> > > +}
> > >
> > >
> > >
> >
>
>

Re: svn commit: r510336 - /incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java

Posted by Kevin Sutter <kw...@gmail.com>.
Patrick,
This is really strange.  At first, I thought this was just another case of
the line ending character problem.  But, when I look at the svn history of
the DB2Dictionary.java file, it's as if this latest commit is the only
record of the file.  But, when I look at previous revisions, the file does
exist.  It's as if, the commit operation did a replace instead of an update
commit.  I wasn't aware that this operation was even possible.  I guess we
need to hear from Dave as to what operation he did to accidentally cause
this to happen.

Kevin

On 2/21/07, Patrick Linskey <pl...@bea.com> wrote:
>
> I don't get it..... wasn't there already an
> openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.jav
> a?
>
> -Patrick
>
> --
> Patrick Linskey
> BEA Systems, Inc.
>
> _______________________________________________________________________
> Notice:  This email message, together with any attachments, may contain
> information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
> entities,  that may be confidential,  proprietary,  copyrighted  and/or
> legally privileged, and is intended solely for the use of the individual
> or entity named in this message. If you are not the intended recipient,
> and have received this message in error, please immediately return this
> by email and then delete it.
>
> > -----Original Message-----
> > From: wisneskid@apache.org [mailto:wisneskid@apache.org]
> > Sent: Wednesday, February 21, 2007 5:03 PM
> > To: open-jpa-commits@incubator.apache.org
> > Subject: svn commit: r510336 -
> > /incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache
> /openjpa/jdbc/sql/DB2Dictionary.java
> >
> > Author: wisneskid
> > Date: Wed Feb 21 17:03:06 2007
> > New Revision: 510336
> >
> > URL: http://svn.apache.org/viewvc?view=rev&rev=510336
> > Log:
> > DB2 Optimize for clause enhancement
> >
> > Added:
> >
> > incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/
> openjpa/jdbc/sql/DB2Dictionary.java
> >
> > Added:
> > 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-j
> dbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java?>
> view=auto&rev=510336
> > ==============================================================
> > ================
> > ---
> > incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/
> openjpa/jdbc/sql/DB2Dictionary.java (added)
> > +++
> > incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/
> openjpa/jdbc/sql/DB2Dictionary.java Wed Feb 21 17:03:06 2007
> > @@ -0,0 +1,210 @@
> > +/*
> > + * Copyright 2006 The Apache Software Foundation.
> > + *
> > + * Licensed 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.openjpa.jdbc.sql;
> > +
> > +import java.sql.Connection;
> > +import java.sql.DatabaseMetaData;
> > +import java.sql.SQLException;
> > +import java.util.Arrays ;
> > +
> > +import org.apache.openjpa.jdbc.kernel.JDBCFetchConfiguration;
> > +import org.apache.openjpa.jdbc.schema.Sequence;
> > +
> > +/**
> > + * Dictionary for IBM DB2 database.
> > + */
> > +public class DB2Dictionary
> > +    extends AbstractDB2Dictionary {
> > +
> > +    public DB2Dictionary() {
> > +        platform = "DB2";
> > +        validationSQL = "SELECT DISTINCT(CURRENT TIMESTAMP) FROM "
> > +            + "SYSIBM.SYSTABLES";
> > +        supportsSelectEndIndex = true;
> > +        optimizeClause ="optimize for";
> > +        nextSequenceQuery = "VALUES NEXTVAL FOR {0}";
> > +
> > +        sequenceSQL = "SELECT SEQSCHEMA AS SEQUENCE_SCHEMA, "
> > +            + "SEQNAME AS SEQUENCE_NAME FROM SYSCAT.SEQUENCES";
> > +        sequenceSchemaSQL = "SEQSCHEMA = ?";
> > +        sequenceNameSQL = "SEQNAME = ?";
> > +        characterColumnSize = 254;
> > +
> > +        binaryTypeName = "BLOB(1M)";
> > +        longVarbinaryTypeName = "BLOB(1M)";
> > +        varbinaryTypeName = "BLOB(1M)";
> > +        clobTypeName = "CLOB(1M)";
> > +        longVarcharTypeName = "LONG VARCHAR";
> > +
> > +        fixedSizeTypeNameSet.addAll (Arrays.asList(new String[]{
> > +            "LONG VARCHAR FOR BIT DATA", "LONG VARCHAR",
> > "LONG VARGRAPHIC",
> > +        }));
> > +
> > +        maxConstraintNameLength = 18;
> > +        maxIndexNameLength = 18;
> > +        maxColumnNameLength = 30;
> > +        supportsDeferredConstraints = false;
> > +        supportsDefaultDeleteAction = false;
> > +        supportsAlterTableWithDropColumn = false;
> > +
> > +        supportsNullTableForGetColumns = false;
> > +
> > +        reservedWordSet.addAll(Arrays.asList(new String[]{
> > +            "AFTER", "ALIAS", "ALLOW", "APPLICATION",
> > "ASSOCIATE", "ASUTIME",
> > +            "AUDIT", "AUX", "AUXILIARY", "BEFORE", "BINARY",
> > "BUFFERPOOL",
> > +            "CACHE", "CALL", "CALLED", "CAPTURE",
> > "CARDINALITY", "CCSID",
> > +            "CLUSTER", "COLLECTION", "COLLID", "COMMENT", "CONCAT",
> > +            "CONDITION", "CONTAINS", "COUNT_BIG", "CURRENT_LC_CTYPE",
> > +            "CURRENT_PATH", "CURRENT_SERVER",
> > "CURRENT_TIMEZONE", "CYCLE",
> > +            "DATA", "DATABASE", "DAYS", "DB2GENERAL",
> > "DB2GENRL", "DB2SQL",
> > +            "DBINFO", "DEFAULTS", "DEFINITION",
> > "DETERMINISTIC", "DISALLOW",
> > +            "DO", "DSNHATTR", "DSSIZE", "DYNAMIC", "EACH",
> > "EDITPROC", "ELSEIF",
> > +            "ENCODING", "END-EXEC1", "ERASE", "EXCLUDING",
> > "EXIT", "FENCED",
> > +            "FIELDPROC", "FILE", "FINAL", "FREE",
> > "FUNCTION", "GENERAL",
> > +            "GENERATED", "GRAPHIC", "HANDLER", "HOLD", "HOURS", "IF",
> > +            "INCLUDING", "INCREMENT", "INDEX", "INHERIT",
> > "INOUT", "INTEGRITY",
> > +            "ISOBID", "ITERATE", "JAR", "JAVA", "LABEL",
> > "LC_CTYPE", "LEAVE",
> > +            "LINKTYPE", "LOCALE", "LOCATOR", "LOCATORS",
> > "LOCK", "LOCKMAX",
> > +            "LOCKSIZE", "LONG", "LOOP", "MAXVALUE", "MICROSECOND",
> > +            "MICROSECONDS", "MINUTES", "MINVALUE", "MODE",
> > "MODIFIES", "MONTHS",
> > +            "NEW", "NEW_TABLE", "NOCACHE", "NOCYCLE",
> > "NODENAME", "NODENUMBER",
> > +            "NOMAXVALUE", "NOMINVALUE", "NOORDER", "NULLS",
> > "NUMPARTS", "OBID",
> > +            "OLD", "OLD_TABLE", "OPTIMIZATION", "OPTIMIZE",
> > "OUT", "OVERRIDING",
> > +            "PACKAGE", "PARAMETER", "PART", "PARTITION",
> > "PATH", "PIECESIZE",
> > +            "PLAN", "PRIQTY", "PROGRAM", "PSID", "QUERYNO",
> > "READS", "RECOVERY",
> > +            "REFERENCING", "RELEASE", "RENAME", "REPEAT",
> > "RESET", "RESIGNAL",
> > +            "RESTART", "RESULT", "RESULT_SET_LOCATOR",
> > "RETURN", "RETURNS",
> > +            "ROUTINE", "ROW", "RRN", "RUN", "SAVEPOINT",
> > "SCRATCHPAD",
> > +            "SECONDS", "SECQTY", "SECURITY", "SENSITIVE",
> > "SIGNAL", "SIMPLE",
> > +            "SOURCE", "SPECIFIC", "SQLID", "STANDARD",
> > "START", "STATIC",
> > +            "STAY", "STOGROUP", "STORES", "STYLE",
> > "SUBPAGES", "SYNONYM",
> > +            "SYSFUN", "SYSIBM", "SYSPROC", "SYSTEM",
> > "TABLESPACE", "TRIGGER",
> > +            "TYPE", "UNDO", "UNTIL", "VALIDPROC",
> > "VARIABLE", "VARIANT", "VCAT",
> > +            "VOLUMES", "WHILE", "WLM", "YEARS",
> > +        }));
> > +    }
> > +
> > +    public boolean supportsRandomAccessResultSet(Select sel,
> > +        boolean forUpdate) {
> > +        return !forUpdate
> > +            && super.supportsRandomAccessResultSet(sel, forUpdate);
> > +    }
> > +
> > +    protected void appendSelectRange(SQLBuffer buf, long
> > start, long end) {
> > +        // appends the literal range string, since DB2 is
> > unable to handle
> > +        // a bound parameter for it
> > +        buf.append(" FETCH FIRST ").append( Long.toString(end)).
> > +            append(" ROWS ONLY");
> > +    }
> > +
> > +    public String[] getCreateSequenceSQL(Sequence seq) {
> > +        String[] sql = super.getCreateSequenceSQL (seq);
> > +        if (seq.getAllocate() > 1)
> > +            sql[0] += " CACHE " + seq.getAllocate();
> > +        return sql;
> > +    }
> > +
> > +    protected String getSequencesSQL(String schemaName,
> > String sequenceName) {
> > +        StringBuffer buf = new StringBuffer();
> > +        buf.append(sequenceSQL);
> > +        if (schemaName != null || sequenceName != null)
> > +            buf.append (" WHERE ");
> > +        if (schemaName != null) {
> > +            buf.append(sequenceSchemaSQL);
> > +            if (sequenceName != null)
> > +                buf.append(" AND ");
> > +        }
> > +        if (sequenceName != null)
> > +            buf.append(sequenceNameSQL);
> > +        return buf.toString();
> > +    }
> > +
> > +    public Connection decorate(Connection conn)
> > +        throws SQLException {
> > +        // some versions of the DB2 driver seem to default to
> > +        // READ_UNCOMMITTED, which will prevent locking from working
> > +        // (multiple SELECT ... FOR UPDATE statements are allowed on
> > +        // the same instance); if we have not overridden the
> > +        // transaction isolation in the configuration, default to
> > +        // TRANSACTION_READ_COMMITTED
> > +        conn = super.decorate (conn);
> > +
> > +        if (conf.getTransactionIsolationConstant() == -1
> > +            && conn.getTransactionIsolation() <
> > conn.TRANSACTION_READ_COMMITTED)
> > +
> > conn.setTransactionIsolation (conn.TRANSACTION_READ_COMMITTED);
> > +
> > +        return conn;
> > +    }
> > +
> > +    private boolean isJDBC3(DatabaseMetaData meta) {
> > +        try {
> > +            // JDBC3-only method, so it might throw a
> > AbstractMethodError
> > +            return meta.getJDBCMajorVersion() >= 3;
> > +        } catch (Throwable t) {
> > +            return false;
> > +        }
> > +    }
> > +
> > +    public void connectedConfiguration(Connection conn)
> > throws SQLException {
> > +     super.connectedConfiguration(conn);
> > +
> > +     DatabaseMetaData metaData = conn.getMetaData();
> > +     if (isJDBC3(metaData)) {
> > +                     int maj = metaData.getDatabaseMajorVersion();
> > +             int min = metaData.getDatabaseMinorVersion();
> > +
> > +             if (maj >= 9 || (maj == 8 && min >= 2)) {
> > +                     supportsLockingWithMultipleTables = true;
> > +                     supportsLockingWithInnerJoin = true;
> > +                     supportsLockingWithOuterJoin = true;
> > +                     forUpdateClause = "WITH RR USE AND KEEP
> > UPDATE LOCKS";
> > +             }
> > +
> > +            if
> > (metaData.getDatabaseProductVersion().indexOf("DSN") != -1) {
> > +                // DB2 Z/OS
> > +                characterColumnSize = 255;
> > +                lastGeneratedKeyQuery = "SELECT
> > IDENTITY_VAL_LOCAL() FROM "
> > +                    + "SYSIBM.SYSDUMMY1";
> > +                nextSequenceQuery = "SELECT NEXTVAL FOR {0} FROM "
> > +                    + "SYSIBM.SYSDUMMY1";
> > +                sequenceSQL = "SELECT SCHEMA AS SEQUENCE_SCHEMA, "
> > +                    + "NAME AS SEQUENCE_NAME FROM
> > SYSIBM.SYSSEQUENCES ";
> > +                sequenceSchemaSQL = "SCHEMA = ?";
> > +                sequenceNameSQL = "NAME = ?";
> > +                if (maj == 8) {
> > +                    // DB2 Z/OS Version 8: no bigint
> > support, hence map Java
> > +                    // long to decimal
> > +                    bigintTypeName = "DECIMAL(31,0)";
> > +                }
> > +            }
> > +     }
> > +    }
> > +
> > +    public String getOptimizeClause(JDBCFetchConfiguration fetch) {
> > +        Integer rows = null;
> > +        StringBuffer optimizeString = new StringBuffer();
> > +        if ( fetch.getHint("openjpa.hint.optimize") != null) {
> > +            rows = (Integer)fetch.getHint("openjpa.hint.optimize");
> > +            optimizeString.append("
> > ").append(optimizeClause).append(" ")
> > +                .append(rows).append(" ");
> > +            if (rows.intValue() > 1)
> > +                optimizeString.append(rowsClause).append(" ");
> > +            else
> > +                optimizeString.append(rowClause).append(" ");
> > +        }
> > +        return optimizeString.toString();
> > +    }
> > +}
> >
> >
> >
>