Author: tomdz Date: Mon Oct 3 23:27:51 2005 New Revision: 293549 URL: http://svn.apache.org/viewcvs?rev=293549&view=rev Log: Fix for DDLUTILS-21 which ensures that for Microsoft SQL Server and Sybase, identifiers are always enclosed in single quotes when used for comparison in a WHERE clause (regardless of whether delimited identifiers are used)
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/MSSqlBuilder.java db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/SybaseBuilder.java db/ddlutils/trunk/src/test/org/apache/ddlutils/platform/TestMSSqlPlatform.java db/ddlutils/trunk/src/test/org/apache/ddlutils/platform/TestSybasePlatform.java Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/MSSqlBuilder.java URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/MSSqlBuilder.java?rev=293549&r1=293548&r2=293549&view=diff ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/MSSqlBuilder.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/MSSqlBuilder.java Mon Oct 3 23:27:51 2005 @@ -72,7 +72,7 @@ writeQuotationOnStatement(); print("IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = "); - printAlwaysQuotedIdentifier(tableName); + printAlwaysSingleQuotedIdentifier(tableName); println(")"); println("BEGIN"); println(" DECLARE @reftable nvarchar(60), @constraintname nvarchar(60)"); @@ -86,7 +86,7 @@ println(" and cons.id = ref.constid"); println(" and reftables.id = ref.fkeyid"); print(" and tables.name = "); - printAlwaysQuotedIdentifier(tableName); + printAlwaysSingleQuotedIdentifier(tableName); println(" OPEN refcursor"); println(" FETCH NEXT from refcursor into @reftable, @constraintname"); println(" while @@FETCH_STATUS = 0"); @@ -162,7 +162,7 @@ String constraintName = foreignKey.getName() == null ? getConstraintName(null, table, "FK", getForeignKeyName(foreignKey)) : foreignKey.getName(); print("IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'RI' AND name = "); - printAlwaysQuotedIdentifier(constraintName); + printAlwaysSingleQuotedIdentifier(constraintName); println(")"); printIndent(); print("ALTER TABLE "); @@ -226,22 +226,15 @@ } /** - * Prints the given identifier with enforced quotes. If delimited identifiers are - * turned on, this will use the normal [EMAIL PROTECTED] SqlBuilder#printIdentifier(String)} - * method. If not, single quotation marks are used around the identifier. + * Prints the given identifier with enforced single quotes around it regardless of whether + * delimited identifiers are turned on or not. * * @param identifier The identifier */ - private void printAlwaysQuotedIdentifier(String identifier) throws IOException + private void printAlwaysSingleQuotedIdentifier(String identifier) throws IOException { - if (!getPlatformInfo().isUseDelimitedIdentifiers()) - { - print("'"); - } - printIdentifier(identifier); - if (!getPlatformInfo().isUseDelimitedIdentifiers()) - { - print("'"); - } + print("'"); + print(identifier); + print("'"); } } Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/SybaseBuilder.java URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/SybaseBuilder.java?rev=293549&r1=293548&r2=293549&view=diff ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/SybaseBuilder.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/SybaseBuilder.java Mon Oct 3 23:27:51 2005 @@ -68,7 +68,7 @@ { writeQuotationOnStatement(); print("IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = "); - printAlwaysQuotedIdentifier(getTableName(table)); + printAlwaysSingleQuotedIdentifier(getTableName(table)); println(")"); println("BEGIN"); printIndent(); @@ -86,7 +86,7 @@ String constraintName = foreignKey.getName() == null ? getConstraintName(null, table, "FK", getForeignKeyName(foreignKey)) : foreignKey.getName(); print("IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'RI' AND name = "); - printAlwaysQuotedIdentifier(constraintName); + printAlwaysSingleQuotedIdentifier(constraintName); println(")"); printIndent(); print("ALTER TABLE "); @@ -159,22 +159,15 @@ } /** - * Prints the given identifier with enforced quotes. If delimited identifiers are - * turned on, this will use the normal [EMAIL PROTECTED] SqlBuilder#printIdentifier(String)} - * method. If not, single quotation marks are used around the identifier. + * Prints the given identifier with enforced single quotes around it regardless of whether + * delimited identifiers are turned on or not. * * @param identifier The identifier */ - private void printAlwaysQuotedIdentifier(String identifier) throws IOException + private void printAlwaysSingleQuotedIdentifier(String identifier) throws IOException { - if (!getPlatformInfo().isUseDelimitedIdentifiers()) - { - print("'"); - } - printIdentifier(identifier); - if (!getPlatformInfo().isUseDelimitedIdentifiers()) - { - print("'"); - } + print("'"); + print(identifier); + print("'"); } } Modified: db/ddlutils/trunk/src/test/org/apache/ddlutils/platform/TestMSSqlPlatform.java URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/test/org/apache/ddlutils/platform/TestMSSqlPlatform.java?rev=293549&r1=293548&r2=293549&view=diff ============================================================================== --- db/ddlutils/trunk/src/test/org/apache/ddlutils/platform/TestMSSqlPlatform.java (original) +++ db/ddlutils/trunk/src/test/org/apache/ddlutils/platform/TestMSSqlPlatform.java Mon Oct 3 23:27:51 2005 @@ -43,7 +43,7 @@ assertEqualsIgnoringWhitespaces( "SET quoted_identifier on;\n"+ "SET quoted_identifier on;\n"+ - "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = \"coltype\")\n"+ + "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'coltype')\n"+ "BEGIN\n"+ " DECLARE @reftable nvarchar(60), @constraintname nvarchar(60)\n"+ " DECLARE refcursor CURSOR FOR\n"+ @@ -55,7 +55,7 @@ " where tables.id = ref.rkeyid\n"+ " and cons.id = ref.constid\n"+ " and reftables.id = ref.fkeyid\n"+ - " and tables.name = \"coltype\"\n"+ + " and tables.name = 'coltype'\n"+ " OPEN refcursor\n"+ " FETCH NEXT from refcursor into @reftable, @constraintname\n"+ " while @@FETCH_STATUS = 0\n"+ @@ -115,7 +115,7 @@ assertEqualsIgnoringWhitespaces( "SET quoted_identifier on;\n"+ "SET quoted_identifier on;\n"+ - "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = \"constraints\")\n"+ + "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'constraints')\n"+ "BEGIN\n"+ " DECLARE @reftable nvarchar(60), @constraintname nvarchar(60)\n"+ " DECLARE refcursor CURSOR FOR\n"+ @@ -127,7 +127,7 @@ " where tables.id = ref.rkeyid\n"+ " and cons.id = ref.constid\n"+ " and reftables.id = ref.fkeyid\n"+ - " and tables.name = \"constraints\"\n"+ + " and tables.name = 'constraints'\n"+ " OPEN refcursor\n"+ " FETCH NEXT from refcursor into @reftable, @constraintname\n"+ " while @@FETCH_STATUS = 0\n"+ @@ -160,14 +160,14 @@ { assertEqualsIgnoringWhitespaces( "SET quoted_identifier on;\n"+ - "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'RI' AND name = \"testfk\")\n"+ + "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'RI' AND name = 'testfk')\n"+ " ALTER TABLE \"table3\" DROP CONSTRAINT \"testfk\";\n"+ "SET quoted_identifier on;\n"+ - "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'RI' AND name = \"table2_FK_COL_FK_1_COL_FK_2_table1\")\n"+ + "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'RI' AND name = 'table2_FK_COL_FK_1_COL_FK_2_table1')\n"+ " ALTER TABLE \"table2\" DROP CONSTRAINT \"table2_FK_COL_FK_1_COL_FK_2_table1\";\n"+ "SET quoted_identifier on;\n"+ "SET quoted_identifier on;\n"+ - "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = \"table3\")\n"+ + "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'table3')\n"+ "BEGIN\n"+ " DECLARE @reftable nvarchar(60), @constraintname nvarchar(60)\n"+ " DECLARE refcursor CURSOR FOR\n"+ @@ -179,7 +179,7 @@ " where tables.id = ref.rkeyid\n"+ " and cons.id = ref.constid\n"+ " and reftables.id = ref.fkeyid\n"+ - " and tables.name = \"table3\"\n"+ + " and tables.name = 'table3'\n"+ " OPEN refcursor\n"+ " FETCH NEXT from refcursor into @reftable, @constraintname\n"+ " while @@FETCH_STATUS = 0\n"+ @@ -192,7 +192,7 @@ " DROP TABLE \"table3\"\n"+ "END;\n"+ "SET quoted_identifier on;\n"+ - "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = \"table2\")\n"+ + "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'table2')\n"+ "BEGIN\n"+ " DECLARE @reftable nvarchar(60), @constraintname nvarchar(60)\n"+ " DECLARE refcursor CURSOR FOR\n"+ @@ -204,7 +204,7 @@ " where tables.id = ref.rkeyid\n"+ " and cons.id = ref.constid\n"+ " and reftables.id = ref.fkeyid\n"+ - " and tables.name = \"table2\"\n"+ + " and tables.name = 'table2'\n"+ " OPEN refcursor\n"+ " FETCH NEXT from refcursor into @reftable, @constraintname\n"+ " while @@FETCH_STATUS = 0\n"+ @@ -217,7 +217,7 @@ " DROP TABLE \"table2\"\n"+ "END;\n"+ "SET quoted_identifier on;\n"+ - "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = \"table1\")\n"+ + "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'table1')\n"+ "BEGIN\n"+ " DECLARE @reftable nvarchar(60), @constraintname nvarchar(60)\n"+ " DECLARE refcursor CURSOR FOR\n"+ @@ -229,7 +229,7 @@ " where tables.id = ref.rkeyid\n"+ " and cons.id = ref.constid\n"+ " and reftables.id = ref.fkeyid\n"+ - " and tables.name = \"table1\"\n"+ + " and tables.name = 'table1'\n"+ " OPEN refcursor\n"+ " FETCH NEXT from refcursor into @reftable, @constraintname\n"+ " while @@FETCH_STATUS = 0\n"+ Modified: db/ddlutils/trunk/src/test/org/apache/ddlutils/platform/TestSybasePlatform.java URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/test/org/apache/ddlutils/platform/TestSybasePlatform.java?rev=293549&r1=293548&r2=293549&view=diff ============================================================================== --- db/ddlutils/trunk/src/test/org/apache/ddlutils/platform/TestSybasePlatform.java (original) +++ db/ddlutils/trunk/src/test/org/apache/ddlutils/platform/TestSybasePlatform.java Mon Oct 3 23:27:51 2005 @@ -43,7 +43,7 @@ assertEqualsIgnoringWhitespaces( "SET quoted_identifier on;\n"+ "SET quoted_identifier on;\n"+ - "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = \"coltype\")\n"+ + "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'coltype')\n"+ "BEGIN\n"+ " DROP TABLE \"coltype\"\n"+ "END;\n"+ @@ -94,7 +94,7 @@ assertEqualsIgnoringWhitespaces( "SET quoted_identifier on;\n"+ "SET quoted_identifier on;\n"+ - "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = \"constraints\")\n"+ + "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'constraints')\n"+ "BEGIN\n"+ " DROP TABLE \"constraints\"\n"+ "END;\n"+ @@ -119,24 +119,24 @@ { assertEqualsIgnoringWhitespaces( "SET quoted_identifier on;\n"+ - "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'RI' AND name = \"testfk\")\n"+ + "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'RI' AND name = 'testfk')\n"+ " ALTER TABLE \"table3\" DROP CONSTRAINT \"testfk\";\n"+ "SET quoted_identifier on;\n"+ - "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'RI' AND name = \"table2_FK_COL_F_OL_FK_2_table1\")\n"+ + "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'RI' AND name = 'table2_FK_COL_F_OL_FK_2_table1')\n"+ " ALTER TABLE \"table2\" DROP CONSTRAINT \"table2_FK_COL_F_OL_FK_2_table1\";\n"+ "SET quoted_identifier on;\n"+ "SET quoted_identifier on;\n"+ - "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = \"table3\")\n"+ + "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'table3')\n"+ "BEGIN\n"+ " DROP TABLE \"table3\"\n"+ "END;\n"+ "SET quoted_identifier on;\n"+ - "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = \"table2\")\n"+ + "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'table2')\n"+ "BEGIN\n"+ " DROP TABLE \"table2\"\n"+ "END;\n"+ "SET quoted_identifier on;\n"+ - "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = \"table1\")\n"+ + "IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'table1')\n"+ "BEGIN\n"+ " DROP TABLE \"table1\"\n"+ "END;\n"+