This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 155167
Collapse All | Expand All

(-)a/db.sql.editor/src/org/netbeans/modules/db/sql/lexer/SQLLexer.java (-13 / +54 lines)
Lines 168-174 Link Here
168
                            state = State.ISA_BACK_SLASH_IN_STRING;
168
                            state = State.ISA_BACK_SLASH_IN_STRING;
169
                            break;
169
                            break;
170
                        case '\'': // NOI18N
170
                        case '\'': // NOI18N
171
                            state = State.ISA_QUOTE_IN_STRING;
172
                            //return factory.createToken(SQLTokenId.STRING);
173
                            break;
174
                    }
175
                    break;
176
177
                case ISA_QUOTE_IN_STRING:
178
                    switch (actChar) {
179
                        case '\'':
180
                            state = State.ISI_STRING;
181
                            break;
182
                        default:
171
                            state = State.INIT;
183
                            state = State.INIT;
184
                            input.backup(1);
172
                            return factory.createToken(SQLTokenId.STRING);
185
                            return factory.createToken(SQLTokenId.STRING);
173
                    }
186
                    }
174
                    break;
187
                    break;
Lines 184-189 Link Here
184
                    if (startQuoteChar != -1) {
197
                    if (startQuoteChar != -1) {
185
                        if (!isEndIdentifierQuoteChar(startQuoteChar, actChar)) {
198
                        if (!isEndIdentifierQuoteChar(startQuoteChar, actChar)) {
186
                            break;
199
                            break;
200
                        } else {
201
                            if (actChar == '"') {
202
                                state = State.ISA_QUOTE_IN_IDENTIFIER;
203
                                break;
204
                            }
187
                        }
205
                        }
188
                    } else {
206
                    } else {
189
                        if (Character.isLetterOrDigit(actChar) || actChar == '_' || actChar == '#') {
207
                        if (Character.isLetterOrDigit(actChar) || actChar == '_' || actChar == '#') {
Lines 196-201 Link Here
196
                    startQuoteChar = -1;
214
                    startQuoteChar = -1;
197
                    return factory.createToken(testKeyword(input.readText()));
215
                    return factory.createToken(testKeyword(input.readText()));
198
216
217
                case ISA_QUOTE_IN_IDENTIFIER:
218
                    switch (actChar) {
219
                        case '"':
220
                            state = State.ISI_IDENTIFIER;
221
                            break;
222
                        default:
223
                            state = State.INIT;
224
                            startQuoteChar = -1;
225
                            input.backup(1);
226
                            return factory.createToken(testKeyword(input.readText()));
227
                    }
228
                    break;
229
199
                // If we are after a slash (/).
230
                // If we are after a slash (/).
200
                case ISA_SLASH:
231
                case ISA_SLASH:
201
                    switch (actChar) {
232
                    switch (actChar) {
Lines 309-314 Link Here
309
        SQLTokenId id = null;
340
        SQLTokenId id = null;
310
        PartType part = PartType.COMPLETE;
341
        PartType part = PartType.COMPLETE;
311
        switch (state) {
342
        switch (state) {
343
            case ISA_QUOTE_IN_STRING:
344
                id = SQLTokenId.STRING;
345
                break;
346
347
            case ISA_QUOTE_IN_IDENTIFIER:
348
                id = SQLTokenId.IDENTIFIER;
349
                break;
350
                
312
            case ISI_WHITESPACE:
351
            case ISI_WHITESPACE:
313
                id = SQLTokenId.WHITESPACE;
352
                id = SQLTokenId.WHITESPACE;
314
                break;
353
                break;
Lines 411-430 Link Here
411
    private static enum State {
450
    private static enum State {
412
451
413
        INIT,
452
        INIT,
414
        ISI_WHITESPACE, // inside white space
453
        ISI_WHITESPACE,             // inside white space
415
        ISI_LINE_COMMENT, // inside line comment --
454
        ISI_LINE_COMMENT,           // inside line comment --
416
        ISI_BLOCK_COMMENT, // inside block comment /* ... */
455
        ISI_BLOCK_COMMENT,          // inside block comment /* ... */
417
        ISI_STRING, // inside string constant
456
        ISI_STRING,                 // inside string constant
418
        ISI_IDENTIFIER, // inside identifier
457
        ISI_IDENTIFIER,             // inside identifier
419
        ISA_SLASH, // slash char
458
        ISA_SLASH,                  // slash char
420
        ISA_HASH, // hash char '#'
459
        ISA_HASH,                   // hash char '#'
421
        ISA_MINUS,
460
        ISA_MINUS,
422
        ISA_STAR_IN_BLOCK_COMMENT, // after '*' in a block comment
461
        ISA_STAR_IN_BLOCK_COMMENT,  // after '*' in a block comment
423
        // XXX is ISA_ZERO really needed?
462
        // XXX is ISA_ZERO really needed?
424
        ISA_ZERO, // after '0'
463
        ISA_ZERO,                   // after '0'
425
        ISI_INT, // integer number
464
        ISI_INT,                    // integer number
426
        ISI_DOUBLE, // double number
465
        ISI_DOUBLE,                 // double number
427
        ISA_DOT, // after '.'
466
        ISA_DOT,                    // after '.'
428
        ISA_BACK_SLASH_IN_STRING // after \ in string
467
        ISA_BACK_SLASH_IN_STRING,   // after \ in string
468
        ISA_QUOTE_IN_STRING,        // encountered quote in string - could be sql99 escape
469
        ISA_QUOTE_IN_IDENTIFIER     // encountered quote in identifier - could be sql99 escape
429
    }
470
    }
430
}
471
}
(-)a/db.sql.editor/test/unit/src/org/netbeans/modules/db/sql/lexer/SQLLexerTest.java (+20 lines)
Lines 71-76 Link Here
71
                SQLTokenId.WHITESPACE);
71
                SQLTokenId.WHITESPACE);
72
    }
72
    }
73
73
74
    public void testSimpleSQL99Quoting() throws Exception {
75
        TokenSequence<SQLTokenId> seq = getTokenSequence("select -/ from 'a''' + 1, dto");
76
        assertTokens(seq, SQLTokenId.KEYWORD, SQLTokenId.WHITESPACE, SQLTokenId.OPERATOR,
77
                SQLTokenId.OPERATOR, SQLTokenId.WHITESPACE, SQLTokenId.KEYWORD,
78
                SQLTokenId.WHITESPACE, SQLTokenId.STRING, SQLTokenId.WHITESPACE,
79
                SQLTokenId.OPERATOR, SQLTokenId.WHITESPACE, SQLTokenId.INT_LITERAL,
80
                SQLTokenId.COMMA, SQLTokenId.WHITESPACE, SQLTokenId.IDENTIFIER,
81
                SQLTokenId.WHITESPACE);
82
        
83
    }
84
74
    public void testQuotedIdentifiers() throws Exception {
85
    public void testQuotedIdentifiers() throws Exception {
75
        TokenSequence<SQLTokenId> seq = getTokenSequence("select \"derby\", `mysql`, [mssql], `quo + ted`");
86
        TokenSequence<SQLTokenId> seq = getTokenSequence("select \"derby\", `mysql`, [mssql], `quo + ted`");
76
        assertTokens(seq, SQLTokenId.KEYWORD, SQLTokenId.WHITESPACE, SQLTokenId.IDENTIFIER,
87
        assertTokens(seq, SQLTokenId.KEYWORD, SQLTokenId.WHITESPACE, SQLTokenId.IDENTIFIER,
Lines 80-85 Link Here
80
                SQLTokenId.WHITESPACE);
91
                SQLTokenId.WHITESPACE);
81
    }
92
    }
82
93
94
    public void testQuotedIdentifiersSQL99Quote() throws Exception {
95
        TokenSequence<SQLTokenId> seq = getTokenSequence("select \"\"\"derby\", `mysql`, [mssql], `quo + ted`");
96
        assertTokens(seq, SQLTokenId.KEYWORD, SQLTokenId.WHITESPACE, SQLTokenId.IDENTIFIER,
97
                SQLTokenId.COMMA, SQLTokenId.WHITESPACE, SQLTokenId.IDENTIFIER,
98
                SQLTokenId.COMMA, SQLTokenId.WHITESPACE, SQLTokenId.IDENTIFIER,
99
                SQLTokenId.COMMA, SQLTokenId.WHITESPACE, SQLTokenId.IDENTIFIER,
100
                SQLTokenId.WHITESPACE);
101
    }
102
    
83
    public void testComments() throws Exception {
103
    public void testComments() throws Exception {
84
        TokenSequence<SQLTokenId> seq = getTokenSequence("-- line comment\n# mysql comment\n/* block \ncomment*/\n#notComment");
104
        TokenSequence<SQLTokenId> seq = getTokenSequence("-- line comment\n# mysql comment\n/* block \ncomment*/\n#notComment");
85
        assertTokens(seq, SQLTokenId.LINE_COMMENT, SQLTokenId.LINE_COMMENT,
105
        assertTokens(seq, SQLTokenId.LINE_COMMENT, SQLTokenId.LINE_COMMENT,

Return to bug 155167