Skip to content

Commit

Permalink
feat: Add support for Binary Host Variable Arrays (#2394)
Browse files Browse the repository at this point in the history
* Add grammar for Binary Host Variable Arrays

Add grammar for Binary Host Variable Arrays. (New branch due to the old one getting out of date and merges/updates caused it to break.)

* Fixed error and added unit tests

Fixed error and added unit tests.

* Added missing override due to merge

* Fixed error and added unit tests

Fixed error and added unit tests.

* Remove dots (#2399)

chore: remove dits

* fix: Encoding error during copybook download (#2402)

* Fixed compile issue from rebase.

* Add OCCURS to SQL.tmlLanguage.json

Add OCCURS to SQL.tmlLanguage.json to provide highlighting.

---------

Co-authored-by: Vit Gottwald <vit.gottwald@broadcom.com>
Co-authored-by: slavek-kucera <53339291+slavek-kucera@users.noreply.github.com>
  • Loading branch information
3 people authored Jul 24, 2024
1 parent 70eafd1 commit 4db32ac
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
],
"repository": {
"db2-sql-keywords": {
"match": "(?<![\\-\\w])(?i:ABSOLUTE|ACCELERATION|ACCELERATOR|ACCESS|ACCESSCTRL|ACCTNG|ACTION|ACTIVATE|ACTIVE|ADD|ADDRESS|AFTER|AGE|ALGORITHM|ALIAS|ALL|ALLOCATE|ALLOW|ALTER|ALTERIN|ALWAYS|AND|ANY|APPEND|APPLCOMPAT|APPLICATION|APPLNAME|ARCHIVE|ARRAY|ARRAY_EXISTS|AS|ASC|ASCII|ASENSITIVE|ASSEMBLE|ASSOCIATE|ASUTIME|AT|ATOMIC|ATTRIBUTES|AUDIT|AUTHENTICATION|AUTHID|AUTONOMOUS|AUX|AUXILIARY|AVG|BASED|BEFORE|BEGIN|BETWEEN|BIGINT|BINARY|BIND|BINDADD|BINDAGENT|BIT|BLOB|BLOB-FILE|BLOB-LOCATOR|BOTH|BSDS|BUFFERPOOL|BUFFERPOOLS|BUSINESS_TIME|BY|CACHE|CALL|CALLED|CALLER|CAPTURE|CARDINALITY|CASCADE|CASCADED|CASE|CAST|CATALOG_NAME|CCSID|CHANGE|CHANGED|CHANGES|CHAR|CHARACTER|CHARACTER_LENGTH|CHAR_LENGTH|CHECK|CLAUSE|CLIENT|CLIENT_ACCTNG|CLIENT_APPLNAME|CLIENT_CORR_TOKEN|CLIENT_USERID|CLIENT_WRKSTNNAME|CLOB|CLOB-FILE|CLOB-LOCATOR|CLONE|CLOSE|CLUSTER|COALESCE|COBOL|COLLECTION|COLLID|COLUMN|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPATIBILITY|COMPRESS|CONCAT|CONCENTRATE|CONCURRENT|CONDITION|CONDITION_NUMBER|CONNECT|CONNECTION|CONSTANT|CONSTRAINT|CONTAINS|CONTEXT|CONTINUE|CONTROL|COPY|CORR|CORRELATION|COUNT|COUNT_BIG|COVARIANCE|CREATE|CREATEALIAS|CREATEDBA|CREATESG|CREATEIN|CREATESG|CREATETAB|CREATETMTAB|CREATETS|CREATE_SECURE_OBJECT|CROSS|CS|CUBE|CUME_DIST|CURRENT|CURRENTLY|CURRENT_DATE|CURRENT_LC_CTYPE|CURRENT_PATH|CURRENT_SCHEMA|CURRENT_SERVER|CURRENT_TIME|CURRENT_TIMESTAMP|CURRENT_TIMEZONE|CURSOR|CURSORS|CURSOR_NAME|CYCLE|DATA|DATAACCESS|DATABASE|DATACLAS|DATE|DAY|DAYOFMONTH|DAYOFWEEK|DAYOFYEAR|DAYS|DB2SQL|DB2_AUTHENTICATION_TYPE|DB2_AUTHORIZATION_ID|DB2_CONNECTION_STATE|DB2_CONNECTION_STATUS|DB2_ENCRYPTION_TYPE|DB2_ERROR_CODE1|DB2_ERROR_CODE2|DB2_ERROR_CODE3|DB2_ERROR_CODE4|DB2_GET_DIAGNOSTICS_DIAGNOSTICS|DB2_INTERNAL_ERROR_POINTER|DB2_LAST_ROW|DB2_LINE_NUMBER|DB2_MESSAGE_ID|DB2_MODULE_DETECTING_ERROR|DB2_NUMBER_PARAMETER_MARKERS|DB2_NUMBER_RESULT_SETS|DB2_NUMBER_ROWS|DB2_ORDINAL_TOKEN1|DB2_ORDINAL_TOKEN2|DB2_ORDINAL_TOKEN3|DB2_ORDINAL_TOKEN4|DB2_PRODUCT_ID|DB2_REASON_CODE|DB2_RETURNED_SQLCODE|DB2_RETURN_STATUS|DB2_ROW_NUMBER|DB2_SERVER_CLASS_NAME|DB2_SQLERRD1|DB2_SQLERRD2|DB2_SQLERRD3|DB2_SQLERRD4|DB2_SQLERRD5|DB2_SQLERRD6|DB2_SQLERRD_SET|DB2_SQL_ATTR_CURSOR_HOLD|DB2_SQL_ATTRCURSOR_ROWSET|DB2_SQL_ATTR_CURSOR_SCROLLABLE|DB2_SQL_ATTR_CURSOR_SENSITIVITY|DB2_SQL_ATTR_CURSOR_TYPE|DB2_SQL_NESTING_LEVEL|DB2_TOKEN_COUNT|DBADM|DBCLOB|DBCLOB-FILE|DBCLOB-LOCATOR|DBCTRL|DBINFO|DBMAINT|DEACTIVATE|DEALLOCATE|DEBUG|DEBUGSESSION|DEC|DECFLOAT|DECIMAL|DECLARE|DEC_ROUND_CEILING|DEC_ROUND_DOWN|DEC_ROUND_FLOOR|DEC_ROUND_HALF_DOWN|DEC_ROUND_HALF_EVEN|DEC_ROUND_HALF_UP|DEC_ROUND_UP|DEFAULT|DEFAULTS|DEFER|DEFERRED|DEFINE|DEFINEBIND|DEFINER|DEFINERUN|DEGREE|DELETE|DENSE_RANK|DEPENDENT|DESC|DESCRIBE|DESCRIPTOR|DETERMINISTIC|DIAGNOSTICS|DISABLE|DISALLOW|DISPATCH|DISPLAY|DISPLAYDB|DISTINCT|DO|DOUBLE|DROP|DROPIN|DSNDB04|DSSIZE|DYNAMIC|DYNAMICRULES|EACH|EBCDIC|EDITPROC|ELEMENT|ELIGIBLE|ELSE|ELSEIF|EMPTY|ENABLE|ENCODING|ENCRYPTION|END|ENDING|ENFORCED|ENVIRONMENT|ERASE|ESCAPE|EUR|EVERY|EXCEPT|EXCHANGE|EXCLUDE|EXCLUDING|EXCLUSIVE|EXECUTE|EXISTS|EXIT|EXPLAIN|EXTERNAL|EXTRA|EXTRACT|FAILBACK|FAILURE|FAILURES|FENCED|FETCH|FIELDPROC|FINAL|FIRST|FIRST_VALUE|FLOAT|FOLLOWING|FOR|FOREIGN|FORMAT|FOUND|FREE|FREEPAGE|FROM|FULL|FUNCTION|V10R1|V11R1|GBPCACHE|GENERAL|GENERATE|GENERATED|GENERIC|GET|GET_ACCEL_ARCHIVE|GLOBAL|GO|GOTO|GRANT|GRAPHIC|GROUP|GROUPING|HANDLER|HASH|HAVING|HEX|HIDDEN|HINT|HISTORY|HOLD|HOUR|HOURS|ID|IDENTITY|IF|IGNORE|IMAGCOPY|IMMEDIATE|IMPLICITLY|IN|INCLUDE|INCLUDING|INCLUSIVE|INCREMENT|INDEX|INDEXBP|INDICATOR|INHERIT|INITIALLY|INLINE|INNER|INOUT|INPUT|INSENSITIVE|INSERT|INSTEAD|INT|INTEGER|INTERSECT|INTO|INVALID|INVOKEBIND|INVOKERUN|IS|ISO|ISOLATION|ITERATE|JAR|JAVA|JIS|JOBNAME|JOIN|KEEP|KEY|KEYS|LABEL|LABELS|LAG|LANGUAGE|LARGE|LAST|LAST_VALUE|LC_CTYPE|LEAD|LEAVE|LEFT|LENGTH|LEVEL|LIKE|LIMIT|LITERALS|LOAD|LOB|LOCAL|LOCALE|LOCATION|LOCATOR|LOCATORS|LOCK|LOCKED|LOCKMAX|LOCKS|LOCKSIZE|LOGGED|LOOP|LOWER|MAIN|MAINTAINED|MASK|MATCHED|MATERIALIZED|MAX|MAXPARTITIONS|MAXROWS|MAXVALUE|MEMBER|MERGE|MESSAGE_TEXT|MGMTCLAS|MICROSECOND|MICROSECONDS|MIN|MINUTE|MINUTES|MINVALUE|MIXED|MODE|MODIFIERS|MODIFIES|MONITOR1|MONITOR2|MONTH|MONTHS|MORE|MOVE|MULTIPLIER|NAME|NAMES|NAMESPACE|NATIONAL|NCNAME|NEW|NEW_TABLE|NEXT|NO|NODEFER|NONE|NOT|NTH_VALUE|NTILE|NULL|NULLS|NULTERM|NUMBER|NUMERIC|NUMPARTS|OBID|OBJECT|OF|OFF|OFFSET|OLD|OLD_TABLE|ON|ONCE|ONLY|OPEN|OPERATION|OPTHINT|OPTIMIZATION|OPTION|OPTIONAL|OPTIONS|OR|ORDER|ORDINALITY|ORGANIZE|ORIGINAL|OUT|OUTCOME|OUTER|OUTPUT|OVER|OVERLAPS|OVERRIDING|OWNER|OWNERSHIP|PACKADM|PACKAGE|PACKAGESET|PACKAGE_NAME|PACKAGE_SCHEMA|PACKAGE_VERSION|PADDED|PAGE|PAGENUM|PARALLEL|PARAMETER|PART|PARTITION|PARTITIONED|PASSING|PASSWORD|PATH|PCTFREE|PENDING|PERCENT_RANK|PERIOD|PERMISSION|PIECESIZE|PLAN|PLI|PORTION|POSITION|POSITIONING|PRECEDING|PRECISION|PREPARE|PRESERVE|PREVIOUS|PRIMARY|PRIOR|PRIQTY|PRIVILEGES|PROCEDURE|PROFILE|PROGRAM|PUBLIC|QUALIFIER|QUERY|QUERYNO|RANDOM|RANGE|RANK|RATIO_TO_REPORT|READ|READS|REAL|RECORDS|RECOVER|RECOVERDB|REF|REFERENCES|REFERENCING|REFRESH|REGENERATE|REGISTERS|RELATIVE|RELEASE|REMOVE|RENAME|REOPT|REORG|REPAIR|REPEAT|REPLACE|REQUIRED|RESET|RESIDENT|RESIGNAL|RESOLUTION|RESPECT|RESTART|RESTRICT|RESULT|RESULT-SET-LOCATOR|RETAIN|RETURN|RETURNED_SQLSTATE|RETURNING|RETURNS|REUSE|REVOKE|REXX|RIGHT|ROLE|ROLLBACK|ROLLUP|ROTATE|ROUNDING|ROUND_CEILING|ROUND_DOWN|ROUND_FLOOR|ROUND_HALF_DOWN|ROUND_HALF_EVEN|ROUND_HALF_UP|ROUND_UP|ROUTINE|ROW|ROWID|ROWS|ROWSET|ROW_COUNT|ROW_NUMBER|RR|RS|RULES|RUN|SAVEPOINT|SBCS|SCHEMA|SCHEME|SCRATCHPAD|SCROLL|SECOND|SECONDS|SECQTY|SECTION|SECURED|SECURITY|SEGSIZE|SELECT|SELECTIVITY|SENSITIVE|SEQUENCE|SERVAUTH|SERVER|SERVER_NAME|SESSION|SESSION_USER|SET|SETS|SHARE|SIGNAL|SIZE|SKIP|SMALLINT|SOME|SOURCE|SPACE|SPECIAL|SPECIFIC|SQL|SQLADM|SQLCA|SQLCADE|SQLCODE|SQLD|SQLDA|SQLDABC|SQLERROR|SQLEXCEPTION|SQLID|SQLN|SQLSTAT|SQLSTATE|SQLVAR|SQLWARNING|STABILIZED|STACKED|START|STARTDB|STARTING|STATEMENT|STATEMENTS|STATIC|STATS|STAY|STDDEV|STMTCACHE|STMTID|STMTTOKEN|STOGROUP|STOP|STOPALL|STOPDB|STORAGE|STORCLAS|STORES|STOSPACE|STRUCTURE|STYLE|SUB|SUBSTR|SUBSTRING|SUM|SYNONYM|SYSADM|SYSCTRL|SYSDEFLT|SYSIBM|SYSOPR|SYSTEM|SYSTEM_TIME|TABLE|TABLESPACE|TEMPORAL|TEMPORARY|THEN|TIME|TIMESTAMP|TIMEZONE|TO|TOKEN|TRACE|TRACKMOD|TRANSACTION|TRANSFER|TRANSLATE|TRANSLATION|TRIGGER|TRIGGERS|TRIM|TRUNCATE|TRUSTED|TYPE|TYPES|UNBOUNDED|UNICODE|UNION|UNIQUE|UNNEST|UNPACK|UNTIL|UPDATE|UPON|UPPER|UR|URL|USA|USAGE|USE|USER|USERID|USING|V1|VALIDATE|VALIDPROC|VALUE|VALUES|VARBINARY|VARCHAR|VARGRAPHIC|VARIABLE|VARIANCE|VARYING|VCAT|VERSION|VERSIONING|VERSIONS|VIEW|VOLATILE|VOLUMES|WAIT|WAITFORDATA|WHEN|WHENEVER|WHERE|WHILE|WITH|WITHOUT|WLM|WORK|WORKFILE|WRAPPED|WRITE|WRKSTNNAME|XML|XMLCAST|XMLNAMESPACES|XMLPATTERN|XMLQUERY|XMLSCHEMA|XMLTABLE|YEAR|YEARS|YES|ZONE)(?![\\-\\w])",
"match": "(?<![\\-\\w])(?i:ABSOLUTE|ACCELERATION|ACCELERATOR|ACCESS|ACCESSCTRL|ACCTNG|ACTION|ACTIVATE|ACTIVE|ADD|ADDRESS|AFTER|AGE|ALGORITHM|ALIAS|ALL|ALLOCATE|ALLOW|ALTER|ALTERIN|ALWAYS|AND|ANY|APPEND|APPLCOMPAT|APPLICATION|APPLNAME|ARCHIVE|ARRAY|ARRAY_EXISTS|AS|ASC|ASCII|ASENSITIVE|ASSEMBLE|ASSOCIATE|ASUTIME|AT|ATOMIC|ATTRIBUTES|AUDIT|AUTHENTICATION|AUTHID|AUTONOMOUS|AUX|AUXILIARY|AVG|BASED|BEFORE|BEGIN|BETWEEN|BIGINT|BINARY|BIND|BINDADD|BINDAGENT|BIT|BLOB|BLOB-FILE|BLOB-LOCATOR|BOTH|BSDS|BUFFERPOOL|BUFFERPOOLS|BUSINESS_TIME|BY|CACHE|CALL|CALLED|CALLER|CAPTURE|CARDINALITY|CASCADE|CASCADED|CASE|CAST|CATALOG_NAME|CCSID|CHANGE|CHANGED|CHANGES|CHAR|CHARACTER|CHARACTER_LENGTH|CHAR_LENGTH|CHECK|CLAUSE|CLIENT|CLIENT_ACCTNG|CLIENT_APPLNAME|CLIENT_CORR_TOKEN|CLIENT_USERID|CLIENT_WRKSTNNAME|CLOB|CLOB-FILE|CLOB-LOCATOR|CLONE|CLOSE|CLUSTER|COALESCE|COBOL|COLLECTION|COLLID|COLUMN|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPATIBILITY|COMPRESS|CONCAT|CONCENTRATE|CONCURRENT|CONDITION|CONDITION_NUMBER|CONNECT|CONNECTION|CONSTANT|CONSTRAINT|CONTAINS|CONTEXT|CONTINUE|CONTROL|COPY|CORR|CORRELATION|COUNT|COUNT_BIG|COVARIANCE|CREATE|CREATEALIAS|CREATEDBA|CREATESG|CREATEIN|CREATESG|CREATETAB|CREATETMTAB|CREATETS|CREATE_SECURE_OBJECT|CROSS|CS|CUBE|CUME_DIST|CURRENT|CURRENTLY|CURRENT_DATE|CURRENT_LC_CTYPE|CURRENT_PATH|CURRENT_SCHEMA|CURRENT_SERVER|CURRENT_TIME|CURRENT_TIMESTAMP|CURRENT_TIMEZONE|CURSOR|CURSORS|CURSOR_NAME|CYCLE|DATA|DATAACCESS|DATABASE|DATACLAS|DATE|DAY|DAYOFMONTH|DAYOFWEEK|DAYOFYEAR|DAYS|DB2SQL|DB2_AUTHENTICATION_TYPE|DB2_AUTHORIZATION_ID|DB2_CONNECTION_STATE|DB2_CONNECTION_STATUS|DB2_ENCRYPTION_TYPE|DB2_ERROR_CODE1|DB2_ERROR_CODE2|DB2_ERROR_CODE3|DB2_ERROR_CODE4|DB2_GET_DIAGNOSTICS_DIAGNOSTICS|DB2_INTERNAL_ERROR_POINTER|DB2_LAST_ROW|DB2_LINE_NUMBER|DB2_MESSAGE_ID|DB2_MODULE_DETECTING_ERROR|DB2_NUMBER_PARAMETER_MARKERS|DB2_NUMBER_RESULT_SETS|DB2_NUMBER_ROWS|DB2_ORDINAL_TOKEN1|DB2_ORDINAL_TOKEN2|DB2_ORDINAL_TOKEN3|DB2_ORDINAL_TOKEN4|DB2_PRODUCT_ID|DB2_REASON_CODE|DB2_RETURNED_SQLCODE|DB2_RETURN_STATUS|DB2_ROW_NUMBER|DB2_SERVER_CLASS_NAME|DB2_SQLERRD1|DB2_SQLERRD2|DB2_SQLERRD3|DB2_SQLERRD4|DB2_SQLERRD5|DB2_SQLERRD6|DB2_SQLERRD_SET|DB2_SQL_ATTR_CURSOR_HOLD|DB2_SQL_ATTRCURSOR_ROWSET|DB2_SQL_ATTR_CURSOR_SCROLLABLE|DB2_SQL_ATTR_CURSOR_SENSITIVITY|DB2_SQL_ATTR_CURSOR_TYPE|DB2_SQL_NESTING_LEVEL|DB2_TOKEN_COUNT|DBADM|DBCLOB|DBCLOB-FILE|DBCLOB-LOCATOR|DBCTRL|DBINFO|DBMAINT|DEACTIVATE|DEALLOCATE|DEBUG|DEBUGSESSION|DEC|DECFLOAT|DECIMAL|DECLARE|DEC_ROUND_CEILING|DEC_ROUND_DOWN|DEC_ROUND_FLOOR|DEC_ROUND_HALF_DOWN|DEC_ROUND_HALF_EVEN|DEC_ROUND_HALF_UP|DEC_ROUND_UP|DEFAULT|DEFAULTS|DEFER|DEFERRED|DEFINE|DEFINEBIND|DEFINER|DEFINERUN|DEGREE|DELETE|DENSE_RANK|DEPENDENT|DESC|DESCRIBE|DESCRIPTOR|DETERMINISTIC|DIAGNOSTICS|DISABLE|DISALLOW|DISPATCH|DISPLAY|DISPLAYDB|DISTINCT|DO|DOUBLE|DROP|DROPIN|DSNDB04|DSSIZE|DYNAMIC|DYNAMICRULES|EACH|EBCDIC|EDITPROC|ELEMENT|ELIGIBLE|ELSE|ELSEIF|EMPTY|ENABLE|ENCODING|ENCRYPTION|END|ENDING|ENFORCED|ENVIRONMENT|ERASE|ESCAPE|EUR|EVERY|EXCEPT|EXCHANGE|EXCLUDE|EXCLUDING|EXCLUSIVE|EXECUTE|EXISTS|EXIT|EXPLAIN|EXTERNAL|EXTRA|EXTRACT|FAILBACK|FAILURE|FAILURES|FENCED|FETCH|FIELDPROC|FINAL|FIRST|FIRST_VALUE|FLOAT|FOLLOWING|FOR|FOREIGN|FORMAT|FOUND|FREE|FREEPAGE|FROM|FULL|FUNCTION|V10R1|V11R1|GBPCACHE|GENERAL|GENERATE|GENERATED|GENERIC|GET|GET_ACCEL_ARCHIVE|GLOBAL|GO|GOTO|GRANT|GRAPHIC|GROUP|GROUPING|HANDLER|HASH|HAVING|HEX|HIDDEN|HINT|HISTORY|HOLD|HOUR|HOURS|ID|IDENTITY|IF|IGNORE|IMAGCOPY|IMMEDIATE|IMPLICITLY|IN|INCLUDE|INCLUDING|INCLUSIVE|INCREMENT|INDEX|INDEXBP|INDICATOR|INHERIT|INITIALLY|INLINE|INNER|INOUT|INPUT|INSENSITIVE|INSERT|INSTEAD|INT|INTEGER|INTERSECT|INTO|INVALID|INVOKEBIND|INVOKERUN|IS|ISO|ISOLATION|ITERATE|JAR|JAVA|JIS|JOBNAME|JOIN|KEEP|KEY|KEYS|LABEL|LABELS|LAG|LANGUAGE|LARGE|LAST|LAST_VALUE|LC_CTYPE|LEAD|LEAVE|LEFT|LENGTH|LEVEL|LIKE|LIMIT|LITERALS|LOAD|LOB|LOCAL|LOCALE|LOCATION|LOCATOR|LOCATORS|LOCK|LOCKED|LOCKMAX|LOCKS|LOCKSIZE|LOGGED|LOOP|LOWER|MAIN|MAINTAINED|MASK|MATCHED|MATERIALIZED|MAX|MAXPARTITIONS|MAXROWS|MAXVALUE|MEMBER|MERGE|MESSAGE_TEXT|MGMTCLAS|MICROSECOND|MICROSECONDS|MIN|MINUTE|MINUTES|MINVALUE|MIXED|MODE|MODIFIERS|MODIFIES|MONITOR1|MONITOR2|MONTH|MONTHS|MORE|MOVE|MULTIPLIER|NAME|NAMES|NAMESPACE|NATIONAL|NCNAME|NEW|NEW_TABLE|NEXT|NO|NODEFER|NONE|NOT|NTH_VALUE|NTILE|NULL|NULLS|NULTERM|NUMBER|NUMERIC|NUMPARTS|OBID|OBJECT|OCCURS|OF|OFF|OFFSET|OLD|OLD_TABLE|ON|ONCE|ONLY|OPEN|OPERATION|OPTHINT|OPTIMIZATION|OPTION|OPTIONAL|OPTIONS|OR|ORDER|ORDINALITY|ORGANIZE|ORIGINAL|OUT|OUTCOME|OUTER|OUTPUT|OVER|OVERLAPS|OVERRIDING|OWNER|OWNERSHIP|PACKADM|PACKAGE|PACKAGESET|PACKAGE_NAME|PACKAGE_SCHEMA|PACKAGE_VERSION|PADDED|PAGE|PAGENUM|PARALLEL|PARAMETER|PART|PARTITION|PARTITIONED|PASSING|PASSWORD|PATH|PCTFREE|PENDING|PERCENT_RANK|PERIOD|PERMISSION|PIECESIZE|PLAN|PLI|PORTION|POSITION|POSITIONING|PRECEDING|PRECISION|PREPARE|PRESERVE|PREVIOUS|PRIMARY|PRIOR|PRIQTY|PRIVILEGES|PROCEDURE|PROFILE|PROGRAM|PUBLIC|QUALIFIER|QUERY|QUERYNO|RANDOM|RANGE|RANK|RATIO_TO_REPORT|READ|READS|REAL|RECORDS|RECOVER|RECOVERDB|REF|REFERENCES|REFERENCING|REFRESH|REGENERATE|REGISTERS|RELATIVE|RELEASE|REMOVE|RENAME|REOPT|REORG|REPAIR|REPEAT|REPLACE|REQUIRED|RESET|RESIDENT|RESIGNAL|RESOLUTION|RESPECT|RESTART|RESTRICT|RESULT|RESULT-SET-LOCATOR|RETAIN|RETURN|RETURNED_SQLSTATE|RETURNING|RETURNS|REUSE|REVOKE|REXX|RIGHT|ROLE|ROLLBACK|ROLLUP|ROTATE|ROUNDING|ROUND_CEILING|ROUND_DOWN|ROUND_FLOOR|ROUND_HALF_DOWN|ROUND_HALF_EVEN|ROUND_HALF_UP|ROUND_UP|ROUTINE|ROW|ROWID|ROWS|ROWSET|ROW_COUNT|ROW_NUMBER|RR|RS|RULES|RUN|SAVEPOINT|SBCS|SCHEMA|SCHEME|SCRATCHPAD|SCROLL|SECOND|SECONDS|SECQTY|SECTION|SECURED|SECURITY|SEGSIZE|SELECT|SELECTIVITY|SENSITIVE|SEQUENCE|SERVAUTH|SERVER|SERVER_NAME|SESSION|SESSION_USER|SET|SETS|SHARE|SIGNAL|SIZE|SKIP|SMALLINT|SOME|SOURCE|SPACE|SPECIAL|SPECIFIC|SQL|SQLADM|SQLCA|SQLCADE|SQLCODE|SQLD|SQLDA|SQLDABC|SQLERROR|SQLEXCEPTION|SQLID|SQLN|SQLSTAT|SQLSTATE|SQLVAR|SQLWARNING|STABILIZED|STACKED|START|STARTDB|STARTING|STATEMENT|STATEMENTS|STATIC|STATS|STAY|STDDEV|STMTCACHE|STMTID|STMTTOKEN|STOGROUP|STOP|STOPALL|STOPDB|STORAGE|STORCLAS|STORES|STOSPACE|STRUCTURE|STYLE|SUB|SUBSTR|SUBSTRING|SUM|SYNONYM|SYSADM|SYSCTRL|SYSDEFLT|SYSIBM|SYSOPR|SYSTEM|SYSTEM_TIME|TABLE|TABLESPACE|TEMPORAL|TEMPORARY|THEN|TIME|TIMESTAMP|TIMEZONE|TO|TOKEN|TRACE|TRACKMOD|TRANSACTION|TRANSFER|TRANSLATE|TRANSLATION|TRIGGER|TRIGGERS|TRIM|TRUNCATE|TRUSTED|TYPE|TYPES|UNBOUNDED|UNICODE|UNION|UNIQUE|UNNEST|UNPACK|UNTIL|UPDATE|UPON|UPPER|UR|URL|USA|USAGE|USE|USER|USERID|USING|V1|VALIDATE|VALIDPROC|VALUE|VALUES|VARBINARY|VARCHAR|VARGRAPHIC|VARIABLE|VARIANCE|VARYING|VCAT|VERSION|VERSIONING|VERSIONS|VIEW|VOLATILE|VOLUMES|WAIT|WAITFORDATA|WHEN|WHENEVER|WHERE|WHILE|WITH|WITHOUT|WLM|WORK|WORKFILE|WRAPPED|WRITE|WRKSTNNAME|XML|XMLCAST|XMLNAMESPACES|XMLPATTERN|XMLQUERY|XMLSCHEMA|XMLTABLE|YEAR|YEARS|YES|ZONE)(?![\\-\\w])",
"name": "keyword.verb.sql"
},
"comment-sql-source": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -494,6 +494,7 @@ NUMERIC : N U M E R I C;
NUMPARTS: N U M P A R T S;
OBID: O B I D;
OBJECT : O B J E C T;
OCCURS : O C C U R S;
OF : O F;
OFF : O F F;
OFFSET : O F F S E T;
Expand Down Expand Up @@ -727,6 +728,7 @@ TEMPORAL: T E M P O R A L;
TEMPORARY : T E M P O R A R Y;
THEN : T H E N;
TIME : T I M E;
TIMES: T I M E S;
TIMESTAMP : T I M E S T A M P;
TIMEZONE : T I M E Z O N E;
TO : T O;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,19 @@ execRule: EXEC SQL sqlCode END_EXEC

nonExecRule: host_variable_rule;

host_variable_rule: (sql_host_variables | binary_host_variable);
host_variable_rule: (sql_host_variables | binary_host_variable | binary_host_variable_array);

binary_host_variable: dbs_level_01 entry_name host_variable_usage binary_host_variable_type;
binary_host_variable_type: BINARY LPARENCHAR binary_host_variable_binary_size RPARENCHAR | (VARBINARY | BINARY VARYING) LPARENCHAR binary_host_variable_varbinary_size RPARENCHAR;

binary_host_variable_array: dbs_host_var_levels entry_name SQL TYPE IS binary_host_variable_type host_variable_array_times;

binary_host_variable_binary_size: T=dbs_integerliteral_expanded {validateIntegerRange($T.start, $T.text, 1, 255);};
binary_host_variable_varbinary_size: T=dbs_integerliteral_expanded {validateIntegerRange($T.start, $T.text, 1, 32704);};

host_variable_usage: (USAGE IS?)? SQL TYPE IS;
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_host_variables | lob_xml_host_variables
| tableLocators_variable ;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,11 @@ public List<Node> visitTableLocators_variable(Db2SqlParser.TableLocators_variabl
return createHostVariableDefinitionNode(ctx, ctx.dbs_host_var_levels(), ctx.entry_name());
}

@Override
public List<Node> visitBinary_host_variable_array(Db2SqlParser.Binary_host_variable_arrayContext ctx) {
return createHostVariableDefinitionNode(ctx, ctx.dbs_host_var_levels(), ctx.entry_name());
}

@Override
public List<Node> visitLob_xml_host_variables(Db2SqlParser.Lob_xml_host_variablesContext ctx) {
List<Node> hostVariableDefinitionNode = createHostVariableDefinitionNode(ctx, ctx.dbs_host_var_levels(), ctx.entry_name());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,42 @@ public class TestSqlHostVariable {
+ " 01 {$*VAR-INVALID-BIN`->VAR-INVALID-BIN`->VAR-INVALID-BIN-LEN`->VAR-INVALID-BIN-TEXT} USAGE IS SQL TYPE IS VARBINARY({-|1}1234).\n"
+ " PROCEDURE DIVISION.\n";

public static final String BINARY_ARR_TEXT1 =
" Identification Division.\n"
+ " Program-Id. 'TEST1'.\n"
+ " Data Division.\n"
+ " Working-Storage Section.\n"
+ " 01 {$*GREET}.\n"
+ " 02 {$*VAR} SQL TYPE IS BINARY(255) OCCURS 32767 TIMES.\n"
+ " PROCEDURE DIVISION.\n";

public static final String BINARY_ARR_TEXT2 =
" Identification Division.\n"
+ " Program-Id. 'TEST1'.\n"
+ " Data Division.\n"
+ " Working-Storage Section.\n"
+ " 01 {$*GREET}.\n"
+ " 02 {$*VAR} SQL TYPE IS VARBINARY(32704) OCCURS 32767 TIMES.\n"
+ " PROCEDURE DIVISION.\n";

public static final String BINARY_ARR_TEXT3 =
" Identification Division.\n"
+ " Program-Id. 'TEST1'.\n"
+ " Data Division.\n"
+ " Working-Storage Section.\n"
+ " 01 {$*GREET}.\n"
+ " 02 {$*VAR} SQL TYPE IS BINARY(255) OCCURS 32767.\n"
+ " PROCEDURE DIVISION.\n";

public static final String BINARY_ARR_TEXT4 =
" Identification Division.\n"
+ " Program-Id. 'TEST1'.\n"
+ " Data Division.\n"
+ " Working-Storage Section.\n"
+ " 01 {$*GREET}.\n"
+ " 02 {$*VAR} SQL TYPE IS VARBINARY(32704) OCCURS 32767.\n"
+ " PROCEDURE DIVISION.\n";

public static final String TABLE_LOCATOR_TEXT =
" Identification Division.\n"
+ " Program-Id. 'TEST1'.\n"
Expand Down Expand Up @@ -294,4 +330,24 @@ void testLobXMLVariables_levelError() {
)
));
}

@Test
void testBinaryHostVariableArray1() {
UseCaseEngine.runTest(BINARY_ARR_TEXT1, ImmutableList.of(), ImmutableMap.of());
}

@Test
void testBinaryHostVariableArray2() {
UseCaseEngine.runTest(BINARY_ARR_TEXT2, ImmutableList.of(), ImmutableMap.of());
}

@Test
void testBinaryHostVariableArray3() {
UseCaseEngine.runTest(BINARY_ARR_TEXT3, ImmutableList.of(), ImmutableMap.of());
}

@Test
void testBinaryHostVariableArray4() {
UseCaseEngine.runTest(BINARY_ARR_TEXT4, ImmutableList.of(), ImmutableMap.of());
}
}

0 comments on commit 4db32ac

Please sign in to comment.