/*---------------------------------------------------------
 * Copyright (C) Microsoft Corporation. All rights reserved.
 *--------------------------------------------------------*/
'use strict';
define(["require", "exports"], function (require, exports) {
    exports.language = {
        displayName: 'SQL',
        name: 'sql',
        defaultToken: '',
        ignoreCase: true,
        brackets: [
            { open: '[', close: ']', token: 'delimiter.square' },
            { open: '(', close: ')', token: 'delimiter.parenthesis' }
        ],
        enhancedBrackets: [
            { openTrigger: 'n', open: /begin$/i, closeComplete: 'end', matchCase: true },
            { openTrigger: 'e', open: /case$/i, closeComplete: 'end', matchCase: true },
            { openTrigger: 'n', open: /when$/i, closeComplete: 'then', matchCase: true }
        ],
        noindentBrackets: '()',
        editorOptions: { tabSize: 4, insertSpaces: true },
        lineComment: '--',
        blockCommentStart: '/*',
        blockCommentEnd: '*/',
        keywords: [
            'ABORT_AFTER_WAIT',
            'ABSENT',
            'ABSOLUTE',
            'ACCENT_SENSITIVITY',
            'ACTION',
            'ACTIVATION',
            'ACTIVE',
            'ADD',
            'ADDRESS',
            'ADMIN',
            'AES',
            'AES_128',
            'AES_192',
            'AES_256',
            'AFFINITY',
            'AFTER',
            'AGGREGATE',
            'ALGORITHM',
            'ALL_CONSTRAINTS',
            'ALL_ERRORMSGS',
            'ALL_INDEXES',
            'ALL_LEVELS',
            'ALL_SPARSE_COLUMNS',
            'ALLOW_CONNECTIONS',
            'ALLOW_MULTIPLE_EVENT_LOSS',
            'ALLOW_PAGE_LOCKS',
            'ALLOW_ROW_LOCKS',
            'ALLOW_SINGLE_EVENT_LOSS',
            'ALLOW_SNAPSHOT_ISOLATION',
            'ALLOWED',
            'ALTER',
            'ANONYMOUS',
            'ANSI_DEFAULTS',
            'ANSI_NULL_DEFAULT',
            'ANSI_NULL_DFLT_OFF',
            'ANSI_NULL_DFLT_ON',
            'ANSI_NULLS',
            'ANSI_PADDING',
            'ANSI_WARNINGS',
            'APPEND',
            'APPLICATION',
            'APPLICATION_LOG',
            'ARITHABORT',
            'ARITHIGNORE',
            'AS',
            'ASC',
            'ASSEMBLY',
            'ASYMMETRIC',
            'ASYNCHRONOUS_COMMIT',
            'AT',
            'ATOMIC',
            'ATTACH',
            'ATTACH_REBUILD_LOG',
            'AUDIT',
            'AUDIT_GUID',
            'AUTHENTICATION',
            'AUTHORIZATION',
            'AUTO',
            'AUTO_CLEANUP',
            'AUTO_CLOSE',
            'AUTO_CREATE_STATISTICS',
            'AUTO_SHRINK',
            'AUTO_UPDATE_STATISTICS',
            'AUTO_UPDATE_STATISTICS_ASYNC',
            'AUTOMATED_BACKUP_PREFERENCE',
            'AUTOMATIC',
            'AVAILABILITY',
            'AVAILABILITY_MODE',
            'BACKUP',
            'BACKUP_PRIORITY',
            'BASE64',
            'BATCHSIZE',
            'BEGIN',
            'BEGIN_DIALOG',
            'BIGINT',
            'BINARY',
            'BINDING',
            'BIT',
            'BLOCKERS',
            'BLOCKSIZE',
            'BOUNDING_BOX',
            'BREAK',
            'BROKER',
            'BROKER_INSTANCE',
            'BROWSE',
            'BUCKET_COUNT',
            'BUFFER',
            'BUFFERCOUNT',
            'BULK',
            'BULK_LOGGED',
            'BY',
            'CACHE',
            'CALL',
            'CALLED',
            'CALLER',
            'CAP_CPU_PERCENT',
            'CASCADE',
            'CASE',
            'CATALOG',
            'CATCH',
            'CELLS_PER_OBJECT',
            'CERTIFICATE',
            'CHANGE_RETENTION',
            'CHANGE_TRACKING',
            'CHANGES',
            'CHAR',
            'CHARACTER',
            'CHECK',
            'CHECK_CONSTRAINTS',
            'CHECK_EXPIRATION',
            'CHECK_POLICY',
            'CHECKALLOC',
            'CHECKCATALOG',
            'CHECKCONSTRAINTS',
            'CHECKDB',
            'CHECKFILEGROUP',
            'CHECKIDENT',
            'CHECKPOINT',
            'CHECKTABLE',
            'CLASSIFIER_FUNCTION',
            'CLEANTABLE',
            'CLEANUP',
            'CLEAR',
            'CLOSE',
            'CLUSTER',
            'CLUSTERED',
            'CODEPAGE',
            'COLLATE',
            'COLLECTION',
            'COLUMN',
            'COLUMN_SET',
            'COLUMNS',
            'COLUMNSTORE',
            'COLUMNSTORE_ARCHIVE',
            'COMMIT',
            'COMMITTED',
            'COMPATIBILITY_LEVEL',
            'COMPRESSION',
            'COMPUTE',
            'CONCAT',
            'CONCAT_NULL_YIELDS_NULL',
            'CONFIGURATION',
            'CONNECT',
            'CONSTRAINT',
            'CONTAINMENT',
            'CONTENT',
            'CONTEXT',
            'CONTINUE',
            'CONTINUE_AFTER_ERROR',
            'CONTRACT',
            'CONTRACT_NAME',
            'CONTROL',
            'CONVERSATION',
            'COOKIE',
            'COPY_ONLY',
            'COUNTER',
            'CPU',
            'CREATE',
            'CREATE_NEW',
            'CREATION_DISPOSITION',
            'CREDENTIAL',
            'CRYPTOGRAPHIC',
            'CUBE',
            'CURRENT',
            'CURRENT_DATE',
            'CURSOR',
            'CURSOR_CLOSE_ON_COMMIT',
            'CURSOR_DEFAULT',
            'CYCLE',
            'DATA',
            'DATA_COMPRESSION',
            'DATA_PURITY',
            'DATABASE',
            'DATABASE_DEFAULT',
            'DATABASE_MIRRORING',
            'DATABASE_SNAPSHOT',
            'DATAFILETYPE',
            'DATE',
            'DATE_CORRELATION_OPTIMIZATION',
            'DATEFIRST',
            'DATEFORMAT',
            'DATETIME',
            'DATETIME2',
            'DATETIMEOFFSET',
            'DAY',
            'DAYOFYEAR',
            'DAYS',
            'DB_CHAINING',
            'DBCC',
            'DBREINDEX',
            'DDL_DATABASE_LEVEL_EVENTS',
            'DEADLOCK_PRIORITY',
            'DEALLOCATE',
            'DEC',
            'DECIMAL',
            'DECLARE',
            'DECRYPTION',
            'DEFAULT',
            'DEFAULT_DATABASE',
            'DEFAULT_FULLTEXT_LANGUAGE',
            'DEFAULT_LANGUAGE',
            'DEFAULT_SCHEMA',
            'DEFINITION',
            'DELAY',
            'DELAYED_DURABILITY',
            'DELETE',
            'DELETED',
            'DENSITY_VECTOR',
            'DENY',
            'DEPENDENTS',
            'DES',
            'DESC',
            'DESCRIPTION',
            'DESX',
            'DHCP',
            'DIAGNOSTICS',
            'DIALOG',
            'DIFFERENTIAL',
            'DIRECTORY_NAME',
            'DISABLE',
            'DISABLE_BROKER',
            'DISABLED',
            'DISK',
            'DISTINCT',
            'DISTRIBUTED',
            'DOCUMENT',
            'DOUBLE',
            'DROP',
            'DROP_EXISTING',
            'DROPCLEANBUFFERS',
            'DUMP',
            'DURABILITY',
            'DYNAMIC',
            'EDITION',
            'ELEMENTS',
            'ELSE',
            'EMERGENCY',
            'EMPTY',
            'EMPTYFILE',
            'ENABLE',
            'ENABLE_BROKER',
            'ENABLED',
            'ENCRYPTION',
            'END',
            'ENDPOINT',
            'ENDPOINT_URL',
            'ERRLVL',
            'ERROR',
            'ERROR_BROKER_CONVERSATIONS',
            'ERRORFILE',
            'ESCAPE',
            'ESTIMATEONLY',
            'EVENT',
            'EVENT_RETENTION_MODE',
            'EXEC',
            'EXECUTABLE',
            'EXECUTE',
            'EXIT',
            'EXPAND',
            'EXPIREDATE',
            'EXPIRY_DATE',
            'EXPLICIT',
            'EXTENDED_LOGICAL_CHECKS',
            'EXTENSION',
            'EXTERNAL',
            'EXTERNAL_ACCESS',
            'FAIL_OPERATION',
            'FAILOVER',
            'FAILOVER_MODE',
            'FAILURE_CONDITION_LEVEL',
            'FALSE',
            'FAN_IN',
            'FAST',
            'FAST_FORWARD',
            'FETCH',
            'FIELDTERMINATOR',
            'FILE',
            'FILEGROUP',
            'FILEGROWTH',
            'FILELISTONLY',
            'FILENAME',
            'FILEPATH',
            'FILESTREAM',
            'FILESTREAM_ON',
            'FILETABLE_COLLATE_FILENAME',
            'FILETABLE_DIRECTORY',
            'FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME',
            'FILETABLE_NAMESPACE',
            'FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME',
            'FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME',
            'FILLFACTOR',
            'FILTERING',
            'FIRE_TRIGGERS',
            'FIRST',
            'FIRSTROW',
            'FLOAT',
            'FMTONLY',
            'FOLLOWING',
            'FOR',
            'FORCE',
            'FORCE_FAILOVER_ALLOW_DATA_LOSS',
            'FORCE_SERVICE_ALLOW_DATA_LOSS',
            'FORCED',
            'FORCEPLAN',
            'FORCESCAN',
            'FORCESEEK',
            'FOREIGN',
            'FORMATFILE',
            'FORMSOF',
            'FORWARD_ONLY',
            'FREE',
            'FREEPROCCACHE',
            'FREESESSIONCACHE',
            'FREESYSTEMCACHE',
            'FROM',
            'FULL',
            'FULLSCAN',
            'FULLTEXT',
            'FUNCTION',
            'GB',
            'GEOGRAPHY_AUTO_GRID',
            'GEOGRAPHY_GRID',
            'GEOMETRY_AUTO_GRID',
            'GEOMETRY_GRID',
            'GET',
            'GLOBAL',
            'GO',
            'GOTO',
            'GOVERNOR',
            'GRANT',
            'GRIDS',
            'GROUP',
            'GROUP_MAX_REQUESTS',
            'HADR',
            'HASH',
            'HASHED',
            'HAVING',
            'HEADERONLY',
            'HEALTH_CHECK_TIMEOUT',
            'HELP',
            'HIERARCHYID',
            'HIGH',
            'HINT',
            'HISTOGRAM',
            'HOLDLOCK',
            'HONOR_BROKER_PRIORITY',
            'HOUR',
            'HOURS',
            'IDENTITY',
            'IDENTITY_INSERT',
            'IDENTITY_VALUE',
            'IDENTITYCOL',
            'IF',
            'IGNORE_CONSTRAINTS',
            'IGNORE_DUP_KEY',
            'IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX',
            'IGNORE_TRIGGERS',
            'IMAGE',
            'IMMEDIATE',
            'IMPERSONATE',
            'IMPLICIT_TRANSACTIONS',
            'IMPORTANCE',
            'INCLUDE',
            'INCREMENT',
            'INCREMENTAL',
            'INDEX',
            'INDEXDEFRAG',
            'INFINITE',
            'INFLECTIONAL',
            'INIT',
            'INITIATOR',
            'INPUT',
            'INPUTBUFFER',
            'INSENSITIVE',
            'INSERT',
            'INSERTED',
            'INSTEAD',
            'INT',
            'INTEGER',
            'INTO',
            'IO',
            'IP',
            'ISABOUT',
            'ISOLATION',
            'JOB',
            'KB',
            'KEEP',
            'KEEP_CDC',
            'KEEP_NULLS',
            'KEEP_REPLICATION',
            'KEEPDEFAULTS',
            'KEEPFIXED',
            'KEEPIDENTITY',
            'KEEPNULLS',
            'KERBEROS',
            'KEY',
            'KEY_SOURCE',
            'KEYS',
            'KEYSET',
            'KILL',
            'KILOBYTES_PER_BATCH',
            'LABELONLY',
            'LANGUAGE',
            'LAST',
            'LASTROW',
            'LEVEL',
            'LEVEL_1',
            'LEVEL_2',
            'LEVEL_3',
            'LEVEL_4',
            'LIFETIME',
            'LINENO',
            'LIST',
            'LISTENER',
            'LISTENER_IP',
            'LISTENER_PORT',
            'LOAD',
            'LOADHISTORY',
            'LOB_COMPACTION',
            'LOCAL',
            'LOCAL_SERVICE_NAME',
            'LOCK_ESCALATION',
            'LOCK_TIMEOUT',
            'LOGIN',
            'LOGSPACE',
            'LOOP',
            'LOW',
            'MANUAL',
            'MARK',
            'MARK_IN_USE_FOR_REMOVAL',
            'MASTER',
            'MAX_CPU_PERCENT',
            'MAX_DISPATCH_LATENCY',
            'MAX_DOP',
            'MAX_DURATION',
            'MAX_EVENT_SIZE',
            'MAX_FILES',
            'MAX_IOPS_PER_VOLUME',
            'MAX_MEMORY',
            'MAX_MEMORY_PERCENT',
            'MAX_QUEUE_READERS',
            'MAX_ROLLOVER_FILES',
            'MAX_SIZE',
            'MAXDOP',
            'MAXERRORS',
            'MAXLENGTH',
            'MAXRECURSION',
            'MAXSIZE',
            'MAXTRANSFERSIZE',
            'MAXVALUE',
            'MB',
            'MEDIADESCRIPTION',
            'MEDIANAME',
            'MEDIAPASSWORD',
            'MEDIUM',
            'MEMBER',
            'MEMORY_OPTIMIZED',
            'MEMORY_OPTIMIZED_DATA',
            'MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT',
            'MEMORY_PARTITION_MODE',
            'MERGE',
            'MESSAGE',
            'MESSAGE_FORWARD_SIZE',
            'MESSAGE_FORWARDING',
            'MICROSECOND',
            'MILLISECOND',
            'MIN_CPU_PERCENT',
            'MIN_IOPS_PER_VOLUME',
            'MIN_MEMORY_PERCENT',
            'MINUTE',
            'MINUTES',
            'MINVALUE',
            'MIRROR',
            'MIRROR_ADDRESS',
            'MODIFY',
            'MONEY',
            'MONTH',
            'MOVE',
            'MULTI_USER',
            'MUST_CHANGE',
            'NAME',
            'NANOSECOND',
            'NATIONAL',
            'NATIVE_COMPILATION',
            'NCHAR',
            'NEGOTIATE',
            'NESTED_TRIGGERS',
            'NEW_ACCOUNT',
            'NEW_BROKER',
            'NEW_PASSWORD',
            'NEWNAME',
            'NEXT',
            'NO',
            'NO_BROWSETABLE',
            'NO_CHECKSUM',
            'NO_COMPRESSION',
            'NO_EVENT_LOSS',
            'NO_INFOMSGS',
            'NO_TRUNCATE',
            'NO_WAIT',
            'NOCHECK',
            'NOCOUNT',
            'NOEXEC',
            'NOEXPAND',
            'NOFORMAT',
            'NOINDEX',
            'NOINIT',
            'NOLOCK',
            'NON',
            'NON_TRANSACTED_ACCESS',
            'NONCLUSTERED',
            'NONE',
            'NORECOMPUTE',
            'NORECOVERY',
            'NORESEED',
            'NORESET',
            'NOREWIND',
            'NORMAL',
            'NOSKIP',
            'NOTIFICATION',
            'NOTRUNCATE',
            'NOUNLOAD',
            'NOWAIT',
            'NTEXT',
            'NTLM',
            'NUMANODE',
            'NUMERIC',
            'NUMERIC_ROUNDABORT',
            'NVARCHAR',
            'OBJECT',
            'OF',
            'OFF',
            'OFFLINE',
            'OFFSET',
            'OFFSETS',
            'OLD_ACCOUNT',
            'OLD_PASSWORD',
            'ON',
            'ON_FAILURE',
            'ONLINE',
            'ONLY',
            'OPEN',
            'OPEN_EXISTING',
            'OPENTRAN',
            'OPTIMISTIC',
            'OPTIMIZE',
            'OPTION',
            'ORDER',
            'OUT',
            'OUTPUT',
            'OUTPUTBUFFER',
            'OVER',
            'OVERRIDE',
            'OWNER',
            'OWNERSHIP',
            'PAD_INDEX',
            'PAGE',
            'PAGE_VERIFY',
            'PAGECOUNT',
            'PAGLOCK',
            'PARAMETERIZATION',
            'PARSEONLY',
            'PARTIAL',
            'PARTITION',
            'PARTITIONS',
            'PARTNER',
            'PASSWORD',
            'PATH',
            'PER_CPU',
            'PER_NODE',
            'PERCENT',
            'PERMISSION_SET',
            'PERSISTED',
            'PHYSICAL_ONLY',
            'PLAN',
            'POISON_MESSAGE_HANDLING',
            'POOL',
            'POPULATION',
            'PORT',
            'PRECEDING',
            'PRECISION',
            'PRIMARY',
            'PRIMARY_ROLE',
            'PRINT',
            'PRIOR',
            'PRIORITY',
            'PRIORITY_LEVEL',
            'PRIVATE',
            'PRIVILEGES',
            'PROC',
            'PROCCACHE',
            'PROCEDURE',
            'PROCEDURE_NAME',
            'PROCESS',
            'PROFILE',
            'PROPERTY',
            'PROPERTY_DESCRIPTION',
            'PROPERTY_INT_ID',
            'PROPERTY_SET_GUID',
            'PROVIDER',
            'PROVIDER_KEY_NAME',
            'PUBLIC',
            'PUT',
            'QUARTER',
            'QUERY',
            'QUERY_GOVERNOR_COST_LIMIT',
            'QUEUE',
            'QUEUE_DELAY',
            'QUOTED_IDENTIFIER',
            'RAISERROR',
            'RANGE',
            'RAW',
            'RC2',
            'RC4',
            'RC4_128',
            'READ',
            'READ_COMMITTED_SNAPSHOT',
            'READ_ONLY',
            'READ_ONLY_ROUTING_LIST',
            'READ_ONLY_ROUTING_URL',
            'READ_WRITE',
            'READ_WRITE_FILEGROUPS',
            'READCOMMITTED',
            'READCOMMITTEDLOCK',
            'READONLY',
            'READPAST',
            'READTEXT',
            'READUNCOMMITTED',
            'READWRITE',
            'REAL',
            'REBUILD',
            'RECEIVE',
            'RECOMPILE',
            'RECONFIGURE',
            'RECOVERY',
            'RECURSIVE',
            'RECURSIVE_TRIGGERS',
            'REFERENCES',
            'REGENERATE',
            'RELATED_CONVERSATION',
            'RELATED_CONVERSATION_GROUP',
            'RELATIVE',
            'REMOTE',
            'REMOTE_PROC_TRANSACTIONS',
            'REMOTE_SERVICE_NAME',
            'REMOVE',
            'REORGANIZE',
            'REPAIR_ALLOW_DATA_LOSS',
            'REPAIR_FAST',
            'REPAIR_REBUILD',
            'REPEATABLE',
            'REPEATABLEREAD',
            'REPLICA',
            'REPLICATION',
            'REQUEST_MAX_CPU_TIME_SEC',
            'REQUEST_MAX_MEMORY_GRANT_PERCENT',
            'REQUEST_MEMORY_GRANT_TIMEOUT_SEC',
            'REQUIRED',
            'RESAMPLE',
            'RESEED',
            'RESERVE_DISK_SPACE',
            'RESET',
            'RESOURCE',
            'RESTART',
            'RESTORE',
            'RESTRICT',
            'RESTRICTED_USER',
            'RESULT',
            'RESUME',
            'RETAINDAYS',
            'RETENTION',
            'RETURN',
            'RETURNS',
            'REVERT',
            'REVOKE',
            'REWIND',
            'REWINDONLY',
            'ROBUST',
            'ROLE',
            'ROLLBACK',
            'ROLLUP',
            'ROOT',
            'ROUTE',
            'ROW',
            'ROWCOUNT',
            'ROWGUIDCOL',
            'ROWLOCK',
            'ROWS',
            'ROWS_PER_BATCH',
            'ROWTERMINATOR',
            'ROWVERSION',
            'RSA_1024',
            'RSA_2048',
            'RSA_512',
            'RULE',
            'SAFE',
            'SAFETY',
            'SAMPLE',
            'SAVE',
            'SCHEDULER',
            'SCHEMA',
            'SCHEMA_AND_DATA',
            'SCHEMA_ONLY',
            'SCHEMABINDING',
            'SCHEME',
            'SCROLL',
            'SCROLL_LOCKS',
            'SEARCH',
            'SECOND',
            'SECONDARY',
            'SECONDARY_ONLY',
            'SECONDARY_ROLE',
            'SECONDS',
            'SECRET',
            'SECURITY_LOG',
            'SECURITYAUDIT',
            'SELECT',
            'SELECTIVE',
            'SELF',
            'SEND',
            'SENT',
            'SEQUENCE',
            'SERIALIZABLE',
            'SERVER',
            'SERVICE',
            'SERVICE_BROKER',
            'SERVICE_NAME',
            'SESSION',
            'SESSION_TIMEOUT',
            'SET',
            'SETS',
            'SETUSER',
            'SHOW_STATISTICS',
            'SHOWCONTIG',
            'SHOWPLAN',
            'SHOWPLAN_ALL',
            'SHOWPLAN_TEXT',
            'SHOWPLAN_XML',
            'SHRINKDATABASE',
            'SHRINKFILE',
            'SHUTDOWN',
            'SID',
            'SIGNATURE',
            'SIMPLE',
            'SINGLE_BLOB',
            'SINGLE_CLOB',
            'SINGLE_NCLOB',
            'SINGLE_USER',
            'SINGLETON',
            'SIZE',
            'SKIP',
            'SMALLDATETIME',
            'SMALLINT',
            'SMALLMONEY',
            'SNAPSHOT',
            'SORT_IN_TEMPDB',
            'SOURCE',
            'SPARSE',
            'SPATIAL',
            'SPATIAL_WINDOW_MAX_CELLS',
            'SPECIFICATION',
            'SPLIT',
            'SQL',
            'SQL_VARIANT',
            'SQLPERF',
            'STANDBY',
            'START',
            'START_DATE',
            'STARTED',
            'STARTUP_STATE',
            'STAT_HEADER',
            'STATE',
            'STATEMENT',
            'STATIC',
            'STATISTICAL_SEMANTICS',
            'STATISTICS',
            'STATISTICS_INCREMENTAL',
            'STATISTICS_NORECOMPUTE',
            'STATS',
            'STATS_STREAM',
            'STATUS',
            'STATUSONLY',
            'STOP',
            'STOP_ON_ERROR',
            'STOPAT',
            'STOPATMARK',
            'STOPBEFOREMARK',
            'STOPLIST',
            'STOPPED',
            'SUBJECT',
            'SUBSCRIPTION',
            'SUPPORTED',
            'SUSPEND',
            'SWITCH',
            'SYMMETRIC',
            'SYNCHRONOUS_COMMIT',
            'SYNONYM',
            'SYSNAME',
            'SYSTEM',
            'TABLE',
            'TABLERESULTS',
            'TABLESAMPLE',
            'TABLOCK',
            'TABLOCKX',
            'TAKE',
            'TAPE',
            'TARGET',
            'TARGET_RECOVERY_TIME',
            'TB',
            'TCP',
            'TEXT',
            'TEXTIMAGE_ON',
            'TEXTSIZE',
            'THEN',
            'THESAURUS',
            'THROW',
            'TIES',
            'TIME',
            'TIMEOUT',
            'TIMER',
            'TIMESTAMP',
            'TINYINT',
            'TO',
            'TOP',
            'TORN_PAGE_DETECTION',
            'TRACEOFF',
            'TRACEON',
            'TRACESTATUS',
            'TRACK_CAUSALITY',
            'TRACK_COLUMNS_UPDATED',
            'TRAN',
            'TRANSACTION',
            'TRANSFER',
            'TRANSFORM_NOISE_WORDS',
            'TRIGGER',
            'TRIPLE_DES',
            'TRIPLE_DES_3KEY',
            'TRUE',
            'TRUNCATE',
            'TRUNCATEONLY',
            'TRUSTWORTHY',
            'TRY',
            'TSQL',
            'TWO_DIGIT_YEAR_CUTOFF',
            'TYPE',
            'TYPE_WARNING',
            'UNBOUNDED',
            'UNCHECKED',
            'UNCOMMITTED',
            'UNDEFINED',
            'UNIQUE',
            'UNIQUEIDENTIFIER',
            'UNKNOWN',
            'UNLIMITED',
            'UNLOAD',
            'UNSAFE',
            'UPDATE',
            'UPDATETEXT',
            'UPDATEUSAGE',
            'UPDLOCK',
            'URL',
            'USE',
            'USED',
            'USER',
            'USEROPTIONS',
            'USING',
            'VALID_XML',
            'VALIDATION',
            'VALUE',
            'VALUES',
            'VARBINARY',
            'VARCHAR',
            'VARYING',
            'VERIFYONLY',
            'VERSION',
            'VIEW',
            'VIEW_METADATA',
            'VIEWS',
            'VISIBILITY',
            'WAIT_AT_LOW_PRIORITY',
            'WAITFOR',
            'WEEK',
            'WEIGHT',
            'WELL_FORMED_XML',
            'WHEN',
            'WHERE',
            'WHILE',
            'WINDOWS',
            'WITH',
            'WITHIN',
            'WITHOUT',
            'WITNESS',
            'WORK',
            'WORKLOAD',
            'WRITETEXT',
            'XACT_ABORT',
            'XLOCK',
            'XMAX',
            'XMIN',
            'XML',
            'XMLDATA',
            'XMLNAMESPACES',
            'XMLSCHEMA',
            'XQUERY',
            'XSINIL',
            'YEAR',
            'YMAX',
            'YMIN'
        ],
        operators: [
            // Logical
            'ALL', 'AND', 'ANY', 'BETWEEN', 'EXISTS', 'IN', 'LIKE', 'NOT', 'OR', 'SOME',
            // Set
            'EXCEPT', 'INTERSECT', 'UNION',
            // Join
            'APPLY', 'CROSS', 'FULL', 'INNER', 'JOIN', 'LEFT', 'OUTER', 'RIGHT',
            // Predicates
            'CONTAINS', 'FREETEXT', 'IS', 'NULL',
            // Pivoting
            'PIVOT', 'UNPIVOT',
            // Merging
            'MATCHED'
        ],
        builtinFunctions: [
            // Aggregate
            'AVG', 'CHECKSUM_AGG', 'COUNT', 'COUNT_BIG', 'GROUPING', 'GROUPING_ID', 'MAX', 'MIN', 'SUM', 'STDEV', 'STDEVP', 'VAR', 'VARP',
            // Analytic
            'CUME_DIST', 'FIRST_VALUE', 'LAG', 'LAST_VALUE', 'LEAD', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'PERCENT_RANK',
            // Collation
            'COLLATE', 'COLLATIONPROPERTY', 'TERTIARY_WEIGHTS',
            // Azure
            'FEDERATION_FILTERING_VALUE',
            // Conversion
            'CAST', 'CONVERT', 'PARSE', 'TRY_CAST', 'TRY_CONVERT', 'TRY_PARSE',
            // Cryptographic
            'ASYMKEY_ID', 'ASYMKEYPROPERTY', 'CERTPROPERTY', 'CERT_ID', 'CRYPT_GEN_RANDOM',
            'DECRYPTBYASYMKEY', 'DECRYPTBYCERT', 'DECRYPTBYKEY', 'DECRYPTBYKEYAUTOASYMKEY', 'DECRYPTBYKEYAUTOCERT', 'DECRYPTBYPASSPHRASE',
            'ENCRYPTBYASYMKEY', 'ENCRYPTBYCERT', 'ENCRYPTBYKEY', 'ENCRYPTBYPASSPHRASE', 'HASHBYTES', 'IS_OBJECTSIGNED',
            'KEY_GUID', 'KEY_ID', 'KEY_NAME', 'SIGNBYASYMKEY', 'SIGNBYCERT', 'SYMKEYPROPERTY', 'VERIFYSIGNEDBYCERT', 'VERIFYSIGNEDBYASYMKEY',
            // Cursor
            'CURSOR_STATUS',
            // Datatype
            'DATALENGTH', 'IDENT_CURRENT', 'IDENT_INCR', 'IDENT_SEED', 'IDENTITY', 'SQL_VARIANT_PROPERTY',
            // Datetime
            'CURRENT_TIMESTAMP', 'DATEADD', 'DATEDIFF', 'DATEFROMPARTS', 'DATENAME', 'DATEPART', 'DATETIME2FROMPARTS', 'DATETIMEFROMPARTS',
            'DATETIMEOFFSETFROMPARTS', 'DAY', 'EOMONTH', 'GETDATE', 'GETUTCDATE', 'ISDATE', 'MONTH', 'SMALLDATETIMEFROMPARTS', 'SWITCHOFFSET',
            'SYSDATETIME', 'SYSDATETIMEOFFSET', 'SYSUTCDATETIME', 'TIMEFROMPARTS', 'TODATETIMEOFFSET', 'YEAR',
            // Logical
            'CHOOSE', 'COALESCE', 'IIF', 'NULLIF',
            // Mathematical
            'ABS', 'ACOS', 'ASIN', 'ATAN', 'ATN2', 'CEILING', 'COS', 'COT', 'DEGREES', 'EXP', 'FLOOR', 'LOG', 'LOG10',
            'PI', 'POWER', 'RADIANS', 'RAND', 'ROUND', 'SIGN', 'SIN', 'SQRT', 'SQUARE', 'TAN',
            // Metadata
            'APP_NAME', 'APPLOCK_MODE', 'APPLOCK_TEST', 'ASSEMBLYPROPERTY', 'COL_LENGTH', 'COL_NAME', 'COLUMNPROPERTY',
            'DATABASE_PRINCIPAL_ID', 'DATABASEPROPERTYEX', 'DB_ID', 'DB_NAME', 'FILE_ID', 'FILE_IDEX', 'FILE_NAME', 'FILEGROUP_ID',
            'FILEGROUP_NAME', 'FILEGROUPPROPERTY', 'FILEPROPERTY', 'FULLTEXTCATALOGPROPERTY', 'FULLTEXTSERVICEPROPERTY',
            'INDEX_COL', 'INDEXKEY_PROPERTY', 'INDEXPROPERTY', 'OBJECT_DEFINITION', 'OBJECT_ID',
            'OBJECT_NAME', 'OBJECT_SCHEMA_NAME', 'OBJECTPROPERTY', 'OBJECTPROPERTYEX', 'ORIGINAL_DB_NAME', 'PARSENAME',
            'SCHEMA_ID', 'SCHEMA_NAME', 'SCOPE_IDENTITY', 'SERVERPROPERTY', 'STATS_DATE', 'TYPE_ID', 'TYPE_NAME', 'TYPEPROPERTY',
            // Ranking
            'DENSE_RANK', 'NTILE', 'RANK', 'ROW_NUMBER',
            // Replication
            'PUBLISHINGSERVERNAME',
            // Rowset
            'OPENDATASOURCE', 'OPENQUERY', 'OPENROWSET', 'OPENXML',
            // Security
            'CERTENCODED', 'CERTPRIVATEKEY', 'CURRENT_USER', 'HAS_DBACCESS', 'HAS_PERMS_BY_NAME', 'IS_MEMBER', 'IS_ROLEMEMBER', 'IS_SRVROLEMEMBER',
            'LOGINPROPERTY', 'ORIGINAL_LOGIN', 'PERMISSIONS', 'PWDENCRYPT', 'PWDCOMPARE', 'SESSION_USER', 'SESSIONPROPERTY', 'SUSER_ID', 'SUSER_NAME',
            'SUSER_SID', 'SUSER_SNAME', 'SYSTEM_USER', 'USER', 'USER_ID', 'USER_NAME',
            // String
            'ASCII', 'CHAR', 'CHARINDEX', 'CONCAT', 'DIFFERENCE', 'FORMAT', 'LEFT', 'LEN', 'LOWER', 'LTRIM', 'NCHAR', 'PATINDEX',
            'QUOTENAME', 'REPLACE', 'REPLICATE', 'REVERSE', 'RIGHT', 'RTRIM', 'SOUNDEX', 'SPACE', 'STR', 'STUFF', 'SUBSTRING', 'UNICODE', 'UPPER',
            // System
            'BINARY_CHECKSUM', 'CHECKSUM', 'CONNECTIONPROPERTY', 'CONTEXT_INFO', 'CURRENT_REQUEST_ID', 'ERROR_LINE', 'ERROR_NUMBER', 'ERROR_MESSAGE',
            'ERROR_PROCEDURE', 'ERROR_SEVERITY', 'ERROR_STATE', 'FORMATMESSAGE', 'GETANSINULL', 'GET_FILESTREAM_TRANSACTION_CONTEXT', 'HOST_ID',
            'HOST_NAME', 'ISNULL', 'ISNUMERIC', 'MIN_ACTIVE_ROWVERSION', 'NEWID', 'NEWSEQUENTIALID', 'ROWCOUNT_BIG', 'XACT_STATE',
            // TextImage
            'TEXTPTR', 'TEXTVALID',
            // Trigger
            'COLUMNS_UPDATED', 'EVENTDATA', 'TRIGGER_NESTLEVEL', 'UPDATE',
            // ChangeTracking
            'CHANGETABLE', 'CHANGE_TRACKING_CONTEXT', 'CHANGE_TRACKING_CURRENT_VERSION', 'CHANGE_TRACKING_IS_COLUMN_IN_MASK', 'CHANGE_TRACKING_MIN_VALID_VERSION',
            // FullTextSearch
            'CONTAINSTABLE', 'FREETEXTTABLE',
            // SemanticTextSearch
            'SEMANTICKEYPHRASETABLE', 'SEMANTICSIMILARITYDETAILSTABLE', 'SEMANTICSIMILARITYTABLE',
            // FileStream
            'FILETABLEROOTPATH', 'GETFILENAMESPACEPATH', 'GETPATHLOCATOR', 'PATHNAME',
            // ServiceBroker
            'GET_TRANSMISSION_STATUS'
        ],
        builtinVariables: [
            // Configuration
            '@@DATEFIRST', '@@DBTS', '@@LANGID', '@@LANGUAGE', '@@LOCK_TIMEOUT', '@@MAX_CONNECTIONS', '@@MAX_PRECISION', '@@NESTLEVEL',
            '@@OPTIONS', '@@REMSERVER', '@@SERVERNAME', '@@SERVICENAME', '@@SPID', '@@TEXTSIZE', '@@VERSION',
            // Cursor
            '@@CURSOR_ROWS', '@@FETCH_STATUS',
            // Datetime
            '@@DATEFIRST',
            // Metadata
            '@@PROCID',
            // System
            '@@ERROR', '@@IDENTITY', '@@ROWCOUNT', '@@TRANCOUNT',
            // Stats
            '@@CONNECTIONS', '@@CPU_BUSY', '@@IDLE', '@@IO_BUSY', '@@PACKET_ERRORS', '@@PACK_RECEIVED', '@@PACK_SENT',
            '@@TIMETICKS', '@@TOTAL_ERRORS', '@@TOTAL_READ', '@@TOTAL_WRITE'
        ],
        pseudoColumns: [
            '$ACTION', '$IDENTITY', '$ROWGUID', '$PARTITION'
        ],
        tokenizer: {
            root: [
                { include: '@comments' },
                { include: '@whitespace' },
                { include: '@pseudoColumns' },
                { include: '@numbers' },
                { include: '@strings' },
                { include: '@complexIdentifiers' },
                { include: '@scopes' },
                [/[;,.]/, 'delimiter'],
                [/[()]/, '@brackets'],
                [/[\w@#$]+/, { cases: {
                            '@keywords': 'keyword',
                            '@operators': 'operator',
                            '@builtinVariables': 'predefined',
                            '@builtinFunctions': 'predefined',
                            '@default': 'identifier' }
                    }],
                [/[<>=!%&+\-*/|~^]/, 'operator'],
            ],
            whitespace: [
                [/\s+/, 'white']
            ],
            comments: [
                [/--+.*/, 'comment'],
                [/\/\*/, { token: 'comment.quote', bracket: '@open', next: '@comment' }]
            ],
            comment: [
                [/[^*/]+/, 'comment'],
                // Not supporting nested comments, as nested comments seem to not be standard?
                // i.e. http://stackoverflow.com/questions/728172/are-there-multiline-comment-delimiters-in-sql-that-are-vendor-agnostic
                // [/\/\*/, { token: 'comment.quote', bracket: '@open', next: '@push' }],    // nested comment not allowed :-(
                [/\*\//, { token: 'comment.quote', bracket: '@close', next: '@pop' }],
                [/./, 'comment']
            ],
            pseudoColumns: [
                [/[$][A-Za-z_][\w@#$]*/, { cases: {
                            '@pseudoColumns': 'predefined',
                            '@default': 'identifier'
                        } }],
            ],
            numbers: [
                [/0[xX][0-9a-fA-F]*/, 'number'],
                [/[$][+-]*\d*(\.\d*)?/, 'number'],
                [/((\d+(\.\d*)?)|(\.\d+))([eE][\-+]?\d+)?/, 'number']
            ],
            strings: [
                [/N'/, { token: 'string.quote', bracket: '@open', next: '@string' }],
                [/'/, { token: 'string.quote', bracket: '@open', next: '@string' }]
            ],
            string: [
                [/[^']+/, 'string'],
                [/''/, 'string'],
                [/'/, { token: 'string.quote', bracket: '@close', next: '@pop' }]
            ],
            complexIdentifiers: [
                [/\[/, { token: 'identifier.quote', bracket: '@open', next: '@bracketedIdentifier' }],
                [/"/, { token: 'identifier.quote', bracket: '@open', next: '@quotedIdentifier' }]
            ],
            bracketedIdentifier: [
                [/[^\]]+/, 'identifier'],
                [/]]/, 'identifier'],
                [/]/, { token: 'identifier.quote', bracket: '@close', next: '@pop' }]
            ],
            quotedIdentifier: [
                [/[^"]+/, 'identifier'],
                [/""/, 'identifier'],
                [/"/, { token: 'identifier.quote', bracket: '@close', next: '@pop' }]
            ],
            scopes: [
                [/BEGIN\s+(DISTRIBUTED\s+)?TRAN(SACTION)?\b/i, 'keyword'],
                [/BEGIN\s+TRY\b/i, { token: 'keyword.try', bracket: '@open' }],
                [/END\s+TRY\b/i, { token: 'keyword.try', bracket: '@close' }],
                [/BEGIN\s+CATCH\b/i, { token: 'keyword.catch', bracket: '@open' }],
                [/END\s+CATCH\b/i, { token: 'keyword.catch', bracket: '@close' }],
                [/(BEGIN|CASE)\b/i, { token: 'keyword.block', bracket: '@open' }],
                [/END\b/i, { token: 'keyword.block', bracket: '@close' }],
                [/WHEN\b/i, { token: 'keyword.choice', bracket: '@open' }],
                [/THEN\b/i, { token: 'keyword.choice', bracket: '@close' }]
            ]
        }
    };
});
