Return-Path: Delivered-To: apmail-db-ddlutils-dev-archive@www.apache.org Received: (qmail 24010 invoked from network); 12 Jul 2006 05:36:01 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 12 Jul 2006 05:36:01 -0000 Received: (qmail 38674 invoked by uid 500); 12 Jul 2006 05:35:56 -0000 Delivered-To: apmail-db-ddlutils-dev-archive@db.apache.org Received: (qmail 38626 invoked by uid 500); 12 Jul 2006 05:35:56 -0000 Mailing-List: contact ddlutils-dev-help@db.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: ddlutils-dev@db.apache.org Delivered-To: mailing list ddlutils-dev@db.apache.org Received: (qmail 38569 invoked by uid 500); 12 Jul 2006 05:35:55 -0000 Delivered-To: apmail-db-ddlutils-commits@db.apache.org Received: (qmail 38552 invoked by uid 99); 12 Jul 2006 05:35:55 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 11 Jul 2006 22:35:55 -0700 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME,UPPERCASE_25_50 X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [140.211.166.113] (HELO eris.apache.org) (140.211.166.113) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 11 Jul 2006 22:35:54 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 315701A981A; Tue, 11 Jul 2006 22:35:34 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r421134 - in /db/ddlutils/trunk/src: java/org/apache/ddlutils/platform/ java/org/apache/ddlutils/platform/interbase/ test/org/apache/ddlutils/platform/ Date: Wed, 12 Jul 2006 05:35:33 -0000 To: ddlutils-commits@db.apache.org From: tomdz@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20060712053534.315701A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: tomdz Date: Tue Jul 11 22:35:32 2006 New Revision: 421134 URL: http://svn.apache.org/viewvc?rev=421134&view=rev Log: Enhancements to the Interbase platform Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseBuilder.java db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseModelReader.java db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbasePlatform.java db/ddlutils/trunk/src/test/org/apache/ddlutils/platform/TestInterbasePlatform.java Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java?rev=421134&r1=421133&r2=421134&view=diff ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java Tue Jul 11 22:35:32 2006 @@ -1856,7 +1856,7 @@ * @param table The table * @return The table name */ - protected String getTableName(Table table) + public String getTableName(Table table) { return shortenName(table.getName(), getPlatformInfo().getMaxIdentifierLength()); } @@ -2421,7 +2421,7 @@ * @param index The index * @return The index name */ - protected String getIndexName(Index index) throws IOException + public String getIndexName(Index index) { return index.getName(); } Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseBuilder.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseBuilder.java?rev=421134&r1=421133&r2=421134&view=diff ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseBuilder.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseBuilder.java Tue Jul 11 22:35:32 2006 @@ -24,6 +24,7 @@ import org.apache.ddlutils.model.Column; import org.apache.ddlutils.model.Database; import org.apache.ddlutils.model.ForeignKey; +import org.apache.ddlutils.model.Index; import org.apache.ddlutils.model.Table; import org.apache.ddlutils.platform.SqlBuilder; import org.apache.ddlutils.util.Jdbc3Utils; @@ -50,29 +51,6 @@ /** * {@inheritDoc} */ - protected void writeExternalForeignKeyCreateStmt(Database database, Table table, ForeignKey key) throws IOException - { - super.writeExternalForeignKeyCreateStmt(database, table, key); - if (key.getForeignTableName() != null) - { - print("COMMIT"); - printEndOfStatement(); - } - } - - /** - * {@inheritDoc} - */ - protected void writeExternalForeignKeyDropStmt(Table table, ForeignKey foreignKey) throws IOException - { - super.writeExternalForeignKeyDropStmt(table, foreignKey); - print("COMMIT"); - printEndOfStatement(); - } - - /** - * {@inheritDoc} - */ public void createTable(Database database, Table table, Map parameters) throws IOException { super.createTable(database, table, parameters); @@ -115,6 +93,18 @@ writeAutoIncrementDropStmts(table, columns[idx]); } super.dropTable(table); + } + + /** + * {@inheritDoc} + */ + public void writeExternalIndexDropStmt(Table table, Index index) throws IOException + { + // Index names in Interbase are unique to a schema and hence we do not + // need the ON clause + print("DROP INDEX "); + printIdentifier(getIndexName(index)); + printEndOfStatement(); } /** Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseModelReader.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseModelReader.java?rev=421134&r1=421133&r2=421134&view=diff ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseModelReader.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseModelReader.java Tue Jul 11 22:35:32 2006 @@ -29,6 +29,7 @@ import org.apache.ddlutils.Platform; import org.apache.ddlutils.model.Column; +import org.apache.ddlutils.model.ForeignKey; import org.apache.ddlutils.model.Index; import org.apache.ddlutils.model.Table; import org.apache.ddlutils.model.TypeMap; @@ -315,13 +316,70 @@ } return pks; } - + + /** + * {@inheritDoc} + */ + protected boolean isInternalPrimaryKeyIndex(DatabaseMetaDataWrapper metaData, Table table, Index index) throws SQLException + { + String tableName = getPlatform().getSqlBuilder().getTableName(table); + String indexName = getPlatform().getSqlBuilder().getIndexName(index); + StringBuffer query = new StringBuffer(); + + query.append("SELECT RDB$CONSTRAINT_NAME FROM RDB$RELATION_CONSTRAINTS where RDB$RELATION_NAME=? AND RDB$CONSTRAINT_TYPE=? AND RDB$INDEX_NAME=?"); + + PreparedStatement stmt = getConnection().prepareStatement(query.toString()); + + try + { + stmt.setString(1, getPlatform().isDelimitedIdentifierModeOn() ? tableName : tableName.toUpperCase()); + stmt.setString(2, "PRIMARY KEY"); + stmt.setString(3, indexName); + + ResultSet resultSet = stmt.executeQuery(); + + return resultSet.next(); + } + finally + { + if (stmt != null) + { + stmt.close(); + } + } + } + /** * {@inheritDoc} */ - protected boolean isInternalPrimaryKeyIndex(DatabaseMetaDataWrapper metaData, Table table, Index index) + protected boolean isInternalForeignKeyIndex(DatabaseMetaDataWrapper metaData, Table table, ForeignKey fk, Index index) throws SQLException { - // Interbase generates an unique index for the pks of the form "RDB$PRIMARY825" - return index.getName().startsWith("RDB$PRIMARY"); + String tableName = getPlatform().getSqlBuilder().getTableName(table); + String indexName = getPlatform().getSqlBuilder().getIndexName(index); + String fkName = getPlatform().getSqlBuilder().getForeignKeyName(table, fk); + StringBuffer query = new StringBuffer(); + + query.append("SELECT RDB$CONSTRAINT_NAME FROM RDB$RELATION_CONSTRAINTS where RDB$RELATION_NAME=? AND RDB$CONSTRAINT_TYPE=? AND RDB$CONSTRAINT_NAME=? AND RDB$INDEX_NAME=?"); + + PreparedStatement stmt = getConnection().prepareStatement(query.toString()); + + try + { + stmt.setString(1, getPlatform().isDelimitedIdentifierModeOn() ? tableName : tableName.toUpperCase()); + stmt.setString(2, "FOREIGN KEY"); + stmt.setString(3, fkName); + stmt.setString(4, indexName); + + ResultSet resultSet = stmt.executeQuery(); + + return resultSet.next(); + } + finally + { + if (stmt != null) + { + stmt.close(); + } + } } } Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbasePlatform.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbasePlatform.java?rev=421134&r1=421133&r2=421134&view=diff ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbasePlatform.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbasePlatform.java Tue Jul 11 22:35:32 2006 @@ -84,10 +84,10 @@ info.addNativeTypeMapping("BOOLEAN", "SMALLINT", "SMALLINT"); info.addNativeTypeMapping("DATALINK", "BLOB", "LONGVARBINARY"); - info.setDefaultSize(Types.CHAR, 254); - info.setDefaultSize(Types.VARCHAR, 254); - info.setDefaultSize(Types.BINARY, 254); - info.setDefaultSize(Types.VARBINARY, 254); + info.setDefaultSize(Types.CHAR, 254); + info.setDefaultSize(Types.VARCHAR, 254); + info.setHasSize(Types.BINARY, false); + info.setHasSize(Types.VARBINARY, false); setSqlBuilder(new InterbaseBuilder(this)); setModelReader(new InterbaseModelReader(this)); @@ -121,6 +121,7 @@ { // Clob is not supported directly statement.setString(sqlIndex, (String)value); + return; } } super.setStatementParameterValue(statement, sqlIndex, typeCode, value); Modified: db/ddlutils/trunk/src/test/org/apache/ddlutils/platform/TestInterbasePlatform.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/test/org/apache/ddlutils/platform/TestInterbasePlatform.java?rev=421134&r1=421133&r2=421134&view=diff ============================================================================== --- db/ddlutils/trunk/src/test/org/apache/ddlutils/platform/TestInterbasePlatform.java (original) +++ db/ddlutils/trunk/src/test/org/apache/ddlutils/platform/TestInterbasePlatform.java Tue Jul 11 22:35:32 2006 @@ -52,12 +52,11 @@ { assertEqualsIgnoringWhitespaces( "DROP TABLE \"coltype\";\n"+ - "COMMIT;\n"+ "CREATE TABLE \"coltype\"\n"+ "(\n"+ " \"COL_ARRAY\" BLOB ,\n"+ " \"COL_BIGINT\" NUMERIC(18,0),\n"+ - " \"COL_BINARY\" CHAR CHARACTER SET OCTETS,\n"+ + " \"COL_BINARY\" BLOB,\n"+ " \"COL_BIT\" SMALLINT,\n"+ " \"COL_BLOB\" BLOB ,\n"+ " \"COL_BOOLEAN\" SMALLINT,\n"+ @@ -84,10 +83,9 @@ " \"COL_TIME\" TIME,\n"+ " \"COL_TIMESTAMP\" TIMESTAMP,\n"+ " \"COL_TINYINT\" SMALLINT,\n"+ - " \"COL_VARBINARY\" VARCHAR(15) CHARACTER SET OCTETS,\n"+ + " \"COL_VARBINARY\" BLOB,\n"+ " \"COL_VARCHAR\" VARCHAR(15)\n"+ - ");\n"+ - "COMMIT;\n", + ");\n", createTestDatabase(COLUMN_TEST_SCHEMA)); } @@ -97,45 +95,29 @@ public void testColumnConstraints() throws Exception { assertEqualsIgnoringWhitespaces( - "DELETE FROM RDB$GENERATOR WHERE RDB$GENERATOR_NAME = \"gen_constraints_OL_PK_AUTO_INCR\";\n" + - "COMMIT;\n"+ - "DELETE FROM RDB$GENERATOR WHERE RDB$GENERATOR_NAME = \"gen_constraints_COL_AUTO_INCR\";\n" + - "COMMIT;\n"+ + "DROP TRIGGER \"trg_constraints_OL_PK_AUTO_INCR\";\n"+ + "DROP GENERATOR \"gen_constraints_OL_PK_AUTO_INCR\";\n" + + "DROP TRIGGER \"trg_constraints_COL_AUTO_INCR\";\n"+ + "DROP GENERATOR \"gen_constraints_COL_AUTO_INCR\";\n" + "DROP TABLE \"constraints\";\n"+ - "COMMIT;\n"+ "CREATE TABLE \"constraints\"\n"+ "(\n"+ " \"COL_PK\" VARCHAR(32),\n"+ " \"COL_PK_AUTO_INCR\" INTEGER,\n"+ - " \"COL_NOT_NULL\" CHAR(100) CHARACTER SET OCTETS NOT NULL,\n"+ + " \"COL_NOT_NULL\" BLOB NOT NULL,\n"+ " \"COL_NOT_NULL_DEFAULT\" DOUBLE PRECISION DEFAULT -2.0 NOT NULL,\n"+ " \"COL_DEFAULT\" CHAR(4) DEFAULT 'test',\n"+ " \"COL_AUTO_INCR\" NUMERIC(18,0),\n"+ " PRIMARY KEY (\"COL_PK\", \"COL_PK_AUTO_INCR\")\n"+ ");\n"+ - "COMMIT;\n"+ "CREATE GENERATOR \"gen_constraints_OL_PK_AUTO_INCR\";\n" + - "COMMIT;\n"+ - "SET TERM !! ;\n"+ "CREATE TRIGGER \"trg_constraints_OL_PK_AUTO_INCR\" FOR \"constraints\"\n"+ "ACTIVE BEFORE INSERT POSITION 0 AS\n"+ - "BEGIN\n"+ - " IF (NEW.\"COL_PK_AUTO_INCR\" IS NULL) THEN\n"+ - " NEW.\"COL_PK_AUTO_INCR\" = GEN_ID(\"gen_constraints_OL_PK_AUTO_INCR\", 1);\n"+ - "END !!\n"+ - "SET TERM ; !!\n"+ - "COMMIT;\n"+ + "BEGIN IF (NEW.\"COL_PK_AUTO_INCR\" IS NULL) THEN NEW.\"COL_PK_AUTO_INCR\" = GEN_ID(\"gen_constraints_OL_PK_AUTO_INCR\", 1); END;\n"+ "CREATE GENERATOR \"gen_constraints_COL_AUTO_INCR\";\n" + - "COMMIT;\n"+ - "SET TERM !! ;\n"+ "CREATE TRIGGER \"trg_constraints_COL_AUTO_INCR\" FOR \"constraints\"\n"+ "ACTIVE BEFORE INSERT POSITION 0 AS\n"+ - "BEGIN\n"+ - " IF (NEW.\"COL_AUTO_INCR\" IS NULL) THEN\n"+ - " NEW.\"COL_AUTO_INCR\" = GEN_ID(\"gen_constraints_COL_AUTO_INCR\", 1);\n"+ - "END !!\n"+ - "SET TERM ; !!\n"+ - "COMMIT;\n", + "BEGIN IF (NEW.\"COL_AUTO_INCR\" IS NULL) THEN NEW.\"COL_AUTO_INCR\" = GEN_ID(\"gen_constraints_COL_AUTO_INCR\", 1); END;\n", createTestDatabase(COLUMN_CONSTRAINT_TEST_SCHEMA)); } @@ -146,27 +128,21 @@ { assertEqualsIgnoringWhitespaces( "ALTER TABLE \"table3\" DROP CONSTRAINT \"testfk\";\n"+ - "COMMIT;\n"+ "ALTER TABLE \"table2\" DROP CONSTRAINT \"table2_FK_COL_F_COL_FK_2_table1\";\n"+ - "COMMIT;\n"+ "DROP TABLE \"table3\";\n"+ - "COMMIT;\n"+ "DROP TABLE \"table2\";\n"+ - "COMMIT;\n"+ "DROP TABLE \"table1\";\n"+ - "COMMIT;\n"+ "CREATE TABLE \"table1\"\n"+ "(\n"+ " \"COL_PK_1\" VARCHAR(32) NOT NULL,\n"+ " \"COL_PK_2\" INTEGER,\n"+ - " \"COL_INDEX_1\" CHAR(100) CHARACTER SET OCTETS NOT NULL,\n"+ + " \"COL_INDEX_1\" BLOB NOT NULL,\n"+ " \"COL_INDEX_2\" DOUBLE PRECISION NOT NULL,\n"+ " \"COL_INDEX_3\" CHAR(4),\n"+ " PRIMARY KEY (\"COL_PK_1\", \"COL_PK_2\")\n"+ ");\n"+ "CREATE INDEX \"testindex1\" ON \"table1\" (\"COL_INDEX_2\");\n"+ "CREATE UNIQUE INDEX \"testindex2\" ON \"table1\" (\"COL_INDEX_3\", \"COL_INDEX_1\");\n"+ - "COMMIT;\n"+ "CREATE TABLE \"table2\"\n"+ "(\n"+ " \"COL_PK\" INTEGER,\n"+ @@ -174,18 +150,14 @@ " \"COL_FK_2\" VARCHAR(32) NOT NULL,\n"+ " PRIMARY KEY (\"COL_PK\")\n"+ ");\n"+ - "COMMIT;\n"+ "CREATE TABLE \"table3\"\n"+ "(\n"+ " \"COL_PK\" VARCHAR(16),\n"+ " \"COL_FK\" INTEGER NOT NULL,\n"+ " PRIMARY KEY (\"COL_PK\")\n"+ ");\n"+ - "COMMIT;\n"+ "ALTER TABLE \"table2\" ADD CONSTRAINT \"table2_FK_COL_F_COL_FK_2_table1\" FOREIGN KEY (\"COL_FK_1\", \"COL_FK_2\") REFERENCES \"table1\" (\"COL_PK_2\", \"COL_PK_1\");\n"+ - "COMMIT;\n"+ - "ALTER TABLE \"table3\" ADD CONSTRAINT \"testfk\" FOREIGN KEY (\"COL_FK\") REFERENCES \"table2\" (\"COL_PK\");\n"+ - "COMMIT;\n", + "ALTER TABLE \"table3\" ADD CONSTRAINT \"testfk\" FOREIGN KEY (\"COL_FK\") REFERENCES \"table2\" (\"COL_PK\");\n", createTestDatabase(TABLE_CONSTRAINT_TEST_SCHEMA)); } @@ -196,14 +168,12 @@ { assertEqualsIgnoringWhitespaces( "DROP TABLE \"escapedcharacters\";\n"+ - "COMMIT;\n"+ "CREATE TABLE \"escapedcharacters\"\n"+ "(\n"+ " \"COL_PK\" INTEGER,\n"+ " \"COL_TEXT\" VARCHAR(128) DEFAULT '\'\'',\n"+ " PRIMARY KEY (\"COL_PK\")\n"+ - ");\n"+ - "COMMIT;\n", + ");\n", createTestDatabase(COLUMN_CHAR_SEQUENCES_TO_ESCAPE)); } }