# This patch file was generated by NetBeans IDE # Following Index: paths are relative to: /home/matthias/NetBeansProjects/core-main # This patch can be applied using context Tools: Patch action on respective folder. # It uses platform neutral UTF-8 encoding and \n newlines. # Above lines and this line are ignored by the patching process. Index: db/src/org/netbeans/api/db/sql/support/SQLIdentifiers.java --- db/src/org/netbeans/api/db/sql/support/SQLIdentifiers.java Base (BASE) +++ db/src/org/netbeans/api/db/sql/support/SQLIdentifiers.java Locally Modified (Based On LOCAL) @@ -124,16 +124,23 @@ public String unquote(String identifier) { Parameters.notNull("identifier", identifier); + boolean startQuoted = false; + String result = identifier; if (result.startsWith(quoteString)) { result = result.substring(quoteString.length()); + startQuoted = true; } if (result.endsWith(quoteString)) { result = result.substring(0, result.lastIndexOf(quoteString)); } + if(startQuoted) { + result = result.replace(quoteString + quoteString, quoteString); + } + return result; } @@ -147,7 +154,9 @@ } String doQuote(String identifier) { - return quoteString + identifier + quoteString; + return quoteString + + identifier.replace(quoteString, quoteString+quoteString) + + quoteString; } } Index: db/test/unit/src/org/netbeans/api/db/sql/support/QuoterTest.java --- db/test/unit/src/org/netbeans/api/db/sql/support/QuoterTest.java Base (BASE) +++ db/test/unit/src/org/netbeans/api/db/sql/support/QuoterTest.java Locally Modified (Based On LOCAL) @@ -169,4 +169,23 @@ assertEquals("id", quoter.unquote("id" + quoteString)); assertEquals("id", quoter.unquote(quoteString + "id" + quoteString)); } + + // Check SQL99-Quoting + public void testQuoteIdentifierContainingQuotingChar() { + String quoteString = quoter.getQuoteString(); + + String unquoted = "test" + quoteString + "xx"; + String quoted = quoteString + "test" + quoteString + quoteString + "xx" + + quoteString; + + assertEquals(quoted, quoter.quoteAlways(unquoted)); + assertEquals(unquoted, quoter.unquote(quoted)); + + String unquoted2 = "test" + quoteString + "xx" + quoteString + quoteString; + String quoted2 = quoteString + "test" + quoteString + quoteString + "xx" + + quoteString + quoteString + quoteString + quoteString + quoteString; + + assertEquals(quoted2, quoter.quoteAlways(unquoted2)); + assertEquals(unquoted2, quoter.unquote(quoted2)); } +}