Rick, not a biggie, but I saw a javadoc error because Parameter
"sequenceName" is documented twice for a method in CreateSequenceNode,

 [javadoc] 
C:\nightlies\main\src\opensource\java\engine\org\apache\derby\impl\sql\compile\CreateSequenceNode.java:65:
warning - Parameter "sequenceName" is documented more than once.
[javadoc] 1 warning


Mamta


On Mon, Jan 11, 2010 at 4:02 PM,  <[email protected]> wrote:
> Author: rhillegas
> Date: Tue Jan 12 00:02:33 2010
> New Revision: 898123
>
> URL: http://svn.apache.org/viewvc?rev=898123&view=rev
> Log:
> DERBY-712: Add dblook support for sequences.
>
> Added:
>    
> db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/dblook/DB_Sequence.java
>    (with props)
> Modified:
>    
> db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateSequenceNode.java
>    
> db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj
>    
> db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateSequenceConstantAction.java
>    
> db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test.out
>    
> db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test_territory.out
>    
> db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/dblook_makeDB_2.sql
>    
> db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/dblook/DB_Alias.java
>    
> db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/dblook/DB_GrantRevoke.java
>    
> db/derby/code/trunk/java/tools/org/apache/derby/loc/toolsmessages.properties
>    db/derby/code/trunk/java/tools/org/apache/derby/tools/dblook.java
>
> Modified: 
> db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateSequenceNode.java
> URL: 
> http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateSequenceNode.java?rev=898123&r1=898122&r2=898123&view=diff
> ==============================================================================
> --- 
> db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateSequenceNode.java
>  (original)
> +++ 
> db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateSequenceNode.java
>  Tue Jan 12 00:02:33 2010
> @@ -26,14 +26,25 @@
>  import org.apache.derby.iapi.sql.compile.CompilerContext;
>  import org.apache.derby.iapi.sql.execute.ConstantAction;
>  import org.apache.derby.iapi.sql.dictionary.SchemaDescriptor;
> +import org.apache.derby.iapi.types.DataTypeDescriptor;
> +import org.apache.derby.iapi.reference.SQLState;
> +import org.apache.derby.iapi.types.TypeId;
> +
>
>  /**
>  * A CreateSequenceNode is the root of a QueryTree that
>  * represents a CREATE SEQUENCE statement.
>  */
>
> -public class CreateSequenceNode extends DDLStatementNode {
> -    private TableName sequenceName;
> +public class CreateSequenceNode extends DDLStatementNode
> +{
> +    private TableName _sequenceName;
> +    private DataTypeDescriptor _dataType;
> +    private Long _initialValue;
> +    private Long _stepValue;
> +    private Long _maxValue;
> +    private Long _minValue;
> +    private Boolean _cycle;
>
>     public static final int SEQUENCE_ELEMENT_COUNT = 1;
>
> @@ -41,12 +52,35 @@
>      * Initializer for a CreateSequenceNode
>      *
>      * @param sequenceName The name of the new sequence
> -     * @throws org.apache.derby.iapi.error.StandardException
> -     *          Thrown on error
> +     * @param dataType Exact numeric type of the new sequence
> +     * @param initialValue Starting value
> +     * @param stepValue Increment amount
> +     * @param maxValue Largest value returned by the sequence generator
> +     * @param minValue Smallest value returned by the sequence generator
> +     * @param cycle True if the generator should wrap around, false otherwise
> +     * @param sequenceName The name of the new sequence
> +     *
> +     * @throws org.apache.derby.iapi.error.StandardException on error
>      */
> -    public void init(Object sequenceName) throws StandardException {
> -        this.sequenceName = (TableName) sequenceName;
> -        initAndCheck(sequenceName);
> +    public void init
> +        (
> +         Object sequenceName,
> +         Object dataType,
> +         Object initialValue,
> +         Object stepValue,
> +         Object maxValue,
> +         Object minValue,
> +         Object cycle
> +         ) throws StandardException {
> +        _sequenceName = (TableName) sequenceName;
> +        initAndCheck(_sequenceName);
> +
> +        _dataType = (DataTypeDescriptor) dataType;
> +        _initialValue = (Long) initialValue;
> +        _stepValue = (Long) stepValue;
> +        _maxValue = (Long) maxValue;
> +        _minValue = (Long) minValue;
> +        _cycle = (Boolean) cycle;
>
>         // automcatically create the schema if it doesn't exist
>         implicitCreateSchema = true;
> @@ -62,7 +96,7 @@
>     public String toString() {
>         if (SanityManager.DEBUG) {
>             return super.toString() +
> -                    "sequenceName: " + "\n" + sequenceName + "\n";
> +                    "sequenceName: " + "\n" + _sequenceName + "\n";
>         } else {
>             return "";
>         }
> @@ -80,11 +114,19 @@
>         // this method also compiles permissions checks
>         SchemaDescriptor sd = getSchemaDescriptor();
>
> -//        sequenceName.bind( getDataDictionary() );
> -        // set the default schema name if the user did not explicitly 
> specify a schema
> -        if (sequenceName.getSchemaName() == null) {
> -            sequenceName.setSchemaName(sd.getSchemaName());
> +       // set the default schema name if the user did not explicitly specify 
> a schema
> +        if (_sequenceName.getSchemaName() == null) {
> +            _sequenceName.setSchemaName(sd.getSchemaName());
>         }
> +
> +        // Right now we only support vanilla sequences
> +        if ( (_dataType != null) && ( !_dataType.getTypeId().equals( 
> TypeId.INTEGER_ID ) ) ) { throw unimplementedFeature(); }
> +        if ( (_initialValue != null) && ( _initialValue.longValue() != 
> -2147483648L ) ) { throw unimplementedFeature(); }
> +        if ( (_stepValue != null) && ( _stepValue.longValue() != 1L ) ) { 
> throw unimplementedFeature(); }
> +        if ( (_maxValue != null) && ( _maxValue.longValue() != 2147483647L ) 
> ) { throw unimplementedFeature(); }
> +        if ( (_minValue != null) && ( _minValue.longValue() != -2147483648L 
> ) ) { throw unimplementedFeature(); }
> +        if ( (_cycle != null) && ( _cycle != Boolean.FALSE ) ) { throw 
> unimplementedFeature(); }
> +
>     }
>
>     public String statementToString() {
> @@ -101,6 +143,13 @@
>      */
>     public ConstantAction makeConstantAction() {
>         return getGenericConstantActionFactory().
> -                getCreateSequenceConstantAction(sequenceName);
> +                getCreateSequenceConstantAction(_sequenceName);
> +    }
> +
> +    /** Report an unimplemented feature */
> +    private StandardException unimplementedFeature()
> +    {
> +        return StandardException.newException( 
> SQLState.BTREE_UNIMPLEMENTED_FEATURE );
>     }
> +
>  }
>
> Modified: 
> db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj
> URL: 
> http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj?rev=898123&r1=898122&r2=898123&view=diff
> ==============================================================================
> --- 
> db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj
>  (original)
> +++ 
> db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj
>  Tue Jan 12 00:02:33 2010
> @@ -2320,6 +2320,7 @@
>  |      <COMMITTED: "committed">
>  |   <CONCAT: "concat">
>  |      <CONTAINS: "contains">
> +|      <CYCLE: "cycle">
>  |      <DATA: "data">
>  |      <DATE: "date">
>  |      <DAY: "day">
> @@ -2341,6 +2342,8 @@
>  |      <LOCKS: "locks">
>  |      <LOCKSIZE: "locksize">
>  |      <LOGGED: "logged">
> +|      <MAXVALUE: "maxvalue">
> +|      <MINVALUE: "minvalue">
>  |       <MOD: "mod">
>  |      <MODIFIES: "modifies">
>  |      <MODIFY: "modify">
> @@ -10049,19 +10052,97 @@
>  sequenceDefinition() throws StandardException :
>  {
>        TableName qualifiedSequenceName = null;
> +       DataTypeDescriptor dtd =  null;
> +       Long initialValue = null;
> +       Long stepValue = null;
> +       Long maxValue = null;
> +       Long minValue = null;
> +    Boolean cycle = Boolean.FALSE;
>  }
>  {
>        <SEQUENCE> qualifiedSequenceName = 
> qualifiedName(Limits.MAX_IDENTIFIER_LENGTH)
> +    [ <AS> dtd = exactIntegerType() ]
> +    [ <START> <WITH> initialValue = exactIntegerObject() ]
> +    [ <INCREMENT> <BY> stepValue = exactIntegerObject() ]
> +    [
> +        ( <MAXVALUE> maxValue = exactIntegerObject() )
> +        |
> +        LOOKAHEAD( { getToken( 2 ).kind == MAXVALUE } )
> +        ( <NO> <MAXVALUE> )
> +    ]
> +    [
> +        ( <MINVALUE> minValue = exactIntegerObject() )
> +        |
> +        LOOKAHEAD( { getToken( 2 ).kind == MINVALUE } )
> +        ( <NO> <MINVALUE> )
> +    ]
> +    [ cycle = cycleClause() ]
>        {
>                checkVersion( DataDictionary.DD_VERSION_DERBY_10_6, 
> "SEQUENCES");
>                return (StatementNode) nodeFactory.getNode(
>                        C_NodeTypes.CREATE_SEQUENCE_NODE,
>                        qualifiedSequenceName,
> +            dtd,
> +            initialValue,
> +            stepValue,
> +            maxValue,
> +            minValue,
> +            cycle,
>                        getContextManager());
>        }
>  }
>
>  /*
> + * <A NAME="cycleClause">cycleClause</A>
> + */
> +Boolean
> +cycleClause() throws StandardException :
> +{
> +}
> +{
> +    <CYCLE>
> +    {
> +        return Boolean.TRUE;
> +    }
> +|
> +    <NO> <CYCLE>
> +    {
> +        return Boolean.FALSE;
> +    }
> +}
> +
> +/*
> + * <A NAME="exactIntegerObject">exactNumberObject</A>
> + */
> +Long
> +exactIntegerObject() throws StandardException :
> +{
> +       long exactNumeric;
> +}
> +{
> +       exactNumeric = exactNumber()
> +    {
> +        return new Long( exactNumeric );
> +    }
> +}
> +
> +/*
> + * <A NAME="stepValue">stepValue</A>
> + */
> +Long
> +stepValue() throws StandardException :
> +{
> +       long stepValue;
> +}
> +{
> +       <INCREMENT> <BY> stepValue = exactNumber()
> +    {
> +        return new Long( stepValue );
> +    }
> +}
> +
> +
> +/*
>  * <A NAME="dropSequenceStatement">dropSequenceStatement</A>
>  */
>  StatementNode
>
> Modified: 
> db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateSequenceConstantAction.java
> URL: 
> http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateSequenceConstantAction.java?rev=898123&r1=898122&r2=898123&view=diff
> ==============================================================================
> --- 
> db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateSequenceConstantAction.java
>  (original)
> +++ 
> db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateSequenceConstantAction.java
>  Tue Jan 12 00:02:33 2010
> @@ -89,7 +89,7 @@
>
>         seqDef = ddg.newSequenceDescriptor(schemaDescriptor,
>                 dd.getUUIDFactory().createUUID(),
> -                sequenceName, DataTypeDescriptor.INTEGER_NOT_NULL, 0, 0, 
> Integer.MIN_VALUE, Integer.MAX_VALUE, 1, false);        // is definition
> +                sequenceName, DataTypeDescriptor.INTEGER_NOT_NULL, 
> Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE, 
> 1, false);        // is definition
>
>         dd.addDescriptor(seqDef,
>                 null,  // parent
>
> Modified: 
> db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test.out
> URL: 
> http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test.out?rev=898123&r1=898122&r2=898123&view=diff
> ==============================================================================
> --- 
> db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test.out
>  (original)
> +++ 
> db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test.out
>  Tue Jan 12 00:02:33 2010
> @@ -5786,6 +5786,16 @@
>  -- ----------------------------------------------
>  CREATE SCHEMA "BAR"
>  -- ----------------------------------------------
> +-- DDL Statements for sequences
> +-- ----------------------------------------------
> +CREATE SEQUENCE "APP"."SEQUENCE_1"
> +    AS INTEGER
> +    START WITH -2147483648
> +    INCREMENT BY 1
> +    MAXVALUE 2147483647
> +    MINVALUE -2147483648
> +    NO CYCLE
> +-- ----------------------------------------------
>  -- DDL Statements for jars
>  -- **** NOTE **** In order for jar files to be loaded correctly,
>  -- you must either 1) ensure that the DBJARS directory (created
> @@ -5864,6 +5874,17 @@
>  -- ----------------------------------------------
>  CREATE SCHEMA "BAR";
>  -- ----------------------------------------------
> +-- DDL Statements for sequences
> +-- ----------------------------------------------
> +CREATE SEQUENCE "APP"."SEQUENCE_1"
> +    AS INTEGER
> +    START WITH -2147483648
> +    INCREMENT BY 1
> +    MAXVALUE 2147483647
> +    MINVALUE -2147483648
> +    NO CYCLE
> +;
> +-- ----------------------------------------------
>  -- DDL Statements for tables
>  -- ----------------------------------------------
>  CREATE TABLE "BAR"."T1" ("C" CHAR(5) NOT NULL, "I" INTEGER, "VC" 
> VARCHAR(10), "FKCHAR" CHAR(5));
> @@ -5921,6 +5942,17 @@
>  -- ----------------------------------------------
>  CREATE SCHEMA "BAR" #
>  -- ----------------------------------------------
> +-- DDL Statements for sequences
> +-- ----------------------------------------------
> +CREATE SEQUENCE "APP"."SEQUENCE_1"
> +    AS INTEGER
> +    START WITH -2147483648
> +    INCREMENT BY 1
> +    MAXVALUE 2147483647
> +    MINVALUE -2147483648
> +    NO CYCLE
> + #
> +-- ----------------------------------------------
>  -- DDL Statements for jars
>  -- **** NOTE **** In order for jar files to be loaded correctly,
>  -- you must either 1) ensure that the DBJARS directory (created
>
> Modified: 
> db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test_territory.out
> URL: 
> http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test_territory.out?rev=898123&r1=898122&r2=898123&view=diff
> ==============================================================================
> --- 
> db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test_territory.out
>  (original)
> +++ 
> db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test_territory.out
>  Tue Jan 12 00:02:33 2010
> @@ -5786,6 +5786,16 @@
>  -- ----------------------------------------------
>  CREATE SCHEMA "BAR"
>  -- ----------------------------------------------
> +-- DDL Statements for sequences
> +-- ----------------------------------------------
> +CREATE SEQUENCE "APP"."SEQUENCE_1"
> +    AS INTEGER
> +    START WITH -2147483648
> +    INCREMENT BY 1
> +    MAXVALUE 2147483647
> +    MINVALUE -2147483648
> +    NO CYCLE
> +-- ----------------------------------------------
>  -- DDL Statements for jars
>  -- **** NOTE **** In order for jar files to be loaded correctly,
>  -- you must either 1) ensure that the DBJARS directory (created
> @@ -5864,6 +5874,17 @@
>  -- ----------------------------------------------
>  CREATE SCHEMA "BAR";
>  -- ----------------------------------------------
> +-- DDL Statements for sequences
> +-- ----------------------------------------------
> +CREATE SEQUENCE "APP"."SEQUENCE_1"
> +    AS INTEGER
> +    START WITH -2147483648
> +    INCREMENT BY 1
> +    MAXVALUE 2147483647
> +    MINVALUE -2147483648
> +    NO CYCLE
> +;
> +-- ----------------------------------------------
>  -- DDL Statements for tables
>  -- ----------------------------------------------
>  CREATE TABLE "BAR"."T1" ("C" CHAR(5) NOT NULL, "I" INTEGER, "VC" 
> VARCHAR(10), "FKCHAR" CHAR(5));
> @@ -5921,6 +5942,17 @@
>  -- ----------------------------------------------
>  CREATE SCHEMA "BAR" #
>  -- ----------------------------------------------
> +-- DDL Statements for sequences
> +-- ----------------------------------------------
> +CREATE SEQUENCE "APP"."SEQUENCE_1"
> +    AS INTEGER
> +    START WITH -2147483648
> +    INCREMENT BY 1
> +    MAXVALUE 2147483647
> +    MINVALUE -2147483648
> +    NO CYCLE
> + #
> +-- ----------------------------------------------
>  -- DDL Statements for jars
>  -- **** NOTE **** In order for jar files to be loaded correctly,
>  -- you must either 1) ensure that the DBJARS directory (created
>
> Modified: 
> db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/dblook_makeDB_2.sql
> URL: 
> http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/dblook_makeDB_2.sql?rev=898123&r1=898122&r2=898123&view=diff
> ==============================================================================
> --- 
> db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/dblook_makeDB_2.sql
>  (original)
> +++ 
> db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/dblook_makeDB_2.sql
>  Tue Jan 12 00:02:33 2010
> @@ -94,3 +94,9 @@
>
>  create type price external name 
> 'org.apache.derbyTesting.functionTests.tests.lang.Price' language java;
>
> +-- ----------------------------------------------
> +-- Sequences
> +-- ----------------------------------------------
> +
> +create sequence sequence_1;
> +
>
> Modified: 
> db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/dblook/DB_Alias.java
> URL: 
> http://svn.apache.org/viewvc/db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/dblook/DB_Alias.java?rev=898123&r1=898122&r2=898123&view=diff
> ==============================================================================
> --- 
> db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/dblook/DB_Alias.java
>  (original)
> +++ 
> db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/dblook/DB_Alias.java
>  Tue Jan 12 00:02:33 2010
> @@ -45,9 +45,10 @@
>         * functions, and UDTs in a given database and write it to
>         * output via Logs.java.
>         * @param conn Connection to the source database.
> +        * @param at10_6 True if the database is at 10.6 or higher
>         ****/
>
> -       public static void doProceduresFunctionsAndUDTs(Connection conn)
> +       public static void doProceduresFunctionsAndUDTs(Connection conn, 
> boolean at10_6 )
>                throws SQLException {
>
>                // First do stored procedures.
> @@ -65,7 +66,10 @@
>         // to interleave routine and UDT ddl.
>         //
>
> -        generateDDL( ps, UDT_TYPE ); // UDT_TYPE => for UDTs
> +        if ( at10_6 )
> +        {
> +            generateDDL( ps, UDT_TYPE ); // UDT_TYPE => for UDTs
> +        }
>         generateDDL( ps, PROCEDURE_TYPE );     // PROCEDURE_TYPE => for 
> PROCEDURES
>                generateDDL( ps, FUNCTION_TYPE );       // FUNCTION_TYPE => 
> for FUNCTIONS
>
>
> Modified: 
> db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/dblook/DB_GrantRevoke.java
> URL: 
> http://svn.apache.org/viewvc/db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/dblook/DB_GrantRevoke.java?rev=898123&r1=898122&r2=898123&view=diff
> ==============================================================================
> --- 
> db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/dblook/DB_GrantRevoke.java
>  (original)
> +++ 
> db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/dblook/DB_GrantRevoke.java
>  Tue Jan 12 00:02:33 2010
> @@ -36,13 +36,31 @@
>         * Generate Grant & Revoke statements if sqlAuthorization is on
>         *
>         * @param conn Connection to use
> +        * @param at10_6 True if the databse level is 10.6 or higher
>         */
> -       public static void doAuthorizations(Connection conn)
> +       public static void doAuthorizations(Connection conn, boolean at10_6)
>                throws SQLException {
>
>                // First generate table privilege statements
>                Statement stmt = conn.createStatement();
> -               ResultSet rs = stmt.executeQuery("SELECT GRANTEE, SCHEMANAME, 
> TABLENAME, SELECTPRIV, " +
> +        ResultSet rs;
> +
> +        if ( at10_6 )
> +        {
> +            // Generate udt privilege statements
> +            rs = stmt.executeQuery("SELECT P.GRANTEE, S.SCHEMANAME, A.ALIAS, 
> P.PERMISSION, P.OBJECTTYPE FROM " +
> +                                   "SYS.SYSPERMS P, SYS.SYSALIASES A, 
> SYS.SYSSCHEMAS S WHERE A.SCHEMAID = " +
> +                                   "S.SCHEMAID AND P.OBJECTID = A.ALIASID 
> AND A.ALIASTYPE='A'");
> +            generateUDTPrivs(rs);
> +
> +            // Generate sequence privilege statements
> +            rs = stmt.executeQuery("SELECT P.GRANTEE, S.SCHEMANAME, 
> SEQ.SEQUENCENAME, P.PERMISSION, P.OBJECTTYPE FROM " +
> +                                   "SYS.SYSPERMS P, SYS.SYSSEQUENCES SEQ, 
> SYS.SYSSCHEMAS S WHERE SEQ.SCHEMAID = " +
> +                                   "S.SCHEMAID AND P.OBJECTID = 
> SEQ.SEQUENCEID");
> +            generateSequencePrivs(rs);
> +        }
> +
> +        rs = stmt.executeQuery("SELECT GRANTEE, SCHEMANAME, TABLENAME, 
> SELECTPRIV, " +
>                        "DELETEPRIV, INSERTPRIV, UPDATEPRIV, REFERENCESPRIV, 
> TRIGGERPRIV FROM " +
>                        "SYS.SYSTABLEPERMS P, SYS.SYSTABLES T, SYS.SYSSCHEMAS 
> S WHERE T.SCHEMAID = " +
>                        "S.SCHEMAID AND T.TABLEID = P.TABLEID");
> @@ -54,12 +72,6 @@
>                        "S.SCHEMAID AND T.TABLEID = P.TABLEID");
>                generateColumnPrivs(rs, conn);
>
> -               // Generate udt privilege statements
> -               rs = stmt.executeQuery("SELECT P.GRANTEE, S.SCHEMANAME, 
> A.ALIAS, P.PERMISSION, P.OBJECTTYPE FROM " +
> -                       "SYS.SYSPERMS P, SYS.SYSALIASES A, SYS.SYSSCHEMAS S 
> WHERE A.SCHEMAID = " +
> -                       "S.SCHEMAID AND P.OBJECTID = A.ALIASID AND 
> A.ALIASTYPE='A'");
> -               generateUDTPrivs(rs);
> -
>                // Generate routine privilege statements
>                rs = stmt.executeQuery("SELECT GRANTEE, SCHEMANAME, ALIAS, 
> ALIASTYPE FROM " +
>                        "SYS.SYSROUTINEPERMS P, SYS.SYSALIASES A, 
> SYS.SYSSCHEMAS S WHERE A.SCHEMAID = " +
> @@ -315,6 +327,40 @@
>                        firstTime = false;
>                }
>        }
> +       /** ************************************************
> +        * Generate sequence privilege statements
> +        *
> +        * @param rs ResultSet holding required information
> +        ****/
> +       public static void generateSequencePrivs(ResultSet rs) throws 
> SQLException
> +       {
> +               boolean firstTime = true;
> +               while (rs.next()) {
> +                       String authName = dblook.addQuotes
> +                               (dblook.expandDoubleQuotes(rs.getString(1)));
> +                       String schemaName = dblook.addQuotes
> +                               (dblook.expandDoubleQuotes(rs.getString(2)));
> +                       String sequenceName = dblook.addQuotes
> +                               (dblook.expandDoubleQuotes(rs.getString(3)));
> +                       String fullName = schemaName + "." + sequenceName;
> +                       String permission = rs.getString(4);
> +                       String objectType = rs.getString(5);
> +
> +                       if (dblook.isIgnorableSchema(schemaName))
> +                               continue;
> +
> +                       if (firstTime) {
> +                               
> Logs.reportString("----------------------------------------------");
> +                               
> Logs.reportMessage("DBLOOK_SequencePrivHeader");
> +                               
> Logs.reportString("----------------------------------------------\n");
> +                       }
> +
> +                       Logs.writeToNewDDL(genericPrivStatement(fullName, 
> authName, permission, objectType ));
> +                       Logs.writeStmtEndToNewDDL();
> +                       Logs.writeNewlineToNewDDL();
> +                       firstTime = false;
> +               }
> +       }
>        private static String genericPrivStatement(String fullName, String 
> authName, String permission, String objectType )
>                throws SQLException
>        {
>
> Added: 
> db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/dblook/DB_Sequence.java
> URL: 
> http://svn.apache.org/viewvc/db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/dblook/DB_Sequence.java?rev=898123&view=auto
> ==============================================================================
> --- 
> db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/dblook/DB_Sequence.java
>  (added)
> +++ 
> db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/dblook/DB_Sequence.java
>  Tue Jan 12 00:02:33 2010
> @@ -0,0 +1,159 @@
> +/*
> +
> +   Derby - Class org.apache.derby.impl.tools.dblook.DB_Sequence
> +
> +   Licensed to the Apache Software Foundation (ASF) under one or more
> +   contributor license agreements.  See the NOTICE file distributed with
> +   this work for additional information regarding copyright ownership.
> +   The ASF licenses this file to you 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.derby.impl.tools.dblook;
> +
> +import java.sql.Connection;
> +import java.sql.Statement;
> +import java.sql.PreparedStatement;
> +import java.sql.ResultSet;
> +import java.sql.SQLException;
> +import java.sql.DatabaseMetaData;
> +
> +import java.util.HashMap;
> +import org.apache.derby.tools.dblook;
> +
> +/**
> + * Dblook implementation for SEQUENCEs.
> + */
> +public class DB_Sequence
> +{
> +    
> ///////////////////////////////////////////////////////////////////////////////////
> +    //
> +    // CONSTANTS
> +    //
> +    
> ///////////////////////////////////////////////////////////////////////////////////
> +
> +
> +    
> ///////////////////////////////////////////////////////////////////////////////////
> +    //
> +    // BEHAVIOR
> +    //
> +    
> ///////////////////////////////////////////////////////////////////////////////////
> +
> +
> +       /**
> +     * <p>
> +        * Generate the DDL for all sequences and output it via Logs.java.
> +     * </p>
> +     *
> +        * @param conn Connection to the source database.
> +     */
> +
> +       public static void doSequences( Connection conn )
> +               throws SQLException
> +    {
> +               PreparedStatement ps = conn.prepareStatement
> +            (
> +             "SELECT SCHEMAID, SEQUENCENAME, SEQUENCEDATATYPE, STARTVALUE, 
> MINIMUMVALUE, MAXIMUMVALUE, INCREMENT, CYCLEOPTION\n" +
> +             "FROM SYS.SYSSEQUENCES"
> +             );
> +        ResultSet rs = ps.executeQuery();
> +
> +               boolean firstTime = true;
> +               while (rs.next())
> +        {
> +            int  col = 1;
> +            String schemaName = dblook.lookupSchemaId( rs.getString( col++ ) 
> );
> +            String sequenceName = rs.getString( col++ );
> +            String typeName = stripNotNull( rs.getString( col++ ) );
> +            long startValue = rs.getLong( col++ );
> +            long minimumValue = rs.getLong( col++ );
> +            long maximumValue = rs.getLong( col++ );
> +            long increment = rs.getLong( col++ );
> +            String cycleOption = "Y".equals( rs.getString( col++ ) ) ? 
> "CYCLE" : "NO CYCLE";
> +
> +                       if (firstTime)
> +            {
> +                               
> Logs.reportString("----------------------------------------------");
> +                Logs.reportMessage( "DBLOOK_SequenceHeader" );
> +                               
> Logs.reportString("----------------------------------------------\n");
> +                       }
> +
> +                       String fullName = dblook.addQuotes( 
> dblook.expandDoubleQuotes( sequenceName ) );
> +                       fullName = schemaName + "." + fullName;
> +
> +                       String creationString = createSequenceString
> +                ( fullName, typeName, startValue, minimumValue, 
> maximumValue, increment, cycleOption );
> +                       Logs.writeToNewDDL(creationString);
> +                       Logs.writeStmtEndToNewDDL();
> +                       Logs.writeNewlineToNewDDL();
> +                       firstTime = false;
> +               }
> +
> +        rs.close();
> +        ps.close();
> +       }
> +    /** Strip the trailing NOT NULL off of the string representation of a 
> datatype */
> +    private static String stripNotNull( String datatypeName )
> +    {
> +        int idx = datatypeName.indexOf( "NOT" );
> +        if ( idx > 0 ) { return datatypeName.substring( 0, idx ); }
> +        else { return datatypeName; }
> +    }
> +
> +       /**
> +     * <p>
> +        * Generate DDL for a specific sequence.
> +     * </p>
> +     *
> +     * @param fullName Fully qualified name of the sequence
> +     * @param dataTypeName Name of the datatype of the sequence
> +     * @param startValue First value to use in the range of the sequence
> +     * @param minimumValue Smallest value in the range
> +     * @param maximumValue Largest value in the range
> +     * @param increment Step size of the sequence
> +     * @param cycleOption CYCLE or NO CYCLE
> +     *
> +        * @return DDL for the current stored sequence
> +     */
> +       private static String createSequenceString
> +        (
> +         String fullName,
> +         String dataTypeName,
> +         long startValue,
> +         long minimumValue,
> +         long maximumValue,
> +         long increment,
> +         String cycleOption
> +         )
> +               throws SQLException
> +       {
> +               StringBuffer buffer = new StringBuffer();
> +
> +        buffer.append( "CREATE SEQUENCE " + fullName + '\n' );
> +
> +        buffer.append( "    AS " + dataTypeName + '\n' );
> +
> +        buffer.append( "    START WITH " + Long.toString( startValue ) + 
> '\n' );
> +
> +        buffer.append( "    INCREMENT BY " + Long.toString( increment ) + 
> '\n' );
> +
> +        buffer.append( "    MAXVALUE " + Long.toString( maximumValue ) + 
> '\n' );
> +
> +        buffer.append( "    MINVALUE " + Long.toString( minimumValue ) + 
> '\n' );
> +
> +        buffer.append( "    " + cycleOption + '\n' );
> +
> +               return buffer.toString();
> +       }
> +
> +}
>
> Propchange: 
> db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/dblook/DB_Sequence.java
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
> Modified: 
> db/derby/code/trunk/java/tools/org/apache/derby/loc/toolsmessages.properties
> URL: 
> http://svn.apache.org/viewvc/db/derby/code/trunk/java/tools/org/apache/derby/loc/toolsmessages.properties?rev=898123&r1=898122&r2=898123&view=diff
> ==============================================================================
> --- 
> db/derby/code/trunk/java/tools/org/apache/derby/loc/toolsmessages.properties 
> (original)
> +++ 
> db/derby/code/trunk/java/tools/org/apache/derby/loc/toolsmessages.properties 
> Tue Jan 12 00:02:33 2010
> @@ -242,6 +242,7 @@
>  DBLOOK_ForeignHeader=foreign
>  DBLOOK_FunctionHeader=DDL Statements for functions
>  DBLOOK_SchemasHeader=DDL Statements for schemas
> +DBLOOK_SequenceHeader=DDL Statements for sequences
>  DBLOOK_StoredProcHeader=DDL Statements for stored procedures
>  DBLOOK_SynonymHeader=DDL Statements for Synonyms
>  DBLOOK_TriggersHeader=DDL Statements for triggers
> @@ -250,6 +251,7 @@
>  DBLOOK_TablePrivHeader=GRANT statements for tables
>  DBLOOK_ColumnPrivHeader=GRANT statements for columns
>  DBLOOK_RoutinePrivHeader=GRANT statements for routines
> +DBLOOK_SequencePrivHeader=GRANT statements for sequences
>  DBLOOK_UDTPrivHeader=GRANT statements for user defined types
>  DBLOOK_Role_definitions_header=CREATE statements for roles
>  DBLOOK_Role_grants_header=GRANT statements for roles
>
> Modified: db/derby/code/trunk/java/tools/org/apache/derby/tools/dblook.java
> URL: 
> http://svn.apache.org/viewvc/db/derby/code/trunk/java/tools/org/apache/derby/tools/dblook.java?rev=898123&r1=898122&r2=898123&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/tools/org/apache/derby/tools/dblook.java 
> (original)
> +++ db/derby/code/trunk/java/tools/org/apache/derby/tools/dblook.java Tue Jan 
> 12 00:02:33 2010
> @@ -45,6 +45,7 @@
>  import org.apache.derby.impl.tools.dblook.DB_Key;
>  import org.apache.derby.impl.tools.dblook.DB_Table;
>  import org.apache.derby.impl.tools.dblook.DB_Schema;
> +import org.apache.derby.impl.tools.dblook.DB_Sequence;
>  import org.apache.derby.impl.tools.dblook.DB_Alias;
>  import org.apache.derby.impl.tools.dblook.DB_Trigger;
>  import org.apache.derby.impl.tools.dblook.DB_View;
> @@ -516,6 +517,8 @@
>                        this.conn = DriverManager.getConnection(sourceDBUrl);
>                        prepForDump();
>
> +            boolean at10_6 = atVersion( conn, 10, 6 );
> +
>                        // Generate DDL.
>
>                        // Start with schemas, since we might need them to
> @@ -523,10 +526,12 @@
>                        DB_Schema.doSchemas(this.conn,
>                                (tableList != null) && (targetSchema == null));
>
> +            DB_Sequence.doSequences( conn );
> +
>                        if (tableList == null) {
>                        // Don't do these if user just wants table-related 
> objects.
>                                DB_Jar.doJars(sourceDBName, this.conn);
> -                               
> DB_Alias.doProceduresFunctionsAndUDTs(this.conn);
> +                               
> DB_Alias.doProceduresFunctionsAndUDTs(this.conn, at10_6 );
>                        }
>
>                        DB_Table.doTables(this.conn, tableIdToNameMap);
> @@ -541,7 +546,7 @@
>                        DB_Trigger.doTriggers(this.conn);
>
>                        DB_Roles.doRoles(this.conn);
> -                       DB_GrantRevoke.doAuthorizations(this.conn);
> +                       DB_GrantRevoke.doAuthorizations(this.conn, at10_6);
>
>                        // That's it; we're done.
>                        if (getColNameFromNumberQuery != null)
> @@ -1155,5 +1160,37 @@
>
>        }
>
> +    /**
> +     * Return true if we are at 10.6 or later.
> +     */
> +    private static boolean atVersion( Connection conn, int major, int minor 
> ) throws SQLException
> +    {
> +        PreparedStatement ps = null;
> +        ResultSet rs =  null;
> +        try {
> +            ps = conn.prepareStatement( "values 
> syscs_util.syscs_get_database_property('DataDictionaryVersion')" );
> +            rs = ps.executeQuery();
> +
> +            rs.next();
> +
> +            String versionString = rs.getString( 1 );
> +            int  dotIdx = versionString.indexOf( '.' );
> +            int actualMajor = Integer.parseInt( versionString.substring( 0, 
> dotIdx ) );
> +            int actualMinor = Integer.parseInt( versionString.substring( 
> dotIdx + 1, versionString.length() ) );
> +
> +            if ( actualMajor > major ) { return true; }
> +            if ( actualMajor < major ) { return false; }
> +
> +            boolean result = ( actualMinor >= minor );
> +
> +            return result;
> +        }
> +        finally
> +        {
> +            if ( rs != null ) { rs.close(); }
> +            if ( ps != null ) { ps.close(); }
> +        }
> +    }
> +
>  }
>
>
>
>

Reply via email to