@sap/cds-compiler
Version:
CDS (Core Data Services) compiler and backends
931 lines (927 loc) • 16.5 kB
JavaScript
;
/* eslint @stylistic/no-multi-spaces: 0 */
const { functionsWithoutParentheses, cdlKeywords } = require('../parsers/identifiers');
module.exports = {
cdl: cdlKeywords,
// CDL functions, used for automatic quoting in 'toCdl' renderer,
// only relevant for element references of path length 1.
cdl_functions: functionsWithoutParentheses,
// SQLite keywords, used to warn in 'toSql' renderer with dialect 'sqlite'
// Taken from http://www.sqlite.org/draft/lang_keywords.html
// Better use keywords in tool/mkkeywordhash.c of a sqlite distribution.
sqlite: [
'ABORT',
'ACTION',
'ADD',
'AFTER',
'ALL',
'ALTER',
'ALWAYS',
'ANALYZE',
'AND',
'AS',
'ASC',
'ATTACH',
'AUTOINCREMENT',
'BEFORE',
'BEGIN',
'BETWEEN',
'BY',
'CASCADE',
'CASE',
'CAST',
'CHECK',
'COLLATE',
'COLUMN',
'COMMIT',
'CONFLICT',
'CONSTRAINT',
'CREATE',
'CROSS',
'CURRENT',
'CURRENT_DATE',
'CURRENT_TIME',
'CURRENT_TIMESTAMP',
'DATABASE',
'DEFAULT',
'DEFERRABLE',
'DEFERRED',
'DELETE',
'DESC',
'DETACH',
'DISTINCT',
'DO',
'DROP',
'EACH',
'ELSE',
'END',
'ESCAPE',
'EXCEPT',
'EXCLUDE',
'EXCLUSIVE',
'EXISTS',
'EXPLAIN',
'FAIL',
'FILTER',
'FIRST',
'FOLLOWING',
'FOR',
'FOREIGN',
'FROM',
'FULL',
'GENERATED',
'GLOB',
'GROUP',
'GROUPS',
'HAVING',
'IF',
'IGNORE',
'IMMEDIATE',
'IN',
'INDEX',
'INDEXED',
'INITIALLY',
'INNER',
'INSERT',
'INSTEAD',
'INTERSECT',
'INTO',
'IS',
'ISNULL',
'JOIN',
'KEY',
'LAST',
'LEFT',
'LIKE',
'LIMIT',
'MATCH',
'MATERIALIZED',
'NATURAL',
'NO',
'NOT',
'NOTHING',
'NOTNULL',
'NULL',
'NULLS',
'OF',
'OFFSET',
'ON',
'OR',
'ORDER',
'OTHERS',
'OUTER',
'OVER',
'PARTITION',
'PLAN',
'PRAGMA',
'PRECEDING',
'PRIMARY',
'QUERY',
'RAISE',
'RANGE',
'RECURSIVE',
'REFERENCES',
'REGEXP',
'REINDEX',
'RELEASE',
'RENAME',
'REPLACE',
'RESTRICT',
'RETURNING',
'RIGHT',
'ROLLBACK',
'ROW',
'ROWS',
'SAVEPOINT',
'SELECT',
'SET',
'TABLE',
'TEMP',
'TEMPORARY',
'THEN',
'TIES',
'TO',
'TRANSACTION',
'TRIGGER',
'UNBOUNDED',
'UNION',
'UNIQUE',
'UPDATE',
'USING',
'VACUUM',
'VALUES',
'VIEW',
'VIRTUAL',
'WHEN',
'WHERE',
'WINDOW',
'WITH',
'WITHOUT',
],
// SAP HANA keywords, used for smart quoting in to-hdi.plain
// See './scripts/keywords/hana/generateSqlKeywords.js'
hana: [
'ABAPITAB',
'ABAPSTRUCT',
'ABAP_CHAR',
'ABAP_DATE',
'ABAP_DECFLOAT16',
'ABAP_DECFLOAT34',
'ABAP_FLOAT',
'ABAP_HEX',
'ABAP_INT',
'ABAP_INT1',
'ABAP_INT2',
'ABAP_NUM',
'ABAP_PACKED',
'ABAP_STRING',
'ABAP_TIME',
'ABAP_XSTRING',
'ABS',
'ABSOLUTE',
'ACOS',
'ADD_DAYS',
'ADD_MONTHS',
'ADD_SECONDS',
'ADD_YEARS',
'ADOPT',
'ALL',
'ALPHANUM',
'ALTER',
'ANY',
'APPLY_FILTER',
'ARRAY',
'ARRAY_AGG',
'AS',
'ASCII',
'ASIN',
'AT',
'ATAN',
'ATAN2',
'AUTHORIZATION',
'AUTO',
'AVG',
'BASIC',
'BEFORE',
'BEGIN',
'BETWEEN',
'BIGINT',
'BINARY',
'BIND_AS_PARAMETER',
'BIND_AS_VALUE',
'BIND_BIGINT',
'BIND_CHAR',
'BIND_DECIMAL',
'BIND_DOUBLE',
'BIND_NCHAR',
'BIND_REAL',
'BINTEXT',
'BINTOHEX',
'BITAND',
'BLOB',
'BOOLEAN',
'BOTH',
'BOUNDARY',
'BREAKUP',
'BULK',
'BY',
'CASE',
'CAST',
'CEIL',
'CEILING',
'CE_AGGREGATION',
'CE_CALC',
'CE_CALC_VIEW',
'CE_COLUMN_TABLE',
'CE_COMM2R',
'CE_CONVERSION',
'CE_FULL_OUTER_JOIN',
'CE_JOIN',
'CE_JOIN_VIEW',
'CE_LEFT_OUTER_JOIN',
'CE_MERGE',
'CE_OLAP_VIEW',
'CE_PARTITION',
'CE_PROJECTION',
'CE_RIGHT_OUTER_JOIN',
'CE_UNION_ALL',
'CE_VERTICAL_UNION',
'CHAR',
'CHARACTER',
'CLOB',
'COALESCE',
'COLLATE',
'CONCAT',
'CONDITION',
'CONNECT',
'CONSTANT',
'CONSTRAINT',
'COS',
'COSH',
'COT',
'COUNT',
'CROSS',
'CS_ALPHANUM',
'CS_DATE',
'CS_DAYDATE',
'CS_DECIMAL_FLOAT',
'CS_DOUBLE',
'CS_FIXED',
'CS_FIXEDSTRING',
'CS_FLOAT',
'CS_GEOMETRY',
'CS_INT',
'CS_LONGDATE',
'CS_POINT',
'CS_POINTZ',
'CS_RAW',
'CS_SDFLOAT',
'CS_SECONDDATE',
'CS_SECONDTIME',
'CS_SHORTTEXT',
'CS_STRING',
'CS_TEXT',
'CS_TEXT_AE',
'CS_TIME',
'CS_ZONE',
'CUBE',
'CUME_DIST',
'CURDATE',
'CURRENT_CONNECTION',
'CURRENT_DATABASE',
'CURRENT_DATE',
'CURRENT_SCHEMA',
'CURRENT_TIME',
'CURRENT_TIMESTAMP',
'CURRENT_TRANSACTION_ISOLATION_LEVEL',
'CURRENT_USER',
'CURRENT_UTCDATE',
'CURRENT_UTCTIME',
'CURRENT_UTCTIMESTAMP',
'CURRVAL',
'CURSOR',
'CURTIME',
'CURVE',
'DATABASE',
'DATASET',
'DATE',
'DATETIME',
'DATS_EXTRACT',
'DAYDATE',
'DAYOFMONTH',
'DAYOFWEEK',
'DAYS_BETWEEN',
'DDIC_ACCP',
'DDIC_ALNM',
'DDIC_CDAY',
'DDIC_CHAR',
'DDIC_CLNT',
'DDIC_CUKY',
'DDIC_CURR',
'DDIC_D16D',
'DDIC_D16R',
'DDIC_D16S',
'DDIC_D34D',
'DDIC_D34R',
'DDIC_D34S',
'DDIC_DATS',
'DDIC_DAY',
'DDIC_DEC',
'DDIC_FLTP',
'DDIC_GUID',
'DDIC_INT1',
'DDIC_INT2',
'DDIC_INT4',
'DDIC_INT8',
'DDIC_LANG',
'DDIC_LCHR',
'DDIC_LRAW',
'DDIC_MIN',
'DDIC_MON',
'DDIC_NUMC',
'DDIC_PREC',
'DDIC_QUAN',
'DDIC_RAW',
'DDIC_RSTR',
'DDIC_SEC',
'DDIC_SRST',
'DDIC_SSTR',
'DDIC_STRG',
'DDIC_STXT',
'DDIC_TEXT',
'DDIC_TIMS',
'DDIC_UNIT',
'DDIC_UTCL',
'DDIC_UTCM',
'DDIC_UTCS',
'DDIC_VARC',
'DDIC_WEEK',
'DEC',
'DECIMAL',
'DECLARE',
'DENSE_RANK',
'DEPTH',
'DISTANCE',
'DISTINCT',
'DOUBLE',
'ELSE',
'ELSEIF',
'EMPTY',
'END',
'EXCEPT',
'EXCEPTION',
'EXEC',
'EXISTS',
'EXP',
'EXTRACT',
'FALSE',
'FILTER',
'FIRST_VALUE',
'FLOAT',
'FLOOR',
'FOR',
'FROM',
'FULL',
'GET_NUM_SERVERS',
'GREATEST',
'GROUP',
'GROUPING',
'GROUPING_FILTER',
'GROUPING_ID',
'GROUP_SCORE',
'HASANYPRIVILEGES',
'HASSYSTEMPRIVILEGE',
'HAVING',
'HEXTOBIN',
'HIERARCHY',
'HIERARCHY_ANCESTORS',
'HIERARCHY_ANCESTORS_AGGREGATE',
'HIERARCHY_DESCENDANTS',
'HIERARCHY_DESCENDANTS_AGGREGATE',
'HIERARCHY_LEVELED',
'HIERARCHY_SIBLINGS',
'HIERARCHY_SPANTREE',
'HIERARCHY_TEMPORAL',
'HIGHLIGHTED',
'HILBERT',
'HOST',
'HOUR',
'IF',
'IFNULL',
'IN',
'INNER',
'INOUT',
'INSTR',
'INT',
'INTEGER',
'INTERNAL',
'INTERSECT',
'INTO',
'IS',
'ISAUTHORIZED',
'ISTOTAL',
'IS_EMPTY',
'JOIN',
'JSON_QUERY',
'JSON_TABLE',
'JSON_VALUE',
'LAG',
'LANGUAGE',
'LAST_DAY',
'LAST_VALUE',
'LATERAL',
'LAYOUT',
'LCASE',
'LEAD',
'LEADING',
'LEAST',
'LEAVES',
'LEFT',
'LENGTH',
'LENGTHB',
'LEVELS',
'LIMIT',
'LN',
'LOCATE',
'LOCATE_REGEXPR',
'LOG',
'LONGDATE',
'LOOP',
'LOWER',
'LPAD',
'LTRIM',
'MAP',
'MAP_MERGE',
'MAP_REDUCE',
'MAX',
'MEASURES',
'MIMETYPE',
'MIN',
'MINUS',
'MINUTE',
'MOD',
'MONTH',
'MULTIPARENT',
'NATURAL',
'NCHAR',
'NCLOB',
'NEXTVAL',
'NEXT_DAY',
'NO',
'NOT',
'NOW',
'NTEXT',
'NTH_VALUE',
'NTILE',
'NULL',
'NULLIF',
'NUMBER',
'NUMERIC',
'NVARCHAR',
'OCCURRENCES_REGEXPR',
'OF',
'OLYMP',
'ON',
'OPENCYPHER_TABLE',
'ORDER',
'ORDINALITY',
'ORPHAN',
'OUT',
'OVER',
'PERCENTILE_CONT',
'PERCENTILE_DISC',
'PERCENT_RANK',
'PLAIN',
'POWER',
'PRIOR',
'PRODUCT',
'RANGE',
'RANGE_RESTRICTION',
'RANK',
'RAW',
'RDICT',
'REAL',
'REAL_VECTOR',
'RECORD_COMMIT_TIMESTAMP',
'RECORD_COUNT',
'RECORD_ID',
'RECURSIVE',
'REMOTE_EXECUTE_QUERY',
'REPLACE',
'REPLACE_REGEXPR',
'RETURN',
'RETURNS',
'REVERSE',
'RIGHT',
'ROLLUP',
'ROUND',
'ROUNDROBIN',
'ROW',
'ROWID',
'ROW_NUMBER',
'RPAD',
'RTREE',
'RTRIM',
'SCORE',
'SECOND',
'SECONDDATE',
'SECONDS_BETWEEN',
'SECONDTIME',
'SELECT',
'SERIES_ELEMENT_TO_PERIOD',
'SERIES_PERIOD_TO_ELEMENT',
'SERIES_ROUND',
'SESSION_CONTEXT',
'SESSION_USER',
'SET',
'SHORTTEXT',
'SIBLING',
'SIGN',
'SIN',
'SINH',
'SMALLDECIMAL',
'SMALLINT',
'SNIPPETS',
'SOME',
'SQL',
'SQRT',
'START',
'STDDEV',
'STRING',
'STRING_AGG',
'ST_ALPHASHAPEAGGR',
'ST_ALPHASHAPEAREAAGGR',
'ST_ALPHASHAPEEDGEAGGR',
'ST_ASESRIJSON',
'ST_ASGEOJSON',
'ST_ASMVT',
'ST_ASSVGAGGR',
'ST_CIRCULARSTRING',
'ST_CLUSTERCELL',
'ST_CLUSTERCENTROID',
'ST_CLUSTERCONVEXHULL',
'ST_CLUSTERCOREPOINT',
'ST_CLUSTERENVELOPE',
'ST_COLLECTAGGR',
'ST_CONCAVEHULLAGGR',
'ST_CONVEXHULLAGGR',
'ST_DISK_LOB',
'ST_ENVELOPEAGGR',
'ST_FROMTEXT',
'ST_GEOMETRY',
'ST_GEOMETRYCOLLECTION',
'ST_GEOMFROMESRIJSON',
'ST_GEOMFROMEWKB',
'ST_GEOMFROMEWKT',
'ST_GEOMFROMGEOHASH',
'ST_GEOMFROMGEOJSON',
'ST_GEOMFROMTEXT',
'ST_GEOMFROMWKB',
'ST_GEOMFROMWKT',
'ST_INTERSECTIONAGGR',
'ST_LINESTRING',
'ST_MAKELINE',
'ST_MAKELINEAGGR',
'ST_MAKEPOLYGON',
'ST_MEMORY_LOB',
'ST_MULTILINESTRING',
'ST_MULTIPOINT',
'ST_MULTIPOLYGON',
'ST_POINT',
'ST_POINTFROMGEOHASH',
'ST_POINTFROMWKB',
'ST_POINTM',
'ST_POINTZ',
'ST_POINTZM',
'ST_POLYGON',
'ST_RECTANGLE',
'ST_UNIONAGGR',
'SUBSTR',
'SUBSTRING',
'SUBSTRING_REGEXPR',
'SUBSTR_AFTER',
'SUBSTR_BEFORE',
'SUBSTR_REGEXPR',
'SUM',
'SYSTEM_TIME',
'SYSUUID',
'TABLE',
'TABLESAMPLE',
'TAN',
'TANH',
'TEXT',
'TEXT_FILTER',
'TIME',
'TIMELINE',
'TIMESTAMP',
'TIMEZONE',
'TIMS_EXTRACT',
'TINYINT',
'TM_CATEGORIZE_KNN',
'TM_GET_RELATED_DOCUMENTS',
'TM_GET_RELATED_TERMS',
'TM_GET_RELEVANT_DOCUMENTS',
'TM_GET_RELEVANT_TERMS',
'TM_GET_SUGGESTED_TERMS',
'TO',
'TOP',
'TO_BIGINT',
'TO_BINARY',
'TO_BLOB',
'TO_CHAR',
'TO_CLOB',
'TO_DATE',
'TO_DATS',
'TO_DECIMAL',
'TO_DOUBLE',
'TO_INT',
'TO_INTEGER',
'TO_JSON_BOOLEAN',
'TO_JSON_NUMBER',
'TO_NCHAR',
'TO_NCLOB',
'TO_NUMBER',
'TO_NVARCHAR',
'TO_REAL',
'TO_SECONDDATE',
'TO_SMALLDECIMAL',
'TO_SMALLINT',
'TO_TIME',
'TO_TIMESTAMP',
'TO_TINYINT',
'TO_VARBINARY',
'TO_VARCHAR',
'TRACE',
'TRAILING',
'TRIGGER_UPDATE_COLUMN',
'TRIM',
'TRUE',
'UCASE',
'UNICODE',
'UNION',
'UNKNOWN',
'UNNEST',
'UPPER',
'USER',
'USING',
'UTCTIMESTAMP',
'VALUES',
'VAR',
'VARBINARY',
'VARCHAR',
'VARCHAR1',
'VARCHAR2',
'VARCHAR3',
'VERSIONING',
'WEEKDAY',
'WHEN',
'WHERE',
'WHILE',
'WHY_FOUND',
'WINDOW',
'WITH',
'WITHIN',
'XMLTABLE',
'YEAR',
],
// SAP HANA CDS keywords, used for smart quoting in to-hdbcds.plain
hdbcds: [
'ALL', 'ALTER', 'AS',
'BEFORE', 'BEGIN', 'BOTH',
'CASE', 'CHAR', 'CONDITION',
'CONNECT', 'CROSS', 'CUBE',
'CURRENT_CONNECTION', 'CURRENT_DATE', 'CURRENT_SCHEMA',
'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER',
'CURRENT_UTCDATE', 'CURRENT_UTCTIME', 'CURRENT_UTCTIMESTAMP',
'CURRVAL', 'CURSOR', 'DECLARE',
'DISTINCT', 'ELSE', 'ELSEIF',
'ELSIF', 'END', 'EXCEPT',
'EXCEPTION', 'EXEC', 'FOR',
'FROM', 'FULL', 'GROUP',
'HAVING', 'IF', 'IN',
'INNER', 'INOUT', 'INTERSECT',
'INTO', 'IS', 'JOIN',
'LEADING', 'LEFT', 'LIMIT',
'LOOP', 'MINUS', 'NATURAL',
'NEXTVAL', 'NULL', 'ON',
'ORDER', 'OUT', 'OUTER',
'PRIOR', 'RETURN', 'RETURNS',
'REVERSE', 'RIGHT', 'ROLLUP',
'ROWID', 'SELECT', 'SET',
'SQL', 'START', 'SYSDATE',
'SYSTIME', 'SYSTIMESTAMP', 'SYSUUID',
'TOP', 'TRAILING', 'UNION',
'USING', 'VALUES', 'WHEN',
'WHERE', 'WHILE', 'WITH',
],
// Postgres keywords, used for smart quoting in to-sql.plain.postgres
// Taken from https://www.postgresql.org/docs/current/sql-keywords-appendix.html
// Generated via scripts/keywords/postgres/generateKeywords.js
postgres: [
'ALL',
'ANALYSE',
'ANALYZE',
'AND',
'ANY',
'ARRAY',
'AS',
'ASC',
'ASYMMETRIC',
'AUTHORIZATION',
'BINARY',
'BOTH',
'CASE',
'CAST',
'CHECK',
'COLLATE',
'COLLATION',
'COLUMN',
'CONCURRENTLY',
'CONSTRAINT',
'CREATE',
'CROSS',
'CURRENT_CATALOG',
'CURRENT_DATE',
'CURRENT_ROLE',
'CURRENT_SCHEMA',
'CURRENT_TIME',
'CURRENT_TIMESTAMP',
'CURRENT_USER',
'DEFAULT',
'DEFERRABLE',
'DESC',
'DISTINCT',
'DO',
'ELSE',
'END',
'EXCEPT',
'FALSE',
'FETCH',
'FOR',
'FOREIGN',
'FREEZE',
'FROM',
'FULL',
'GRANT',
'GROUP',
'HAVING',
'ILIKE',
'IN',
'INITIALLY',
'INNER',
'INTERSECT',
'INTO',
'IS',
'ISNULL',
'JOIN',
'LATERAL',
'LEADING',
'LEFT',
'LIKE',
'LIMIT',
'LOCALTIME',
'LOCALTIMESTAMP',
'NATURAL',
'NOT',
'NOTNULL',
'NULL',
'OFFSET',
'ON',
'ONLY',
'OR',
'ORDER',
'OUTER',
'OVERLAPS',
'PLACING',
'PRIMARY',
'REFERENCES',
'RETURNING',
'RIGHT',
'SELECT',
'SESSION_USER',
'SIMILAR',
'SOME',
'SYMMETRIC',
'SYSTEM_USER',
'TABLE',
'TABLESAMPLE',
'THEN',
'TO',
'TRAILING',
'TRUE',
'UNION',
'UNIQUE',
'USER',
'USING',
'VARIADIC',
'VERBOSE',
'WHEN',
'WHERE',
'WINDOW',
'WITH',
],
// H2 keywords, used for smart quoting in to-sql.plain.postgres
// Taken from http://www.h2database.com/html/advanced.html#keywords
h2: [
'ALL',
'AND',
'ANY',
'ARRAY',
'AS',
'ASYMMETRIC',
'AUTHORIZATION',
'BETWEEN',
'BOTH',
'CASE',
'CAST',
'CHECK',
'CONSTRAINT',
'CROSS',
'CURRENT_CATALOG',
'CURRENT_DATE',
'CURRENT_PATH',
'CURRENT_ROLE',
'CURRENT_SCHEMA',
'CURRENT_TIME',
'CURRENT_TIMESTAMP',
'CURRENT_USER',
'DAY',
'DEFAULT',
'DISTINCT',
'ELSE',
'END',
'EXCEPT',
'EXISTS',
'FALSE',
'FETCH',
'FOR',
'FOREIGN',
'FROM',
'FULL',
'GROUP',
'GROUPS',
'HAVING',
'HOUR',
'IF',
'ILIKE',
'IN',
'INNER',
'INTERSECT',
'INTERVAL',
'IS',
'JOIN',
'KEY',
'LEADING',
'LEFT',
'LIKE',
'LIMIT',
'LOCALTIME',
'LOCALTIMESTAMP',
'MINUS',
'MINUTE',
'MONTH',
'NATURAL',
'NOT',
'NULL',
'OFFSET',
'ON',
'OR',
'ORDER',
'OVER',
'PARTITION',
'PRIMARY',
'QUALIFY',
'RANGE',
'REGEXP',
'RIGHT',
'ROW',
'ROWNUM',
'ROWS',
'SECOND',
'SELECT',
'SESSION_USER',
'SET',
'SOME',
'SYMMETRIC',
'SYSTEM_USER',
'TABLE',
'TO',
'TOP',
'TRAILING',
'TRUE',
'UESCAPE',
'UNION',
'UNIQUE',
'UNKNOWN',
'USER',
'USING',
'VALUE',
'VALUES',
'WHEN',
'WHERE',
'WINDOW',
'WITH',
'YEAR',
'_ROWID_',
],
};