monaco-sql-languages
Version:
SQL languages for the Monaco Editor, based on monaco-languages.
592 lines (591 loc) • 14.2 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { TokenClassConsts } from '../../common/constants';
export const conf = {
comments: {
lineComment: '--',
blockComment: ['/*', '*/']
},
brackets: [
['{', '}'],
['[', ']'],
['(', ')']
],
autoClosingPairs: [
{ 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: '`' }
]
};
export const language = {
defaultToken: '',
tokenPostfix: '.sql',
ignoreCase: true,
brackets: [
{ open: '[', close: ']', token: TokenClassConsts.DELIMITER_SQUARE },
{ open: '(', close: ')', token: TokenClassConsts.DELIMITER_PAREN },
{ open: '{', close: '}', token: TokenClassConsts.DELIMITER_CURLY }
],
keywords: [
'ALL',
'ALTER',
'AND',
'ANTI',
'ANY',
'APPLICATION',
'ARRAY',
'AS',
'AUTHORIZATION',
'BETWEEN',
'BIGINT',
'BINARY',
'BOOLEAN',
'BOTH',
'BY',
'CASE',
'CAST',
'CHAR',
'COLUMN',
'COMMIT',
'COMPACTIONID',
'CONF',
'CONSTRAINT',
'CREATE',
'CROSS',
'CUBE',
'CURRENT',
'CURRENT_DATE',
'CURRENT_TIMESTAMP',
'CURSOR',
'DATABASE',
'CONNECTOR',
'CONNECTORS',
'DATE',
'DDL',
'DEC',
'DECIMAL',
'NUMERIC',
'DELETE',
'DESCRIBE',
'DISTINCT',
'DOUBLE',
'DROP',
'RECOVER',
'ELSE',
'END',
'EXCEPT',
'EXCHANGE',
'EXISTS',
'EXTENDED',
'EXTERNAL',
'EXTRACT',
'FALSE',
'FETCH',
'FLOAT',
'FLOOR',
'FOLLOWING',
'FOR',
'FORCE',
'FOREIGN',
'FROM',
'FULL',
'FUNCTION',
'GRANT',
'GROUP',
'GROUPING',
'HAVING',
'IF',
'IMPORT',
'IN',
'INNER',
'INSERT',
'INT',
'INTEGER',
'INTERSECT',
'INTERVAL',
'INTO',
'IS',
'JOIN',
'$KEY$',
'LATERAL',
'LEADING',
'LEFT',
'LESS',
'LIKE',
'LOCAL',
'MACRO',
'MAP',
'MERGE',
'MINUS',
'MORE',
'NONE',
'NOT',
'NULL',
'OF',
'ON',
'ONLY',
'OR',
'ORDER',
'OUT',
'OUTER',
'OVER',
'PARTITION',
'PERCENT',
'PKFK_JOIN',
'PRECEDING',
'PRECISION',
'PREPARE',
'PRESERVE',
'PRIMARY',
'PROCEDURE',
'QUALIFY',
'RANGE',
'READS',
'REAL',
'REDUCE',
'REFERENCES',
'REGEXP',
'REVOKE',
'RIGHT',
'RLIKE',
'ROLLBACK',
'ROLLUP',
'ROW',
'ROWS',
'SELECT',
'SET',
'SMALLINT',
'SOME',
'START',
'SYNC',
'TABLE',
'TABLESAMPLE',
'THEN',
'TIME',
'TIMESTAMP',
'TIMESTAMPLOCALTZ',
'TO',
'TRAILING',
'TRANSFORM',
'TRIGGER',
'TRUE',
'TRUNCATE',
'UNBOUNDED',
'UNION',
'UNIQUE',
'UNIQUEJOIN',
'UPDATE',
'USER',
'USING',
'UTC_TMESTAMP',
'VALUES',
'VARCHAR',
'WHEN',
'WHERE',
'WINDOW',
'WITH',
// part of non-reserved keywords which is common
'ADD',
'ANALYZE',
'ASC',
'AT',
'CASCADE',
'CHANGE',
'COMMENT',
'COMPUTE',
'DEFAULT',
'DESC',
'DISABLE',
'EVERY',
'EXECUTE',
'EXPLAIN',
'FILE',
'FILEFORMAT',
'FORMAT',
'FORMATTED',
'INDEX',
'KEY',
'KEYS',
'LIMIT',
'LOAD',
'LOCATION',
'OFFSET',
'OVERWRITE',
'PARTITIONED',
'PURGE',
'RELOAD',
'RENAME',
'REPLACE',
'REWRITE',
'ROLE',
'SCHEMA',
'SHOW',
'SORT',
'SORTED',
'STRING',
'TOUCH',
'USE',
'UNLOCK',
'VIEW'
],
operators: [
// https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-Built-inOperators
// Relational Operators
'BETWEEN',
'IS',
'LIKE',
'RLIKE',
'REGEXP',
// Arithmetic Operators
'DIV',
// Logical Operators
'NOT',
'AND',
'OR',
'NOT',
'IN',
'EXISTS',
// join https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins#LanguageManualJoins-JoinSyntax
'JOIN',
'INNER',
'OUTER',
'LEFT',
'RIGHT',
'FULL',
'CROSS',
'SEMI',
// Set
'EXCEPT',
'INTERSECT',
'UNION',
'MINUS'
],
builtinFunctions: [
// https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-Built-inFunctions
// Mathematical Functions
'ROUND',
'BROUND',
'FLOOR',
'CEIL',
'RAND',
'EXP',
'LN',
'LOG10',
'LOG2',
'LOG',
'POW',
'POWER',
'SQRT',
'BIN',
'HEX',
'UNHEX',
'CONV',
'ABS',
'PMOD',
'SIN',
'ASIN',
'COS',
'ACOS',
'TAN',
'ATAN',
'DEGREES',
'RADIANS',
'POSITIVE',
'NEGATIVE',
'SIGN',
'E',
'PI',
'FACTORIAL',
'CBRT',
'SHIFTLEFT',
'SHIFTRIGHT',
'GREATEST',
'LEAST',
'WIDTH_BUCKET',
// Collection Functions
'SIZE',
'MAP_KEYS',
'MAP_VALUES',
'ARRAY_CONTAINS',
'SORT_ARRAY',
// Type Conversion Functions
'BINARY',
'CAST',
// Date Functions
'FROM_UNIXTIME',
'UNIX_TIMESTAMP',
'TO_DATE',
'YEAR',
'QUARTER',
'MONTH',
'DAY',
'HOUR',
'MINUTE',
'SECOND',
'WEEKOFYEAR',
'EXTRACT',
'DATEDIFF',
'DATE_ADD',
'DATE_SUB',
'FROM_UTC_TIMESTAMP',
'TO_UTC_TIMESTAMP',
'CURRENT_DATE',
'CURRENT_TIMESTAMP',
'ADD_MONTHS',
'LAST_DAY',
'NEXT_DAY',
'TRUNC',
'MONTHS_BETWEEN',
'DATE_FORMAT',
// Conditional Functions
'ASSERT_TRUE',
'COALESCE',
'ISNOTNULL',
'ISNULL',
'NULLIF',
'NVL',
// String Functions
'ASCII',
'BASE64',
'CHARACTER_LENGTH',
'CHR',
'CONCAT',
'CONTEXT_NGRAMS',
'CONCAT_WS',
'DECODE',
'ELT',
'ENCODE',
'FIELD',
'FIND_IN_SET',
'FORMAT_NUMBER',
'GET_JSON_OBJECT',
'IN_FILE',
'INSTR',
'LENGTH',
'LOCATE',
'LOWER',
'LPAD',
'LTRIM',
'NGRAMS',
'OCTET_LENGTH',
'PARSE_URL',
'PRINTF',
'QUOTE',
'REGEXP_EXTRACT',
'REGEXP_REPLACE',
'REPEAT',
'REPLACE',
'REVERSE',
'RPAD',
'RTRIM',
'SENTENCES',
'SPACE',
'SPLIT',
'STR_TO_MAP',
'SUBSTR',
'SUBSTRING',
'SUBSTRING_INDEX',
'TRANSLATE',
'TRIM',
'UNBASE64',
'UPPER',
'INITCAP',
'LEVENSHTEIN',
'SOUNDEX',
// Data Masking Functions
'MASK',
'MASK_FIRST_N',
'MASK_LAST_N',
'MASK_SHOW_FIRST_N',
'MASK_SHOW_LAST_N',
'MASK_HASH',
// Misc. Functions
'JAVA_METHOD',
'REFLECT',
'HASH',
'CURRENT_USER',
'LOGGED_IN_USER',
'CURRENT_DATABASE',
'MD5',
'SHA1',
'SHA',
'CRC32',
'SHA2',
'AES_ENCRYPT',
'VERSION',
'SURROGATE_KEY',
// Built-in Aggregate Functions (UDAF)
'COUNT',
'SUM',
'AVG',
'MIN',
'MAX',
'VARIANCE',
'VAR_POP',
'VAR_SAMP',
'STDDEV_POP',
'STDDEV_SAMP',
'COVAR_POP',
'COVAR_SAMP',
'CORR',
'PERCENTILE',
'PERCENTILE_APPROX',
'REGR_AVGX',
'REGR_AVGY',
'REGR_COUNT',
'REGR_INTERCEPT',
'REGR_R2',
'REGR_SLOPE',
'REGR_SXX',
'REGR_SXY',
'REGR_SYY',
'HISTOGRAM_NUMERIC',
'COLLECT_SET',
'COLLECT_LIST',
'NTILE',
// Built-in Table-Generating Functions (UDTF)
'EXPLODE',
'POSEXPLODE',
'INLINE',
'STACK',
'JSON_TUPLE',
'PARSE_URL_TUPLE'
],
builtinVariables: [
// Not support
],
typeKeywords: [
// https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes
// Numeric Types
'TINYINT',
'SMALLINT',
'INT',
'INTEGER',
'BIGINT',
'FLOAT',
'DOUBLE',
'DECIMAL',
'NUMERIC',
// Date/Time Types
'TIMESTAMP',
'DATE',
'INTERVAL',
// String Types
'STRING',
'VARCHAR',
'CHAR',
// Misc Types
'BOOLEAN',
'BINARY',
// Complex Types
'ARRAY',
'MAP',
'STRUCT',
'UNIONTYPE'
],
scopeKeywords: ['CASE', 'END', 'WHEN', 'THEN', 'ELSE'],
pseudoColumns: [
// Not support
],
tokenizer: {
root: [
{ include: '@comments' },
{ include: '@whitespace' },
{ include: '@pseudoColumns' },
{ include: '@customParams' },
{ include: '@numbers' },
{ include: '@strings' },
{ include: '@complexIdentifiers' },
{ include: '@scopes' },
{ include: '@complexDataTypes' },
[/[:;,.]/, TokenClassConsts.DELIMITER],
[/[\(\)\[\]\{\}]/, '@brackets'],
[
/[\w@#$]+/,
{
cases: {
'@scopeKeywords': TokenClassConsts.KEYWORD_SCOPE,
'@operators': TokenClassConsts.OPERATOR_KEYWORD,
'@typeKeywords': TokenClassConsts.TYPE,
'@builtinVariables': TokenClassConsts.VARIABLE,
'@builtinFunctions': TokenClassConsts.PREDEFINED,
'@keywords': TokenClassConsts.KEYWORD,
'@default': TokenClassConsts.IDENTIFIER
}
}
],
[/[<>=!%&+\-*/|~^]/, TokenClassConsts.OPERATOR_SYMBOL]
],
whitespace: [[/[\s\t\r\n]+/, TokenClassConsts.WHITE]],
comments: [
[/--+.*/, TokenClassConsts.COMMENT],
[/\/\*/, { token: TokenClassConsts.COMMENT_QUOTE, next: '@comment' }]
],
comment: [
[/[^*/]+/, TokenClassConsts.COMMENT],
// [/\/\*/, { token: 'comment.quote', next: '@push' }], // nested comment not allowed :-(
[/\*\//, { token: TokenClassConsts.COMMENT_QUOTE, next: '@pop' }],
[/./, TokenClassConsts.COMMENT]
],
pseudoColumns: [
[
/[$][A-Za-z_][\w@#$]*/,
{
cases: {
'@pseudoColumns': TokenClassConsts.PREDEFINED,
'@default': TokenClassConsts.IDENTIFIER
}
}
]
],
customParams: [
[/\${[A-Za-z0-9._-]*}/, TokenClassConsts.VARIABLE],
[/\@\@{[A-Za-z0-9._-]*}/, TokenClassConsts.VARIABLE]
],
numbers: [
[/0[xX][0-9a-fA-F]*/, TokenClassConsts.NUMBER_HEX],
[/[$][+-]*\d*(\.\d*)?/, TokenClassConsts.NUMBER],
[/((\d+(\.\d*)?)|(\.\d+))([eE][\-+]?\d+)?/, TokenClassConsts.NUMBER]
],
strings: [
// https://cwiki.apache.org/confluence/display/Hive/Literals
[/'/, { token: TokenClassConsts.STRING, next: '@string_single' }],
[/"/, { token: TokenClassConsts.STRING, next: '@string_double' }]
],
string_single: [
[/[^']+/, TokenClassConsts.STRING_ESCAPE],
[/''/, TokenClassConsts.STRING],
[/'/, { token: TokenClassConsts.STRING, next: '@pop' }]
],
string_double: [
[/[^"]+/, TokenClassConsts.STRING_ESCAPE],
[/""/, TokenClassConsts.STRING],
[/"/, { token: TokenClassConsts.STRING, next: '@pop' }]
],
complexIdentifiers: [
[/`/, { token: TokenClassConsts.IDENTIFIER_QUOTE, next: '@quotedIdentifier' }]
],
quotedIdentifier: [
[/[^`]+/, TokenClassConsts.IDENTIFIER_QUOTE],
[/``/, TokenClassConsts.IDENTIFIER_QUOTE],
[/`/, { token: TokenClassConsts.IDENTIFIER_QUOTE, next: '@pop' }]
],
scopes: [
// Not Support
],
complexDataTypes: [[/DOUBLE\s+PRECISION\b/i, { token: TokenClassConsts.TYPE }]]
}
};