/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

'use strict';

import {ILanguage} from './types';

export var language = <ILanguage> {
	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' }]
		]
	}
};
