From 3bb5e7f6c25bd5658d915e686c487684d404a706 Mon Sep 17 00:00:00 2001 From: Ilidio de Pina Lopes Date: Tue, 23 Jul 2024 14:02:36 +0200 Subject: [PATCH] rowid host variables --- .../eclipse/lsp/db2/parser/Db2SqlParser.g4 | 4 +- .../implicitDialects/sql/Db2SqlVisitor.java | 5 +++ .../usecases/sql/TestSqlHostVariable.java | 37 +++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/server/engine/src/main/antlr4/org/eclipse/lsp/db2/parser/Db2SqlParser.g4 b/server/engine/src/main/antlr4/org/eclipse/lsp/db2/parser/Db2SqlParser.g4 index 63442c62e1..7c8200870a 100644 --- a/server/engine/src/main/antlr4/org/eclipse/lsp/db2/parser/Db2SqlParser.g4 +++ b/server/engine/src/main/antlr4/org/eclipse/lsp/db2/parser/Db2SqlParser.g4 @@ -41,7 +41,7 @@ host_variable_array_times: OCCURS host_variable_array_size TIMES?; host_variable_array_size: T=dbs_integerliteral_expanded {validateIntegerRange($T.start, $T.text, 1, 32767);}; sql_host_variables: result_set_locator_variable | lob_xml_host_variables | lob_host_variables_arrays | lob_host_variables - | tableLocators_variable ; + | tableLocators_variable | rowid_host_variables; result_set_locator_variable: dbs_level_01 entry_name host_variable_usage result_set_locator; @@ -53,6 +53,8 @@ lob_host_variables: dbs_integer entry_name host_variable_usage (lobWithSize | lo lob_host_variables_arrays: dbs_host_var_levels_arrays entry_name host_variable_usage (lobWithSize | lobNoSize) occurs_clause; +rowid_host_variables: dbs_host_var_levels entry_name host_variable_usage ROWID; + dbs_host_var_levels: dbs_level_01 | T=dbs_integer {validateIntegerRange($T.text, 2, 48);}; dbs_host_var_levels_arrays: T=dbs_integer {validateIntegerRange($T.text, 2, 48);}; diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/sql/Db2SqlVisitor.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/sql/Db2SqlVisitor.java index 5fccfac002..260157d5bc 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/sql/Db2SqlVisitor.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/sql/Db2SqlVisitor.java @@ -95,6 +95,11 @@ public List visitBinary_host_variable_array(Db2SqlParser.Binary_host_varia return createHostVariableDefinitionNode(ctx, ctx.dbs_host_var_levels(), ctx.entry_name()); } + @Override + public List visitRowid_host_variables(Db2SqlParser.Rowid_host_variablesContext ctx) { + return createHostVariableDefinitionNode(ctx, ctx.dbs_host_var_levels(), ctx.entry_name()); + } + @Override public List visitLob_xml_host_variables(Db2SqlParser.Lob_xml_host_variablesContext ctx) { List hostVariableDefinitionNode = createHostVariableDefinitionNode(ctx, ctx.dbs_host_var_levels(), ctx.entry_name()); 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 a2069ae65b..276d30d75f 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 @@ -245,6 +245,25 @@ public class TestSqlHostVariable { + " DISPLAY {$VB-LENGTH}(1).\n" + " DISPLAY {$VB-DATA}(1).\n"; + + public static final String ROWID_TEXT1 = + " Identification Division.\n" + + " Program-Id. 'TEST1'.\n" + + " Data Division.\n" + + " Working-Storage Section.\n" + + " 01 {$*VAR}.\n" + + " 02 {$*VAR1} USAGE IS SQL TYPE IS ROWID.\n" + + " PROCEDURE DIVISION.\n"; + + public static final String ROWID_TEXT2 = + " Identification Division.\n" + + " Program-Id. 'TEST1'.\n" + + " Data Division.\n" + + " Working-Storage Section.\n" + + " 01 {$*VAR}.\n" + + " 52 {$*VAR1|1} USAGE IS SQL TYPE IS ROWID.\n" + + " PROCEDURE DIVISION.\n"; + @Test void testSupportForResultSetLocator() { UseCaseEngine.runTest(TEXT, ImmutableList.of(), ImmutableMap.of()); @@ -377,6 +396,24 @@ void testLobXMLVariables_levelError() { )); } + @Test + void testRowidVariables() { + UseCaseEngine.runTest(ROWID_TEXT1, ImmutableList.of(), ImmutableMap.of()); + } + + @Test + void testRowidVariables_levelError() { + UseCaseEngine.runTest(ROWID_TEXT2, ImmutableList.of(), ImmutableMap.of( + "1", + new Diagnostic( + new Range(), + "Allowed range is 2 to 48", + DiagnosticSeverity.Error, + ErrorSource.PARSING.getText() + ) + )); + } + @Test void testLobVariablesArrays() { UseCaseEngine.runTest(LOD_VARS_ARRAYS_TEXT1, ImmutableList.of(), ImmutableMap.of());