From 44f29c3983ccec9afa30b81f011055bbda3b06e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Sun, 7 Apr 2024 21:27:24 +0200 Subject: [PATCH 01/22] Fix #4396 - Fix PLSQL CPD being case-sensitive --- .../pmd/lang/plsql/cpd/PLSQLCpdLexer.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/cpd/PLSQLCpdLexer.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/cpd/PLSQLCpdLexer.java index c31a11d6447..cdb371aba7f 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/cpd/PLSQLCpdLexer.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/cpd/PLSQLCpdLexer.java @@ -4,6 +4,8 @@ package net.sourceforge.pmd.lang.plsql.cpd; +import java.util.Locale; + import net.sourceforge.pmd.cpd.CpdLanguageProperties; import net.sourceforge.pmd.cpd.impl.JavaccCpdLexer; import net.sourceforge.pmd.lang.LanguagePropertyBundle; @@ -37,16 +39,21 @@ protected String getImage(JavaccToken plsqlToken) { String image = plsqlToken.getImage(); if (ignoreIdentifiers && plsqlToken.kind == PLSQLTokenKinds.IDENTIFIER) { - image = String.valueOf(plsqlToken.kind); - } - - if (ignoreLiterals && (plsqlToken.kind == PLSQLTokenKinds.UNSIGNED_NUMERIC_LITERAL + image = ""; + } else if (ignoreLiterals && (plsqlToken.kind == PLSQLTokenKinds.UNSIGNED_NUMERIC_LITERAL || plsqlToken.kind == PLSQLTokenKinds.FLOAT_LITERAL || plsqlToken.kind == PLSQLTokenKinds.INTEGER_LITERAL || plsqlToken.kind == PLSQLTokenKinds.CHARACTER_LITERAL || plsqlToken.kind == PLSQLTokenKinds.STRING_LITERAL || plsqlToken.kind == PLSQLTokenKinds.QUOTED_LITERAL)) { - image = String.valueOf(plsqlToken.kind); + // note that all tokens kinds are mapped to the same type. + image = ""; + } else if (plsqlToken.kind != PLSQLTokenKinds.CHARACTER_LITERAL + && plsqlToken.kind != PLSQLTokenKinds.STRING_LITERAL + && plsqlToken.kind != PLSQLTokenKinds.QUOTED_LITERAL) { + // PLSQL is case-insensitive, but of course the contents of + // string literals and the like are case-sensitive + image = image.toLowerCase(Locale.ROOT); } return image; } From 72408ca679d4fba5175b6a5aa919777c19ecaba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Mon, 8 Apr 2024 20:43:34 +0200 Subject: [PATCH 02/22] Normalize image of PLSQL tokens to uppercase, reuse strings --- .../pmd/lang/plsql/ast/PLSQLParser.java | 39 ++++++++++++++++++- .../pmd/lang/plsql/cpd/PLSQLCpdLexer.java | 10 +++-- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParser.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParser.java index ac50bdc6a32..e61e6f23500 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParser.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParser.java @@ -4,16 +4,53 @@ package net.sourceforge.pmd.lang.plsql.ast; +import org.checkerframework.checker.nullness.qual.Nullable; + import net.sourceforge.pmd.benchmark.TimeTracker; import net.sourceforge.pmd.lang.ast.ParseException; import net.sourceforge.pmd.lang.ast.impl.javacc.CharStream; +import net.sourceforge.pmd.lang.ast.impl.javacc.JavaccToken; +import net.sourceforge.pmd.lang.ast.impl.javacc.JavaccTokenDocument; import net.sourceforge.pmd.lang.ast.impl.javacc.JavaccTokenDocument.TokenDocumentBehavior; import net.sourceforge.pmd.lang.ast.impl.javacc.JjtreeParserAdapter; import net.sourceforge.pmd.lang.plsql.symboltable.SymbolFacade; public class PLSQLParser extends JjtreeParserAdapter { - private static final TokenDocumentBehavior TOKEN_BEHAVIOR = new TokenDocumentBehavior(PLSQLTokenKinds.TOKEN_NAMES); + // Stores images of constant string literals. + // This is to reuse the image strings for PLSQL keywords. + // JavaCC unfortunately does not store a constant image for those + // keywords because the grammar is case-insensitive. + // This optimization has the effect that the image of keyword tokens + // is always upper-case, regardless of the actual case used in the code. + // The original casing can be found by looking at the TextDocument for the file. + + // NOTE: the size of this array should be greater than the number of tokens in the file. + private static final String[] STRING_LITERAL_IMAGES_EXTRA = new String[512]; + + static { + int i = 0; + String image = PLSQLTokenKinds.describe(i); + while (image != null && i < STRING_LITERAL_IMAGES_EXTRA.length) { + if (image.startsWith("\"") && image.endsWith("\"")) { + // a string literal image, remove the quotes + image = image.substring(1, image.length() - 1); + STRING_LITERAL_IMAGES_EXTRA[i] = image; + } + i++; + } + } + + private static final TokenDocumentBehavior TOKEN_BEHAVIOR = new TokenDocumentBehavior(PLSQLTokenKinds.TOKEN_NAMES) { + @Override + public JavaccToken createToken(JavaccTokenDocument self, int kind, CharStream cs, @Nullable String image) { + if (image == null) { + // fetch another constant image if possible. + image = STRING_LITERAL_IMAGES_EXTRA[kind]; + } + return super.createToken(self, kind, cs, image); + } + }; @Override protected TokenDocumentBehavior tokenBehavior() { diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/cpd/PLSQLCpdLexer.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/cpd/PLSQLCpdLexer.java index cdb371aba7f..0a64f5f613b 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/cpd/PLSQLCpdLexer.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/cpd/PLSQLCpdLexer.java @@ -51,9 +51,13 @@ protected String getImage(JavaccToken plsqlToken) { } else if (plsqlToken.kind != PLSQLTokenKinds.CHARACTER_LITERAL && plsqlToken.kind != PLSQLTokenKinds.STRING_LITERAL && plsqlToken.kind != PLSQLTokenKinds.QUOTED_LITERAL) { - // PLSQL is case-insensitive, but of course the contents of - // string literals and the like are case-sensitive - image = image.toLowerCase(Locale.ROOT); + // PLSQL is case-insensitive, but the contents of + // string literals and the like are case-sensitive. + // Note: tokens are normalized to uppercase make CPD case-insensitive. + // We use uppercase and not lowercase because that way, PLSQL keywords + // will not be changed (they are already uppercase, see PLSQLParser), + // therefore creating less strings in memory. + image = image.toUpperCase(Locale.ROOT); } return image; } From 1c23df7286431770a0c6903e50e4b81ae50ffe3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Mon, 8 Apr 2024 20:54:52 +0200 Subject: [PATCH 03/22] Fix some weird things in PLSQL tokens --- pmd-plsql/etc/grammar/PLSQL.jjt | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/pmd-plsql/etc/grammar/PLSQL.jjt b/pmd-plsql/etc/grammar/PLSQL.jjt index 5108997facb..f914e51d173 100644 --- a/pmd-plsql/etc/grammar/PLSQL.jjt +++ b/pmd-plsql/etc/grammar/PLSQL.jjt @@ -5239,7 +5239,7 @@ TOKEN : ( "\"" ( | | "$" | "_" | "#" )* "\"" ) > | -< LEXICAL_PARAMETER: +< #LEXICAL_PARAMETER: ( ("&&" | "&") ( @@ -5263,12 +5263,6 @@ TOKEN : | < QUOTED_LITERAL: "\"" (<_WHATEVER_CHARACTER_WO_QUOTE> | | "\\\"")* "\"" > | -< SQLDATA_CLASS: "SQLData" > -| -< CUSTOMDATUM_CLASS: "CustomDatum" > -| -< ORADATA_CLASS: "OraData" > -| < JAVA_INTERFACE_CLASS: ( "SQLData" | "CustomDatum" | "OraData" ) > //| //< #BOOLEAN_LITERAL: "TRUE" | "FALSE" > @@ -6677,7 +6671,7 @@ ASTID ID(): {} //20120427 | //20120428 | //| - | | | | + | //20120427 | //SRT 20090608 ALTER TYPE key words //| @@ -6967,7 +6961,7 @@ ASTTypeKeyword TypeKeyword(): {} | | | | | | | | | | - | | | | + | ) { jjtThis.setImage(token.getImage()) ; jjtThis.value = token ; return jjtThis ; } } @@ -6975,7 +6969,7 @@ ASTTypeKeyword TypeKeyword(): {} ASTJavaInterfaceClass JavaInterfaceClass(): {} { ( - | | + ) { jjtThis.setImage(token.getImage()) ; jjtThis.value = token ; return jjtThis ; } } From 0cb2e37ce9b035d45a2a192aa37622d5f5d5399e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Mon, 8 Apr 2024 21:05:52 +0200 Subject: [PATCH 04/22] Update reference files --- .../pmd/lang/plsql/cpd/PLSQLCpdLexer.java | 4 +- .../lang/plsql/cpd/testdata/sample-plsql.txt | 776 +++++++++--------- .../pmd/lang/plsql/cpd/testdata/tabWidth.txt | 26 +- 3 files changed, 403 insertions(+), 403 deletions(-) diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/cpd/PLSQLCpdLexer.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/cpd/PLSQLCpdLexer.java index 0a64f5f613b..8a23a4731b5 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/cpd/PLSQLCpdLexer.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/cpd/PLSQLCpdLexer.java @@ -55,8 +55,8 @@ protected String getImage(JavaccToken plsqlToken) { // string literals and the like are case-sensitive. // Note: tokens are normalized to uppercase make CPD case-insensitive. // We use uppercase and not lowercase because that way, PLSQL keywords - // will not be changed (they are already uppercase, see PLSQLParser), - // therefore creating less strings in memory. + // will be returned unchanged (they are already uppercase, see PLSQLParser), + // therefore creating fewer strings in memory. image = image.toUpperCase(Locale.ROOT); } return image; diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/cpd/testdata/sample-plsql.txt b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/cpd/testdata/sample-plsql.txt index 74e9b756e65..710db10e231 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/cpd/testdata/sample-plsql.txt +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/cpd/testdata/sample-plsql.txt @@ -5,13 +5,13 @@ L1 [REPLACE] 11 18 L2 [PACKAGE] 1 8 - ["test_schema"] 9 22 + ["TEST_SCHEMA"] 9 22 [.] 22 23 ["BANK_DATA"] 23 34 L3 [IS] 1 3 L19 - [pi] 1 3 + [PI] 1 3 [CONSTANT] 5 13 [NUMBER] 14 20 [:] 21 22 @@ -19,15 +19,15 @@ L19 [3.1415] 24 30 [;] 30 31 L20 - [c] 1 2 + [C] 1 2 [CONSTANT] 5 13 [NUMBER] 14 20 [:] 21 22 [=] 22 23 - [3.2e9] 24 29 + [3.2E9] 24 29 [;] 29 30 L21 - [d] 1 2 + [D] 1 2 [CONSTANT] 5 13 [NUMBER] 14 20 [:] 21 22 @@ -35,7 +35,7 @@ L21 [3.2E9] 24 29 [;] 29 30 L22 - [year_created] 1 13 + [YEAR_CREATED] 1 13 [CONSTANT] 14 22 [NUMBER] 23 29 [:] 30 31 @@ -43,7 +43,7 @@ L22 [2001] 33 37 [;] 37 38 L23 - [author] 1 7 + [AUTHOR] 1 7 [CONSTANT] 9 17 [VARCHAR2] 18 26 [(] 26 27 @@ -54,7 +54,7 @@ L23 ['altumano ''the wolf'''] 35 58 [;] 58 59 L24 - [date_created] 1 13 + [DATE_CREATED] 1 13 [CONSTANT] 15 23 [DATE] 24 28 [:] 29 30 @@ -63,7 +63,7 @@ L24 [;] 43 44 L29 [TYPE] 1 5 - [assc_array] 6 16 + [ASSC_ARRAY] 6 16 [IS] 17 19 [TABLE] 20 25 [OF] 26 28 @@ -77,107 +77,107 @@ L29 [;] 58 59 L34 [TYPE] 1 5 - [bank_type] 6 15 + [BANK_TYPE] 6 15 [IS] 16 18 [RECORD] 19 25 [(] 26 27 L35 - [id] 3 5 + [ID] 3 5 [VARCHAR2] 30 38 [(] 38 39 [20] 39 41 [)] 41 42 [,] 42 43 L36 - [name] 3 7 + [NAME] 3 7 [VARCHAR2] 30 38 [(] 38 39 [100] 39 42 [)] 42 43 [,] 43 44 L37 - [address] 3 10 + [ADDRESS] 3 10 [VARCHAR2] 30 38 [(] 38 39 [105] 39 42 [)] 42 43 [,] 43 44 L38 - [location] 3 11 + [LOCATION] 3 11 [VARCHAR2] 30 38 [(] 38 39 [35] 39 41 [)] 41 42 [,] 42 43 L39 - [bic] 3 6 + [BIC] 3 6 [VARCHAR2] 30 38 [(] 38 39 [20] 39 41 [)] 41 42 [,] 42 43 L40 - [auth_key] 3 11 + [AUTH_KEY] 3 11 [VARCHAR2] 30 38 [(] 38 39 [1] 39 40 [)] 40 41 [,] 41 42 L41 - [contact] 3 10 + [CONTACT] 3 10 [VARCHAR2] 30 38 [(] 38 39 [100] 39 42 [)] 42 43 [,] 43 44 L42 - [phone] 3 8 + [PHONE] 3 8 [VARCHAR2] 30 38 [(] 38 39 [50] 39 41 [)] 41 42 [,] 42 43 L43 - [fax] 3 6 + [FAX] 3 6 [VARCHAR2] 30 38 [(] 38 39 [50] 39 41 [)] 41 42 [,] 42 43 L44 - [telex] 3 8 + [TELEX] 3 8 [VARCHAR2] 30 38 [(] 38 39 [100] 39 42 [)] 42 43 [,] 43 44 L45 - [medium] 3 9 + [MEDIUM] 3 9 [VARCHAR2] 30 38 [(] 38 39 [255] 39 42 [)] 42 43 [,] 43 44 L46 - [mod_time] 3 11 + [MOD_TIME] 3 11 [DATE] 30 34 [,] 34 35 L47 - [app_user] 3 11 + [APP_USER] 3 11 [VARCHAR2] 30 38 [(] 38 39 [20] 39 41 [)] 41 42 [,] 42 43 L48 - [db_user] 3 10 + [DB_USER] 3 10 [VARCHAR2] 30 38 [(] 38 39 [20] 39 41 [)] 41 42 [,] 42 43 L49 - [customer_id] 3 14 + [CUSTOMER_ID] 3 14 [VARCHAR2] 30 38 [(] 38 39 [20] 39 41 @@ -187,48 +187,48 @@ L50 [;] 2 3 L54 [TYPE] 1 5 - [bank_table] 6 16 + [BANK_TABLE] 6 16 [IS] 17 19 [TABLE] 20 25 [OF] 26 28 - [bank_type] 29 38 + [BANK_TYPE] 29 38 [INDEX] 39 44 [BY] 45 47 [BINARY_INTEGER] 48 62 [;] 62 63 L58 [TYPE] 1 5 - [ref_type] 6 14 + [REF_TYPE] 6 14 [IS] 15 17 [REF] 18 21 [CURSOR] 22 28 [RETURN] 29 35 - [bank_type] 36 45 + [BANK_TYPE] 36 45 [;] 45 46 L63 [SUBTYPE] 1 8 - [files_record] 9 21 + [FILES_RECORD] 9 21 [IS] 22 24 - [files] 25 30 + [FILES] 25 30 [%] 30 31 [ROWTYPE] 31 38 [;] 38 39 L66 - [current_pi] 1 11 + [CURRENT_PI] 1 11 [NUMBER] 12 18 [:] 19 20 [=] 20 21 [3.1415] 22 28 [;] 28 29 L67 - [current_year] 1 13 + [CURRENT_YEAR] 1 13 [NUMBER] 14 20 [:] 21 22 [=] 22 23 [2002] 24 28 [;] 28 29 L68 - [current_author] 1 15 + [CURRENT_AUTHOR] 1 15 [VARCHAR2] 16 24 [(] 24 25 [100] 25 28 @@ -238,74 +238,74 @@ L68 ['\\altumano\\ `the wolf` äöüõç'] 33 62 [;] 62 63 L69 - [current_date] 1 13 + [CURRENT_DATE] 1 13 [DATE] 15 19 [:] 20 21 [=] 21 22 ['24-feb-02'] 23 34 [;] 34 35 L72 - [cursor] 1 7 - [cur1] 8 12 + [CURSOR] 1 7 + [CUR1] 8 12 [(] 12 13 - [a] 13 14 - [varchar2] 15 23 + [A] 13 14 + [VARCHAR2] 15 23 [,] 23 24 - [b] 25 26 - [number] 27 33 + [B] 25 26 + [NUMBER] 27 33 [,] 33 34 - [c] 35 36 - [date] 37 41 + [C] 35 36 + [DATE] 37 41 [,] 41 42 - [d] 43 44 - [boolean] 45 52 + [D] 43 44 + [BOOLEAN] 45 52 [)] 52 53 - [return] 54 60 - [customer] 61 69 + [RETURN] 54 60 + [CUSTOMER] 61 69 [%] 69 70 - [rowtype] 70 77 + [ROWTYPE] 70 77 [;] 77 78 L73 - [cursor] 1 7 - [cur2] 8 12 + [CURSOR] 1 7 + [CUR2] 8 12 [(] 12 13 - [a] 13 14 - [varchar2] 15 23 + [A] 13 14 + [VARCHAR2] 15 23 [,] 23 24 - [b] 25 26 - [number] 27 33 + [B] 25 26 + [NUMBER] 27 33 [,] 33 34 - [c] 35 36 - [date] 37 41 + [C] 35 36 + [DATE] 37 41 [,] 41 42 - [d] 43 44 - [boolean] 45 52 + [D] 43 44 + [BOOLEAN] 45 52 [)] 52 53 - [is] 54 56 - [select] 57 63 + [IS] 54 56 + [SELECT] 57 63 [*] 64 65 - [from] 66 70 - [customer] 71 79 - [where] 80 85 - [id] 86 88 + [FROM] 66 70 + [CUSTOMER] 71 79 + [WHERE] 80 85 + [ID] 86 88 [=] 89 90 ['1'] 91 94 [;] 94 95 L86 [FUNCTION] 1 9 - [Get] 10 13 + [GET] 10 13 [(] 14 15 L87 - [p_id] 3 7 + [P_ID] 3 7 [VARCHAR2] 21 29 [,] 29 30 L88 - [r_bank_rec] 3 13 + [R_BANK_REC] 3 13 [OUT] 21 24 - [bank_type] 25 34 + [BANK_TYPE] 25 34 [,] 34 35 L89 - [r_message] 3 12 + [R_MESSAGE] 3 12 [OUT] 21 24 [VARCHAR2] 25 33 [)] 33 34 @@ -315,290 +315,290 @@ L90 [;] 14 15 L93 [PROCEDURE] 1 10 - [Without_Parameters] 11 29 + [WITHOUT_PARAMETERS] 11 29 [;] 29 30 L96 [FUNCTION] 1 9 - [Get_Without_Parameters] 10 32 + [GET_WITHOUT_PARAMETERS] 10 32 [;] 32 33 L112 [PROCEDURE] 1 10 - [Get_By_ID] 11 20 + [GET_BY_ID] 11 20 [(] 21 22 L113 - [p_id] 3 7 + [P_ID] 3 7 [IN] 21 23 [VARCHAR2] 24 32 [,] 32 33 L114 - [r_records] 3 12 + [R_RECORDS] 3 12 [IN] 21 23 [OUT] 24 27 - [bank_table] 28 38 + [BANK_TABLE] 28 38 [)] 38 39 [;] 39 40 L123 [PROCEDURE] 1 10 - [Get_by_BIC] 11 21 + [GET_BY_BIC] 11 21 [(] 22 23 L124 - [p_bic] 3 8 + [P_BIC] 3 8 [VARCHAR2] 21 29 [,] 29 30 L125 - [r_bank_rec] 3 13 + [R_BANK_REC] 3 13 [OUT] 21 24 - [bank_type] 25 34 + [BANK_TYPE] 25 34 [,] 34 35 L126 - [r_result] 3 11 + [R_RESULT] 3 11 [OUT] 21 24 [NUMBER] 25 31 [,] 31 32 L127 - [r_message] 3 12 + [R_MESSAGE] 3 12 [OUT] 21 24 [VARCHAR2] 25 33 [)] 33 34 [;] 34 35 L130 [PROCEDURE] 1 10 - [Get_By_BIC] 11 21 + [GET_BY_BIC] 11 21 [(] 22 23 L131 - [p_bic] 3 8 + [P_BIC] 3 8 [VARCHAR2] 21 29 [,] 29 30 L132 - [r_record] 3 11 + [R_RECORD] 3 11 [IN] 21 23 [OUT] 24 27 - [bank_type] 28 37 + [BANK_TYPE] 28 37 [)] 37 38 [;] 38 39 L145 [FUNCTION] 1 9 - [Get_Table] 10 19 + [GET_TABLE] 10 19 [(] 20 21 L146 - [p_id] 3 7 + [P_ID] 3 7 [VARCHAR2] 21 29 [,] 29 30 L147 - [r_bank_tab] 3 13 + [R_BANK_TAB] 3 13 [IN] 21 23 [OUT] 24 27 - [bank_table] 28 38 + [BANK_TABLE] 28 38 [,] 38 39 L148 - [r_result] 3 11 + [R_RESULT] 3 11 [OUT] 21 24 [NUMBER] 25 31 [,] 31 32 L149 - [r_message] 3 12 + [R_MESSAGE] 3 12 [OUT] 21 24 [VARCHAR2] 25 33 [)] 33 34 L150 [RETURN] 1 7 - [varchar2] 8 16 + [VARCHAR2] 8 16 [;] 16 17 L162 [PROCEDURE] 1 10 - [Search] 11 17 + [SEARCH] 11 17 [(] 18 19 L163 - [p_id] 3 7 + [P_ID] 3 7 [VARCHAR2] 21 29 [,] 29 30 L164 - [p_bic] 3 8 + [P_BIC] 3 8 [VARCHAR2] 21 29 [,] 29 30 L165 - [p_name] 3 9 + [P_NAME] 3 9 [VARCHAR2] 21 29 [,] 29 30 L166 - [p_address] 3 12 + [P_ADDRESS] 3 12 [VARCHAR2] 21 29 [,] 29 30 L167 - [p_location] 3 13 + [P_LOCATION] 3 13 [VARCHAR2] 21 29 [,] 29 30 L168 - [r_bank_tab] 3 13 + [R_BANK_TAB] 3 13 [IN] 21 23 [OUT] 24 27 - [bank_table] 28 38 + [BANK_TABLE] 28 38 [,] 38 39 L169 - [r_result] 3 11 + [R_RESULT] 3 11 [OUT] 21 24 [NUMBER] 25 31 [,] 31 32 L170 - [r_message] 3 12 + [R_MESSAGE] 3 12 [OUT] 21 24 [VARCHAR2] 25 33 [)] 33 34 [;] 34 35 L176 [PROCEDURE] 1 10 - [Get] 11 14 + [GET] 11 14 [(] 15 16 L177 - [p_id] 3 7 + [P_ID] 3 7 [VARCHAR2] 21 29 [,] 29 30 L178 - [p_bic] 3 8 + [P_BIC] 3 8 [VARCHAR2] 21 29 [,] 29 30 L179 - [p_name] 3 9 + [P_NAME] 3 9 [VARCHAR2] 21 29 [,] 29 30 L180 - [p_address] 3 12 + [P_ADDRESS] 3 12 [VARCHAR2] 21 29 [,] 29 30 L181 - [p_location] 3 13 + [P_LOCATION] 3 13 [VARCHAR2] 21 29 [,] 29 30 L182 - [r_bank_tab] 3 13 + [R_BANK_TAB] 3 13 [IN] 21 23 [OUT] 24 27 - [bank_table] 28 38 + [BANK_TABLE] 28 38 [)] 38 39 [;] 39 40 L190 [PROCEDURE] 1 10 - [Get_By_Criteria] 11 26 + [GET_BY_CRITERIA] 11 26 [(] 27 28 L191 - [p_criteria] 3 13 - [bank_type] 21 30 + [P_CRITERIA] 3 13 + [BANK_TYPE] 21 30 [,] 30 31 L192 - [r_bank_tab] 3 13 + [R_BANK_TAB] 3 13 [IN] 21 23 [OUT] 24 27 - [bank_table] 28 38 + [BANK_TABLE] 28 38 [,] 38 39 L193 - [r_result] 3 11 + [R_RESULT] 3 11 [OUT] 21 24 [NUMBER] 25 31 [,] 31 32 L194 - [r_message] 3 12 + [R_MESSAGE] 3 12 [OUT] 21 24 [VARCHAR2] 25 33 [)] 33 34 [;] 34 35 L197 [PROCEDURE] 1 10 - [Ins] 11 14 + [INS] 11 14 [(] 15 16 L198 - [p_data] 3 9 + [P_DATA] 3 9 [IN] 21 23 - [bank_type] 24 33 + [BANK_TYPE] 24 33 [)] 33 34 [;] 34 35 L201 [PROCEDURE] 1 10 - [Ins_Table] 11 20 + [INS_TABLE] 11 20 [(] 21 22 L202 - [p_data] 3 9 + [P_DATA] 3 9 [IN] 21 23 - [bank_table] 24 34 + [BANK_TABLE] 24 34 [)] 34 35 [;] 35 36 L205 [PROCEDURE] 1 10 - [Upd] 11 14 + [UPD] 11 14 [(] 15 16 L206 - [p_data] 3 9 + [P_DATA] 3 9 [IN] 21 23 - [bank_type] 24 33 + [BANK_TYPE] 24 33 [)] 33 34 [;] 34 35 L213 [PROCEDURE] 1 10 - [Upd_Table] 11 20 + [UPD_TABLE] 11 20 [(] 21 22 L214 - [p_data] 3 9 + [P_DATA] 3 9 [IN] 21 23 - [bank_table] 24 34 + [BANK_TABLE] 24 34 [)] 34 35 [;] 35 36 L217 [PROCEDURE] 1 10 - [Del] 11 14 + [DEL] 11 14 [(] 15 16 L218 - [p_data] 3 9 + [P_DATA] 3 9 [IN] 21 23 - [bank_type] 24 33 + [BANK_TYPE] 24 33 [)] 33 34 [;] 34 35 L221 [PROCEDURE] 1 10 - [Del_Table] 11 20 + [DEL_TABLE] 11 20 [(] 21 22 L222 - [p_data] 3 9 + [P_DATA] 3 9 [IN] 21 23 - [bank_table] 24 34 + [BANK_TABLE] 24 34 [)] 34 35 [;] 35 36 L225 [PROCEDURE] 1 10 - [Lck] 11 14 + [LCK] 11 14 [(] 15 16 L226 - [p_data] 3 9 + [P_DATA] 3 9 [IN] 21 23 - [bank_type] 24 33 + [BANK_TYPE] 24 33 [)] 33 34 [;] 34 35 L229 [PROCEDURE] 1 10 - [Lck_Table] 11 20 + [LCK_TABLE] 11 20 [(] 21 22 L230 - [p_data] 3 9 + [P_DATA] 3 9 [IN] 21 23 - [bank_table] 24 34 + [BANK_TABLE] 24 34 [)] 34 35 [;] 35 36 L233 [PROCEDURE] 1 10 - [Get_Our] 11 18 + [GET_OUR] 11 18 [(] 19 20 L234 - [r_ourbank] 3 12 + [R_OURBANK] 3 12 [OUT] 21 24 - [bank_data] 25 34 + [BANK_DATA] 25 34 [.] 34 35 - [bank_type] 35 44 + [BANK_TYPE] 35 44 [,] 44 45 L235 - [r_result] 3 11 + [R_RESULT] 3 11 [OUT] 21 24 [NUMBER] 25 31 [,] 31 32 L236 - [r_message] 3 12 + [R_MESSAGE] 3 12 [OUT] 21 24 [VARCHAR2] 25 33 [)] 33 34 @@ -614,112 +614,112 @@ L243 [REPLACE] 11 18 L244 [PACKAGE] 1 8 - [Advice_Data] 9 20 + [ADVICE_DATA] 9 20 L245 [IS] 1 3 L257 [SUBTYPE] 1 8 - [advice_type_record] 9 27 + [ADVICE_TYPE_RECORD] 9 27 [IS] 28 30 - [advice_type] 31 42 + [ADVICE_TYPE] 31 42 [%] 42 43 [ROWTYPE] 43 50 [;] 50 51 L258 [TYPE] 1 5 - [advice_type_table] 6 23 + [ADVICE_TYPE_TABLE] 6 23 [IS] 24 26 [TABLE] 27 32 [OF] 33 35 - [advice_type_record] 36 54 + [ADVICE_TYPE_RECORD] 36 54 [INDEX] 55 60 [BY] 61 63 [BINARY_INTEGER] 64 78 [;] 78 79 L260 [SUBTYPE] 1 8 - [advice_medium_record] 9 29 + [ADVICE_MEDIUM_RECORD] 9 29 [IS] 30 32 - [advice_medium] 33 46 + [ADVICE_MEDIUM] 33 46 [%] 46 47 [ROWTYPE] 47 54 [;] 54 55 L261 [TYPE] 1 5 - [advice_medium_table] 6 25 + [ADVICE_MEDIUM_TABLE] 6 25 [IS] 26 28 [TABLE] 29 34 [OF] 35 37 - [advice_medium_record] 38 58 + [ADVICE_MEDIUM_RECORD] 38 58 [INDEX] 59 64 [BY] 65 67 [BINARY_INTEGER] 68 82 [;] 82 83 L263 [SUBTYPE] 1 8 - [advice_record] 9 22 + [ADVICE_RECORD] 9 22 [IS] 23 25 - [advices] 26 33 + [ADVICES] 26 33 [%] 33 34 [ROWTYPE] 34 41 [;] 41 42 L264 [TYPE] 1 5 - [advice_table] 6 18 + [ADVICE_TABLE] 6 18 [IS] 19 21 [TABLE] 22 27 [OF] 28 30 - [advice_record] 31 44 + [ADVICE_RECORD] 31 44 [INDEX] 45 50 [BY] 51 53 [BINARY_INTEGER] 54 68 [;] 68 69 L266 [SUBTYPE] 1 8 - [sw_advice_record] 9 25 + [SW_ADVICE_RECORD] 9 25 [IS] 26 28 - [sw_advice] 29 38 + [SW_ADVICE] 29 38 [%] 38 39 [ROWTYPE] 39 46 [;] 46 47 L267 [TYPE] 1 5 - [sw_advice_table] 6 21 + [SW_ADVICE_TABLE] 6 21 [IS] 22 24 [TABLE] 25 30 [OF] 31 33 - [sw_advice_record] 34 50 + [SW_ADVICE_RECORD] 34 50 [INDEX] 51 56 [BY] 57 59 [BINARY_INTEGER] 60 74 [;] 74 75 L269 [SUBTYPE] 1 8 - [files_record] 9 21 + [FILES_RECORD] 9 21 [IS] 22 24 - [files] 25 30 + [FILES] 25 30 [%] 30 31 [ROWTYPE] 31 38 [;] 38 39 L270 [TYPE] 1 5 - [files_table] 6 17 + [FILES_TABLE] 6 17 [IS] 18 20 [TABLE] 21 26 [OF] 27 29 - [files_record] 30 42 + [FILES_RECORD] 30 42 [INDEX] 43 48 [BY] 49 51 [BINARY_INTEGER] 52 66 [;] 66 67 L273 [FUNCTION] 1 9 - [Get_Advice_Types] 10 26 + [GET_ADVICE_TYPES] 10 26 [(] 27 28 L274 - [r_list] 3 9 + [R_LIST] 3 9 [OUT] 21 24 - [advice_type_table] 25 42 + [ADVICE_TYPE_TABLE] 25 42 [)] 42 43 L275 [RETURN] 1 7 @@ -727,57 +727,57 @@ L275 [;] 14 15 L289 [PROCEDURE] 1 10 - [Get_Advice_Defaults] 11 30 + [GET_ADVICE_DEFAULTS] 11 30 [(] 31 32 L290 - [p_sector] 3 11 + [P_SECTOR] 3 11 [VARCHAR2] 21 29 [,] 29 30 L291 - [p_dir] 3 8 + [P_DIR] 3 8 [VARCHAR2] 21 29 [,] 29 30 L292 - [p_type] 3 9 + [P_TYPE] 3 9 [VARCHAR2] 21 29 [,] 29 30 L293 - [def_medium] 3 13 + [DEF_MEDIUM] 3 13 [OUT] 21 24 [VARCHAR2] 25 33 [,] 33 34 L294 - [def_medium_option] 3 20 + [DEF_MEDIUM_OPTION] 3 20 [OUT] 21 24 [VARCHAR2] 25 33 [,] 33 34 L295 - [def_party] 3 12 + [DEF_PARTY] 3 12 [OUT] 21 24 [VARCHAR2] 25 33 [,] 33 34 L296 - [party_fixed] 3 14 + [PARTY_FIXED] 3 14 [OUT] 21 24 [VARCHAR2] 25 33 [,] 33 34 L297 - [r_result] 3 11 + [R_RESULT] 3 11 [OUT] 21 24 [NUMBER] 25 31 [,] 31 32 L298 - [r_message] 3 12 + [R_MESSAGE] 3 12 [OUT] 21 24 [VARCHAR2] 25 33 [)] 33 34 [;] 34 35 L302 [FUNCTION] 1 9 - [Get_Advice_Type_Name] 10 30 + [GET_ADVICE_TYPE_NAME] 10 30 [(] 31 32 L303 - [p_type] 3 9 + [P_TYPE] 3 9 [VARCHAR2] 21 29 [)] 29 30 L304 @@ -786,34 +786,34 @@ L304 [;] 16 17 L314 [PROCEDURE] 1 10 - [Get_Advice_Medium] 11 28 + [GET_ADVICE_MEDIUM] 11 28 [(] 29 30 L315 - [p_adv_type] 3 13 + [P_ADV_TYPE] 3 13 [VARCHAR2] 21 29 [,] 29 30 L316 - [p_medium] 3 11 + [P_MEDIUM] 3 11 [VARCHAR2] 21 29 [,] 29 30 L317 - [p_medium_option] 3 18 + [P_MEDIUM_OPTION] 3 18 [VARCHAR2] 21 29 [,] 29 30 L318 - [r_rec] 3 8 + [R_REC] 3 8 [IN] 21 23 [OUT] 24 27 - [advice_medium_record] 28 48 + [ADVICE_MEDIUM_RECORD] 28 48 [,] 48 49 L319 - [r_result] 3 11 + [R_RESULT] 3 11 [IN] 21 23 [OUT] 24 27 [NUMBER] 28 34 [,] 34 35 L320 - [r_message] 3 12 + [R_MESSAGE] 3 12 [IN] 21 23 [OUT] 24 27 [VARCHAR2] 28 36 @@ -821,34 +821,34 @@ L320 [;] 37 38 L323 [PROCEDURE] 1 10 - [Get] 11 14 + [GET] 11 14 [(] 15 16 L324 - [p_contract_id] 3 16 + [P_CONTRACT_ID] 3 16 [VARCHAR2] 21 29 [,] 29 30 L325 - [p_step_seq] 3 13 + [P_STEP_SEQ] 3 13 [NUMBER] 21 27 [,] 27 28 L326 - [p_seq] 3 8 + [P_SEQ] 3 8 [NUMBER] 21 27 [,] 27 28 L327 - [r_rec] 3 8 + [R_REC] 3 8 [IN] 21 23 [OUT] 24 27 - [advice_record] 28 41 + [ADVICE_RECORD] 28 41 [,] 41 42 L328 - [r_result] 3 11 + [R_RESULT] 3 11 [IN] 21 23 [OUT] 24 27 [NUMBER] 28 34 [,] 34 35 L329 - [r_message] 3 12 + [R_MESSAGE] 3 12 [IN] 21 23 [OUT] 24 27 [VARCHAR2] 28 36 @@ -856,124 +856,124 @@ L329 [;] 37 38 L332 [PROCEDURE] 1 10 - [List_Advices] 11 23 + [LIST_ADVICES] 11 23 [(] 24 25 L333 - [p_contract_id] 3 16 + [P_CONTRACT_ID] 3 16 [VARCHAR2] 21 29 [,] 29 30 L334 - [p_step_seq] 3 13 + [P_STEP_SEQ] 3 13 [NUMBER] 21 27 [,] 27 28 L335 - [p_in_out] 3 11 + [P_IN_OUT] 3 11 [VARCHAR2] 21 29 [,] 29 30 L336 - [r_result] 3 11 + [R_RESULT] 3 11 [IN] 21 23 [OUT] 24 27 [NUMBER] 28 34 [,] 34 35 L337 - [r_message] 3 12 + [R_MESSAGE] 3 12 [IN] 21 23 [OUT] 24 27 [VARCHAR2] 28 36 [,] 36 37 L338 - [r_list] 3 9 + [R_LIST] 3 9 [IN] 21 23 [OUT] 24 27 - [advice_table] 28 40 + [ADVICE_TABLE] 28 40 [)] 40 41 [;] 41 42 L341 [PROCEDURE] 1 10 - [Ins] 11 14 + [INS] 11 14 [(] 15 16 L342 - [p] 3 4 + [P] 3 4 [IN] 23 25 [OUT] 26 29 - [advice_record] 30 43 + [ADVICE_RECORD] 30 43 [,] 43 44 L343 - [r_result] 3 11 + [R_RESULT] 3 11 [OUT] 23 26 [NUMBER] 27 33 [,] 33 34 L344 - [r_message] 3 12 + [R_MESSAGE] 3 12 [OUT] 23 26 [VARCHAR2] 27 35 [)] 35 36 [;] 36 37 L347 [PROCEDURE] 1 10 - [Del] 11 14 + [DEL] 11 14 [(] 15 16 L348 - [p] 3 4 + [P] 3 4 [IN] 23 25 [OUT] 26 29 - [advice_record] 30 43 + [ADVICE_RECORD] 30 43 [,] 43 44 L349 - [r_result] 3 11 + [R_RESULT] 3 11 [OUT] 23 26 [NUMBER] 27 33 [,] 33 34 L350 - [r_message] 3 12 + [R_MESSAGE] 3 12 [OUT] 23 26 [VARCHAR2] 27 35 [)] 35 36 [;] 36 37 L353 [PROCEDURE] 1 10 - [Ins_SW_Advice] 11 24 + [INS_SW_ADVICE] 11 24 [(] 25 26 L354 - [p] 3 4 + [P] 3 4 [IN] 23 25 [OUT] 26 29 - [sw_advice_record] 30 46 + [SW_ADVICE_RECORD] 30 46 [,] 46 47 L355 - [r_result] 3 11 + [R_RESULT] 3 11 [OUT] 23 26 [NUMBER] 27 33 [,] 33 34 L356 - [r_message] 3 12 + [R_MESSAGE] 3 12 [OUT] 23 26 [VARCHAR2] 27 35 [)] 35 36 [;] 36 37 L359 [PROCEDURE] 1 10 - [Get_SW_Advice] 11 24 + [GET_SW_ADVICE] 11 24 [(] 25 26 L360 - [p_id] 3 7 + [P_ID] 3 7 [VARCHAR2] 21 29 [,] 29 30 L361 - [r_list] 3 9 + [R_LIST] 3 9 [IN] 21 23 [OUT] 24 27 - [sw_advice_table] 28 43 + [SW_ADVICE_TABLE] 28 43 [,] 43 44 L362 - [r_result] 3 11 + [R_RESULT] 3 11 [IN] 21 23 [OUT] 24 27 [NUMBER] 28 34 [,] 34 35 L363 - [r_message] 3 12 + [R_MESSAGE] 3 12 [IN] 21 23 [OUT] 24 27 [VARCHAR2] 28 36 @@ -981,47 +981,47 @@ L363 [;] 37 38 L366 [PROCEDURE] 1 10 - [Ins_File] 11 19 + [INS_FILE] 11 19 [(] 20 21 L367 - [p] 3 4 + [P] 3 4 [IN] 23 25 [OUT] 26 29 - [files_record] 30 42 + [FILES_RECORD] 30 42 [,] 42 43 L368 - [r_result] 3 11 + [R_RESULT] 3 11 [OUT] 23 26 [NUMBER] 27 33 [,] 33 34 L369 - [r_message] 3 12 + [R_MESSAGE] 3 12 [OUT] 23 26 [VARCHAR2] 27 35 [)] 35 36 [;] 36 37 L372 [PROCEDURE] 1 10 - [Get_Files] 11 20 + [GET_FILES] 11 20 [(] 21 22 L373 - [p_doc_id] 3 11 + [P_DOC_ID] 3 11 [VARCHAR2] 21 29 [,] 29 30 L374 - [r_list] 3 9 + [R_LIST] 3 9 [IN] 21 23 [OUT] 24 27 - [files_table] 28 39 + [FILES_TABLE] 28 39 [,] 39 40 L375 - [r_result] 3 11 + [R_RESULT] 3 11 [IN] 21 23 [OUT] 24 27 [NUMBER] 28 34 [,] 34 35 L376 - [r_message] 3 12 + [R_MESSAGE] 3 12 [IN] 21 23 [OUT] 24 27 [VARCHAR2] 28 36 @@ -1029,28 +1029,28 @@ L376 [;] 37 38 L386 [PROCEDURE] 1 10 - [CFR_Advice_Out] 11 25 + [CFR_ADVICE_OUT] 11 25 [(] 26 27 L387 - [p_contract_id] 3 16 + [P_CONTRACT_ID] 3 16 [VARCHAR2] 21 29 [,] 29 30 L388 - [p_step] 3 9 + [P_STEP] 3 9 [NUMBER] 21 27 [,] 27 28 L389 - [p_app_user] 3 13 + [P_APP_USER] 3 13 [VARCHAR2] 21 29 [,] 29 30 L390 - [r_result] 3 11 + [R_RESULT] 3 11 [IN] 21 23 [OUT] 24 27 [NUMBER] 28 34 [,] 34 35 L391 - [r_message] 3 12 + [R_MESSAGE] 3 12 [IN] 21 23 [OUT] 24 27 [VARCHAR2] 28 36 @@ -1058,28 +1058,28 @@ L391 [;] 37 38 L401 [PROCEDURE] 1 10 - [CFR_Advice_In] 11 24 + [CFR_ADVICE_IN] 11 24 [(] 25 26 L402 - [p_contract_id] 3 16 + [P_CONTRACT_ID] 3 16 [VARCHAR2] 21 29 [,] 29 30 L403 - [p_step] 3 9 + [P_STEP] 3 9 [NUMBER] 21 27 [,] 27 28 L404 - [p_app_user] 3 13 + [P_APP_USER] 3 13 [VARCHAR2] 21 29 [,] 29 30 L405 - [r_result] 3 11 + [R_RESULT] 3 11 [IN] 21 23 [OUT] 24 27 [NUMBER] 28 34 [,] 34 35 L406 - [r_message] 3 12 + [R_MESSAGE] 3 12 [IN] 21 23 [OUT] 24 27 [VARCHAR2] 28 36 @@ -1087,28 +1087,28 @@ L406 [;] 37 38 L416 [PROCEDURE] 1 10 - [Release_Advice_Out] 11 29 + [RELEASE_ADVICE_OUT] 11 29 [(] 30 31 L417 - [p_contract_id] 3 16 + [P_CONTRACT_ID] 3 16 [VARCHAR2] 21 29 [,] 29 30 L418 - [p_step] 3 9 + [P_STEP] 3 9 [NUMBER] 21 27 [,] 27 28 L419 - [p_app_user] 3 13 + [P_APP_USER] 3 13 [VARCHAR2] 21 29 [,] 29 30 L420 - [r_result] 3 11 + [R_RESULT] 3 11 [IN] 21 23 [OUT] 24 27 [NUMBER] 28 34 [,] 34 35 L421 - [r_message] 3 12 + [R_MESSAGE] 3 12 [IN] 21 23 [OUT] 24 27 [VARCHAR2] 28 36 @@ -1116,28 +1116,28 @@ L421 [;] 37 38 L431 [PROCEDURE] 1 10 - [Release_Advice_In] 11 28 + [RELEASE_ADVICE_IN] 11 28 [(] 29 30 L432 - [p_contract_id] 3 16 + [P_CONTRACT_ID] 3 16 [VARCHAR2] 21 29 [,] 29 30 L433 - [p_step] 3 9 + [P_STEP] 3 9 [NUMBER] 21 27 [,] 27 28 L434 - [p_app_user] 3 13 + [P_APP_USER] 3 13 [VARCHAR2] 21 29 [,] 29 30 L435 - [r_result] 3 11 + [R_RESULT] 3 11 [IN] 21 23 [OUT] 24 27 [NUMBER] 28 34 [,] 34 35 L436 - [r_message] 3 12 + [R_MESSAGE] 3 12 [IN] 21 23 [OUT] 24 27 [VARCHAR2] 28 36 @@ -1158,101 +1158,101 @@ L443 L444 [IS] 1 3 L458 - [record_locked] 1 14 + [RECORD_LOCKED] 1 14 [EXCEPTION] 15 24 [;] 24 25 L460 [TYPE] 1 5 - [customer_type] 6 19 + [CUSTOMER_TYPE] 6 19 [IS] 20 22 [RECORD] 23 29 [(] 30 31 L461 - [id] 3 5 + [ID] 3 5 [VARCHAR2] 29 37 [(] 37 38 [20] 38 40 [)] 40 41 [,] 41 42 L462 - [name] 3 7 + [NAME] 3 7 [VARCHAR2] 29 37 [(] 37 38 [100] 38 41 [)] 41 42 [,] 42 43 L463 - [short_name] 3 13 + [SHORT_NAME] 3 13 [VARCHAR2] 29 37 [(] 37 38 [35] 38 40 [)] 40 41 [,] 41 42 L464 - [db_id] 3 8 + [DB_ID] 3 8 [VARCHAR2] 29 37 [(] 37 38 [20] 38 40 [)] 40 41 [,] 41 42 L465 - [sub_cust_code] 3 16 + [SUB_CUST_CODE] 3 16 [VARCHAR2] 29 37 [(] 37 38 [20] 38 40 [)] 40 41 [,] 41 42 L466 - [sub_account] 3 14 + [SUB_ACCOUNT] 3 14 [VARCHAR2] 29 37 [(] 37 38 [30] 38 40 [)] 40 41 [,] 41 42 L467 - [regno] 3 8 + [REGNO] 3 8 [VARCHAR2] 29 37 [(] 37 38 [50] 38 40 [)] 40 41 [,] 41 42 L468 - [residence] 3 12 + [RESIDENCE] 3 12 [VARCHAR2] 29 37 [(] 37 38 [10] 38 40 [)] 40 41 [,] 41 42 L469 - [ct_type] 3 10 + [CT_TYPE] 3 10 [VARCHAR2] 29 37 [(] 37 38 [10] 38 40 [)] 40 41 [,] 41 42 L470 - [ct_entity] 3 12 + [CT_ENTITY] 3 12 [VARCHAR2] 29 37 [(] 37 38 [10] 38 40 [)] 40 41 [,] 41 42 L471 - [language] 3 11 + [LANGUAGE] 3 11 [VARCHAR2] 29 37 [(] 37 38 [10] 38 40 [)] 40 41 [,] 41 42 L472 - [business_type] 3 16 + [BUSINESS_TYPE] 3 16 [VARCHAR2] 29 37 [(] 37 38 [10] 38 40 [)] 40 41 [,] 41 42 L473 - [tax_code] 3 11 + [TAX_CODE] 3 11 [VARCHAR2] 29 37 [(] 37 38 [10] 38 40 @@ -1262,55 +1262,55 @@ L474 [;] 2 3 L475 [TYPE] 1 5 - [customer_table] 6 20 + [CUSTOMER_TABLE] 6 20 [IS] 21 23 [TABLE] 24 29 [OF] 30 32 - [customer_type] 33 46 + [CUSTOMER_TYPE] 33 46 [INDEX] 47 52 [BY] 53 55 [BINARY_INTEGER] 56 70 [;] 70 71 L477 [SUBTYPE] 1 8 - [loan_customer_type] 9 27 + [LOAN_CUSTOMER_TYPE] 9 27 [IS] 28 30 - [loan_customers] 31 45 + [LOAN_CUSTOMERS] 31 45 [%] 45 46 [ROWTYPE] 46 53 [;] 53 54 L478 [TYPE] 1 5 - [loan_customer_table] 6 25 + [LOAN_CUSTOMER_TABLE] 6 25 [IS] 26 28 [TABLE] 29 34 [OF] 35 37 - [loan_customer_type] 38 56 + [LOAN_CUSTOMER_TYPE] 38 56 [INDEX] 57 62 [BY] 63 65 [BINARY_INTEGER] 66 80 [;] 80 81 L481 [PROCEDURE] 1 10 - [Get_Record] 11 21 + [GET_RECORD] 11 21 [(] 22 23 L482 - [p_id] 3 7 + [P_ID] 3 7 [VARCHAR2] 21 29 [,] 29 30 L483 - [r] 3 4 + [R] 3 4 [OUT] 21 24 - [customer_type] 25 38 + [CUSTOMER_TYPE] 25 38 [,] 38 39 L484 - [r_result] 3 11 + [R_RESULT] 3 11 [IN] 21 23 [OUT] 24 27 [NUMBER] 28 34 [,] 34 35 L485 - [r_message] 3 12 + [R_MESSAGE] 3 12 [IN] 21 23 [OUT] 24 27 [VARCHAR2] 28 36 @@ -1318,162 +1318,162 @@ L485 [;] 37 38 L488 [PROCEDURE] 1 10 - [Get_By_Id] 11 20 + [GET_BY_ID] 11 20 [(] 21 22 L489 - [p_id] 3 7 + [P_ID] 3 7 [IN] 21 23 [VARCHAR2] 24 32 [,] 32 33 L490 - [r_records] 3 12 + [R_RECORDS] 3 12 [IN] 21 23 [OUT] 24 27 - [customer_table] 28 42 + [CUSTOMER_TABLE] 28 42 [)] 42 43 [;] 43 44 L493 [PROCEDURE] 1 10 - [Get_By_Criteria] 11 26 + [GET_BY_CRITERIA] 11 26 [(] 27 28 L494 - [p_criteria] 3 13 + [P_CRITERIA] 3 13 [IN] 21 23 - [customer_type] 24 37 + [CUSTOMER_TYPE] 24 37 [,] 37 38 L495 - [r_records] 3 12 + [R_RECORDS] 3 12 [IN] 21 23 [OUT] 24 27 - [customer_table] 28 42 + [CUSTOMER_TABLE] 28 42 [)] 42 43 [;] 43 44 L498 [PROCEDURE] 1 10 - [Get] 11 14 + [GET] 11 14 [(] 15 16 L499 - [p_id] 3 7 + [P_ID] 3 7 [IN] 21 23 [VARCHAR2] 24 32 [,] 32 33 L500 - [p_name] 3 9 + [P_NAME] 3 9 [IN] 21 23 [VARCHAR2] 24 32 [,] 32 33 L501 - [p_short_name] 3 15 + [P_SHORT_NAME] 3 15 [IN] 21 23 [VARCHAR2] 24 32 [,] 32 33 L502 - [p_cust_code] 3 14 + [P_CUST_CODE] 3 14 [IN] 21 23 [VARCHAR2] 24 32 [,] 32 33 L503 - [p_account] 3 12 + [P_ACCOUNT] 3 12 [IN] 21 23 [VARCHAR2] 24 32 [,] 32 33 L504 - [p_regno] 3 10 + [P_REGNO] 3 10 [IN] 21 23 [VARCHAR2] 24 32 [,] 32 33 L505 - [r_records] 3 12 + [R_RECORDS] 3 12 [IN] 21 23 [OUT] 24 27 - [customer_table] 28 42 + [CUSTOMER_TABLE] 28 42 [)] 42 43 [;] 43 44 L508 [PROCEDURE] 1 10 - [Search_By_Account] 11 28 + [SEARCH_BY_ACCOUNT] 11 28 [(] 29 30 L509 - [p_account] 3 12 + [P_ACCOUNT] 3 12 [VARCHAR2] 21 29 [,] 29 30 L510 - [r_record] 3 11 + [R_RECORD] 3 11 [IN] 21 23 [OUT] 24 27 - [customer_type] 28 41 + [CUSTOMER_TYPE] 28 41 [,] 41 42 L511 - [r_result] 3 11 + [R_RESULT] 3 11 [OUT] 21 24 [NUMBER] 25 31 [,] 31 32 L512 - [r_message] 3 12 + [R_MESSAGE] 3 12 [OUT] 21 24 [VARCHAR2] 25 33 [)] 33 34 [;] 34 35 L515 [PROCEDURE] 1 10 - [Ins] 11 14 + [INS] 11 14 [(] 15 16 L516 - [p_data] 3 9 + [P_DATA] 3 9 [IN] 21 23 - [customer_table] 24 38 + [CUSTOMER_TABLE] 24 38 [)] 38 39 [;] 39 40 L519 [PROCEDURE] 1 10 - [Upd] 11 14 + [UPD] 11 14 [(] 15 16 L520 - [p_data] 3 9 + [P_DATA] 3 9 [IN] 21 23 - [customer_table] 24 38 + [CUSTOMER_TABLE] 24 38 [)] 38 39 [;] 39 40 L523 [PROCEDURE] 1 10 - [Del] 11 14 + [DEL] 11 14 [(] 15 16 L524 - [p_data] 3 9 + [P_DATA] 3 9 [IN] 21 23 - [customer_table] 24 38 + [CUSTOMER_TABLE] 24 38 [)] 38 39 [;] 39 40 L527 [PROCEDURE] 1 10 - [Lck] 11 14 + [LCK] 11 14 [(] 15 16 L528 - [p_data] 3 9 + [P_DATA] 3 9 [IN] 21 23 - [customer_table] 24 38 + [CUSTOMER_TABLE] 24 38 [)] 38 39 [;] 39 40 L537 [PROCEDURE] 1 10 - [Get_Loan_Customer] 11 28 + [GET_LOAN_CUSTOMER] 11 28 [(] 29 30 L538 - [p_id] 3 7 + [P_ID] 3 7 [VARCHAR2] 21 29 [,] 29 30 L539 - [r] 3 4 + [R] 3 4 [OUT] 21 24 - [loan_customer_type] 25 43 + [LOAN_CUSTOMER_TYPE] 25 43 [,] 43 44 L540 - [r_result] 3 11 + [R_RESULT] 3 11 [OUT] 21 24 [NUMBER] 25 31 [,] 31 32 L541 - [r_message] 3 12 + [R_MESSAGE] 3 12 [OUT] 21 24 [VARCHAR2] 25 33 [)] 33 34 @@ -1488,13 +1488,13 @@ L546 [OR] 8 10 [REPLACE] 11 18 L547 - [Package] 1 8 + [PACKAGE] 1 8 [EXEC_SP] 12 19 L548 [IS] 1 3 L562 [DATEFORMAT] 1 11 - [constant] 12 20 + [CONSTANT] 12 20 [VARCHAR2] 21 29 [(] 29 30 [100] 30 33 @@ -1505,7 +1505,7 @@ L562 [;] 61 62 L563 [TYPE] 1 5 - [string_array] 6 18 + [STRING_ARRAY] 6 18 [IS] 19 21 [TABLE] 22 27 [OF] 28 30 @@ -1519,55 +1519,55 @@ L563 [;] 70 71 L565 [PROCEDURE] 1 10 - [Exec_SP] 11 18 + [EXEC_SP] 11 18 [(] 19 20 L566 - [sp_name] 3 10 + [SP_NAME] 3 10 [VARCHAR2] 15 23 [,] 23 24 L567 - [sp_package] 3 13 + [SP_PACKAGE] 3 13 [VARCHAR2] 15 23 [,] 23 24 L568 - [sp_schema] 3 12 + [SP_SCHEMA] 3 12 [VARCHAR2] 15 23 [,] 23 24 L569 - [sp_type] 3 10 + [SP_TYPE] 3 10 [VARCHAR2] 15 23 [,] 23 24 L570 - [arg_names] 3 12 + [ARG_NAMES] 3 12 [IN] 15 17 [OUT] 18 21 - [string_array] 22 34 + [STRING_ARRAY] 22 34 [,] 34 35 L571 - [arg_types] 3 12 + [ARG_TYPES] 3 12 [IN] 15 17 [OUT] 18 21 - [string_array] 22 34 + [STRING_ARRAY] 22 34 [,] 34 35 L572 - [arg_pass] 3 11 + [ARG_PASS] 3 11 [IN] 15 17 [OUT] 18 21 - [string_array] 22 34 + [STRING_ARRAY] 22 34 [,] 34 35 L573 - [arg_values] 3 13 + [ARG_VALUES] 3 13 [IN] 15 17 [OUT] 18 21 - [string_array] 22 34 + [STRING_ARRAY] 22 34 [,] 34 35 L574 - [error_code] 3 13 + [ERROR_CODE] 3 13 [OUT] 15 18 [NUMBER] 19 25 [,] 25 26 L575 - [error_msg] 3 12 + [ERROR_MSG] 3 12 [OUT] 15 18 [VARCHAR2] 19 27 [)] 27 28 @@ -1588,10 +1588,10 @@ L582 [IS] 1 3 L597 [FUNCTION] 1 9 - [put] 10 13 + [PUT] 10 13 [(] 13 14 L598 - [p_value] 3 10 + [P_VALUE] 3 10 [IN] 17 19 [VARCHAR2] 20 28 [)] 28 29 @@ -1601,10 +1601,10 @@ L599 [;] 14 15 L602 [FUNCTION] 1 9 - [get] 10 13 + [GET] 10 13 [(] 13 14 L603 - [p_id] 3 7 + [P_ID] 3 7 [IN] 17 19 [VARCHAR2] 20 28 [)] 28 29 @@ -1614,106 +1614,106 @@ L604 [;] 16 17 L607 [PROCEDURE] 1 10 - [remove] 11 17 + [REMOVE] 11 17 [(] 17 18 L608 - [p_id] 3 7 + [P_ID] 3 7 [IN] 17 19 [VARCHAR2] 20 28 [)] 28 29 [;] 29 30 L610 [FUNCTION] 1 9 - [HH_get_info] 10 21 + [HH_GET_INFO] 10 21 L611 [(] 1 2 - [erty_id_in] 3 13 + [ERTY_ID_IN] 3 13 [IN] 14 16 - [HH_t] 17 21 + [HH_T] 17 21 [.] 21 22 - [a_id] 22 26 + [A_ID] 22 26 [%] 26 27 [TYPE] 27 31 [DEFAULT] 33 40 [NULL] 41 45 L612 [,] 1 2 - [df_id_in] 3 11 + [DF_ID_IN] 3 11 [IN] 14 16 - [HH_t] 17 21 + [HH_T] 17 21 [.] 21 22 - [b_id] 22 26 + [B_ID] 22 26 [%] 26 27 [TYPE] 27 31 [DEFAULT] 33 40 [NULL] 41 45 L613 [,] 1 2 - [fghj_id_in] 3 13 + [FGHJ_ID_IN] 3 13 [IN] 14 16 - [HH_t] 17 21 + [HH_T] 17 21 [.] 21 22 - [c_id] 22 26 + [C_ID] 22 26 [%] 26 27 [TYPE] 27 31 [DEFAULT] 33 40 - [vk_asdgfh_pa] 41 53 + [VK_ASDGFH_PA] 41 53 [.] 53 54 - [some_function] 54 67 + [SOME_FUNCTION] 54 67 [(] 67 68 [)] 68 69 L614 [,] 1 2 - [cascade_in] 3 13 + [CASCADE_IN] 3 13 [IN] 14 16 [NUMBER] 17 23 [DEFAULT] 33 40 - [vk_asdgfh_pa] 41 53 + [VK_ASDGFH_PA] 41 53 [.] 53 54 - [some_constant] 54 67 + [SOME_CONSTANT] 54 67 L615 [)] 1 2 L616 [RETURN] 1 7 - [vk_types_pa] 8 19 + [VK_TYPES_PA] 8 19 [.] 19 20 - [type_rg_info_rec] 20 36 + [TYPE_RG_INFO_REC] 20 36 [;] 36 37 L618 [PROCEDURE] 1 10 - [start_batch_job] 11 26 + [START_BATCH_JOB] 11 26 [(] 27 28 - [p_interval] 28 38 + [P_INTERVAL] 28 38 [IN] 39 41 - [dba_jobs] 42 50 + [DBA_JOBS] 42 50 [.] 50 51 - [interval] 51 59 + [INTERVAL] 51 59 [%] 59 60 [TYPE] 60 64 [)] 64 65 [;] 65 66 L620 - [procedure] 1 10 - [out] 11 14 + [PROCEDURE] 1 10 + [OUT] 11 14 [(] 14 15 - [cursor] 15 21 + [CURSOR] 15 21 [VARCHAR2] 22 30 [)] 30 31 [;] 31 32 L622 [PROCEDURE] 1 10 - [refresh_all] 11 22 + [REFRESH_ALL] 11 22 [(] 22 23 - [kehtib] 23 29 - [date] 30 34 - [default] 35 42 - [last_day] 43 51 + [KEHTIB] 23 29 + [DATE] 30 34 + [DEFAULT] 35 42 + [LAST_DAY] 43 51 [(] 51 52 - [add_months] 52 62 + [ADD_MONTHS] 52 62 [(] 62 63 - [trunc] 63 68 + [TRUNC] 63 68 [(] 68 69 - [sysdate] 69 76 + [SYSDATE] 69 76 [)] 76 77 [,] 77 78 [1] 78 79 diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/cpd/testdata/tabWidth.txt b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/cpd/testdata/tabWidth.txt index c777bdf32c1..03cbfe1cfd5 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/cpd/testdata/tabWidth.txt +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/cpd/testdata/tabWidth.txt @@ -2,7 +2,7 @@ L1 [DECLARE] 1 8 L2 - [qty_on_hand] 2 13 + [QTY_ON_HAND] 2 13 [NUMBER] 14 20 [(] 20 21 [5] 21 22 @@ -12,47 +12,47 @@ L3 [BEGIN] 1 6 L4 [SELECT] 2 8 - [quantity] 9 17 + [QUANTITY] 9 17 [INTO] 18 22 - [qty_on_hand] 23 34 + [QTY_ON_HAND] 23 34 [FROM] 35 39 - [inventory] 40 49 + [INVENTORY] 40 49 L5 [WHERE] 3 8 - [product] 9 16 + [PRODUCT] 9 16 [=] 17 18 ['TENNIS RACKET'] 19 34 L6 [FOR] 3 6 [UPDATE] 7 13 [OF] 14 16 - [quantity] 17 25 + [QUANTITY] 17 25 [;] 25 26 L7 [IF] 2 4 - [qty_on_hand] 5 16 + [QTY_ON_HAND] 5 16 [>] 17 18 [0] 19 20 [THEN] 21 25 L8 [UPDATE] 3 9 - [inventory] 10 19 + [INVENTORY] 10 19 [SET] 20 23 - [quantity] 24 32 + [QUANTITY] 24 32 [=] 33 34 - [quantity] 35 43 + [QUANTITY] 35 43 [-] 44 45 [1] 46 47 L9 [WHERE] 4 9 - [product] 10 17 + [PRODUCT] 10 17 [=] 18 19 ['TENNIS RACKET'] 20 35 [;] 35 36 L10 [INSERT] 3 9 [INTO] 10 14 - [purchase_record] 15 30 + [PURCHASE_RECORD] 15 30 L11 [VALUES] 4 10 [(] 11 12 @@ -66,7 +66,7 @@ L12 L13 [INSERT] 3 9 [INTO] 10 14 - [purchase_record] 15 30 + [PURCHASE_RECORD] 15 30 L14 [VALUES] 4 10 [(] 11 12 From ab80b2443dbc0072aba47c75743f86499accd127 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Mon, 8 Apr 2024 21:31:22 +0200 Subject: [PATCH 05/22] Also add this ability for Antlr lexers, adapt TSQL --- .../pmd/cpd/impl/AntlrCpdLexer.java | 11 +- .../ast/impl/antlr4/AntlrLexerBehavior.java | 32 + .../pmd/lang/ast/impl/antlr4/AntlrToken.java | 22 +- .../ast/impl/antlr4/AntlrTokenManager.java | 10 +- .../pmd/lang/tsql/cpd/TSqlCpdLexer.java | 19 + .../tsql/cpd/testdata/MailJobTimeLine.txt | 4052 ++++++++--------- .../pmd/lang/tsql/cpd/testdata/simple.txt | 42 +- 7 files changed, 2132 insertions(+), 2056 deletions(-) create mode 100644 pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/AntlrLexerBehavior.java diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/impl/AntlrCpdLexer.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/impl/AntlrCpdLexer.java index 3c06996210d..a451e8400db 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/impl/AntlrCpdLexer.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/impl/AntlrCpdLexer.java @@ -12,6 +12,7 @@ import net.sourceforge.pmd.cpd.CpdLexer; import net.sourceforge.pmd.lang.TokenManager; +import net.sourceforge.pmd.lang.ast.impl.antlr4.AntlrLexerBehavior; import net.sourceforge.pmd.lang.ast.impl.antlr4.AntlrToken; import net.sourceforge.pmd.lang.ast.impl.antlr4.AntlrTokenManager; import net.sourceforge.pmd.lang.document.TextDocument; @@ -23,7 +24,15 @@ public abstract class AntlrCpdLexer extends CpdLexerBase { @Override protected final TokenManager makeLexerImpl(TextDocument doc) throws IOException { CharStream charStream = CharStreams.fromReader(doc.newReader(), doc.getFileId().getAbsolutePath()); - return new AntlrTokenManager(getLexerForSource(charStream), doc); + return new AntlrTokenManager(getLexerForSource(charStream), doc, getLexerBehavior()); + } + + /** + * Override this method to customize some aspects of the + * lexer. + */ + protected AntlrLexerBehavior getLexerBehavior() { + return new AntlrLexerBehavior(); } protected abstract Lexer getLexerForSource(CharStream charStream); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/AntlrLexerBehavior.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/AntlrLexerBehavior.java new file mode 100644 index 00000000000..7d2e8cf24ee --- /dev/null +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/AntlrLexerBehavior.java @@ -0,0 +1,32 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.ast.impl.antlr4; + +import org.antlr.v4.runtime.Token; + +import net.sourceforge.pmd.cpd.CpdLanguageProperties; + +/** + * Strategy to customize some aspects of the mapping + * from Antlr tokens to PMD/CPD tokens. + */ +public class AntlrLexerBehavior { + + + /** + * Return the image that the token should have, possibly applying a transformation. + * The default just returns {@link Token#getText()}. + * Transformations here are usually normalizations, for instance, mapping + * the image of all keywords to uppercase/lowercase to implement case-insensitivity, + * or replacing the image of literals by a placeholder to implement {@link CpdLanguageProperties#CPD_ANONYMIZE_LITERALS}. + * + * @param token A token from the Antlr Lexer + * + * @return The image + */ + protected String getTokenImage(Token token) { + return token.getText(); + } +} diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/AntlrToken.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/AntlrToken.java index 8a7d08c1f57..d76586f73bf 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/AntlrToken.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/AntlrToken.java @@ -17,9 +17,13 @@ */ public class AntlrToken implements GenericToken { - private final Token token; private final AntlrToken previousComment; private final TextDocument textDoc; + private final String image; + private final int endOffset; + private final int startOffset; + private final int channel; + private final int kind; AntlrToken next; @@ -30,10 +34,14 @@ public class AntlrToken implements GenericToken { * @param previousComment The previous comment * @param textDoc The text document */ - public AntlrToken(final Token token, final AntlrToken previousComment, TextDocument textDoc) { - this.token = token; + AntlrToken(final Token token, final AntlrToken previousComment, TextDocument textDoc, AntlrLexerBehavior behavior) { this.previousComment = previousComment; this.textDoc = textDoc; + this.image = behavior.getTokenImage(token); + this.startOffset = token.getStartIndex(); + this.endOffset = token.getStopIndex(); + this.channel = token.getChannel(); + this.kind = token.getType(); } @Override @@ -48,13 +56,13 @@ public AntlrToken getPreviousComment() { @Override public CharSequence getImageCs() { - return token.getText(); + return image; } /** Returns a text region with the coordinates of this token. */ @Override public TextRegion getRegion() { - return TextRegion.fromBothOffsets(token.getStartIndex(), token.getStopIndex() + 1); + return TextRegion.fromBothOffsets(startOffset, endOffset); } @Override @@ -74,7 +82,7 @@ public int compareTo(AntlrToken o) { @Override public int getKind() { - return token.getType(); + return kind; } public boolean isHidden() { @@ -82,6 +90,6 @@ public boolean isHidden() { } public boolean isDefault() { - return token.getChannel() == Lexer.DEFAULT_TOKEN_CHANNEL; + return channel == Lexer.DEFAULT_TOKEN_CHANNEL; } } diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/AntlrTokenManager.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/AntlrTokenManager.java index 5828195850f..6c54e3ef05d 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/AntlrTokenManager.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/AntlrTokenManager.java @@ -20,12 +20,20 @@ public class AntlrTokenManager implements TokenManager { private final Lexer lexer; private final TextDocument textDoc; + private final AntlrLexerBehavior behavior; private AntlrToken previousToken; public AntlrTokenManager(final Lexer lexer, final TextDocument textDocument) { + this(lexer, textDocument, new AntlrLexerBehavior()); + } + + public AntlrTokenManager(final Lexer lexer, + final TextDocument textDocument, + final AntlrLexerBehavior behavior) { this.lexer = lexer; this.textDoc = textDocument; + this.behavior = behavior; resetListeners(); } @@ -40,7 +48,7 @@ public AntlrToken getNextToken() { private AntlrToken getNextTokenFromAnyChannel() { final AntlrToken previousComment = previousToken != null && previousToken.isHidden() ? previousToken : null; - final AntlrToken currentToken = new AntlrToken(lexer.nextToken(), previousComment, textDoc); + final AntlrToken currentToken = new AntlrToken(lexer.nextToken(), previousComment, textDoc, this.behavior); if (previousToken != null) { previousToken.next = currentToken; } diff --git a/pmd-tsql/src/main/java/net/sourceforge/pmd/lang/tsql/cpd/TSqlCpdLexer.java b/pmd-tsql/src/main/java/net/sourceforge/pmd/lang/tsql/cpd/TSqlCpdLexer.java index 8d9b403f85c..deea25c4fb5 100644 --- a/pmd-tsql/src/main/java/net/sourceforge/pmd/lang/tsql/cpd/TSqlCpdLexer.java +++ b/pmd-tsql/src/main/java/net/sourceforge/pmd/lang/tsql/cpd/TSqlCpdLexer.java @@ -4,10 +4,14 @@ package net.sourceforge.pmd.lang.tsql.cpd; +import java.util.Locale; + import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.Token; import net.sourceforge.pmd.cpd.impl.AntlrCpdLexer; +import net.sourceforge.pmd.lang.ast.impl.antlr4.AntlrLexerBehavior; import net.sourceforge.pmd.lang.tsql.ast.TSqlLexer; /** @@ -19,4 +23,19 @@ public class TSqlCpdLexer extends AntlrCpdLexer { protected Lexer getLexerForSource(CharStream charStream) { return new TSqlLexer(new CaseChangingCharStream(charStream, true)); } + + @Override + protected AntlrLexerBehavior getLexerBehavior() { + return new AntlrLexerBehavior() { + @Override + protected String getTokenImage(Token token) { + if (token.getType() == TSqlLexer.STRING) { + // This path is for case-sensitive tokens + return super.getTokenImage(token); + } + // normalize case sensitive tokens + return token.getText().toUpperCase(Locale.ROOT); + } + }; + } } diff --git a/pmd-tsql/src/test/resources/net/sourceforge/pmd/lang/tsql/cpd/testdata/MailJobTimeLine.txt b/pmd-tsql/src/test/resources/net/sourceforge/pmd/lang/tsql/cpd/testdata/MailJobTimeLine.txt index 728d9ba318c..aa21c30f09e 100644 --- a/pmd-tsql/src/test/resources/net/sourceforge/pmd/lang/tsql/cpd/testdata/MailJobTimeLine.txt +++ b/pmd-tsql/src/test/resources/net/sourceforge/pmd/lang/tsql/cpd/testdata/MailJobTimeLine.txt @@ -1,2344 +1,2344 @@ [Image] or [Truncated image[ Bcol Ecol L14 - [SET] 1 4 - [NOCOUNT] 5 12 - [ON] 13 15 + [SET] 1 3 + [NOCOUNT] 5 11 + [ON] 13 14 L17 - [DECLARE] 1 8 - [@StartDate] 9 19 - [DATETIME] 20 28 + [DECLARE] 1 7 + [@STARTDATE] 9 18 + [DATETIME] 20 27 L18 - [DECLARE] 1 8 - [@EndDate] 9 17 - [DATETIME] 18 26 + [DECLARE] 1 7 + [@ENDDATE] 9 16 + [DATETIME] 18 25 L19 - [DECLARE] 1 8 - [@MinimalJobDurationInSeconds] 9 37 - [INT] 39 42 + [DECLARE] 1 7 + [@MINIMALJOBDURATIONINSECONDS] 9 36 + [INT] 39 41 L20 - [DECLARE] 1 8 - [@EmailTo] 9 17 - [VARCHAR] 18 25 - [(] 25 26 - [500] 26 29 - [)] 29 30 + [DECLARE] 1 7 + [@EMAILTO] 9 16 + [VARCHAR] 18 24 + [(] 25 25 + [500] 26 28 + [)] 29 29 L21 - [DECLARE] 1 8 - [@DaysPast] 9 18 - [INT] 19 22 + [DECLARE] 1 7 + [@DAYSPAST] 9 17 + [INT] 19 21 L22 - [DECLARE] 1 8 - [@HoursPast] 9 19 - [INT] 20 23 + [DECLARE] 1 7 + [@HOURSPAST] 9 18 + [INT] 20 22 L23 - [DECLARE] 1 8 - [@Servername] 9 20 - [VARCHAR] 21 28 - [(] 28 29 - [50] 29 31 - [)] 31 32 + [DECLARE] 1 7 + [@SERVERNAME] 9 19 + [VARCHAR] 21 27 + [(] 28 28 + [50] 29 30 + [)] 31 31 L32 - [SET] 1 4 - [@EmailTo] 5 13 - [=] 14 15 - ['John.Doe@xyz.com;Jennifer.Doe@xyz[ 16 55 + [SET] 1 3 + [@EMAILTO] 5 12 + [=] 14 14 + ['John.Doe@xyz.com;Jennifer.Doe@xyz[ 16 54 L35 - [SET] 1 4 - [@DaysPast] 5 14 - [=] 15 16 - [1] 17 18 + [SET] 1 3 + [@DAYSPAST] 5 13 + [=] 15 15 + [1] 17 17 L38 - [SET] 1 4 - [@HoursPast] 5 15 - [=] 16 17 - [0] 18 19 + [SET] 1 3 + [@HOURSPAST] 5 14 + [=] 16 16 + [0] 18 18 L41 - [SET] 1 4 - [@MinimalJobDurationInSeconds] 5 33 - [=] 35 36 - [0] 37 38 + [SET] 1 3 + [@MINIMALJOBDURATIONINSECONDS] 5 32 + [=] 35 35 + [0] 37 37 L55 - [SET] 1 4 - [@StartDate] 5 15 - [=] 16 17 - [DateAdd] 18 25 - [(] 25 26 - [hh] 26 28 - [,] 28 29 - [-] 30 31 - [(] 31 32 - [@HoursPast] 32 42 - [)] 42 43 - [,] 43 44 - [GETDATE] 45 52 - [(] 52 53 - [)] 53 54 - [-] 55 56 - [@DaysPast] 57 66 - [)] 66 67 + [SET] 1 3 + [@STARTDATE] 5 14 + [=] 16 16 + [DATEADD] 18 24 + [(] 25 25 + [HH] 26 27 + [,] 28 28 + [-] 30 30 + [(] 31 31 + [@HOURSPAST] 32 41 + [)] 42 42 + [,] 43 43 + [GETDATE] 45 51 + [(] 52 52 + [)] 53 53 + [-] 55 55 + [@DAYSPAST] 57 65 + [)] 66 66 L56 - [SET] 1 4 - [@EndDate] 5 13 - [=] 14 15 - [GETDATE] 16 23 - [(] 23 24 - [)] 24 25 + [SET] 1 3 + [@ENDDATE] 5 12 + [=] 14 14 + [GETDATE] 16 22 + [(] 23 23 + [)] 24 24 L64 - [DECLARE] 1 8 - [@TEXT_SUCCESS] 9 22 - [VARCHAR] 23 30 - [(] 30 31 - [20] 31 33 - [)] 33 34 + [DECLARE] 1 7 + [@TEXT_SUCCESS] 9 21 + [VARCHAR] 23 29 + [(] 30 30 + [20] 31 32 + [)] 33 33 L65 - [SET] 1 4 - [@TEXT_SUCCESS] 5 18 - [=] 19 20 - ['Successful'] 21 33 + [SET] 1 3 + [@TEXT_SUCCESS] 5 17 + [=] 19 19 + ['Successful'] 21 32 L74 - [DECLARE] 1 8 - [@COLOR_ERROR] 9 21 - [VARCHAR] 22 29 - [(] 29 30 - [10] 30 32 - [)] 32 33 + [DECLARE] 1 7 + [@COLOR_ERROR] 9 20 + [VARCHAR] 22 28 + [(] 29 29 + [10] 30 31 + [)] 32 32 L75 - [SET] 1 4 - [@COLOR_ERROR] 5 17 - [=] 18 19 - ['#FF4136'] 20 29 + [SET] 1 3 + [@COLOR_ERROR] 5 16 + [=] 18 18 + ['#FF4136'] 20 28 L77 - [DECLARE] 1 8 - [@COLOR_SUCCESS] 9 23 - [VARCHAR] 24 31 - [(] 31 32 - [10] 32 34 - [)] 34 35 + [DECLARE] 1 7 + [@COLOR_SUCCESS] 9 22 + [VARCHAR] 24 30 + [(] 31 31 + [10] 32 33 + [)] 34 34 L78 - [SET] 1 4 - [@COLOR_SUCCESS] 5 19 - [=] 20 21 - ['#2ECC40'] 22 31 + [SET] 1 3 + [@COLOR_SUCCESS] 5 18 + [=] 20 20 + ['#2ECC40'] 22 30 L80 - [DECLARE] 1 8 - [@COLOR_RETRY] 9 21 - [VARCHAR] 22 29 - [(] 29 30 - [10] 30 32 - [)] 32 33 + [DECLARE] 1 7 + [@COLOR_RETRY] 9 20 + [VARCHAR] 22 28 + [(] 29 29 + [10] 30 31 + [)] 32 32 L81 - [SET] 1 4 - [@COLOR_RETRY] 5 17 - [=] 18 19 - ['#FFDC00'] 20 29 + [SET] 1 3 + [@COLOR_RETRY] 5 16 + [=] 18 18 + ['#FFDC00'] 20 28 L83 - [DECLARE] 1 8 - [@COLOR_ABORTED] 9 23 - [VARCHAR] 24 31 - [(] 31 32 - [10] 32 34 - [)] 34 35 + [DECLARE] 1 7 + [@COLOR_ABORTED] 9 22 + [VARCHAR] 24 30 + [(] 31 31 + [10] 32 33 + [)] 34 34 L84 - [SET] 1 4 - [@COLOR_ABORTED] 5 19 - [=] 20 21 - ['#AAAAAA'] 22 31 + [SET] 1 3 + [@COLOR_ABORTED] 5 18 + [=] 20 20 + ['#AAAAAA'] 22 30 L86 - [DECLARE] 1 8 - [@COLOR_UNDEFINED] 9 25 - [VARCHAR] 26 33 - [(] 33 34 - [10] 34 36 - [)] 36 37 + [DECLARE] 1 7 + [@COLOR_UNDEFINED] 9 24 + [VARCHAR] 26 32 + [(] 33 33 + [10] 34 35 + [)] 36 36 L87 - [SET] 1 4 - [@COLOR_UNDEFINED] 5 21 - [=] 22 23 - ['#111111'] 24 33 + [SET] 1 3 + [@COLOR_UNDEFINED] 5 20 + [=] 22 22 + ['#111111'] 24 32 L89 - [DECLARE] 1 8 - [@COLOR_RUNNING] 9 23 - [VARCHAR] 24 31 - [(] 31 32 - [10] 32 34 - [)] 34 35 + [DECLARE] 1 7 + [@COLOR_RUNNING] 9 22 + [VARCHAR] 24 30 + [(] 31 31 + [10] 32 33 + [)] 34 34 L90 - [SET] 1 4 - [@COLOR_RUNNING] 5 19 - [=] 20 21 - ['#7FDBFF'] 22 31 + [SET] 1 3 + [@COLOR_RUNNING] 5 18 + [=] 20 20 + ['#7FDBFF'] 22 30 L92 - [DECLARE] 1 8 - [@COLOR_SERVERSTART] 9 27 - [VARCHAR] 28 35 - [(] 35 36 - [10] 36 38 - [)] 38 39 + [DECLARE] 1 7 + [@COLOR_SERVERSTART] 9 26 + [VARCHAR] 28 34 + [(] 35 35 + [10] 36 37 + [)] 38 38 L93 - [SET] 1 4 - [@COLOR_SERVERSTART] 5 23 - [=] 24 25 - ['#FF851B'] 26 35 + [SET] 1 3 + [@COLOR_SERVERSTART] 5 22 + [=] 24 24 + ['#FF851B'] 26 34 L102 - [IF] 1 3 - [OBJECT_ID] 4 13 - [(] 13 14 - ['tempdb..#JobExecutionTimes'] 14 42 - [)] 42 43 - [IS] 44 46 - [NOT] 47 50 - [NULL] 51 55 + [IF] 1 2 + [OBJECT_ID] 4 12 + [(] 13 13 + ['tempdb..#JobExecutionTimes'] 14 41 + [)] 42 42 + [IS] 44 45 + [NOT] 47 49 + [NULL] 51 54 L103 - [DROP] 4 8 - [TABLE] 9 14 - [#JobExecutionTimes] 15 33 - [;] 33 34 + [DROP] 4 7 + [TABLE] 9 13 + [#JOBEXECUTIONTIMES] 15 32 + [;] 33 33 L105 - [IF] 1 3 - [OBJECT_ID] 4 13 - [(] 13 14 - ['tempdb..##TimelineGraph'] 14 39 - [)] 39 40 - [IS] 41 43 - [NOT] 44 47 - [NULL] 48 52 + [IF] 1 2 + [OBJECT_ID] 4 12 + [(] 13 13 + ['tempdb..##TimelineGraph'] 14 38 + [)] 39 39 + [IS] 41 42 + [NOT] 44 46 + [NULL] 48 51 L106 - [DROP] 4 8 - [TABLE] 9 14 - [##TimelineGraph] 15 30 - [;] 30 31 + [DROP] 4 7 + [TABLE] 9 13 + [##TIMELINEGRAPH] 15 29 + [;] 30 30 L115 - [CREATE] 1 7 - [TABLE] 8 13 - [##TimelineGraph] 14 29 + [CREATE] 1 6 + [TABLE] 8 12 + [##TIMELINEGRAPH] 14 28 L116 - [(] 4 5 - [ID] 5 7 - [INT] 8 11 - [IDENTITY] 12 20 - [(] 20 21 - [1] 21 22 - [,] 22 23 - [1] 24 25 - [)] 25 26 + [(] 4 4 + [ID] 5 6 + [INT] 8 10 + [IDENTITY] 12 19 + [(] 20 20 + [1] 21 21 + [,] 22 22 + [1] 24 24 + [)] 25 25 L117 - [NOT] 12 15 - [NULL] 16 20 + [NOT] 12 14 + [NULL] 16 19 L118 - [,] 4 5 - [HTML] 5 9 - [VARCHAR] 10 17 - [(] 17 18 - [8000] 18 22 - [)] 22 23 - [NULL] 24 28 + [,] 4 4 + [HTML] 5 8 + [VARCHAR] 10 16 + [(] 17 17 + [8000] 18 21 + [)] 22 22 + [NULL] 24 27 L119 - [)] 4 5 + [)] 4 4 L128 - [SELECT] 1 7 - [JOBDATA] 10 17 - [.] 17 18 - [*] 18 19 + [SELECT] 1 6 + [JOBDATA] 10 16 + [.] 17 17 + [*] 18 18 L129 - [INTO] 1 5 - [#JobExecutionTimes] 10 28 + [INTO] 1 4 + [#JOBEXECUTIONTIMES] 10 27 L130 - [FROM] 1 5 - [(] 10 11 + [FROM] 1 4 + [(] 10 10 L132 - [SELECT] 11 17 - [JOB] 19 22 - [.] 22 23 - [name] 23 27 - [AS] 28 30 - [JobName] 31 38 + [SELECT] 11 16 + [JOB] 19 21 + [.] 22 22 + [NAME] 23 26 + [AS] 28 29 + [JOBNAME] 31 37 L133 - [,] 18 19 - [CAT] 19 22 - [.] 22 23 - [name] 23 27 - [AS] 28 30 - [CatName] 31 38 + [,] 18 18 + [CAT] 19 21 + [.] 22 22 + [NAME] 23 26 + [AS] 28 29 + [CATNAME] 31 37 L134 - [,] 18 19 - [CONVERT] 19 26 - [(] 26 27 - [DATETIME] 27 35 - [,] 35 36 - [CONVERT] 37 44 - [(] 44 45 - [CHAR] 45 49 - [(] 49 50 - [8] 50 51 - [)] 51 52 - [,] 52 53 - [HIS] 54 57 - [.] 57 58 - [run_date] 58 66 - [,] 66 67 - [112] 68 71 - [)] 71 72 - [+] 73 74 - [' '] 75 78 + [,] 18 18 + [CONVERT] 19 25 + [(] 26 26 + [DATETIME] 27 34 + [,] 35 35 + [CONVERT] 37 43 + [(] 44 44 + [CHAR] 45 48 + [(] 49 49 + [8] 50 50 + [)] 51 51 + [,] 52 52 + [HIS] 54 56 + [.] 57 57 + [RUN_DATE] 58 65 + [,] 66 66 + [112] 68 70 + [)] 71 71 + [+] 73 73 + [' '] 75 77 L135 - [+] 19 20 - [STUFF] 21 26 - [(] 26 27 - [STUFF] 27 32 - [(] 32 33 - [RIGHT] 33 38 - [(] 38 39 - ['000000'] 39 47 + [+] 19 19 + [STUFF] 21 25 + [(] 26 26 + [STUFF] 27 31 + [(] 32 32 + [RIGHT] 33 37 + [(] 38 38 + ['000000'] 39 46 L136 - [+] 39 40 - [CONVERT] 41 48 - [(] 48 49 - [VARCHAR] 49 56 - [(] 56 57 - [8] 57 58 - [)] 58 59 - [,] 59 60 - [HIS] 61 64 - [.] 64 65 - [run_time] 65 73 - [)] 73 74 - [,] 74 75 - [6] 76 77 - [)] 77 78 - [,] 78 79 + [+] 39 39 + [CONVERT] 41 47 + [(] 48 48 + [VARCHAR] 49 55 + [(] 56 56 + [8] 57 57 + [)] 58 58 + [,] 59 59 + [HIS] 61 63 + [.] 64 64 + [RUN_TIME] 65 72 + [)] 73 73 + [,] 74 74 + [6] 76 76 + [)] 77 77 + [,] 78 78 L137 - [5] 33 34 - [,] 34 35 - [0] 36 37 - [,] 37 38 - [':'] 39 42 - [)] 42 43 - [,] 43 44 - [3] 45 46 - [,] 46 47 - [0] 48 49 - [,] 49 50 - [':'] 51 54 - [)] 54 55 - [,] 55 56 - [120] 57 60 - [)] 60 61 - [AS] 62 64 - [SDT] 65 68 + [5] 33 33 + [,] 34 34 + [0] 36 36 + [,] 37 37 + [':'] 39 41 + [)] 42 42 + [,] 43 43 + [3] 45 45 + [,] 46 46 + [0] 48 48 + [,] 49 49 + [':'] 51 53 + [)] 54 54 + [,] 55 55 + [120] 57 59 + [)] 60 60 + [AS] 62 63 + [SDT] 65 67 L138 - [,] 18 19 - [DATEADD] 19 26 - [(] 26 27 - [s] 27 28 - [,] 28 29 + [,] 18 18 + [DATEADD] 19 25 + [(] 26 26 + [S] 27 27 + [,] 28 28 L139 - [(] 27 28 - [(] 28 29 - [HIS] 29 32 - [.] 32 33 - [run_duration] 33 45 - [/] 46 47 - [10000] 48 53 - [)] 53 54 - [%] 55 56 - [100] 57 60 - [*] 61 62 - [3600] 63 67 - [)] 67 68 + [(] 27 27 + [(] 28 28 + [HIS] 29 31 + [.] 32 32 + [RUN_DURATION] 33 44 + [/] 46 46 + [10000] 48 52 + [)] 53 53 + [%] 55 55 + [100] 57 59 + [*] 61 61 + [3600] 63 66 + [)] 67 67 L140 - [+] 27 28 - [(] 29 30 - [(] 30 31 - [HIS] 31 34 - [.] 34 35 - [run_duration] 35 47 - [/] 48 49 - [100] 50 53 - [)] 53 54 - [%] 55 56 - [100] 57 60 - [*] 61 62 - [60] 63 65 - [)] 65 66 + [+] 27 27 + [(] 29 29 + [(] 30 30 + [HIS] 31 33 + [.] 34 34 + [RUN_DURATION] 35 46 + [/] 48 48 + [100] 50 52 + [)] 53 53 + [%] 55 55 + [100] 57 59 + [*] 61 61 + [60] 63 64 + [)] 65 65 L141 - [+] 27 28 - [HIS] 29 32 - [.] 32 33 - [run_duration] 33 45 - [%] 46 47 - [100] 48 51 - [,] 51 52 + [+] 27 27 + [HIS] 29 31 + [.] 32 32 + [RUN_DURATION] 33 44 + [%] 46 46 + [100] 48 50 + [,] 51 51 L142 - [CONVERT] 27 34 - [(] 34 35 - [DATETIME] 35 43 - [,] 43 44 - [CONVERT] 45 52 - [(] 52 53 - [CHAR] 53 57 - [(] 57 58 - [8] 58 59 - [)] 59 60 - [,] 60 61 - [HIS] 62 65 - [.] 65 66 - [run_date] 66 74 - [,] 74 75 - [112] 76 79 - [)] 79 80 + [CONVERT] 27 33 + [(] 34 34 + [DATETIME] 35 42 + [,] 43 43 + [CONVERT] 45 51 + [(] 52 52 + [CHAR] 53 56 + [(] 57 57 + [8] 58 58 + [)] 59 59 + [,] 60 60 + [HIS] 62 64 + [.] 65 65 + [RUN_DATE] 66 73 + [,] 74 74 + [112] 76 78 + [)] 79 79 L143 - [+] 27 28 - [' '] 29 32 - [+] 33 34 - [STUFF] 35 40 - [(] 40 41 - [STUFF] 41 46 - [(] 46 47 - [RIGHT] 47 52 - [(] 52 53 - ['000000'] 53 61 + [+] 27 27 + [' '] 29 31 + [+] 33 33 + [STUFF] 35 39 + [(] 40 40 + [STUFF] 41 45 + [(] 46 46 + [RIGHT] 47 51 + [(] 52 52 + ['000000'] 53 60 L144 - [+] 53 54 - [CONVERT] 55 62 - [(] 62 63 - [VARCHAR] 63 70 - [(] 70 71 - [8] 71 72 - [)] 72 73 - [,] 73 74 - [HIS] 75 78 - [.] 78 79 - [run_time] 79 87 - [)] 87 88 - [,] 88 89 + [+] 53 53 + [CONVERT] 55 61 + [(] 62 62 + [VARCHAR] 63 69 + [(] 70 70 + [8] 71 71 + [)] 72 72 + [,] 73 73 + [HIS] 75 77 + [.] 78 78 + [RUN_TIME] 79 86 + [)] 87 87 + [,] 88 88 L145 - [6] 53 54 - [)] 54 55 - [,] 55 56 - [5] 57 58 - [,] 58 59 - [0] 60 61 - [,] 61 62 - [':'] 63 66 - [)] 66 67 - [,] 67 68 - [3] 69 70 - [,] 70 71 - [0] 72 73 - [,] 73 74 - [':'] 75 78 - [)] 78 79 - [,] 79 80 - [120] 81 84 - [)] 84 85 - [)] 85 86 - [AS] 87 89 - [EDT] 90 93 + [6] 53 53 + [)] 54 54 + [,] 55 55 + [5] 57 57 + [,] 58 58 + [0] 60 60 + [,] 61 61 + [':'] 63 65 + [)] 66 66 + [,] 67 67 + [3] 69 69 + [,] 70 70 + [0] 72 72 + [,] 73 73 + [':'] 75 77 + [)] 78 78 + [,] 79 79 + [120] 81 83 + [)] 84 84 + [)] 85 85 + [AS] 87 88 + [EDT] 90 92 L146 - [,] 18 19 - [JOB] 19 22 - [.] 22 23 - [description] 23 34 + [,] 18 18 + [JOB] 19 21 + [.] 22 22 + [DESCRIPTION] 23 33 L147 - [,] 18 19 - [HIS] 19 22 - [.] 22 23 - [run_status] 23 33 + [,] 18 18 + [HIS] 19 21 + [.] 22 22 + [RUN_STATUS] 23 32 L148 - [,] 18 19 - [CASE] 19 23 - [WHEN] 24 28 - [HIS] 29 32 - [.] 32 33 - [run_status] 33 43 - [=] 44 45 - [0] 46 47 - [THEN] 48 52 - [@COLOR_ERROR] 53 65 + [,] 18 18 + [CASE] 19 22 + [WHEN] 24 27 + [HIS] 29 31 + [.] 32 32 + [RUN_STATUS] 33 42 + [=] 44 44 + [0] 46 46 + [THEN] 48 51 + [@COLOR_ERROR] 53 64 L149 - [WHEN] 24 28 - [HIS] 29 32 - [.] 32 33 - [run_status] 33 43 - [=] 44 45 - [1] 46 47 - [THEN] 48 52 - [@COLOR_SUCCESS] 53 67 + [WHEN] 24 27 + [HIS] 29 31 + [.] 32 32 + [RUN_STATUS] 33 42 + [=] 44 44 + [1] 46 46 + [THEN] 48 51 + [@COLOR_SUCCESS] 53 66 L150 - [WHEN] 24 28 - [HIS] 29 32 - [.] 32 33 - [run_status] 33 43 - [=] 44 45 - [2] 46 47 - [THEN] 48 52 - [@COLOR_RETRY] 53 65 + [WHEN] 24 27 + [HIS] 29 31 + [.] 32 32 + [RUN_STATUS] 33 42 + [=] 44 44 + [2] 46 46 + [THEN] 48 51 + [@COLOR_RETRY] 53 64 L151 - [WHEN] 24 28 - [HIS] 29 32 - [.] 32 33 - [run_status] 33 43 - [=] 44 45 - [3] 46 47 - [THEN] 48 52 - [@COLOR_ABORTED] 53 67 + [WHEN] 24 27 + [HIS] 29 31 + [.] 32 32 + [RUN_STATUS] 33 42 + [=] 44 44 + [3] 46 46 + [THEN] 48 51 + [@COLOR_ABORTED] 53 66 L152 - [ELSE] 24 28 - [@COLOR_UNDEFINED] 29 45 + [ELSE] 24 27 + [@COLOR_UNDEFINED] 29 44 L153 - [END] 19 22 - [AS] 23 25 - [JobStatus] 26 35 + [END] 19 21 + [AS] 23 24 + [JOBSTATUS] 26 34 L154 - [,] 18 19 - [CASE] 19 23 - [WHEN] 24 28 - [HIS] 29 32 - [.] 32 33 - [run_status] 33 43 - [=] 44 45 - [0] 46 47 - [THEN] 48 52 - [HIS] 53 56 - [.] 56 57 - [message] 57 64 + [,] 18 18 + [CASE] 19 22 + [WHEN] 24 27 + [HIS] 29 31 + [.] 32 32 + [RUN_STATUS] 33 42 + [=] 44 44 + [0] 46 46 + [THEN] 48 51 + [HIS] 53 55 + [.] 56 56 + [MESSAGE] 57 63 L155 - [WHEN] 24 28 - [HIS] 29 32 - [.] 32 33 - [run_status] 33 43 - [=] 44 45 - [1] 46 47 - [THEN] 48 52 - [@TEXT_SUCCESS] 53 66 + [WHEN] 24 27 + [HIS] 29 31 + [.] 32 32 + [RUN_STATUS] 33 42 + [=] 44 44 + [1] 46 46 + [THEN] 48 51 + [@TEXT_SUCCESS] 53 65 L156 - [WHEN] 24 28 - [HIS] 29 32 - [.] 32 33 - [run_status] 33 43 - [=] 44 45 - [2] 46 47 - [THEN] 48 52 - [HIS] 53 56 - [.] 56 57 - [message] 57 64 + [WHEN] 24 27 + [HIS] 29 31 + [.] 32 32 + [RUN_STATUS] 33 42 + [=] 44 44 + [2] 46 46 + [THEN] 48 51 + [HIS] 53 55 + [.] 56 56 + [MESSAGE] 57 63 L157 - [WHEN] 24 28 - [HIS] 29 32 - [.] 32 33 - [run_status] 33 43 - [=] 44 45 - [3] 46 47 - [THEN] 48 52 - [HIS] 53 56 - [.] 56 57 - [message] 57 64 + [WHEN] 24 27 + [HIS] 29 31 + [.] 32 32 + [RUN_STATUS] 33 42 + [=] 44 44 + [3] 46 46 + [THEN] 48 51 + [HIS] 53 55 + [.] 56 56 + [MESSAGE] 57 63 L158 - [ELSE] 24 28 - [HIS] 29 32 - [.] 32 33 - [message] 33 40 + [ELSE] 24 27 + [HIS] 29 31 + [.] 32 32 + [MESSAGE] 33 39 L159 - [END] 19 22 - [AS] 23 25 - [JobMessage] 26 36 + [END] 19 21 + [AS] 23 24 + [JOBMESSAGE] 26 35 L161 - [FROM] 11 15 - [msdb] 19 23 - [.] 23 24 - [dbo] 24 27 - [.] 27 28 - [sysjobs] 28 35 - [AS] 36 38 - [JOB] 39 42 + [FROM] 11 14 + [MSDB] 19 22 + [.] 23 23 + [DBO] 24 26 + [.] 27 27 + [SYSJOBS] 28 34 + [AS] 36 37 + [JOB] 39 41 L162 - [LEFT] 11 15 - [JOIN] 16 20 - [msdb] 21 25 - [.] 25 26 - [dbo] 26 29 - [.] 29 30 - [sysjobhistory] 30 43 - [AS] 44 46 - [HIS] 47 50 - [ON] 51 53 - [HIS] 54 57 - [.] 57 58 - [job_id] 58 64 - [=] 65 66 - [job] 67 70 - [.] 70 71 - [job_id] 71 77 + [LEFT] 11 14 + [JOIN] 16 19 + [MSDB] 21 24 + [.] 25 25 + [DBO] 26 28 + [.] 29 29 + [SYSJOBHISTORY] 30 42 + [AS] 44 45 + [HIS] 47 49 + [ON] 51 52 + [HIS] 54 56 + [.] 57 57 + [JOB_ID] 58 63 + [=] 65 65 + [JOB] 67 69 + [.] 70 70 + [JOB_ID] 71 76 L163 - [INNER] 11 16 - [JOIN] 17 21 - [msdb] 22 26 - [.] 26 27 - [dbo] 27 30 - [.] 30 31 - [syscategories] 31 44 - [AS] 45 47 - [CAT] 48 51 - [ON] 52 54 - [CAT] 55 58 - [.] 58 59 - [category_id] 59 70 - [=] 71 72 - [JOB] 73 76 - [.] 76 77 - [category_id] 77 88 + [INNER] 11 15 + [JOIN] 17 20 + [MSDB] 22 25 + [.] 26 26 + [DBO] 27 29 + [.] 30 30 + [SYSCATEGORIES] 31 43 + [AS] 45 46 + [CAT] 48 50 + [ON] 52 53 + [CAT] 55 57 + [.] 58 58 + [CATEGORY_ID] 59 69 + [=] 71 71 + [JOB] 73 75 + [.] 76 76 + [CATEGORY_ID] 77 87 L164 - [WHERE] 11 16 - [CONVERT] 19 26 - [(] 26 27 - [DATETIME] 27 35 - [,] 35 36 - [CONVERT] 37 44 - [(] 44 45 - [CHAR] 45 49 - [(] 49 50 - [8] 50 51 - [)] 51 52 - [,] 52 53 - [HIS] 54 57 - [.] 57 58 - [run_date] 58 66 - [,] 66 67 - [112] 68 71 - [)] 71 72 - [+] 73 74 - [' '] 75 78 + [WHERE] 11 15 + [CONVERT] 19 25 + [(] 26 26 + [DATETIME] 27 34 + [,] 35 35 + [CONVERT] 37 43 + [(] 44 44 + [CHAR] 45 48 + [(] 49 49 + [8] 50 50 + [)] 51 51 + [,] 52 52 + [HIS] 54 56 + [.] 57 57 + [RUN_DATE] 58 65 + [,] 66 66 + [112] 68 70 + [)] 71 71 + [+] 73 73 + [' '] 75 77 L165 - [+] 19 20 - [STUFF] 21 26 - [(] 26 27 - [STUFF] 27 32 - [(] 32 33 - [RIGHT] 33 38 - [(] 38 39 - ['000000'] 39 47 + [+] 19 19 + [STUFF] 21 25 + [(] 26 26 + [STUFF] 27 31 + [(] 32 32 + [RIGHT] 33 37 + [(] 38 38 + ['000000'] 39 46 L166 - [+] 39 40 - [CONVERT] 41 48 - [(] 48 49 - [VARCHAR] 49 56 - [(] 56 57 - [8] 57 58 - [)] 58 59 - [,] 59 60 - [HIS] 61 64 - [.] 64 65 - [run_time] 65 73 - [)] 73 74 - [,] 74 75 - [6] 76 77 - [)] 77 78 - [,] 78 79 + [+] 39 39 + [CONVERT] 41 47 + [(] 48 48 + [VARCHAR] 49 55 + [(] 56 56 + [8] 57 57 + [)] 58 58 + [,] 59 59 + [HIS] 61 63 + [.] 64 64 + [RUN_TIME] 65 72 + [)] 73 73 + [,] 74 74 + [6] 76 76 + [)] 77 77 + [,] 78 78 L167 - [5] 33 34 - [,] 34 35 - [0] 36 37 - [,] 37 38 - [':'] 39 42 - [)] 42 43 - [,] 43 44 - [3] 45 46 - [,] 46 47 - [0] 48 49 - [,] 49 50 - [':'] 51 54 - [)] 54 55 - [,] 55 56 - [120] 57 60 - [)] 60 61 - [BETWEEN] 62 69 - [@StartDate] 70 80 + [5] 33 33 + [,] 34 34 + [0] 36 36 + [,] 37 37 + [':'] 39 41 + [)] 42 42 + [,] 43 43 + [3] 45 45 + [,] 46 46 + [0] 48 48 + [,] 49 49 + [':'] 51 53 + [)] 54 54 + [,] 55 55 + [120] 57 59 + [)] 60 60 + [BETWEEN] 62 68 + [@STARTDATE] 70 79 L168 - [AND] 62 65 + [AND] 62 64 L169 - [@EndDate] 63 71 + [@ENDDATE] 63 70 L170 - [AND] 19 22 - [HIS] 23 26 - [.] 26 27 - [step_id] 27 34 - [=] 35 36 - [0] 37 38 + [AND] 19 21 + [HIS] 23 25 + [.] 26 26 + [STEP_ID] 27 33 + [=] 35 35 + [0] 37 37 L171 - [AND] 19 22 - [(] 23 24 - [(] 24 25 - [HIS] 25 28 - [.] 28 29 - [run_duration] 29 41 - [/] 42 43 - [10000] 44 49 - [)] 49 50 - [%] 51 52 - [100] 53 56 - [*] 57 58 - [3600] 59 63 - [)] 63 64 + [AND] 19 21 + [(] 23 23 + [(] 24 24 + [HIS] 25 27 + [.] 28 28 + [RUN_DURATION] 29 40 + [/] 42 42 + [10000] 44 48 + [)] 49 49 + [%] 51 51 + [100] 53 55 + [*] 57 57 + [3600] 59 62 + [)] 63 63 L172 - [+] 19 20 - [(] 21 22 - [(] 22 23 - [HIS] 23 26 - [.] 26 27 - [run_duration] 27 39 - [/] 40 41 - [100] 42 45 - [)] 45 46 - [%] 47 48 - [100] 49 52 - [*] 53 54 - [60] 55 57 - [)] 57 58 - [+] 59 60 - [HIS] 61 64 - [.] 64 65 - [run_duration] 65 77 + [+] 19 19 + [(] 21 21 + [(] 22 22 + [HIS] 23 25 + [.] 26 26 + [RUN_DURATION] 27 38 + [/] 40 40 + [100] 42 44 + [)] 45 45 + [%] 47 47 + [100] 49 51 + [*] 53 53 + [60] 55 56 + [)] 57 57 + [+] 59 59 + [HIS] 61 63 + [.] 64 64 + [RUN_DURATION] 65 76 L173 - [%] 19 20 - [100] 21 24 - [>] 25 26 - [=] 26 27 - [@MinimalJobDurationInSeconds] 28 56 + [%] 19 19 + [100] 21 23 + [>] 25 25 + [=] 26 26 + [@MINIMALJOBDURATIONINSECONDS] 28 55 L175 - [UNION] 11 16 - [ALL] 17 20 + [UNION] 11 15 + [ALL] 17 19 L178 - [SELECT] 11 17 - [JOB] 19 22 - [.] 22 23 - [name] 23 27 - [AS] 28 30 - [JobName] 31 38 + [SELECT] 11 16 + [JOB] 19 21 + [.] 22 22 + [NAME] 23 26 + [AS] 28 29 + [JOBNAME] 31 37 L179 - [,] 18 19 - [CAT] 19 22 - [.] 22 23 - [name] 23 27 - [AS] 28 30 - [CatName] 31 38 + [,] 18 18 + [CAT] 19 21 + [.] 22 22 + [NAME] 23 26 + [AS] 28 29 + [CATNAME] 31 37 L180 - [,] 18 19 - [JA] 19 21 - [.] 21 22 - [start_execution_date] 22 42 - [AS] 43 45 - [SDT] 46 49 + [,] 18 18 + [JA] 19 20 + [.] 21 21 + [START_EXECUTION_DATE] 22 41 + [AS] 43 44 + [SDT] 46 48 L181 - [,] 18 19 - [GETDATE] 19 26 - [(] 26 27 - [)] 27 28 - [AS] 29 31 - [EDT] 32 35 + [,] 18 18 + [GETDATE] 19 25 + [(] 26 26 + [)] 27 27 + [AS] 29 30 + [EDT] 32 34 L182 - [,] 18 19 - [JOB] 19 22 - [.] 22 23 - [description] 23 34 + [,] 18 18 + [JOB] 19 21 + [.] 22 22 + [DESCRIPTION] 23 33 L183 - [,] 18 19 - [HIS] 19 22 - [.] 22 23 - [run_status] 23 33 + [,] 18 18 + [HIS] 19 21 + [.] 22 22 + [RUN_STATUS] 23 32 L184 - [,] 18 19 - [CASE] 19 23 - [WHEN] 24 28 - [HIS] 29 32 - [.] 32 33 - [run_status] 33 43 - [=] 44 45 - [0] 46 47 - [THEN] 48 52 - [@COLOR_ERROR] 53 65 + [,] 18 18 + [CASE] 19 22 + [WHEN] 24 27 + [HIS] 29 31 + [.] 32 32 + [RUN_STATUS] 33 42 + [=] 44 44 + [0] 46 46 + [THEN] 48 51 + [@COLOR_ERROR] 53 64 L185 - [WHEN] 24 28 - [HIS] 29 32 - [.] 32 33 - [run_status] 33 43 - [=] 44 45 - [1] 46 47 - [THEN] 48 52 - [@COLOR_SUCCESS] 53 67 + [WHEN] 24 27 + [HIS] 29 31 + [.] 32 32 + [RUN_STATUS] 33 42 + [=] 44 44 + [1] 46 46 + [THEN] 48 51 + [@COLOR_SUCCESS] 53 66 L186 - [WHEN] 24 28 - [HIS] 29 32 - [.] 32 33 - [run_status] 33 43 - [=] 44 45 - [2] 46 47 - [THEN] 48 52 - [@COLOR_RETRY] 53 65 + [WHEN] 24 27 + [HIS] 29 31 + [.] 32 32 + [RUN_STATUS] 33 42 + [=] 44 44 + [2] 46 46 + [THEN] 48 51 + [@COLOR_RETRY] 53 64 L187 - [WHEN] 24 28 - [HIS] 29 32 - [.] 32 33 - [run_status] 33 43 - [=] 44 45 - [3] 46 47 - [THEN] 48 52 - [@COLOR_ABORTED] 53 67 + [WHEN] 24 27 + [HIS] 29 31 + [.] 32 32 + [RUN_STATUS] 33 42 + [=] 44 44 + [3] 46 46 + [THEN] 48 51 + [@COLOR_ABORTED] 53 66 L188 - [WHEN] 24 28 - [HIS] 29 32 - [.] 32 33 - [run_status] 33 43 - [IS] 44 46 - [NULL] 47 51 - [THEN] 52 56 - [@COLOR_RUNNING] 57 71 + [WHEN] 24 27 + [HIS] 29 31 + [.] 32 32 + [RUN_STATUS] 33 42 + [IS] 44 45 + [NULL] 47 50 + [THEN] 52 55 + [@COLOR_RUNNING] 57 70 L189 - [ELSE] 24 28 - [@COLOR_UNDEFINED] 29 45 + [ELSE] 24 27 + [@COLOR_UNDEFINED] 29 44 L190 - [END] 19 22 - [AS] 23 25 - [JobStatus] 26 35 + [END] 19 21 + [AS] 23 24 + [JOBSTATUS] 26 34 L191 - [,] 18 19 - [CASE] 19 23 - [WHEN] 24 28 - [HIS] 29 32 - [.] 32 33 - [run_status] 33 43 - [=] 44 45 - [0] 46 47 - [THEN] 48 52 - [HIS] 53 56 - [.] 56 57 - [message] 57 64 + [,] 18 18 + [CASE] 19 22 + [WHEN] 24 27 + [HIS] 29 31 + [.] 32 32 + [RUN_STATUS] 33 42 + [=] 44 44 + [0] 46 46 + [THEN] 48 51 + [HIS] 53 55 + [.] 56 56 + [MESSAGE] 57 63 L192 - [WHEN] 24 28 - [HIS] 29 32 - [.] 32 33 - [run_status] 33 43 - [=] 44 45 - [1] 46 47 - [THEN] 48 52 - [@TEXT_SUCCESS] 53 66 + [WHEN] 24 27 + [HIS] 29 31 + [.] 32 32 + [RUN_STATUS] 33 42 + [=] 44 44 + [1] 46 46 + [THEN] 48 51 + [@TEXT_SUCCESS] 53 65 L193 - [WHEN] 24 28 - [HIS] 29 32 - [.] 32 33 - [run_status] 33 43 - [=] 44 45 - [2] 46 47 - [THEN] 48 52 - [HIS] 53 56 - [.] 56 57 - [message] 57 64 + [WHEN] 24 27 + [HIS] 29 31 + [.] 32 32 + [RUN_STATUS] 33 42 + [=] 44 44 + [2] 46 46 + [THEN] 48 51 + [HIS] 53 55 + [.] 56 56 + [MESSAGE] 57 63 L194 - [WHEN] 24 28 - [HIS] 29 32 - [.] 32 33 - [run_status] 33 43 - [=] 44 45 - [3] 46 47 - [THEN] 48 52 - [HIS] 53 56 - [.] 56 57 - [message] 57 64 + [WHEN] 24 27 + [HIS] 29 31 + [.] 32 32 + [RUN_STATUS] 33 42 + [=] 44 44 + [3] 46 46 + [THEN] 48 51 + [HIS] 53 55 + [.] 56 56 + [MESSAGE] 57 63 L195 - [WHEN] 24 28 - [HIS] 29 32 - [.] 32 33 - [run_status] 33 43 - [IS] 44 46 - [NULL] 47 51 - [THEN] 52 56 - ['Running currently'] 57 76 + [WHEN] 24 27 + [HIS] 29 31 + [.] 32 32 + [RUN_STATUS] 33 42 + [IS] 44 45 + [NULL] 47 50 + [THEN] 52 55 + ['Running currently'] 57 75 L196 - [ELSE] 24 28 - [HIS] 29 32 - [.] 32 33 - [message] 33 40 + [ELSE] 24 27 + [HIS] 29 31 + [.] 32 32 + [MESSAGE] 33 39 L197 - [END] 19 22 - [AS] 23 25 - [JobMessage] 26 36 + [END] 19 21 + [AS] 23 24 + [JOBMESSAGE] 26 35 L199 - [FROM] 11 15 - [msdb] 19 23 - [.] 23 24 - [dbo] 24 27 - [.] 27 28 - [sysjobactivity] 28 42 - [AS] 43 45 - [JA] 46 48 + [FROM] 11 14 + [MSDB] 19 22 + [.] 23 23 + [DBO] 24 26 + [.] 27 27 + [SYSJOBACTIVITY] 28 41 + [AS] 43 44 + [JA] 46 47 L200 - [LEFT] 11 15 - [JOIN] 16 20 - [msdb] 21 25 - [.] 25 26 - [dbo] 26 29 - [.] 29 30 - [sysjobhistory] 30 43 - [AS] 44 46 - [HIS] 47 50 - [ON] 51 53 - [HIS] 54 57 - [.] 57 58 - [instance_id] 58 69 - [=] 70 71 - [JA] 72 74 - [.] 74 75 - [job_history_id] 75 89 + [LEFT] 11 14 + [JOIN] 16 19 + [MSDB] 21 24 + [.] 25 25 + [DBO] 26 28 + [.] 29 29 + [SYSJOBHISTORY] 30 42 + [AS] 44 45 + [HIS] 47 49 + [ON] 51 52 + [HIS] 54 56 + [.] 57 57 + [INSTANCE_ID] 58 68 + [=] 70 70 + [JA] 72 73 + [.] 74 74 + [JOB_HISTORY_ID] 75 88 L201 - [JOIN] 11 15 - [msdb] 19 23 - [.] 23 24 - [dbo] 24 27 - [.] 27 28 - [sysjobs] 28 35 - [AS] 36 38 - [JOB] 39 42 - [ON] 43 45 - [JOB] 46 49 - [.] 49 50 - [job_id] 50 56 - [=] 57 58 - [JA] 59 61 - [.] 61 62 - [job_id] 62 68 + [JOIN] 11 14 + [MSDB] 19 22 + [.] 23 23 + [DBO] 24 26 + [.] 27 27 + [SYSJOBS] 28 34 + [AS] 36 37 + [JOB] 39 41 + [ON] 43 44 + [JOB] 46 48 + [.] 49 49 + [JOB_ID] 50 55 + [=] 57 57 + [JA] 59 60 + [.] 61 61 + [JOB_ID] 62 67 L202 - [JOIN] 11 15 - [msdb] 19 23 - [.] 23 24 - [dbo] 24 27 - [.] 27 28 - [sysjobsteps] 28 39 - [AS] 40 42 - [JS] 43 45 - [ON] 46 48 - [JS] 49 51 - [.] 51 52 - [job_id] 52 58 - [=] 59 60 - [JA] 61 63 - [.] 63 64 - [job_id] 64 70 + [JOIN] 11 14 + [MSDB] 19 22 + [.] 23 23 + [DBO] 24 26 + [.] 27 27 + [SYSJOBSTEPS] 28 38 + [AS] 40 41 + [JS] 43 44 + [ON] 46 47 + [JS] 49 50 + [.] 51 51 + [JOB_ID] 52 57 + [=] 59 59 + [JA] 61 62 + [.] 63 63 + [JOB_ID] 64 69 L203 - [AND] 46 49 - [ISNULL] 50 56 - [(] 56 57 - [JA] 57 59 - [.] 59 60 - [last_executed_step_id] 60 81 - [,] 81 82 + [AND] 46 48 + [ISNULL] 50 55 + [(] 56 56 + [JA] 57 58 + [.] 59 59 + [LAST_EXECUTED_STEP_ID] 60 80 + [,] 81 81 L204 - [0] 57 58 - [)] 58 59 - [+] 60 61 - [1] 62 63 - [=] 64 65 - [JS] 66 68 - [.] 68 69 - [step_id] 69 76 + [0] 57 57 + [)] 58 58 + [+] 60 60 + [1] 62 62 + [=] 64 64 + [JS] 66 67 + [.] 68 68 + [STEP_ID] 69 75 L205 - [LEFT] 11 15 - [JOIN] 16 20 - [msdb] 21 25 - [.] 25 26 - [dbo] 26 29 - [.] 29 30 - [syscategories] 30 43 - [AS] 44 46 - [CAT] 47 50 - [ON] 51 53 - [CAT] 54 57 - [.] 57 58 - [category_id] 58 69 - [=] 70 71 - [JOB] 72 75 - [.] 75 76 - [category_id] 76 87 + [LEFT] 11 14 + [JOIN] 16 19 + [MSDB] 21 24 + [.] 25 25 + [DBO] 26 28 + [.] 29 29 + [SYSCATEGORIES] 30 42 + [AS] 44 45 + [CAT] 47 49 + [ON] 51 52 + [CAT] 54 56 + [.] 57 57 + [CATEGORY_ID] 58 68 + [=] 70 70 + [JOB] 72 74 + [.] 75 75 + [CATEGORY_ID] 76 86 L206 - [WHERE] 11 16 - [JA] 19 21 - [.] 21 22 - [session_id] 22 32 - [=] 33 34 - [(] 35 36 - [SELECT] 36 42 - [TOP] 43 46 - [1] 47 48 + [WHERE] 11 15 + [JA] 19 20 + [.] 21 21 + [SESSION_ID] 22 31 + [=] 33 33 + [(] 35 35 + [SELECT] 36 41 + [TOP] 43 45 + [1] 47 47 L207 - [session_id] 43 53 + [SESSION_ID] 43 52 L208 - [FROM] 36 40 - [msdb] 43 47 - [.] 47 48 - [dbo] 48 51 - [.] 51 52 - [syssessions] 52 63 + [FROM] 36 39 + [MSDB] 43 46 + [.] 47 47 + [DBO] 48 50 + [.] 51 51 + [SYSSESSIONS] 52 62 L209 - [ORDER] 36 41 - [BY] 42 44 - [agent_start_date] 45 61 - [DESC] 62 66 + [ORDER] 36 40 + [BY] 42 43 + [AGENT_START_DATE] 45 60 + [DESC] 62 65 L210 - [)] 35 36 + [)] 35 35 L211 - [AND] 19 22 - [JA] 23 25 - [.] 25 26 - [start_execution_date] 26 46 - [IS] 47 49 - [NOT] 50 53 - [NULL] 54 58 + [AND] 19 21 + [JA] 23 24 + [.] 25 25 + [START_EXECUTION_DATE] 26 45 + [IS] 47 48 + [NOT] 50 52 + [NULL] 54 57 L212 - [AND] 19 22 - [JA] 23 25 - [.] 25 26 - [stop_execution_date] 26 45 - [IS] 46 48 - [NULL] 49 53 + [AND] 19 21 + [JA] 23 24 + [.] 25 25 + [STOP_EXECUTION_DATE] 26 44 + [IS] 46 47 + [NULL] 49 52 L213 - [)] 10 11 - [AS] 12 14 - [JOBDATA] 15 22 + [)] 10 10 + [AS] 12 13 + [JOBDATA] 15 21 L215 - [ORDER] 1 6 - [BY] 7 9 - [JOBDATA] 10 17 - [.] 17 18 - [JobName] 18 25 + [ORDER] 1 5 + [BY] 7 8 + [JOBDATA] 10 16 + [.] 17 17 + [JOBNAME] 18 24 L217 - [IF] 1 3 - [NOT] 4 7 - [EXISTS] 8 14 - [(] 15 16 - [SELECT] 17 23 - [1] 25 26 + [IF] 1 2 + [NOT] 4 6 + [EXISTS] 8 13 + [(] 15 15 + [SELECT] 17 22 + [1] 25 25 L218 - [FROM] 17 21 - [#JobExecutionTimes] 25 43 - [)] 44 45 + [FROM] 17 20 + [#JOBEXECUTIONTIMES] 25 42 + [)] 44 44 L219 - [GOTO] 4 8 - [NothingToDo] 9 20 + [GOTO] 4 7 + [NOTHINGTODO] 9 19 L228 - [DECLARE] 1 8 - [@ERROR_COUNT] 9 21 - [AS] 22 24 - [INTEGER] 25 32 + [DECLARE] 1 7 + [@ERROR_COUNT] 9 20 + [AS] 22 23 + [INTEGER] 25 31 L229 - [DECLARE] 1 8 - [@ERROR_TEXT] 9 20 - [AS] 21 23 - [VARCHAR] 24 31 - [(] 31 32 - [50] 32 34 - [)] 34 35 + [DECLARE] 1 7 + [@ERROR_TEXT] 9 19 + [AS] 21 22 + [VARCHAR] 24 30 + [(] 31 31 + [50] 32 33 + [)] 34 34 L230 - [SET] 1 4 - [@ERROR_COUNT] 5 17 - [=] 18 19 - [(] 20 21 - [SELECT] 21 27 - [COUNT] 28 33 - [(] 33 34 - [*] 34 35 - [)] 35 36 - [FROM] 37 41 - [#JobExecutionTimes] 42 60 - [WHERE] 61 66 - [run_status] 67 77 - [=] 77 78 - [0] 78 79 - [)] 79 80 + [SET] 1 3 + [@ERROR_COUNT] 5 16 + [=] 18 18 + [(] 20 20 + [SELECT] 21 26 + [COUNT] 28 32 + [(] 33 33 + [*] 34 34 + [)] 35 35 + [FROM] 37 40 + [#JOBEXECUTIONTIMES] 42 59 + [WHERE] 61 65 + [RUN_STATUS] 67 76 + [=] 77 77 + [0] 78 78 + [)] 79 79 L231 - [IF] 1 3 - [@ERROR_COUNT] 4 16 - [>] 17 18 - [0] 19 20 + [IF] 1 2 + [@ERROR_COUNT] 4 15 + [>] 17 17 + [0] 19 19 L232 - [SET] 4 7 - [@ERROR_TEXT] 8 19 - [=] 20 21 - ['There are '] 22 34 - [+] 35 36 - [CONVERT] 37 44 - [(] 44 45 - [varchar] 45 52 - [(] 52 53 - [4] 53 54 - [)] 54 55 - [,] 55 56 - [@ERROR_COUNT] 57 69 - [)] 69 70 - [+] 71 72 - [' faulty jobs.'] 72 87 + [SET] 4 6 + [@ERROR_TEXT] 8 18 + [=] 20 20 + ['There are '] 22 33 + [+] 35 35 + [CONVERT] 37 43 + [(] 44 44 + [VARCHAR] 45 51 + [(] 52 52 + [4] 53 53 + [)] 54 54 + [,] 55 55 + [@ERROR_COUNT] 57 68 + [)] 69 69 + [+] 71 71 + [' faulty jobs.'] 72 86 L233 - [ELSE] 1 5 + [ELSE] 1 4 L234 - [SET] 4 7 - [@ERROR_TEXT] 8 19 - [=] 20 21 - [''] 22 24 + [SET] 4 6 + [@ERROR_TEXT] 8 18 + [=] 20 20 + [''] 22 23 L243 - [INSERT] 1 7 - [INTO] 10 14 - [##TimelineGraph] 15 30 + [INSERT] 1 6 + [INTO] 10 13 + [##TIMELINEGRAPH] 15 29 L244 - [(] 10 11 - [HTML] 11 15 + [(] 10 10 + [HTML] 11 14 L245 - [)] 10 11 + [)] 10 10 L246 - [SELECT] 1 7 - ['\n \n [ 10 2 + [SELECT] 1 6 + ['\n \n [ 10 89 L263 - [INSERT] 1 7 - [INTO] 10 14 - [##TimelineGraph] 15 30 + [INSERT] 1 6 + [INTO] 10 13 + [##TIMELINEGRAPH] 15 29 L264 - [(] 10 11 - [HTML] 11 15 + [(] 10 10 + [HTML] 11 14 L265 - [)] 10 11 + [)] 10 10 L266 - [SELECT] 1 7 - ['\n #legend[ 10 49 + [SELECT] 1 6 + ['\n #legend[ 10 48 L291 - [+] 49 50 - [@COLOR_SUCCESS] 51 65 - [+] 66 67 - [';\n }\n\n [ 68 49 + [+] 49 49 + [@COLOR_SUCCESS] 51 64 + [+] 66 66 + [';\n }\n\n [ 68 48 L295 - [+] 49 50 - [@COLOR_RUNNING] 51 65 - [+] 66 67 - [';\n }\n\n [ 68 49 + [+] 49 49 + [@COLOR_RUNNING] 51 64 + [+] 66 66 + [';\n }\n\n [ 68 48 L299 - [+] 49 50 - [@COLOR_ERROR] 51 63 - [+] 64 65 - [';\n }\n\n [ 66 49 + [+] 49 49 + [@COLOR_ERROR] 51 62 + [+] 64 64 + [';\n }\n\n [ 66 48 L303 - [+] 49 50 - [@COLOR_RETRY] 51 63 - [+] 64 65 - [';\n }\n\n [ 66 49 + [+] 49 49 + [@COLOR_RETRY] 51 62 + [+] 64 64 + [';\n }\n\n [ 66 48 L307 - [+] 49 50 - [@COLOR_ABORTED] 51 65 - [+] 66 67 - [';\n }\n\n [ 68 49 + [+] 49 49 + [@COLOR_ABORTED] 51 64 + [+] 66 66 + [';\n }\n\n [ 68 48 L311 - [+] 49 50 - [@COLOR_SERVERSTART] 51 69 - [+] 70 71 - [';\n }\n\n [ 72 49 + [+] 49 49 + [@COLOR_SERVERSTART] 51 68 + [+] 70 70 + [';\n }\n\n [ 72 48 L315 - [+] 49 50 - [@COLOR_UNDEFINED] 51 67 - [+] 68 69 + [+] 49 49 + [@COLOR_UNDEFINED] 51 66 + [+] 68 68 [';\n }\n\n'] 70 2 L321 - [INSERT] 1 7 - [INTO] 10 14 - [##TimelineGraph] 15 30 + [INSERT] 1 6 + [INTO] 10 13 + [##TIMELINEGRAPH] 15 29 L322 - [(] 10 11 - [HTML] 11 15 - [)] 15 16 + [(] 10 10 + [HTML] 11 14 + [)] 15 15 L323 - [SELECT] 1 7 - [''] 10 20 + [SELECT] 1 6 + [''] 10 19 L326 - [INSERT] 1 7 - [INTO] 10 14 - [##TimelineGraph] 15 30 + [INSERT] 1 6 + [INTO] 10 13 + [##TIMELINEGRAPH] 15 29 L327 - [(] 10 11 - [HTML] 11 15 + [(] 10 10 + [HTML] 11 14 L328 - [)] 10 11 + [)] 10 10 L329 - [SELECT] 1 7 - ['