# 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.sql.editor/src/org/netbeans/modules/db/sql/lexer/SQLLexer.java --- db.sql.editor/src/org/netbeans/modules/db/sql/lexer/SQLLexer.java Base (BASE) +++ db.sql.editor/src/org/netbeans/modules/db/sql/lexer/SQLLexer.java Locally Modified (Based On LOCAL) @@ -197,11 +197,9 @@ if (!isEndIdentifierQuoteChar(startQuoteChar, actChar)) { break; } else { - if (actChar == '"') { state = State.ISA_QUOTE_IN_IDENTIFIER; break; } - } } else { if (Character.isLetterOrDigit(actChar) || actChar == '_' || actChar == '#') { break; @@ -214,11 +212,9 @@ return factory.createToken(testKeyword(input.readText())); case ISA_QUOTE_IN_IDENTIFIER: - switch (actChar) { - case '"': + if(isEndIdentifierQuoteChar(startQuoteChar, actChar)) { state = State.ISI_IDENTIFIER; - break; - default: + } else { state = State.INIT; startQuoteChar = -1; input.backup(1); Index: db.sql.editor/test/unit/src/org/netbeans/modules/db/sql/lexer/SQLLexerTest.java --- db.sql.editor/test/unit/src/org/netbeans/modules/db/sql/lexer/SQLLexerTest.java Base (BASE) +++ db.sql.editor/test/unit/src/org/netbeans/modules/db/sql/lexer/SQLLexerTest.java Locally Modified (Based On LOCAL) @@ -80,6 +80,17 @@ SQLTokenId.WHITESPACE); } + /** + * Test escape in quoted identifiers following SQL99 methology + */ + public void testQuotedIdentifiers2() throws Exception { + TokenSequence seq = getTokenSequence("\"derby\"\"\",`mysql```,[mssql]]]"); + assertTokens(seq, SQLTokenId.IDENTIFIER, + SQLTokenId.COMMA, SQLTokenId.IDENTIFIER, + SQLTokenId.COMMA, SQLTokenId.IDENTIFIER, + SQLTokenId.WHITESPACE); + } + public void testSimpleSQL99Quoting() throws Exception { TokenSequence seq = getTokenSequence("select -/ from 'a''' + 1, dto"); assertTokens(seq, SQLTokenId.KEYWORD, SQLTokenId.WHITESPACE, SQLTokenId.OPERATOR, @@ -199,11 +210,13 @@ } private static TokenSequence getTokenSequence(String sql) throws BadLocationException { - Document doc = new ModificationTextDocument(); + ModificationTextDocument doc = new ModificationTextDocument(); doc.insertString(0, sql, null); doc.putProperty(Language.class, SQLTokenId.language()); TokenHierarchy hi = TokenHierarchy.get(doc); + doc.readLock(); TokenSequence seq = hi.tokenSequence(SQLTokenId.language()); + doc.readUnlock(); seq.moveStart(); return seq; }