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' }]
],
}
}
// complete
export 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
}
}
}
};