import { getCompletionItem, language, conf } from './flink-sql'export function registerLanguage(monaco) { const languageId = 'fsql'; monaco.languages.register({id: languageId}); monaco.languages.setMonarchTokensProvider(languageId, language); monaco.languages.registerCompletionItemProvider(languageId, getCompletionItem(monaco)); monaco.languages.setLanguageConfiguration(languageId, conf)}
export const conf = { comments: { lineComment: '--', blockComment: ['/*', '*/'] }, brackets: [ ['{', '}'], ['<', '>'], ['[', ']'], ['(', ')'] ], autoClosingPairs: [ { open: '{', close: '}' }, { open: '<', close: '>' }, { open: '[', close: ']' }, { open: '(', close: ')' }, { open: '`', close: '`' }, { open: '"', close: '"' }, { open: "'", close: "'" } ], surroundingPairs: [ { open: '{', close: '}' }, { open: '<', close: '>' }, { open: '[', close: ']' }, { open: '(', close: ')' }, { open: '`', close: '`' }, { open: '"', close: '"' }, { open: "'", close: "'" } ]}export const language = { defaultToken: '', tokenPostfix: '.fsql', ignoreCase: true, brackets: [ { open: '[', close: ']', token: 'delimiter.square' }, { open: '(', close: ')', token: 'delimiter.parenthesis' }, { open: '<', close: '>', token: 'delimiter.angle' } ], keywords: [ 'ABS', 'ABSOLUTE', 'ACTION', 'ADA', 'ADD', 'ADMIN', 'AFTER', 'ALL', 'ALLOCATE', 'ALLOW', 'ALTER', 'ALWAYS', 'AND', 'ANY', 'ARE', 'AS', 'ASC', 'ASENSITIVE', 'ASSERTION', 'ASSIGNMENT', 'ASYMMETRIC', 'AT', 'ATOMIC', 'ATTRIBUTE', 'ATTRIBUTES', 'AUTHORIZATION', 'AVG', 'BEFORE', 'BEGIN', 'BERNOULLI', 'BETWEEN', 'BIT', 'BLOB', 'BOTH', 'BREADTH', 'BY', 'CALL', 'CALLED', 'CARDINALITY', 'CASCADE', 'CASCADED', 'CASE', 'CAST', 'CATALOG', 'CATALOG_NAME', 'CEIL', 'CEILING', 'CENTURY', 'CHAIN', 'CHARACTER', 'CHARACTERISTICS', 'CHARACTERS', 'CHARACTER_LENGTH', 'CHARACTER_SET_CATALOG', 'CHARACTER_SET_NAME', 'CHARACTER_SET_SCHEMA', 'CHAR_LENGTH', 'CHECK', 'CLASS_ORIGIN', 'CLOB', 'CLOSE', 'COALESCE', 'COBOL', 'COLLATE', 'COLLATION', 'COLLATION_CATALOG', 'COLLATION_NAME', 'COLLATION_SCHEMA', 'COLLECT', 'COLUMN', 'COLUMN_NAME', 'COMMAND_FUNCTION', 'COMMAND_FUNCTION_CODE', 'COMMENT', 'COMMIT', 'COMMITTED', 'CONDITION', 'CONDITION_NUMBER', 'CONNECT', 'CONNECTION', 'CONNECTION_NAME', 'CONSTRAINT', 'CONSTRAINTS', 'CONSTRAINT_CATALOG', 'CONSTRAINT_NAME', 'CONSTRAINT_SCHEMA', 'CONSTRUCTOR', 'CONTAINS', 'CONTINUE', 'CONVERT', 'CORR', 'CORRESPONDING', 'COUNT', 'COVAR_POP', 'COVAR_SAMP', 'CREATE', 'CROSS', 'CUBE', 'CUME_DIST', 'CURRENT', 'CURRENT_CATALOG', 'CURRENT_DATE', 'CURRENT_DEFAULT_TRANSFORM_GROUP', 'CURRENT_PATH', 'CURRENT_ROLE', 'CURRENT_SCHEMA', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_TRANSFORM_GROUP_FOR_TYPE', 'CURRENT_USER', 'CURSOR', 'CURSOR_NAME', 'CYCLE', 'DATA', 'DATABASE', 'DATETIME_INTERVAL_CODE', 'DATETIME_INTERVAL_PRECISION', 'DAY', 'DEALLOCATE', 'DECADE', 'DECLARE', 'DEFAULT', 'DEFAULTS', 'DEFERRABLE', 'DEFERRED', 'DEFINE', 'DEFINED', 'DEFINER', 'DEGREE', 'DELETE', 'DENSE_RANK', 'DEPTH', 'DEREF', 'DERIVED', 'DESC', 'DESCRIBE', 'DESCRIPTION', 'DESCRIPTOR', 'DETERMINISTIC', 'DIAGNOSTICS', 'DISALLOW', 'DISCONNECT', 'DISPATCH', 'DISTINCT', 'DOMAIN', 'DOW', 'DOY', 'DROP', 'DYNAMIC', 'DYNAMIC_FUNCTION', 'DYNAMIC_FUNCTION_CODE', 'EACH', 'ELEMENT', 'ELSE', 'END', 'END-EXEC', 'ENFORCED', 'EPOCH', 'EQUALS', 'ESCAPE', 'EVERY', 'EXCEPT', 'EXCEPTION', 'EXCLUDE', 'EXCLUDING', 'EXEC', 'EXECUTE', 'EXISTS', 'EXP', 'EXPLAIN', 'EXTEND', 'EXTERNAL', 'EXTRACT', 'FALSE', 'FETCH', 'FILTER', 'FINAL', 'FIRST', 'FIRST_VALUE', 'FLOOR', 'FOLLOWING', 'FOR', 'FOREIGN', 'FORTRAN', 'FOUND', 'FRAC_SECOND', 'FREE', 'FROM', 'FULL', 'FUNCTION', 'FUSION', 'GENERAL', 'GENERATED', 'GET', 'GLOBAL', 'GO', 'GOTO', 'GRANT', 'GRANTED', 'GROUP', 'GROUPING', 'HAVING', 'HIERARCHY', 'HOLD', 'HOUR', 'IDENTITY', 'IMMEDIATE', 'IMPLEMENTATION', 'IMPORT', 'IN', 'INCLUDING', 'INCREMENT', 'INDICATOR', 'INITIALLY', 'INNER', 'INOUT', 'INPUT', 'INSENSITIVE', 'INSERT', 'INSTANCE', 'INSTANTIABLE', 'INTERSECT', 'INTERSECTION', 'INTERVAL', 'INTO', 'INVOKER', 'IS', 'ISOLATION', 'JAVA', 'JOIN', 'KEY', 'KEY_MEMBER', 'KEY_TYPE', 'LABEL', 'LANGUAGE', 'LARGE', 'LAST', 'LAST_VALUE', 'LATERAL', 'LEADING', 'LEFT', 'LENGTH', 'LEVEL', 'LIBRARY', 'LIKE', 'LIMIT', 'LN', 'LOCAL', 'LOCALTIME', 'LOCALTIMESTAMP', 'LOCATOR', 'LOWER', 'MATCH', 'MATCH_RECOGNIZE', 'MATCHED', 'MAX', 'MAXVALUE', 'MEASURES', 'MEMBER', 'MERGE', 'MESSAGE_LENGTH', 'MESSAGE_OCTET_LENGTH', 'MESSAGE_TEXT', 'METHOD', 'MICROSECOND', 'MILLENNIUM', 'MIN', 'MINUTE', 'MINVALUE', 'MOD', 'MODIFIES', 'MODULE', 'MONTH', 'MORE', 'MUMPS', 'NAME', 'NAMES', 'NATIONAL', 'NATURAL', 'NCHAR', 'NCLOB', 'NESTING', 'NEW', 'NEXT', 'NO', 'NONE', 'NORMALIZE', 'NORMALIZED', 'NOT', 'NULL', 'NULLABLE', 'NULLIF', 'NULLS', 'NUMBER', 'OBJECT', 'OCTETS', 'OCTET_LENGTH', 'OF', 'OFFSET', 'OLD', 'ON', 'ONLY', 'OPEN', 'OPTION', 'OPTIONS', 'OR', 'ORDER', 'ORDERING', 'ORDINALITY', 'OTHERS', 'OUT', 'OUTER', 'OUTPUT', 'OVER', 'OVERLAPS', 'OVERLAY', 'OVERRIDING', 'OVERWRITE', 'OVERWRITING', 'PAD', 'PARAMETER', 'PARAMETER_MODE', 'PARAMETER_NAME', 'PARAMETER_ORDINAL_POSITION', 'PARAMETER_SPECIFIC_CATALOG', 'PARAMETER_SPECIFIC_NAME', 'PARAMETER_SPECIFIC_SCHEMA', 'PARTIAL', 'PARTITION', 'PARTITIONED', 'PARTITIONS', 'PASCAL', 'PASSTHROUGH', 'PATTERN', 'PATH', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'PERCENT_RANK', 'PLACING', 'PLAN', 'PLI', 'POSITION', 'POWER', 'PRECEDING', 'PRECISION', 'PREPARE', 'PRESERVE', 'PRIMARY', 'PRIOR', 'PRIVILEGES', 'PROCEDURE', 'PUBLIC', 'PYTHON', 'QUARTER', 'RANGE', 'RANK', 'READ', 'READS', 'REAL', 'RECURSIVE', 'REF', 'REFERENCES', 'REFERENCING', 'REGR_AVGX', 'REGR_AVGY', 'REGR_COUNT', 'REGR_INTERCEPT', 'REGR_R2', 'REGR_SLOPE', 'REGR_SXX', 'REGR_SXY', 'REGR_SYY', 'RELATIVE', 'RELEASE', 'RENAME', 'REPEATABLE', 'RESET', 'RESTART', 'RESTRICT', 'RESULT', 'RETURN', 'RETURNED_CARDINALITY', 'RETURNED_LENGTH', 'RETURNED_OCTET_LENGTH', 'RETURNED_SQLSTATE', 'RETURNS', 'REVOKE', 'RIGHT', 'ROLE', 'ROLLBACK', 'ROLLUP', 'ROUTINE', 'ROUTINE_CATALOG', 'ROUTINE_NAME', 'ROUTINE_SCHEMA', 'ROWS', 'ROW_COUNT', 'ROW_NUMBER', 'SAVEPOINT', 'SCALA', 'SCALE', 'SCHEMA', 'SCHEMA_NAME', 'SCOPE', 'SCOPE_CATALOGS', 'SCOPE_NAME', 'SCOPE_SCHEMA', 'SCROLL', 'SEARCH', 'SECOND', 'SECTION', 'SECURITY', 'SELECT', 'SELF', 'SENSITIVE', 'SEQUENCE', 'SERIALIZABLE', 'SERVER', 'SERVER_NAME', 'SESSION', 'SESSION_USER', 'SET', 'SETS', 'SIMILAR', 'SIMPLE', 'SIZE', 'SOME', 'SOURCE', 'SPACE', 'SPECIFIC', 'SPECIFICTYPE', 'SPECIFIC_NAME', 'SQL', 'SQLEXCEPTION', 'SQLSTATE', 'SQLWARNING', 'SQL_TSI_DAY', 'SQL_TSI_FRAC_SECOND', 'SQL_TSI_HOUR', 'SQL_TSI_MICROSECOND', 'SQL_TSI_MINUTE', 'SQL_TSI_MONTH', 'SQL_TSI_QUARTER', 'SQL_TSI_SECOND', 'SQL_TSI_WEEK', 'SQL_TSI_YEAR', 'SQRT', 'START', 'STATE', 'STATEMENT', 'STATIC', 'STDDEV_POP', 'STDDEV_SAMP', 'STREAM', 'STRUCTURE', 'STYLE', 'SUBCLASS_ORIGIN', 'SUBMULTISET', 'SUBSTITUTE', 'SUBSTRING', 'SUM', 'SYMMETRIC', 'SYSTEM', 'SYSTEM_TIME', 'SYSTEM_USER', 'TABLE', 'TABLESAMPLE', 'TABLE_NAME', 'TEMPORARY', 'THEN', 'TIES', 'TIMESTAMPADD', 'TIMESTAMPDIFF', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE', 'TO', 'TOP_LEVEL_COUNT', 'TRAILING', 'TRANSACTION', 'TRANSACTIONS_ACTIVE', 'TRANSACTIONS_COMMITTED', 'TRANSACTIONS_ROLLED_BACK', 'TRANSFORM', 'TRANSFORMS', 'TRANSLATE', 'TRANSLATION', 'TREAT', 'TRIGGER', 'TRIGGER_CATALOG', 'TRIGGER_NAME', 'TRIGGER_SCHEMA', 'TRIM', 'TRUE', 'TYPE', 'UESCAPE', 'UNBOUNDED', 'UNCOMMITTED', 'UNDER', 'UNION', 'UNIQUE', 'UNKNOWN', 'UNNAMED', 'UNNEST', 'UPDATE', 'UPPER', 'UPSERT', 'USAGE', 'USE', 'USER', 'USER_DEFINED_TYPE_CATALOG', 'USER_DEFINED_TYPE_CODE', 'USER_DEFINED_TYPE_NAME', 'USER_DEFINED_TYPE_SCHEMA', 'USING', 'VALUE', 'VALUES', 'VARYING', 'VAR_POP', 'VAR_SAMP', 'VERSION', 'VIEW', 'WATERMARK', 'WATERMARKS', 'WEEK', 'WHEN', 'WHENEVER', 'WHERE', 'WIDTH_BUCKET', 'WINDOW', 'WITH', 'WITHIN', 'WITHOUT', 'WORK', 'WRAPPER', 'WRITE', 'XML', 'YEAR', 'ZONE' ], typeKeywords: [ // 字符串 'CHAR', 'VARCHAR', 'STRING', // 二进制字符串 'BINARY', 'VARBINARY', 'BYTES', // 精确数值 'DECIMAL', 'DEC', 'NUMERIC', 'TINYINT', 'SMALLINT', 'INT', 'INTEGER', 'BIGINT', // 近似数值 'FLOAT', 'DOUBLE', // 日期和时间 'DATE', 'TIME', 'TIMESTAMP', // 结构化的数据类型 'ARRAY', 'MAP', 'MULTISET', 'ROW', // 其他数据类型 'BOOLEAN', 'RAW', 'NULL' ], builtinFunctions: [ 'EXISTS', // Arithmetic 'POWER', 'ABS', 'MOD', 'SQRT', 'LN', 'LOG10', 'LOG2', 'LOG', 'LOG', 'EXP', 'CEIL', 'CEILING', 'FLOOR', 'SIN', 'SINH', 'COS', 'TAN', 'TANH', 'COT', 'ASIN', 'ACOS', 'ATAN', 'ATAN2', 'COSH', 'DEGREES', 'RADIANS', 'SIGN', 'ROUND', 'PI', 'E', 'RAND', 'RAND_INTEGER', 'UUID', 'BIN', 'HEX', 'TRUNCATE', // String Functions 'CHAR_LENGTH', 'CHARACTER_LENGTH', 'UPPER', 'LOWER', 'POSITION', 'TRIM', 'LTRIM', 'RTRIM', 'REPEAT', 'REGEXP_REPLACE', 'OVERLAY', 'SUBSTRING', 'REPLACE', 'REGEXP_EXTRACT', 'INITCAP', 'CONCAT', 'CONCAT_WS', 'LPAD', 'RPAD', 'FROM_BASE64', 'TO_BASE64', 'ASCII', 'CHR', 'DECODE', 'ENCODE', 'INSTR', 'LEFT', 'RIGHT', 'LOCATE', 'PARSE_URL', 'REGEXP', 'REVERSE', 'SPLIT_INDEX', 'STR_TO_MAP', 'SUBSTR', // Temporal 'DATE', 'TIME', 'TIMESTAMP', 'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'LOCALTIME', 'LOCALTIMESTAMP', 'EXTRACT', 'YEAR', 'QUARTER', 'MONTH', 'WEEK', 'DAYOFYEAR', 'DAYOFMONTH', 'DAYOFWEEK', 'HOUR', 'MINUTE', 'SECOND', 'FLOOR', 'CEIL', 'DATE_FORMAT', 'TIMESTAMPADD', 'TIMESTAMPDIFF', 'CONVERT_TZ', 'FROM_UNIXTIME', 'UNIX_TIMESTAMP', 'TO_DATE', 'TO_TIMESTAMP', 'NOW', 'PROCTIME', // Condition 'NULLIF', 'COALESCE', 'IF', 'IS_ALPHA', 'IS_DECIMAL', 'IS_DIGIT', // Type Conversion 'CAST', 'CARDINALITY', 'ELEMENT', // Value Construction 'ROW', 'ARRAY', 'MAP', // Grouping 'GROUP_ID', 'GROUPING', 'GROUPING_ID', // Hash 'MD5', 'SHA1', 'SHA224', 'SHA256', 'SHA384', 'SHA512', 'SHA2', // Aggregate 'COUNT', 'AVG', 'SUM', 'MAX', 'MIN', 'STDDEV_POP', 'STDDEV_SAMP', 'VAR_POP', 'VAR_SAMP', 'COLLECT', 'VARIANCE', 'RANK', 'DENSE_RANK', 'ROW_NUMBER', 'LEAD', 'LAG', 'FIRST_VALUE', 'LAST_VALUE', 'LISTAGG', // Window 'TUMBLE', 'HOP', 'SESSION', 'TUMBLE_START', 'HOP_START', 'SESSION_START', 'TUMBLE_END', 'HOP_END', 'SESSION_END', 'TUMBLE_ROWTIME', 'HOP_ROWTIME', 'SESSION_ROWTIME', 'TUMBLE_PROCTIME', 'HOP_PROCTIME', 'SESSION_PROCTIME', // CEP 'MATCH_ROWTIME', 'MATCH_PROCTIME', 'LAST', 'FIRST' ], tokenizer: { root: [ // types ['DOUBLE PRECISION', 'type'], [/TIMESTAMP (WITHOUT|WITH)( LOCAL)? TIME ZONE/, 'type'], [/(TIMESTAMP)(?:(\()(\d+)(\)))( (?:WITHOUT|WITH)(?: LOCAL)? TIME ZONE)/, ['type', '@brackets', 'number', '@brackets', 'type']], [/INTERVAL (YEAR|MONTH|DAY|HOUR|MINUTE|SECOND)/, 'type'], [/TO (MONTH|HOUR|MINUTE|SECOND)/, 'type'], // keywords [/IS( NOT)? NULL/, 'keyword'], [/CURRENT ROW/, 'keyword'], [/IF( NOT)? EXISTS/, 'keyword'], [/SHOW (CATALOGS|DATABASES|TABLES|VIEWS|FUNCTIONS)/, 'keyword'], [/(INNER|LEFT|RIGHT|FULL OUTER|CROSS) JOIN/, 'keyword'], [/(INTERVAL )('\d+')( )(HOUR|MINUTE|SECOND)/, ['keyword', 'string.sql', 'white', 'keyword']], [/(ALL|ONE) ROW PER MATCH/, 'keyword'], [/AFTER MATCH SKIP (PAST LAST ROW|TO NEXT ROW|TO LAST|TO FIRST)/, 'keyword'], // functions [/(DATE|TIME|TIMESTAMP)( `\w+`)/, ['predefined.sql', 'identifier']], [/(DATE|TIME|TIMESTAMP)( '[0-9\-: T.]+')/, ['predefined.sql', 'string.sql']], // attribute [/('[a-z0-9\-._]+')( *= *)('.+')/, ['attribute.name', 'operator.sql', 'attribute.value']], [/(SET )([a-z0-9\-._]+)( *= *)([^;]+)/, ['keyword', 'attribute.name', 'operator.sql', 'attribute.value']], // comment [/(--+.*|\/\*\+|\*\/)/, 'comment'], // whitespace [/\s+/, 'white'], // delimiters and operators [/[=<>+\-*|%/]+/, 'operator.sql'], [/[<>()\[\]]/, '@brackets'], // numbers [/\d*\.\d+([eE][\-+]?\d+)?/, 'number.float'], [/0[xX][0-9a-fA-F]+/, 'number.hex'], [/\d+/, 'number'], { include: '@strings' }, { include: '@identifiers' }, // delimiter: after number because of .\d floats [/[;,.]/, 'delimiter'], // identifiers and keywords [/[\w]+/, {cases: {'@typeKeywords': 'type', '@builtinFunctions': 'predefined.sql', '@keywords': 'keyword', '@default': 'identifier'}}], ], strings: [ [/'/, { token: 'string.sql', next: '@string' }] ], string: [ [/[^']+/, 'string.sql'], [/''/, 'string.sql'], [/'/, { token: 'string.sql', next: '@pop' }] ], identifiers: [ [/`/, { token: 'identifier', next: '@identifier' }] ], identifier: [ [/[^`]+/, 'identifier'], [/``/, 'identifier'], [/`/, { token: 'identifier', next: '@pop' }] ], }}// completeexport const getCompletionItem = (monaco) => { return { provideCompletionItems: (model, position, context, token) => { var word = model.getWordUntilPosition(position); var range = { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: word.startColumn, endColumn: word.endColumn }; const keywords = language.keywords.map(key => ({ label: key, kind: monaco.languages.CompletionItemKind.Keyword, insertText: key, range, })); const typeKeywords = language.typeKeywords.map(key => ({ label: key, kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: key, range, })); const typeKeywordExpand = [{ label: 'CHAR(n)', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'CHAR(${1:1})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'VARCHAR(n)', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'VARCHAR(${1:1})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'BINARY(n)', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'BINARY(${1:1})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'VARBINARY(n)', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'VARBINARY(${1:1})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'DECIMAL(p)', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'DECIMAL(${1:10})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'DECIMAL(p, s)', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'DECIMAL(${1:10}, ${2:0})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'DEC(p)', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'DEC(${1:10})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'DEC(p, s)', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'DEC(${1:10}, ${2:0})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'NUMERIC(p)', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'NUMERIC(${1:10})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'NUMERIC(p, s)', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'NUMERIC(${1:10}, ${2:0})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'DOUBLE PRECISION', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'DOUBLE PRECISION', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'TIME(p)', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'TIME(${1:0})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'TIMESTAMP(p)', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'TIMESTAMP(${1:6})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'TIMESTAMP WITHOUT TIME ZONE', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'TIMESTAMP WITHOUT TIME ZONE', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'TIMESTAMP(p) WITHOUT TIME ZONE', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'TIMESTAMP(${1:6}) WITHOUT TIME ZONE', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'TIMESTAMP WITH TIME ZONE', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'TIMESTAMP WITH TIME ZONE', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'TIMESTAMP(p) WITH TIME ZONE', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'TIMESTAMP(${1:6}) WITH TIME ZONE', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'TIMESTAMP WITH LOCAL TIME ZONE', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'TIMESTAMP WITH LOCAL TIME ZONE', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'TIMESTAMP(p) WITH LOCAL TIME ZONE', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'TIMESTAMP(${1:6}) WITH LOCAL TIME ZONE', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'INTERVAL YEAR', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'INTERVAL YEAR', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'INTERVAL YEAR(p)', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'INTERVAL YEAR(${1:2})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'INTERVAL YEAR(p) TO MONTH', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'INTERVAL YEAR(${1:2}) TO MONTH', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'INTERVAL MONTH', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'INTERVAL MONTH', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'INTERVAL DAY', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'INTERVAL DAY', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'INTERVAL DAY(p1)', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'INTERVAL DAY(${1:2})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'INTERVAL DAY(p1) TO HOUR', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'INTERVAL DAY(${1:2}) TO HOUR', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'INTERVAL DAY(p1) TO MINUTE', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'INTERVAL DAY(${1:2}) TO MINUTE', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'INTERVAL DAY(p1) TO SECOND(p2)', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'INTERVAL DAY(${1:2}) TO SECOND(${2:6})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'INTERVAL HOUR', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'INTERVAL HOUR', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'INTERVAL HOUR TO MINUTE', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'INTERVAL HOUR TO MINUTE', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'INTERVAL HOUR TO SECOND(p2)', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'INTERVAL HOUR TO SECOND(${1:6})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'INTERVAL MINUTE', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'INTERVAL MINUTE', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'INTERVAL MINUTE TO SECOND(p2)', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'INTERVAL MINUTE TO SECOND(${1:6})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'INTERVAL SECOND', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'INTERVAL SECOND', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'INTERVAL SECOND(p2)', kind: monaco.languages.CompletionItemKind.TypeParameter, insertText: 'INTERVAL SECOND(${1:6})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }]; const operatorsExpand = [{ label: 'IS NULL', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'IS NULL', range, }, { label: 'IS NOT NULL', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'IS NOT NULL', range, }, { label: 'IS DISTINCT FROM', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'IS DISTINCT FROM', range, }, { label: 'IS NOT DISTINCT FROM', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'IS NOT DISTINCT FROM', range, }, { label: 'SIMILAR TO', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'SIMILAR TO', range, }, { label: 'IS FALSE', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'IS FALSE', range, }, { label: 'IS NOT FALSE', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'IS NOT FALSE', range, }, { label: 'IS TRUE', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'IS TRUE', range, }, { label: 'IS NOT TRUE', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'IS NOT TRUE', range, }, { label: 'IS UNKNOWN', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'IS UNKNOWN', range, }, { label: 'IS NOT UNKNOWN', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'IS NOT UNKNOWN', range, }, { label: 'PARTITIONED BY', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'PARTITIONED BY', range, }, { label: 'ORDER BY', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'ORDER BY', range, }, { label: 'CURRENT ROW', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'CURRENT ROW', range, }, { label: 'GROUP BY', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'GROUP BY', range, }, { label: 'GROUPING SETS', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'GROUPING SETS', range, }, { label: 'INNER JOIN', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'INNER JOIN', range, }, { label: 'LEFT JOIN', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'LEFT JOIN', range, }, { label: 'RIGHT JOIN', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'RIGHT JOIN', range, }, { label: 'FULL OUTER JOIN', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'FULL OUTER JOIN', range, }, { label: 'CROSS JOIN', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'CROSS JOIN', range, }, { label: 'INTERVAL n HOUR', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'INTERVAL \'${1:1}\' HOUR', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'INTERVAL n MINUTE', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'INTERVAL \'${1:1}\' MINUTE', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'INTERVAL n SECOND', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'INTERVAL \'${1:1}\' SECOND', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'LATERAL TABLE', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'LATERAL TABLE', range, }, { label: 'UNION ALL', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'UNION ALL', range, }, { label: 'ALL ROWS PER MATCH', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'ALL ROWS PER MATCH', range, }, { label: 'ONE ROW PER MATCH', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'ONE ROW PER MATCH', range, }, { label: 'AFTER MATCH SKIP PAST LAST ROW', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'AFTER MATCH SKIP PAST LAST ROW', range, }, { label: 'AFTER MATCH SKIP TO NEXT ROW', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'AFTER MATCH SKIP TO NEXT ROW', range, }, { label: 'AFTER MATCH SKIP TO LAST', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'AFTER MATCH SKIP TO LAST', range, }, { label: 'AFTER MATCH SKIP TO FIRST', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'AFTER MATCH SKIP TO FIRST', range, }]; const builtinFunctions = language.builtinFunctions.map(fun => ({ label: fun, kind: monaco.languages.CompletionItemKind.Function, insertText: fun, range, })); const dml = [{ label: 'PRIMARY KEY', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'PRIMARY KEY', range, }, { label: 'RENAME TO', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'RENAME TO', range, }, { label: 'INSERT INTO', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'INSERT INTO', range, }, { label: 'INSERT OVERWRITE', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'INSERT OVERWRITE', range, }, { label: 'NOT ENFORCED', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'NOT ENFORCED', range, }, { label: 'IF NOT EXISTS', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'IF NOT EXISTS', range, }, { label: 'IF EXISTS', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'IF EXISTS', range, }, { label: 'EXPLAIN PLAN FOR', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'EXPLAIN PLAN FOR', range, }, { label: 'USE CATALOG', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'USE CATALOG', range, }, { label: 'CREATE TABLE', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'CREATE TABLE', range, }, { label: 'DROP TABLE', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'DROP TABLE', range, }, { label: 'ALTER TABLE', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'ALTER TABLE', range, }, { label: 'SHOW TABLES', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'SHOW TABLES', range, }, { label: 'CREATE CATALOG', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'CREATE CATALOG', range, }, { label: 'SHOW CATALOGS', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'SHOW CATALOGS', range, }, { label: 'CREATE DATABASE', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'CREATE DATABASE', range, }, { label: 'DROP DATABASE', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'DROP DATABASE', range, }, { label: 'ALTER DATABASE', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'ALTER DATABASE', range, }, { label: 'SHOW DATABASES', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'SHOW DATABASES', range, }, { label: 'CREATE VIEW', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'CREATE VIEW', range, }, { label: 'DROP VIEW', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'DROP VIEW', range, }, { label: 'SHOW VIEWS', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'SHOW VIEWS', range, }, { label: 'CREATE FUNCTION', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'CREATE FUNCTION', range, }, { label: 'DROP FUNCTION', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'DROP FUNCTION', range, }, { label: 'ALTER FUNCTION', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'ALTER FUNCTION', range, }, { label: 'SHOW FUNCTIONS', kind: monaco.languages.CompletionItemKind.Operator, insertText: 'SHOW FUNCTIONS', range, }, { // connector label: 'connector', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'connector\' = \'${1|hermes,kafka,kafka-0.11,kafka-0.10,http,jdbc,kudu,elasticsearch-6,elasticsearch-7,filesystem,hbase-1.4,datagen,print,blackhole|}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'format', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'format\' = \'${1|csv,json,avro,debezium-json,canal-json,parquet,orc|}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'masters', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'masters\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'table-name', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'table-name\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'scan.request.interval', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'scan.request.interval\' = \'${1:10s}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'scan.fetch.bytes', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'scan.fetch.bytes\' = \'${1:1000}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'sink.buffer-flush.max-rows', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.buffer-flush.max-rows\' = \'${1:1000}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'sink.buffer-flush.interval', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.buffer-flush.interval\' = \'${1:1s}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { // kafka label: 'topic', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'topic\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'properties.hermes.center', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'properties.hermes.center\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'properties.hermes.cluster.id', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'properties.hermes.cluster.id\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'properties.hermes.format', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'properties.hermes.format\' = \'${1|binlog|}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'properties.bootstrap.servers', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'properties.bootstrap.servers\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'properties.group.id', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'properties.group.id\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'scan.startup.mode', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'scan.startup.mode\' = \'${1|earliest-offset,latest-offset,group-offsets,timestamp,specific-offsets|}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'scan.startup.specific-offsets', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'scan.startup.specific-offsets\' = \'${1:partition:${2},offset:${3};partition:${4},offset:${5}}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'scan.startup.timestamp-millis', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'scan.startup.timestamp-millis\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'sink.partitioner', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.partitioner\' = \'${1|fixed,round-robin|}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { // jdbc label: 'url', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'url\' = \'${1:jdbc:mysql://localhost:3306/${2}}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'strongbox.props.url', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'strongbox.props.url\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'strongbox.decrypt.key', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'strongbox.decrypt.key\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'driver', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'driver\' = \'${1:com.mysql.jdbc.Driver}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'username', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'username\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'password', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'password\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'scan.partition.column', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'scan.partition.column\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'scan.partition.num', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'scan.partition.num\' = \'${1:5}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'scan.partition.lower-bound', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'scan.partition.lower-bound\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'scan.partition.upper-bound', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'scan.partition.upper-bound\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'scan.fetch-size', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'scan.fetch-size\' = \'${1:1000}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'lookup.cache.max-rows', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'lookup.cache.max-rows\' = \'${1:1000}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'lookup.cache.ttl', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'lookup.cache.ttl\' = \'${1:3600}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'lookup.max-retries', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'lookup.max-retries\' = \'${1:3}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'sink.max-retries', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.max-retries\' = \'${1:3}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { // elasticsearch label: 'hosts', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'hosts\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'index', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'index\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'document-type', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'document-type\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'document-id.key-delimiter', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'document-id.key-delimiter\' = \'${1:_}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'failure-handler', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'failure-handler\' = \'${1|fail,ignore,retry_rejected|}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'sink.flush-on-checkpoint', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.flush-on-checkpoint\' = \'${1:true}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'sink.bulk-flush.max-actions', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.bulk-flush.max-actions\' = \'${1:1000}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'sink.bulk-flush.max-size', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.bulk-flush.max-size\' = \'${1:2mb}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'sink.bulk-flush.interval', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.bulk-flush.interval\' = \'${1:1s}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'sink.bulk-flush.backoff.strategy', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.bulk-flush.backoff.strategy\' = \'${1|DISABLED,CONSTANT,EXPONENTIAL|}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'sink.bulk-flush.backoff.max-retries', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.bulk-flush.backoff.max-retries\' = \'${1:8}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'sink.bulk-flush.backoff.delay', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.bulk-flush.backoff.delay\' = \'${1:50ms}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'connection.max-retry-timeout', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'connection.max-retry-timeout\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'connection.path-prefix', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'connection.path-prefix\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { // filesystem label: 'sink.rolling-policy.file-size', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.rolling-policy.file-size\' = \'${1:128MB}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'sink.rolling-policy.rollover-interval', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.rolling-policy.rollover-interval\' = \'${1:30 min}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'sink.rolling-policy.check-interval', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.rolling-policy.check-interval\' = \'${1:1 min}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'sink.partition-commit.trigger', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.partition-commit.trigger\' = \'${1|process-time,partition-time|}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'sink.partition-commit.delay', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.partition-commit.delay\' = \'${1:0 s}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'partition.time-extractor.kind', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'partition.time-extractor.kind\' = \'${1:default}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'partition.time-extractor.class', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'partition.time-extractor.class\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'partition.time-extractor.timestamp-pattern', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'partition.time-extractor.timestamp-pattern\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'sink.partition-commit.policy.kind', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.partition-commit.policy.kind\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'sink.partition-commit.policy.class', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.partition-commit.policy.class\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'sink.partition-commit.success-file.name', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.partition-commit.success-file.name\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'path', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'path\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { // hbase label: 'zookeeper.quorum', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'zookeeper.quorum\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'zookeeper.znode.parent', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'zookeeper.znode.parent\' = \'${1:/hbase}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'null-string-literal', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'null-string-literal\' = \'${1:null}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'sink.buffer-flush.max-size', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'sink.buffer-flush.max-size\' = \'${1:2mb}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { // DataGen label: 'rows-per-second', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'rows-per-second\' = \'${1:10000}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'fields.#.kind', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'fields.${1}.kind\' = \'${2:random}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'fields.#.min', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'fields.${1}.min\' = \'${2}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'fields.#.max', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'fields.${1}.max\' = \'${2}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'fields.#.length', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'fields.${1}.length\' = \'${2:100}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'fields.#.start', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'fields.${1}.tart\' = \'${2}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'fields.#.end', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'fields.${1}.end\' = \'${2}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { // Print label: 'print-identifier', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'print-identifier\' = \'${1}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }, { label: 'standard-error', kind: monaco.languages.CompletionItemKind.Property, insertText: '\'standard-error\' = \'${1:false}\'', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, range, }]; const others = [{ label: 'flink.bsql', kind: monaco.languages.CompletionItemKind.Reference, insertText: 'flink.bsql', range, }, { label: 'flink.ssql', kind: monaco.languages.CompletionItemKind.Reference, insertText: 'flink.ssql', range, }] const suggestions = keywords .concat(typeKeywords) .concat(typeKeywordExpand) .concat(operatorsExpand) .concat(builtinFunctions) .concat(dml) .concat(others); return { suggestions } } }};