db-derby-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rhille...@apache.org
Subject svn commit: r898123 - in /db/derby/code/trunk/java: engine/org/apache/derby/impl/sql/compile/ engine/org/apache/derby/impl/sql/execute/ testing/org/apache/derbyTesting/functionTests/master/ testing/org/apache/derbyTesting/functionTests/tests/tools/ too...
Date Tue, 12 Jan 2010 00:02:33 GMT
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(); }
+        }
+    }
+	
 }
 



Mime
View raw message