/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
define('vs/basic-languages/redshift/redshift',["require", "exports"], function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.language = exports.conf = void 0;
    exports.conf = {
        comments: {
            lineComment: '--',
            blockComment: ['/*', '*/']
        },
        brackets: [
            ['{', '}'],
            ['[', ']'],
            ['(', ')']
        ],
        autoClosingPairs: [
            { open: '{', close: '}' },
            { open: '[', close: ']' },
            { open: '(', close: ')' },
            { open: '"', close: '"' },
            { open: "'", close: "'" }
        ],
        surroundingPairs: [
            { open: '{', close: '}' },
            { open: '[', close: ']' },
            { open: '(', close: ')' },
            { open: '"', close: '"' },
            { open: "'", close: "'" }
        ]
    };
    exports.language = {
        defaultToken: '',
        tokenPostfix: '.sql',
        ignoreCase: true,
        brackets: [
            { open: '[', close: ']', token: 'delimiter.square' },
            { open: '(', close: ')', token: 'delimiter.parenthesis' }
        ],
        keywords: [
            'AES128',
            'AES256',
            'ALL',
            'ALLOWOVERWRITE',
            'ANALYSE',
            'ANALYZE',
            'AND',
            'ANY',
            'ARRAY',
            'AS',
            'ASC',
            'AUTHORIZATION',
            'BACKUP',
            'BETWEEN',
            'BINARY',
            'BLANKSASNULL',
            'BOTH',
            'BYTEDICT',
            'BZIP2',
            'CASE',
            'CAST',
            'CHECK',
            'COLLATE',
            'COLUMN',
            'CONSTRAINT',
            'CREATE',
            'CREDENTIALS',
            'CROSS',
            'CURRENT_DATE',
            'CURRENT_TIME',
            'CURRENT_TIMESTAMP',
            'CURRENT_USER',
            'CURRENT_USER_ID',
            'DEFAULT',
            'DEFERRABLE',
            'DEFLATE',
            'DEFRAG',
            'DELTA',
            'DELTA32K',
            'DESC',
            'DISABLE',
            'DISTINCT',
            'DO',
            'ELSE',
            'EMPTYASNULL',
            'ENABLE',
            'ENCODE',
            'ENCRYPT',
            'ENCRYPTION',
            'END',
            'EXCEPT',
            'EXPLICIT',
            'FALSE',
            'FOR',
            'FOREIGN',
            'FREEZE',
            'FROM',
            'FULL',
            'GLOBALDICT256',
            'GLOBALDICT64K',
            'GRANT',
            'GROUP',
            'GZIP',
            'HAVING',
            'IDENTITY',
            'IGNORE',
            'ILIKE',
            'IN',
            'INITIALLY',
            'INNER',
            'INTERSECT',
            'INTO',
            'IS',
            'ISNULL',
            'JOIN',
            'LEADING',
            'LEFT',
            'LIKE',
            'LIMIT',
            'LOCALTIME',
            'LOCALTIMESTAMP',
            'LUN',
            'LUNS',
            'LZO',
            'LZOP',
            'MINUS',
            'MOSTLY13',
            'MOSTLY32',
            'MOSTLY8',
            'NATURAL',
            'NEW',
            'NOT',
            'NOTNULL',
            'NULL',
            'NULLS',
            'OFF',
            'OFFLINE',
            'OFFSET',
            'OID',
            'OLD',
            'ON',
            'ONLY',
            'OPEN',
            'OR',
            'ORDER',
            'OUTER',
            'OVERLAPS',
            'PARALLEL',
            'PARTITION',
            'PERCENT',
            'PERMISSIONS',
            'PLACING',
            'PRIMARY',
            'RAW',
            'READRATIO',
            'RECOVER',
            'REFERENCES',
            'RESPECT',
            'REJECTLOG',
            'RESORT',
            'RESTORE',
            'RIGHT',
            'SELECT',
            'SESSION_USER',
            'SIMILAR',
            'SNAPSHOT',
            'SOME',
            'SYSDATE',
            'SYSTEM',
            'TABLE',
            'TAG',
            'TDES',
            'TEXT255',
            'TEXT32K',
            'THEN',
            'TIMESTAMP',
            'TO',
            'TOP',
            'TRAILING',
            'TRUE',
            'TRUNCATECOLUMNS',
            'UNION',
            'UNIQUE',
            'USER',
            'USING',
            'VERBOSE',
            'WALLET',
            'WHEN',
            'WHERE',
            'WITH',
            'WITHOUT'
        ],
        operators: [
            'AND',
            'BETWEEN',
            'IN',
            'LIKE',
            'NOT',
            'OR',
            'IS',
            'NULL',
            'INTERSECT',
            'UNION',
            'INNER',
            'JOIN',
            'LEFT',
            'OUTER',
            'RIGHT'
        ],
        builtinFunctions: [
            'current_schema',
            'current_schemas',
            'has_database_privilege',
            'has_schema_privilege',
            'has_table_privilege',
            'age',
            'current_time',
            'current_timestamp',
            'localtime',
            'isfinite',
            'now',
            'ascii',
            'get_bit',
            'get_byte',
            'set_bit',
            'set_byte',
            'to_ascii',
            'approximate percentile_disc',
            'avg',
            'count',
            'listagg',
            'max',
            'median',
            'min',
            'percentile_cont',
            'stddev_samp',
            'stddev_pop',
            'sum',
            'var_samp',
            'var_pop',
            'bit_and',
            'bit_or',
            'bool_and',
            'bool_or',
            'cume_dist',
            'first_value',
            'lag',
            'last_value',
            'lead',
            'nth_value',
            'ratio_to_report',
            'dense_rank',
            'ntile',
            'percent_rank',
            'rank',
            'row_number',
            'case',
            'coalesce',
            'decode',
            'greatest',
            'least',
            'nvl',
            'nvl2',
            'nullif',
            'add_months',
            'at time zone',
            'convert_timezone',
            'current_date',
            'date_cmp',
            'date_cmp_timestamp',
            'date_cmp_timestamptz',
            'date_part_year',
            'dateadd',
            'datediff',
            'date_part',
            'date_trunc',
            'extract',
            'getdate',
            'interval_cmp',
            'last_day',
            'months_between',
            'next_day',
            'sysdate',
            'timeofday',
            'timestamp_cmp',
            'timestamp_cmp_date',
            'timestamp_cmp_timestamptz',
            'timestamptz_cmp',
            'timestamptz_cmp_date',
            'timestamptz_cmp_timestamp',
            'timezone',
            'to_timestamp',
            'trunc',
            'abs',
            'acos',
            'asin',
            'atan',
            'atan2',
            'cbrt',
            'ceil',
            'ceiling',
            'checksum',
            'cos',
            'cot',
            'degrees',
            'dexp',
            'dlog1',
            'dlog10',
            'exp',
            'floor',
            'ln',
            'log',
            'mod',
            'pi',
            'power',
            'radians',
            'random',
            'round',
            'sin',
            'sign',
            'sqrt',
            'tan',
            'to_hex',
            'bpcharcmp',
            'btrim',
            'bttext_pattern_cmp',
            'char_length',
            'character_length',
            'charindex',
            'chr',
            'concat',
            'crc32',
            'func_sha1',
            'initcap',
            'left and rights',
            'len',
            'length',
            'lower',
            'lpad and rpads',
            'ltrim',
            'md5',
            'octet_length',
            'position',
            'quote_ident',
            'quote_literal',
            'regexp_count',
            'regexp_instr',
            'regexp_replace',
            'regexp_substr',
            'repeat',
            'replace',
            'replicate',
            'reverse',
            'rtrim',
            'split_part',
            'strpos',
            'strtol',
            'substring',
            'textlen',
            'translate',
            'trim',
            'upper',
            'cast',
            'convert',
            'to_char',
            'to_date',
            'to_number',
            'json_array_length',
            'json_extract_array_element_text',
            'json_extract_path_text',
            'current_setting',
            'pg_cancel_backend',
            'pg_terminate_backend',
            'set_config',
            'current_database',
            'current_user',
            'current_user_id',
            'pg_backend_pid',
            'pg_last_copy_count',
            'pg_last_copy_id',
            'pg_last_query_id',
            'pg_last_unload_count',
            'session_user',
            'slice_num',
            'user',
            'version',
            'abbrev',
            'acosd',
            'any',
            'area',
            'array_agg',
            'array_append',
            'array_cat',
            'array_dims',
            'array_fill',
            'array_length',
            'array_lower',
            'array_ndims',
            'array_position',
            'array_positions',
            'array_prepend',
            'array_remove',
            'array_replace',
            'array_to_json',
            'array_to_string',
            'array_to_tsvector',
            'array_upper',
            'asind',
            'atan2d',
            'atand',
            'bit',
            'bit_length',
            'bound_box',
            'box',
            'brin_summarize_new_values',
            'broadcast',
            'cardinality',
            'center',
            'circle',
            'clock_timestamp',
            'col_description',
            'concat_ws',
            'convert_from',
            'convert_to',
            'corr',
            'cosd',
            'cotd',
            'covar_pop',
            'covar_samp',
            'current_catalog',
            'current_query',
            'current_role',
            'currval',
            'cursor_to_xml',
            'diameter',
            'div',
            'encode',
            'enum_first',
            'enum_last',
            'enum_range',
            'every',
            'family',
            'format',
            'format_type',
            'generate_series',
            'generate_subscripts',
            'get_current_ts_config',
            'gin_clean_pending_list',
            'grouping',
            'has_any_column_privilege',
            'has_column_privilege',
            'has_foreign_data_wrapper_privilege',
            'has_function_privilege',
            'has_language_privilege',
            'has_sequence_privilege',
            'has_server_privilege',
            'has_tablespace_privilege',
            'has_type_privilege',
            'height',
            'host',
            'hostmask',
            'inet_client_addr',
            'inet_client_port',
            'inet_merge',
            'inet_same_family',
            'inet_server_addr',
            'inet_server_port',
            'isclosed',
            'isempty',
            'isopen',
            'json_agg',
            'json_object',
            'json_object_agg',
            'json_populate_record',
            'json_populate_recordset',
            'json_to_record',
            'json_to_recordset',
            'jsonb_agg',
            'jsonb_object_agg',
            'justify_days',
            'justify_hours',
            'justify_interval',
            'lastval',
            'left',
            'line',
            'localtimestamp',
            'lower_inc',
            'lower_inf',
            'lpad',
            'lseg',
            'make_date',
            'make_interval',
            'make_time',
            'make_timestamp',
            'make_timestamptz',
            'masklen',
            'mode',
            'netmask',
            'network',
            'nextval',
            'npoints',
            'num_nonnulls',
            'num_nulls',
            'numnode',
            'obj_description',
            'overlay',
            'parse_ident',
            'path',
            'pclose',
            'percentile_disc',
            'pg_advisory_lock',
            'pg_advisory_lock_shared',
            'pg_advisory_unlock',
            'pg_advisory_unlock_all',
            'pg_advisory_unlock_shared',
            'pg_advisory_xact_lock',
            'pg_advisory_xact_lock_shared',
            'pg_backup_start_time',
            'pg_blocking_pids',
            'pg_client_encoding',
            'pg_collation_is_visible',
            'pg_column_size',
            'pg_conf_load_time',
            'pg_control_checkpoint',
            'pg_control_init',
            'pg_control_recovery',
            'pg_control_system',
            'pg_conversion_is_visible',
            'pg_create_logical_replication_slot',
            'pg_create_physical_replication_slot',
            'pg_create_restore_point',
            'pg_current_xlog_flush_location',
            'pg_current_xlog_insert_location',
            'pg_current_xlog_location',
            'pg_database_size',
            'pg_describe_object',
            'pg_drop_replication_slot',
            'pg_export_snapshot',
            'pg_filenode_relation',
            'pg_function_is_visible',
            'pg_get_constraintdef',
            'pg_get_expr',
            'pg_get_function_arguments',
            'pg_get_function_identity_arguments',
            'pg_get_function_result',
            'pg_get_functiondef',
            'pg_get_indexdef',
            'pg_get_keywords',
            'pg_get_object_address',
            'pg_get_owned_sequence',
            'pg_get_ruledef',
            'pg_get_serial_sequence',
            'pg_get_triggerdef',
            'pg_get_userbyid',
            'pg_get_viewdef',
            'pg_has_role',
            'pg_identify_object',
            'pg_identify_object_as_address',
            'pg_index_column_has_property',
            'pg_index_has_property',
            'pg_indexam_has_property',
            'pg_indexes_size',
            'pg_is_in_backup',
            'pg_is_in_recovery',
            'pg_is_other_temp_schema',
            'pg_is_xlog_replay_paused',
            'pg_last_committed_xact',
            'pg_last_xact_replay_timestamp',
            'pg_last_xlog_receive_location',
            'pg_last_xlog_replay_location',
            'pg_listening_channels',
            'pg_logical_emit_message',
            'pg_logical_slot_get_binary_changes',
            'pg_logical_slot_get_changes',
            'pg_logical_slot_peek_binary_changes',
            'pg_logical_slot_peek_changes',
            'pg_ls_dir',
            'pg_my_temp_schema',
            'pg_notification_queue_usage',
            'pg_opclass_is_visible',
            'pg_operator_is_visible',
            'pg_opfamily_is_visible',
            'pg_options_to_table',
            'pg_postmaster_start_time',
            'pg_read_binary_file',
            'pg_read_file',
            'pg_relation_filenode',
            'pg_relation_filepath',
            'pg_relation_size',
            'pg_reload_conf',
            'pg_replication_origin_create',
            'pg_replication_origin_drop',
            'pg_replication_origin_oid',
            'pg_replication_origin_progress',
            'pg_replication_origin_session_is_setup',
            'pg_replication_origin_session_progress',
            'pg_replication_origin_session_reset',
            'pg_replication_origin_session_setup',
            'pg_replication_origin_xact_reset',
            'pg_replication_origin_xact_setup',
            'pg_rotate_logfile',
            'pg_size_bytes',
            'pg_size_pretty',
            'pg_sleep',
            'pg_sleep_for',
            'pg_sleep_until',
            'pg_start_backup',
            'pg_stat_file',
            'pg_stop_backup',
            'pg_switch_xlog',
            'pg_table_is_visible',
            'pg_table_size',
            'pg_tablespace_databases',
            'pg_tablespace_location',
            'pg_tablespace_size',
            'pg_total_relation_size',
            'pg_trigger_depth',
            'pg_try_advisory_lock',
            'pg_try_advisory_lock_shared',
            'pg_try_advisory_xact_lock',
            'pg_try_advisory_xact_lock_shared',
            'pg_ts_config_is_visible',
            'pg_ts_dict_is_visible',
            'pg_ts_parser_is_visible',
            'pg_ts_template_is_visible',
            'pg_type_is_visible',
            'pg_typeof',
            'pg_xact_commit_timestamp',
            'pg_xlog_location_diff',
            'pg_xlog_replay_pause',
            'pg_xlog_replay_resume',
            'pg_xlogfile_name',
            'pg_xlogfile_name_offset',
            'phraseto_tsquery',
            'plainto_tsquery',
            'point',
            'polygon',
            'popen',
            'pqserverversion',
            'query_to_xml',
            'querytree',
            'quote_nullable',
            'radius',
            'range_merge',
            'regexp_matches',
            'regexp_split_to_array',
            'regexp_split_to_table',
            'regr_avgx',
            'regr_avgy',
            'regr_count',
            'regr_intercept',
            'regr_r2',
            'regr_slope',
            'regr_sxx',
            'regr_sxy',
            'regr_syy',
            'right',
            'row_security_active',
            'row_to_json',
            'rpad',
            'scale',
            'set_masklen',
            'setseed',
            'setval',
            'setweight',
            'shobj_description',
            'sind',
            'sprintf',
            'statement_timestamp',
            'stddev',
            'string_agg',
            'string_to_array',
            'strip',
            'substr',
            'table_to_xml',
            'table_to_xml_and_xmlschema',
            'tand',
            'text',
            'to_json',
            'to_regclass',
            'to_regnamespace',
            'to_regoper',
            'to_regoperator',
            'to_regproc',
            'to_regprocedure',
            'to_regrole',
            'to_regtype',
            'to_tsquery',
            'to_tsvector',
            'transaction_timestamp',
            'ts_debug',
            'ts_delete',
            'ts_filter',
            'ts_headline',
            'ts_lexize',
            'ts_parse',
            'ts_rank',
            'ts_rank_cd',
            'ts_rewrite',
            'ts_stat',
            'ts_token_type',
            'tsquery_phrase',
            'tsvector_to_array',
            'tsvector_update_trigger',
            'tsvector_update_trigger_column',
            'txid_current',
            'txid_current_snapshot',
            'txid_snapshot_xip',
            'txid_snapshot_xmax',
            'txid_snapshot_xmin',
            'txid_visible_in_snapshot',
            'unnest',
            'upper_inc',
            'upper_inf',
            'variance',
            'width',
            'width_bucket',
            'xml_is_well_formed',
            'xml_is_well_formed_content',
            'xml_is_well_formed_document',
            'xmlagg',
            'xmlcomment',
            'xmlconcat',
            'xmlelement',
            'xmlexists',
            'xmlforest',
            'xmlparse',
            'xmlpi',
            'xmlroot',
            'xmlserialize',
            'xpath',
            'xpath_exists'
        ],
        builtinVariables: [
        // NOT SUPPORTED
        ],
        pseudoColumns: [
        // NOT SUPPORTED
        ],
        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', 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', next: '@push' }],    // nested comment not allowed :-(
                [/\*\//, { token: 'comment.quote', 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: [[/'/, { token: 'string', next: '@string' }]],
            string: [
                [/[^']+/, 'string'],
                [/''/, 'string'],
                [/'/, { token: 'string', next: '@pop' }]
            ],
            complexIdentifiers: [[/"/, { token: 'identifier.quote', next: '@quotedIdentifier' }]],
            quotedIdentifier: [
                [/[^"]+/, 'identifier'],
                [/""/, 'identifier'],
                [/"/, { token: 'identifier.quote', next: '@pop' }]
            ],
            scopes: [
            // NOT SUPPORTED
            ]
        }
    };
});

