diff --git a/clients/cobol-lsp-vscode-extension/syntaxes/SQL.tmLanguage.json b/clients/cobol-lsp-vscode-extension/syntaxes/SQL.tmLanguage.json index aad28e2101..b1fcf7bce0 100644 --- a/clients/cobol-lsp-vscode-extension/syntaxes/SQL.tmLanguage.json +++ b/clients/cobol-lsp-vscode-extension/syntaxes/SQL.tmLanguage.json @@ -21,7 +21,7 @@ ], "repository": { "db2-sql-keywords": { - "match": "(? visitTableLocators_variable(Db2SqlParser.TableLocators_variabl return createHostVariableDefinitionNode(ctx, ctx.dbs_host_var_levels(), ctx.entry_name()); } + @Override + public List visitLob_xml_host_variables(Db2SqlParser.Lob_xml_host_variablesContext ctx) { + return createHostVariableDefinitionNode(ctx, ctx.dbs_host_var_levels(), ctx.entry_name()); + } private List createHostVariableDefinitionNode(ParserRuleContext ctx, ParserRuleContext levelCtx, ParserRuleContext nameCtx) { addReplacementContext(ctx); Locality statementLocality = getLocality(this.context.getExtendedDocument().mapLocation(constructRange(ctx))); diff --git a/server/engine/src/main/resources/LanguageKeywords_sql.txt b/server/engine/src/main/resources/LanguageKeywords_sql.txt index 90a34ae327..b89b60c862 100644 --- a/server/engine/src/main/resources/LanguageKeywords_sql.txt +++ b/server/engine/src/main/resources/LanguageKeywords_sql.txt @@ -7,4 +7,10 @@ # SPDX-License-Identifier: EPL-2.0 # Contributors: # Broadcom, Inc. - initial API and implementation -RESULT-SET-LOCATOR= \ No newline at end of file +RESULT-SET-LOCATOR= +BLOB-LOCATOR= +CLOB-LOCATOR= +DBCLOB-LOCATOR= +BLOB-FILE= +CLOB-FILE= +DBCLOB-FILE= \ No newline at end of file diff --git a/server/engine/src/test/java/org/eclipse/lsp/cobol/usecases/sql/TestSqlHostVariable.java b/server/engine/src/test/java/org/eclipse/lsp/cobol/usecases/sql/TestSqlHostVariable.java index 22b8abfd3e..bd6f6260c0 100644 --- a/server/engine/src/test/java/org/eclipse/lsp/cobol/usecases/sql/TestSqlHostVariable.java +++ b/server/engine/src/test/java/org/eclipse/lsp/cobol/usecases/sql/TestSqlHostVariable.java @@ -94,6 +94,46 @@ public class TestSqlHostVariable { + " 01 {$*VAR-NAME3} SQL TYPE IS TABLE LIKE TABLENAME AS LOCATOR.\n" + " PROCEDURE DIVISION.\n" + " DISPLAY {$var-name1}.."; + + public static final String LOB_XML_TEXT1 = + " Identification Division.\n" + + " Program-Id. 'TEST1'.\n" + + " Data Division.\n" + + " Working-Storage Section.\n" + + " 01 {$*VAR-NAME1} USAGE IS SQL TYPE IS XML AS BINARY LARGE OBJECT (10).\n" + + " 01 {$*VAR-NAME2} USAGE IS SQL TYPE IS XML AS BLOB (10 K).\n" + + " 01 {$*VAR3} USAGE IS SQL TYPE IS XML AS CHARACTER LARGE OBJECT (10 M).\n" + + " 01 {$*VAR-NAME4} USAGE IS SQL TYPE IS XML AS CHAR LARGE OBJECT (10 G).\n" + + " 01 {$*VAR-NAME5} USAGE IS SQL TYPE IS XML AS CLOB (20).\n" + + " 01 {$*VAR-NAME6} USAGE IS SQL TYPE IS XML AS DBCLOB (30 K).\n" + + " 01 {$*VAR-NAME7} USAGE IS SQL TYPE IS XML AS BLOB-LOCATOR.\n" + + " 01 {$*VAR-NAME8} USAGE IS SQL TYPE IS XML AS CLOB-LOCATOR.\n" + + " 01 {$*VAR-NAME9} USAGE IS SQL TYPE IS XML AS DBCLOB-LOCATOR.\n" + + " 01 {$*VAR-NAME10} USAGE IS SQL TYPE IS XML AS BLOB-FILE.\n" + + " 01 {$*VAR-NAME11} USAGE IS SQL TYPE IS XML AS CLOB-FILE.\n" + + " 01 {$*VAR-NAME12} USAGE IS SQL TYPE IS XML AS DBCLOB-FILE.\n" + + " PROCEDURE DIVISION.\n" + + " DISPLAY {$var-name1}."; + + public static final String LOB_XML_TEXT2 = + " Identification Division.\n" + + " Program-Id. 'TEST1'.\n" + + " Data Division.\n" + + " Working-Storage Section.\n" + + " 01 {$*VAR-NAME1}.\n" + + " 04 {$*VAR} USAGE IS SQL TYPE IS XML AS BINARY LARGE OBJECT (10).\n" + + " PROCEDURE DIVISION.\n" + + " DISPLAY {$var-name1}."; + + public static final String LOB_XML_TEXT3 = + " Identification Division.\n" + + " Program-Id. 'TEST1'.\n" + + " Data Division.\n" + + " Working-Storage Section.\n" + + " 01 {$*VAR-NAME1}.\n" + + " 49 {$*VAR|1} USAGE IS SQL TYPE IS XML AS BINARY LARGE OBJECT (10).\n" + + " PROCEDURE DIVISION.\n" + + " DISPLAY {$var-name1}."; @Test void testSupportForResultSetLocator() { UseCaseEngine.runTest(TEXT, ImmutableList.of(), ImmutableMap.of()); @@ -192,4 +232,27 @@ void testBinaryHostVariable_whenNegativeVarbinaryValue() { void testLobVariables() { UseCaseEngine.runTest(TABLE_LOCATOR_TEXT, ImmutableList.of(), ImmutableMap.of()); } + + @Test + void testLobXMLVariables1() { + UseCaseEngine.runTest(LOB_XML_TEXT1, ImmutableList.of(), ImmutableMap.of()); + } + + @Test + void testLobXMLVariables2() { + UseCaseEngine.runTest(LOB_XML_TEXT2, ImmutableList.of(), ImmutableMap.of()); + } + + @Test + void testLobXMLVariables_levelError() { + UseCaseEngine.runTest(LOB_XML_TEXT3, ImmutableList.of(), ImmutableMap.of( + "1", + new Diagnostic( + new Range(), + "Allowed range is 2 to 48", + DiagnosticSeverity.Error, + ErrorSource.PARSING.getText() + ) + )); + } }