From 72553165331da2bfe504f850a0871aca2ec7f30d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88n=20O=CC=88zen?= Date: Fri, 29 Sep 2017 17:59:46 +0300 Subject: [PATCH] pgsql functions --- src/pgsql.ts | 192 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 src/pgsql.ts diff --git a/src/pgsql.ts b/src/pgsql.ts new file mode 100644 index 00000000..0c286d91 --- /dev/null +++ b/src/pgsql.ts @@ -0,0 +1,192 @@ +/*--------------------------------------------------------------------------------------------- + * 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 IRichLanguageConfiguration = monaco.languages.LanguageConfiguration; +import ILanguage = monaco.languages.IMonarchLanguage; + +export const conf: IRichLanguageConfiguration = { + 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: '\'' }, + ] +}; + +export const language = { + defaultToken: '', + tokenPostfix: '.sql', + ignoreCase: true, + + brackets: [ + { open: '[', close: ']', token: 'delimiter.square' }, + { open: '(', close: ')', token: 'delimiter.parenthesis' } + ], + + keywords: [ + + ], + operators: [ + "AND", "BETWEEN", "IN", "LIKE", "NOT", "OR", "IS", "NULL", "INTERSECT", "UNION", "INNER", "JOIN", "LEFT", "OUTER", "RIGHT" + ], + builtinFunctions: [ + "abbrev", "abs", "acos", "acosd", "age", "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", "ascii", "asin", "asind", "atan", "atan2", "atan2d", "atand", + "avg", "bit", "bit_and", "bit_length", "bit_or", "bool_and", "bool_or", "bound_box", "box", "brin_summarize_new_values", "broadcast", + "btrim", "cardinality", "cbrt", "ceil", "ceiling", "center", "char_length", "character_length", "chr", "circle", "clock_timestamp", + "coalesce", "col_description", "concat", "concat_ws", "convert", "convert_from", "convert_to", "corr", "cos", "cosd", "cot", "cotd", + "count", "covar_pop", "covar_samp", "cume_dist", "current_catalog", "current_database", "current_date", "current_query", "current_role", + "current_schema", "current_schemas", "current_setting", "current_time", "current_timestamp", "current_user", "currval", "cursor_to_xml", + "date_part", "date_trunc", "decode", "degrees", "dense_rank", "diameter", "div", "encode", "enum_first", "enum_last", "enum_range", "every", + "exp", "extract", "family", "first_value", "floor", "format", "format_type", "generate_series", "generate_subscripts", "get_bit", "get_byte", + "get_current_ts_config", "gin_clean_pending_list", "greatest", "grouping", "has_any_column_privilege", "has_column_privilege", + "has_database_privilege", "has_foreign_data_wrapper_privilege", "has_function_privilege", "has_language_privilege", "has_schema_privilege", + "has_sequence_privilege", "has_server_privilege", "has_table_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", "initcap", + "isclosed", "isempty", "isfinite", "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", "lag", + "last_value", "lastval", "lead", "least", "left", "length", "line", "ln", "localtime", "localtimestamp", "log", "lower", "lower_inc", + "lower_inf", "lpad", "lseg", "ltrim", "make_date", "make_interval", "make_time", "make_timestamp", "make_timestamptz", "masklen", "max", + "md5", "min", "mod", "mode", "netmask", "network", "nextval", "now", "npoints", "nth_value", "ntile", "nullif", "num_nonnulls", "num_nulls", + "numnode", "obj_description", "octet_length", "overlay", "parse_ident", "path", "pclose", "percent_rank", "percentile_cont", "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_backend_pid", "pg_backup_start_time", "pg_blocking_pids", "pg_cancel_backend", "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_terminate_backend", "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", "pi", "plainto_tsquery", "point", "polygon", "popen", "position", + "power", "pqserverversion", "query_to_xml", "querytree", "quote_ident", "quote_literal", "quote_nullable", "radians", "radius", "random", "range_merge", + "rank", "regexp_matches", "regexp_replace", "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", "repeat", "replace", "reverse", "right", "round", "row_number", "row_security_active", + "row_to_json", "rpad", "rtrim", "scale", "session_user", "set_bit", "set_byte", "set_config", "set_masklen", "setseed", "setval", "setweight", + "shobj_description", "sign", "sin", "sind", "split_part", "sprintf", "sqrt", "statement_timestamp", "stddev", "stddev_pop", "stddev_samp", "string_agg", + "string_to_array", "strip", "strpos", "substr", "substring", "sum", "table_to_xml", "table_to_xml_and_xmlschema", "tan", "tand", "text", "timeofday", + "timezone", "to_ascii", "to_char", "to_date", "to_hex", "to_json", "to_number", "to_regclass", "to_regnamespace", "to_regoper", "to_regoperator", "to_regproc", + "to_regprocedure", "to_regrole", "to_regtype", "to_timestamp", "to_tsquery", "to_tsvector", "transaction_timestamp", "translate", "trim", "trunc", "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", "upper_inc", "upper_inf", "user", "var_pop", "var_samp", "variance", "version", "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'], + [/#+.*/, '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' }], + [/"/, { token: 'string', next: '@string' }] + ], + string: [ + [/[^']+/, 'string'], + [/[^"]+/, 'string'], + [/''/, 'string'], + [/""/, 'string'], + [/'/, { token: 'string', next: '@pop' }], + [/"/, { token: 'string', next: '@pop' }] + ], + complexIdentifiers: [ + + [/`/, { token: 'identifier.quote', next: '@quotedIdentifier' }] + ], + quotedIdentifier: [ + [/[^`]+/, 'identifier'], + [/``/, 'identifier'], + [/`/, { token: 'identifier.quote', next: '@pop' }] + ], + scopes: [ + // NOT SUPPORTED + ] + } +};