Thanks, Mamta. I will scrub this and, while I'm in there, I'll clean up the javadoc errors in RuntimeStatisticsParser.

Cheers,
-Rick

Mamta Satoor wrote:
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