53#include "catalog/pg_am_d.h"
54#include "catalog/pg_class_d.h"
68#ifndef HAVE_RL_FILENAME_COMPLETION_FUNCTION
69#define rl_filename_completion_function filename_completion_function
72#ifndef HAVE_RL_COMPLETION_MATCHES
73#define rl_completion_matches completion_matches
81#ifdef HAVE_RL_FILENAME_QUOTING_FUNCTION
82#define USE_FILENAME_QUOTING_FUNCTIONS 1
86#define WORD_BREAKS "\t\n@><=;|&() "
107typedef struct VersionedQuery
109 int min_server_version;
129typedef struct SchemaQuery
136 int min_server_version;
152 const char *selcondition;
159 const char *viscondition;
167 const char *
namespace;
203 const char *refviscondition;
210 const char *refnamespace;
217static int completion_max_records;
224static char completion_last_char;
225static const char *completion_charp;
226static const char *
const *completion_charpp;
227static const VersionedQuery *completion_vquery;
228static const SchemaQuery *completion_squery;
229static char *completion_ref_object;
230static char *completion_ref_schema;
231static bool completion_case_sensitive;
232static bool completion_verbatim;
233static bool completion_force_quote;
256#define COMPLETE_WITH_QUERY(query) \
257 COMPLETE_WITH_QUERY_LIST(query, NULL)
259#define COMPLETE_WITH_QUERY_LIST(query, list) \
261 completion_charp = query; \
262 completion_charpp = list; \
263 completion_verbatim = false; \
264 matches = rl_completion_matches(text, complete_from_query); \
267#define COMPLETE_WITH_QUERY_PLUS(query, ...) \
269 static const char *const list[] = { __VA_ARGS__, NULL }; \
270 COMPLETE_WITH_QUERY_LIST(query, list); \
273#define COMPLETE_WITH_QUERY_VERBATIM(query) \
274 COMPLETE_WITH_QUERY_VERBATIM_LIST(query, NULL)
276#define COMPLETE_WITH_QUERY_VERBATIM_LIST(query, list) \
278 completion_charp = query; \
279 completion_charpp = list; \
280 completion_verbatim = true; \
281 matches = rl_completion_matches(text, complete_from_query); \
284#define COMPLETE_WITH_QUERY_VERBATIM_PLUS(query, ...) \
286 static const char *const list[] = { __VA_ARGS__, NULL }; \
287 COMPLETE_WITH_QUERY_VERBATIM_LIST(query, list); \
290#define COMPLETE_WITH_VERSIONED_QUERY(query) \
291 COMPLETE_WITH_VERSIONED_QUERY_LIST(query, NULL)
293#define COMPLETE_WITH_VERSIONED_QUERY_LIST(query, list) \
295 completion_vquery = query; \
296 completion_charpp = list; \
297 completion_verbatim = false; \
298 matches = rl_completion_matches(text, complete_from_versioned_query); \
301#define COMPLETE_WITH_VERSIONED_QUERY_PLUS(query, ...) \
303 static const char *const list[] = { __VA_ARGS__, NULL }; \
304 COMPLETE_WITH_VERSIONED_QUERY_LIST(query, list); \
307#define COMPLETE_WITH_SCHEMA_QUERY(query) \
308 COMPLETE_WITH_SCHEMA_QUERY_LIST(query, NULL)
310#define COMPLETE_WITH_SCHEMA_QUERY_LIST(query, list) \
312 completion_squery = &(query); \
313 completion_charpp = list; \
314 completion_verbatim = false; \
315 matches = rl_completion_matches(text, complete_from_schema_query); \
318#define COMPLETE_WITH_SCHEMA_QUERY_PLUS(query, ...) \
320 static const char *const list[] = { __VA_ARGS__, NULL }; \
321 COMPLETE_WITH_SCHEMA_QUERY_LIST(query, list); \
324#define COMPLETE_WITH_SCHEMA_QUERY_VERBATIM(query) \
326 completion_squery = &(query); \
327 completion_charpp = NULL; \
328 completion_verbatim = true; \
329 matches = rl_completion_matches(text, complete_from_schema_query); \
332#define COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(query) \
333 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_LIST(query, NULL)
335#define COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_LIST(query, list) \
337 completion_squery = query; \
338 completion_charpp = list; \
339 completion_verbatim = false; \
340 matches = rl_completion_matches(text, complete_from_versioned_schema_query); \
343#define COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_PLUS(query, ...) \
345 static const char *const list[] = { __VA_ARGS__, NULL }; \
346 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_LIST(query, list); \
353#define COMPLETE_WITH_CONST(cs, con) \
355 completion_case_sensitive = (cs); \
356 completion_charp = (con); \
357 matches = rl_completion_matches(text, complete_from_const); \
360#define COMPLETE_WITH_LIST_INT(cs, list) \
362 completion_case_sensitive = (cs); \
363 completion_charpp = (list); \
364 matches = rl_completion_matches(text, complete_from_list); \
367#define COMPLETE_WITH_LIST(list) COMPLETE_WITH_LIST_INT(false, list)
368#define COMPLETE_WITH_LIST_CS(list) COMPLETE_WITH_LIST_INT(true, list)
370#define COMPLETE_WITH(...) \
372 static const char *const list[] = { __VA_ARGS__, NULL }; \
373 COMPLETE_WITH_LIST(list); \
376#define COMPLETE_WITH_CS(...) \
378 static const char *const list[] = { __VA_ARGS__, NULL }; \
379 COMPLETE_WITH_LIST_CS(list); \
382#define COMPLETE_WITH_ATTR(relation) \
383 COMPLETE_WITH_ATTR_LIST(relation, NULL)
385#define COMPLETE_WITH_ATTR_LIST(relation, list) \
387 set_completion_reference(relation); \
388 completion_squery = &(Query_for_list_of_attributes); \
389 completion_charpp = list; \
390 completion_verbatim = false; \
391 matches = rl_completion_matches(text, complete_from_schema_query); \
394#define COMPLETE_WITH_ATTR_PLUS(relation, ...) \
396 static const char *const list[] = { __VA_ARGS__, NULL }; \
397 COMPLETE_WITH_ATTR_LIST(relation, list); \
406#define COMPLETE_WITH_ENUM_VALUE(type) \
408 set_completion_reference(type); \
409 if (text[0] == '\'' || \
410 start == 0 || rl_line_buffer[start - 1] != '\'') \
411 completion_squery = &(Query_for_list_of_enum_values_quoted); \
413 completion_squery = &(Query_for_list_of_enum_values_unquoted); \
414 completion_charpp = NULL; \
415 completion_verbatim = true; \
416 matches = rl_completion_matches(text, complete_from_schema_query); \
423#define COMPLETE_WITH_TIMEZONE_NAME() \
425 static const char *const list[] = { "DEFAULT", NULL }; \
426 if (text[0] == '\'') \
427 completion_charp = Query_for_list_of_timezone_names_quoted_in; \
428 else if (start == 0 || rl_line_buffer[start - 1] != '\'') \
429 completion_charp = Query_for_list_of_timezone_names_quoted_out; \
431 completion_charp = Query_for_list_of_timezone_names_unquoted; \
432 completion_charpp = list; \
433 completion_verbatim = true; \
434 matches = rl_completion_matches(text, complete_from_query); \
437#define COMPLETE_WITH_FUNCTION_ARG(function) \
439 set_completion_reference(function); \
440 completion_squery = &(Query_for_list_of_arguments); \
441 completion_charpp = NULL; \
442 completion_verbatim = true; \
443 matches = rl_completion_matches(text, complete_from_schema_query); \
446#define COMPLETE_WITH_FILES_LIST(escape, force_quote, list) \
448 completion_charp = escape; \
449 completion_charpp = list; \
450 completion_force_quote = force_quote; \
451 matches = rl_completion_matches(text, complete_from_files); \
454#define COMPLETE_WITH_FILES(escape, force_quote) \
455 COMPLETE_WITH_FILES_LIST(escape, force_quote, NULL)
457#define COMPLETE_WITH_FILES_PLUS(escape, force_quote, ...) \
459 static const char *const list[] = { __VA_ARGS__, NULL }; \
460 COMPLETE_WITH_FILES_LIST(escape, force_quote, list); \
463#define COMPLETE_WITH_GENERATOR(generator) \
464 matches = rl_completion_matches(text, generator)
473static const SchemaQuery Query_for_constraint_of_table = {
474 .catname =
"pg_catalog.pg_constraint con, pg_catalog.pg_class c1",
475 .selcondition =
"con.conrelid=c1.oid",
476 .result =
"con.conname",
477 .refname =
"c1.relname",
478 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
479 .refnamespace =
"c1.relnamespace",
482static const SchemaQuery Query_for_constraint_of_table_not_validated = {
483 .catname =
"pg_catalog.pg_constraint con, pg_catalog.pg_class c1",
484 .selcondition =
"con.conrelid=c1.oid and not con.convalidated",
485 .result =
"con.conname",
486 .refname =
"c1.relname",
487 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
488 .refnamespace =
"c1.relnamespace",
491static const SchemaQuery Query_for_constraint_of_type = {
492 .catname =
"pg_catalog.pg_constraint con, pg_catalog.pg_type t",
493 .selcondition =
"con.contypid=t.oid",
494 .result =
"con.conname",
495 .refname =
"t.typname",
496 .refviscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
497 .refnamespace =
"t.typnamespace",
500static const SchemaQuery Query_for_index_of_table = {
501 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_index i",
502 .selcondition =
"c1.oid=i.indrelid and i.indexrelid=c2.oid",
503 .result =
"c2.relname",
504 .refname =
"c1.relname",
505 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
506 .refnamespace =
"c1.relnamespace",
509static const SchemaQuery Query_for_unique_index_of_table = {
510 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_index i",
511 .selcondition =
"c1.oid=i.indrelid and i.indexrelid=c2.oid and i.indisunique",
512 .result =
"c2.relname",
513 .refname =
"c1.relname",
514 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
515 .refnamespace =
"c1.relnamespace",
518static const SchemaQuery Query_for_list_of_aggregates[] = {
520 .min_server_version = 110000,
521 .catname =
"pg_catalog.pg_proc p",
522 .selcondition =
"p.prokind = 'a'",
523 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
524 .namespace =
"p.pronamespace",
525 .result =
"p.proname",
528 .catname =
"pg_catalog.pg_proc p",
529 .selcondition =
"p.proisagg",
530 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
531 .namespace =
"p.pronamespace",
532 .result =
"p.proname",
536static const SchemaQuery Query_for_list_of_arguments = {
537 .catname =
"pg_catalog.pg_proc p",
538 .result =
"pg_catalog.oidvectortypes(p.proargtypes)||')'",
539 .refname =
"p.proname",
540 .refviscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
541 .refnamespace =
"p.pronamespace",
544static const SchemaQuery Query_for_list_of_attributes = {
545 .catname =
"pg_catalog.pg_attribute a, pg_catalog.pg_class c",
546 .selcondition =
"c.oid = a.attrelid and a.attnum > 0 and not a.attisdropped",
547 .result =
"a.attname",
548 .refname =
"c.relname",
549 .refviscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
550 .refnamespace =
"c.relnamespace",
553static const SchemaQuery Query_for_list_of_attribute_numbers = {
554 .catname =
"pg_catalog.pg_attribute a, pg_catalog.pg_class c",
555 .selcondition =
"c.oid = a.attrelid and a.attnum > 0 and not a.attisdropped",
556 .result =
"a.attnum::pg_catalog.text",
557 .refname =
"c.relname",
558 .refviscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
559 .refnamespace =
"c.relnamespace",
562static const char *
const Keywords_for_list_of_datatypes[] = {
582 "time with time zone",
583 "time without time zone",
584 "timestamp with time zone",
585 "timestamp without time zone",
590static const SchemaQuery Query_for_list_of_datatypes = {
591 .catname =
"pg_catalog.pg_type t",
593 .selcondition =
"(t.typrelid = 0 "
594 " OR (SELECT c.relkind = " CppAsString2(RELKIND_COMPOSITE_TYPE)
595 " FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)) "
596 "AND t.typname !~ '^_'",
597 .viscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
598 .namespace =
"t.typnamespace",
599 .result =
"t.typname",
600 .keywords = Keywords_for_list_of_datatypes,
603static const SchemaQuery Query_for_list_of_composite_datatypes = {
604 .catname =
"pg_catalog.pg_type t",
606 .selcondition =
"(SELECT c.relkind = " CppAsString2(RELKIND_COMPOSITE_TYPE)
607 " FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid) "
608 "AND t.typname !~ '^_'",
609 .viscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
610 .namespace =
"t.typnamespace",
611 .result =
"t.typname",
614static const SchemaQuery Query_for_list_of_domains = {
615 .catname =
"pg_catalog.pg_type t",
616 .selcondition =
"t.typtype = 'd'",
617 .viscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
618 .namespace =
"t.typnamespace",
619 .result =
"t.typname",
622static const SchemaQuery Query_for_list_of_enum_values_quoted = {
623 .catname =
"pg_catalog.pg_enum e, pg_catalog.pg_type t",
624 .selcondition =
"t.oid = e.enumtypid",
625 .result =
"pg_catalog.quote_literal(enumlabel)",
626 .refname =
"t.typname",
627 .refviscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
628 .refnamespace =
"t.typnamespace",
631static const SchemaQuery Query_for_list_of_enum_values_unquoted = {
632 .catname =
"pg_catalog.pg_enum e, pg_catalog.pg_type t",
633 .selcondition =
"t.oid = e.enumtypid",
634 .result =
"e.enumlabel",
635 .refname =
"t.typname",
636 .refviscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
637 .refnamespace =
"t.typnamespace",
641static const SchemaQuery Query_for_list_of_functions[] = {
643 .min_server_version = 110000,
644 .catname =
"pg_catalog.pg_proc p",
645 .selcondition =
"p.prokind != 'p'",
646 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
647 .namespace =
"p.pronamespace",
648 .result =
"p.proname",
651 .catname =
"pg_catalog.pg_proc p",
652 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
653 .namespace =
"p.pronamespace",
654 .result =
"p.proname",
658static const SchemaQuery Query_for_list_of_procedures[] = {
660 .min_server_version = 110000,
661 .catname =
"pg_catalog.pg_proc p",
662 .selcondition =
"p.prokind = 'p'",
663 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
664 .namespace =
"p.pronamespace",
665 .result =
"p.proname",
673static const SchemaQuery Query_for_list_of_routines = {
674 .catname =
"pg_catalog.pg_proc p",
675 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
676 .namespace =
"p.pronamespace",
677 .result =
"p.proname",
680static const SchemaQuery Query_for_list_of_sequences = {
681 .catname =
"pg_catalog.pg_class c",
682 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_SEQUENCE)
")",
683 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
684 .namespace =
"c.relnamespace",
685 .result =
"c.relname",
688static const SchemaQuery Query_for_list_of_foreign_tables = {
689 .catname =
"pg_catalog.pg_class c",
690 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_FOREIGN_TABLE)
")",
691 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
692 .namespace =
"c.relnamespace",
693 .result =
"c.relname",
696static const SchemaQuery Query_for_list_of_tables = {
697 .catname =
"pg_catalog.pg_class c",
701 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
702 .namespace =
"c.relnamespace",
703 .result =
"c.relname",
706static const SchemaQuery Query_for_list_of_partitioned_tables = {
707 .catname =
"pg_catalog.pg_class c",
708 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_PARTITIONED_TABLE)
")",
709 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
710 .namespace =
"c.relnamespace",
711 .result =
"c.relname",
714static const SchemaQuery Query_for_list_of_tables_for_constraint = {
715 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_constraint con",
716 .selcondition =
"c.oid=con.conrelid and c.relkind IN ("
719 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
720 .namespace =
"c.relnamespace",
721 .result =
"c.relname",
722 .use_distinct =
true,
723 .refname =
"con.conname",
726static const SchemaQuery Query_for_list_of_tables_for_policy = {
727 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_policy p",
728 .selcondition =
"c.oid=p.polrelid",
729 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
730 .namespace =
"c.relnamespace",
731 .result =
"c.relname",
732 .use_distinct =
true,
733 .refname =
"p.polname",
736static const SchemaQuery Query_for_list_of_tables_for_rule = {
737 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_rewrite r",
738 .selcondition =
"c.oid=r.ev_class",
739 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
740 .namespace =
"c.relnamespace",
741 .result =
"c.relname",
742 .use_distinct =
true,
743 .refname =
"r.rulename",
746static const SchemaQuery Query_for_list_of_tables_for_trigger = {
747 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_trigger t",
748 .selcondition =
"c.oid=t.tgrelid",
749 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
750 .namespace =
"c.relnamespace",
751 .result =
"c.relname",
752 .use_distinct =
true,
753 .refname =
"t.tgname",
756static const SchemaQuery Query_for_list_of_ts_configurations = {
757 .catname =
"pg_catalog.pg_ts_config c",
758 .viscondition =
"pg_catalog.pg_ts_config_is_visible(c.oid)",
759 .namespace =
"c.cfgnamespace",
760 .result =
"c.cfgname",
763static const SchemaQuery Query_for_list_of_ts_dictionaries = {
764 .catname =
"pg_catalog.pg_ts_dict d",
765 .viscondition =
"pg_catalog.pg_ts_dict_is_visible(d.oid)",
766 .namespace =
"d.dictnamespace",
767 .result =
"d.dictname",
770static const SchemaQuery Query_for_list_of_ts_parsers = {
771 .catname =
"pg_catalog.pg_ts_parser p",
772 .viscondition =
"pg_catalog.pg_ts_parser_is_visible(p.oid)",
773 .namespace =
"p.prsnamespace",
774 .result =
"p.prsname",
777static const SchemaQuery Query_for_list_of_ts_templates = {
778 .catname =
"pg_catalog.pg_ts_template t",
779 .viscondition =
"pg_catalog.pg_ts_template_is_visible(t.oid)",
780 .namespace =
"t.tmplnamespace",
781 .result =
"t.tmplname",
784static const SchemaQuery Query_for_list_of_views = {
785 .catname =
"pg_catalog.pg_class c",
786 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_VIEW)
")",
787 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
788 .namespace =
"c.relnamespace",
789 .result =
"c.relname",
792static const SchemaQuery Query_for_list_of_matviews = {
793 .catname =
"pg_catalog.pg_class c",
794 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_MATVIEW)
")",
795 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
796 .namespace =
"c.relnamespace",
797 .result =
"c.relname",
800static const SchemaQuery Query_for_list_of_indexes = {
801 .catname =
"pg_catalog.pg_class c",
805 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
806 .namespace =
"c.relnamespace",
807 .result =
"c.relname",
810static const SchemaQuery Query_for_list_of_partitioned_indexes = {
811 .catname =
"pg_catalog.pg_class c",
812 .selcondition =
"c.relkind = " CppAsString2(RELKIND_PARTITIONED_INDEX),
813 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
814 .namespace =
"c.relnamespace",
815 .result =
"c.relname",
820static const SchemaQuery Query_for_list_of_relations = {
821 .catname =
"pg_catalog.pg_class c",
822 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
823 .namespace =
"c.relnamespace",
824 .result =
"c.relname",
828static const SchemaQuery Query_for_list_of_partitioned_relations = {
829 .catname =
"pg_catalog.pg_class c",
830 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_PARTITIONED_TABLE)
832 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
833 .namespace =
"c.relnamespace",
834 .result =
"c.relname",
837static const SchemaQuery Query_for_list_of_operator_families = {
838 .catname =
"pg_catalog.pg_opfamily c",
839 .viscondition =
"pg_catalog.pg_opfamily_is_visible(c.oid)",
840 .namespace =
"c.opfnamespace",
841 .result =
"c.opfname",
845static const SchemaQuery Query_for_list_of_updatables = {
846 .catname =
"pg_catalog.pg_class c",
852 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
853 .namespace =
"c.relnamespace",
854 .result =
"c.relname",
858static const SchemaQuery Query_for_list_of_mergetargets = {
859 .catname =
"pg_catalog.pg_class c",
864 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
865 .namespace =
"c.relnamespace",
866 .result =
"c.relname",
870static const SchemaQuery Query_for_list_of_selectables = {
871 .catname =
"pg_catalog.pg_class c",
879 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
880 .namespace =
"c.relnamespace",
881 .result =
"c.relname",
885static const SchemaQuery Query_for_list_of_truncatables = {
886 .catname =
"pg_catalog.pg_class c",
891 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
892 .namespace =
"c.relnamespace",
893 .result =
"c.relname",
897#define Query_for_list_of_grantables Query_for_list_of_selectables
900static const SchemaQuery Query_for_list_of_analyzables = {
901 .catname =
"pg_catalog.pg_class c",
907 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
908 .namespace =
"c.relnamespace",
909 .result =
"c.relname",
918#define Query_for_list_of_tables_for_copy Query_for_list_of_analyzables
921static const SchemaQuery Query_for_list_of_indexables = {
922 .catname =
"pg_catalog.pg_class c",
927 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
928 .namespace =
"c.relnamespace",
929 .result =
"c.relname",
936#define Query_for_list_of_vacuumables Query_for_list_of_indexables
939static const SchemaQuery Query_for_list_of_clusterables = {
940 .catname =
"pg_catalog.pg_class c",
945 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
946 .namespace =
"c.relnamespace",
947 .result =
"c.relname",
950static const SchemaQuery Query_for_list_of_constraints_with_schema = {
951 .catname =
"pg_catalog.pg_constraint c",
952 .selcondition =
"c.conrelid <> 0",
953 .namespace =
"c.connamespace",
954 .result =
"c.conname",
957static const SchemaQuery Query_for_list_of_statistics = {
958 .catname =
"pg_catalog.pg_statistic_ext s",
959 .viscondition =
"pg_catalog.pg_statistics_obj_is_visible(s.oid)",
960 .namespace =
"s.stxnamespace",
961 .result =
"s.stxname",
964static const SchemaQuery Query_for_list_of_collations = {
965 .catname =
"pg_catalog.pg_collation c",
966 .selcondition =
"c.collencoding IN (-1, pg_catalog.pg_char_to_encoding(pg_catalog.getdatabaseencoding()))",
967 .viscondition =
"pg_catalog.pg_collation_is_visible(c.oid)",
968 .namespace =
"c.collnamespace",
969 .result =
"c.collname",
972static const SchemaQuery Query_for_partition_of_table = {
973 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_inherits i",
974 .selcondition =
"c1.oid=i.inhparent and i.inhrelid=c2.oid and c2.relispartition",
975 .viscondition =
"pg_catalog.pg_table_is_visible(c2.oid)",
976 .namespace =
"c2.relnamespace",
977 .result =
"c2.relname",
978 .refname =
"c1.relname",
979 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
980 .refnamespace =
"c1.relnamespace",
983static const SchemaQuery Query_for_rule_of_table = {
984 .catname =
"pg_catalog.pg_rewrite r, pg_catalog.pg_class c1",
985 .selcondition =
"r.ev_class=c1.oid",
986 .result =
"r.rulename",
987 .refname =
"c1.relname",
988 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
989 .refnamespace =
"c1.relnamespace",
992static const SchemaQuery Query_for_trigger_of_table = {
993 .catname =
"pg_catalog.pg_trigger t, pg_catalog.pg_class c1",
994 .selcondition =
"t.tgrelid=c1.oid and not t.tgisinternal",
995 .result =
"t.tgname",
996 .refname =
"c1.relname",
997 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
998 .refnamespace =
"c1.relnamespace",
1021#define Query_for_list_of_template_databases \
1023" FROM pg_catalog.pg_database d "\
1024" WHERE d.datname LIKE '%s' "\
1025" AND (d.datistemplate OR pg_catalog.pg_has_role(d.datdba, 'USAGE'))"
1027#define Query_for_list_of_databases \
1028"SELECT datname FROM pg_catalog.pg_database "\
1029" WHERE datname LIKE '%s'"
1031#define Query_for_list_of_database_vars \
1032"SELECT conf FROM ("\
1033" SELECT setdatabase, pg_catalog.split_part(pg_catalog.unnest(setconfig),'=',1) conf"\
1034" FROM pg_db_role_setting "\
1035" ) s, pg_database d "\
1036" WHERE s.setdatabase = d.oid "\
1037" AND conf LIKE '%s'"\
1038" AND d.datname LIKE '%s'"
1040#define Query_for_list_of_tablespaces \
1041"SELECT spcname FROM pg_catalog.pg_tablespace "\
1042" WHERE spcname LIKE '%s'"
1044#define Query_for_list_of_encodings \
1045" SELECT DISTINCT pg_catalog.pg_encoding_to_char(conforencoding) "\
1046" FROM pg_catalog.pg_conversion "\
1047" WHERE pg_catalog.pg_encoding_to_char(conforencoding) LIKE pg_catalog.upper('%s')"
1049#define Query_for_list_of_languages \
1051" FROM pg_catalog.pg_language "\
1052" WHERE lanname != 'internal' "\
1053" AND lanname LIKE '%s'"
1055#define Query_for_list_of_schemas \
1056"SELECT nspname FROM pg_catalog.pg_namespace "\
1057" WHERE nspname LIKE '%s'"
1060#define Query_for_list_of_alter_system_set_vars \
1061"SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1062" WHERE context != 'internal' "\
1063" AND pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1065#define Query_for_list_of_set_vars \
1066"SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1067" WHERE context IN ('user', 'superuser') "\
1068" AND pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1070#define Query_for_list_of_show_vars \
1071"SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1072" WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1074#define Query_for_list_of_roles \
1076" FROM pg_catalog.pg_roles "\
1077" WHERE rolname LIKE '%s'"
1080#define Keywords_for_list_of_owner_roles \
1081"CURRENT_ROLE", "CURRENT_USER", "SESSION_USER"
1084#define Keywords_for_list_of_grant_roles \
1085Keywords_for_list_of_owner_roles, "PUBLIC"
1087#define Query_for_all_table_constraints \
1089" FROM pg_catalog.pg_constraint c "\
1090" WHERE c.conrelid <> 0 "\
1091" and conname LIKE '%s'"
1093#define Query_for_list_of_fdws \
1095" FROM pg_catalog.pg_foreign_data_wrapper "\
1096" WHERE fdwname LIKE '%s'"
1098#define Query_for_list_of_servers \
1100" FROM pg_catalog.pg_foreign_server "\
1101" WHERE srvname LIKE '%s'"
1103#define Query_for_list_of_user_mappings \
1105" FROM pg_catalog.pg_user_mappings "\
1106" WHERE usename LIKE '%s'"
1108#define Query_for_list_of_user_vars \
1109"SELECT conf FROM ("\
1110" SELECT rolname, pg_catalog.split_part(pg_catalog.unnest(rolconfig),'=',1) conf"\
1111" FROM pg_catalog.pg_roles"\
1113" WHERE s.conf like '%s' "\
1114" AND s.rolname LIKE '%s'"
1116#define Query_for_list_of_access_methods \
1118" FROM pg_catalog.pg_am "\
1119" WHERE amname LIKE '%s'"
1121#define Query_for_list_of_index_access_methods \
1123" FROM pg_catalog.pg_am "\
1124" WHERE amname LIKE '%s' AND "\
1125" amtype=" CppAsString2(AMTYPE_INDEX)
1127#define Query_for_list_of_table_access_methods \
1129" FROM pg_catalog.pg_am "\
1130" WHERE amname LIKE '%s' AND "\
1131" amtype=" CppAsString2(AMTYPE_TABLE)
1133#define Query_for_list_of_extensions \
1135" FROM pg_catalog.pg_extension "\
1136" WHERE extname LIKE '%s'"
1138#define Query_for_list_of_available_extensions \
1140" FROM pg_catalog.pg_available_extensions "\
1141" WHERE name LIKE '%s' AND installed_version IS NULL"
1143#define Query_for_list_of_available_extension_versions \
1145" FROM pg_catalog.pg_available_extension_versions "\
1146" WHERE version LIKE '%s' AND name='%s'"
1148#define Query_for_list_of_prepared_statements \
1150" FROM pg_catalog.pg_prepared_statements "\
1151" WHERE name LIKE '%s'"
1153#define Query_for_list_of_event_triggers \
1155" FROM pg_catalog.pg_event_trigger "\
1156" WHERE evtname LIKE '%s'"
1158#define Query_for_list_of_tablesample_methods \
1160" FROM pg_catalog.pg_proc "\
1161" WHERE prorettype = 'pg_catalog.tsm_handler'::pg_catalog.regtype AND "\
1162" proargtypes[0] = 'pg_catalog.internal'::pg_catalog.regtype AND "\
1165#define Query_for_list_of_policies \
1167" FROM pg_catalog.pg_policy "\
1168" WHERE polname LIKE '%s'"
1170#define Query_for_values_of_enum_GUC \
1171" SELECT val FROM ( "\
1172" SELECT name, pg_catalog.unnest(enumvals) AS val "\
1173" FROM pg_catalog.pg_settings "\
1175" WHERE val LIKE '%s'"\
1176" and pg_catalog.lower(name)=pg_catalog.lower('%s')"
1178#define Query_for_list_of_channels \
1180" FROM pg_catalog.pg_listening_channels() AS channel "\
1181" WHERE channel LIKE '%s'"
1183#define Query_for_list_of_cursors \
1185" FROM pg_catalog.pg_cursors "\
1186" WHERE name LIKE '%s'"
1188#define Query_for_list_of_timezone_names_unquoted \
1190" FROM pg_catalog.pg_timezone_names() "\
1191" WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1193#define Query_for_list_of_timezone_names_quoted_out \
1194"SELECT pg_catalog.quote_literal(name) AS name "\
1195" FROM pg_catalog.pg_timezone_names() "\
1196" WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1198#define Query_for_list_of_timezone_names_quoted_in \
1199"SELECT pg_catalog.quote_literal(name) AS name "\
1200" FROM pg_catalog.pg_timezone_names() "\
1201" WHERE pg_catalog.quote_literal(pg_catalog.lower(name)) LIKE pg_catalog.lower('%s')"
1204#define Privilege_options_of_grant_and_revoke \
1205"SELECT", "INSERT", "UPDATE", "DELETE", "TRUNCATE", "REFERENCES", "TRIGGER", \
1206"CREATE", "CONNECT", "TEMPORARY", "EXECUTE", "USAGE", "SET", "ALTER SYSTEM", \
1210#define Alter_procedure_options \
1211"DEPENDS ON EXTENSION", "EXTERNAL SECURITY", "NO DEPENDS ON EXTENSION", \
1212"OWNER TO", "RENAME TO", "RESET", "SECURITY", "SET"
1215#define Alter_routine_options \
1216Alter_procedure_options, "COST", "IMMUTABLE", "LEAKPROOF", "NOT LEAKPROOF", \
1217"PARALLEL", "ROWS", "STABLE", "VOLATILE"
1220#define Alter_function_options \
1221Alter_routine_options, "CALLED ON NULL INPUT", "RETURNS NULL ON NULL INPUT", \
1225#define Copy_common_options \
1226"DELIMITER", "ENCODING", "ESCAPE", "FORMAT", "HEADER", "NULL", "QUOTE"
1229#define Copy_from_options \
1230Copy_common_options, "DEFAULT", "FORCE_NOT_NULL", "FORCE_NULL", "FREEZE", \
1231"LOG_VERBOSITY", "ON_ERROR", "REJECT_LIMIT"
1234#define Copy_to_options \
1235Copy_common_options, "FORCE_QUOTE"
1243static const VersionedQuery Query_for_list_of_publications[] = {
1246 " FROM pg_catalog.pg_publication "
1247 " WHERE pubname LIKE '%s'"
1252static const VersionedQuery Query_for_list_of_subscriptions[] = {
1254 " SELECT s.subname "
1255 " FROM pg_catalog.pg_subscription s, pg_catalog.pg_database d "
1256 " WHERE s.subname LIKE '%s' "
1257 " AND d.datname = pg_catalog.current_database() "
1258 " AND s.subdbid = d.oid"
1264static const char *
const sql_commands[] = {
1265 "ABORT",
"ALTER",
"ANALYZE",
"BEGIN",
"CALL",
"CHECKPOINT",
"CLOSE",
"CLUSTER",
1266 "COMMENT",
"COMMIT",
"COPY",
"CREATE",
"DEALLOCATE",
"DECLARE",
1267 "DELETE FROM",
"DISCARD",
"DO",
"DROP",
"END",
"EXECUTE",
"EXPLAIN",
1268 "FETCH",
"GRANT",
"IMPORT FOREIGN SCHEMA",
"INSERT INTO",
"LISTEN",
"LOAD",
"LOCK",
1269 "MERGE INTO",
"MOVE",
"NOTIFY",
"PREPARE",
1270 "REASSIGN",
"REFRESH MATERIALIZED VIEW",
"REINDEX",
"RELEASE",
1271 "RESET",
"REVOKE",
"ROLLBACK",
1272 "SAVEPOINT",
"SECURITY LABEL",
"SELECT",
"SET",
"SHOW",
"START",
1273 "TABLE",
"TRUNCATE",
"UNLISTEN",
"UPDATE",
"VACUUM",
"VALUES",
1288 const VersionedQuery *vquery;
1289 const SchemaQuery *squery;
1294#define THING_NO_CREATE (1 << 0)
1295#define THING_NO_DROP (1 << 1)
1296#define THING_NO_ALTER (1 << 2)
1297#define THING_NO_SHOW (THING_NO_CREATE | THING_NO_DROP | THING_NO_ALTER)
1300static const char *
const Keywords_for_user_thing[] = {
1305static const pgsql_thing_t words_after_create[] = {
1306 {
"ACCESS METHOD", NULL, NULL, NULL, NULL, THING_NO_ALTER},
1307 {
"AGGREGATE", NULL, NULL, Query_for_list_of_aggregates},
1308 {
"CAST", NULL, NULL, NULL},
1310 {
"COLLATION", NULL, NULL, &Query_for_list_of_collations},
1316 {
"CONFIGURATION", NULL, NULL, &Query_for_list_of_ts_configurations, NULL, THING_NO_SHOW},
1317 {
"CONVERSION",
"SELECT conname FROM pg_catalog.pg_conversion WHERE conname LIKE '%s'"},
1318 {
"DATABASE", Query_for_list_of_databases},
1319 {
"DEFAULT PRIVILEGES", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1320 {
"DICTIONARY", NULL, NULL, &Query_for_list_of_ts_dictionaries, NULL, THING_NO_SHOW},
1321 {
"DOMAIN", NULL, NULL, &Query_for_list_of_domains},
1322 {
"EVENT TRIGGER", NULL, NULL, NULL},
1323 {
"EXTENSION", Query_for_list_of_extensions},
1324 {
"FOREIGN DATA WRAPPER", NULL, NULL, NULL},
1325 {
"FOREIGN TABLE", NULL, NULL, NULL},
1326 {
"FUNCTION", NULL, NULL, Query_for_list_of_functions},
1327 {
"GROUP", Query_for_list_of_roles},
1328 {
"INDEX", NULL, NULL, &Query_for_list_of_indexes},
1329 {
"LANGUAGE", Query_for_list_of_languages},
1330 {
"LARGE OBJECT", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1331 {
"MATERIALIZED VIEW", NULL, NULL, &Query_for_list_of_matviews},
1332 {
"OPERATOR", NULL, NULL, NULL},
1334 {
"OR REPLACE", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1335 {
"OWNED", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_ALTER},
1336 {
"PARSER", NULL, NULL, &Query_for_list_of_ts_parsers, NULL, THING_NO_SHOW},
1337 {
"POLICY", NULL, NULL, NULL},
1338 {
"PROCEDURE", NULL, NULL, Query_for_list_of_procedures},
1339 {
"PUBLICATION", NULL, Query_for_list_of_publications},
1340 {
"ROLE", Query_for_list_of_roles},
1341 {
"ROUTINE", NULL, NULL, &Query_for_list_of_routines, NULL, THING_NO_CREATE},
1342 {
"RULE",
"SELECT rulename FROM pg_catalog.pg_rules WHERE rulename LIKE '%s'"},
1343 {
"SCHEMA", Query_for_list_of_schemas},
1344 {
"SEQUENCE", NULL, NULL, &Query_for_list_of_sequences},
1345 {
"SERVER", Query_for_list_of_servers},
1346 {
"STATISTICS", NULL, NULL, &Query_for_list_of_statistics},
1347 {
"SUBSCRIPTION", NULL, Query_for_list_of_subscriptions},
1348 {
"SYSTEM", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1349 {
"TABLE", NULL, NULL, &Query_for_list_of_tables},
1350 {
"TABLESPACE", Query_for_list_of_tablespaces},
1351 {
"TEMP", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1353 {
"TEMPLATE", NULL, NULL, &Query_for_list_of_ts_templates, NULL, THING_NO_SHOW},
1354 {
"TEMPORARY", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1356 {
"TEXT SEARCH", NULL, NULL, NULL},
1357 {
"TRANSFORM", NULL, NULL, NULL, NULL, THING_NO_ALTER},
1358 {
"TRIGGER",
"SELECT tgname FROM pg_catalog.pg_trigger WHERE tgname LIKE '%s' AND NOT tgisinternal"},
1359 {
"TYPE", NULL, NULL, &Query_for_list_of_datatypes},
1360 {
"UNIQUE", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1362 {
"UNLOGGED", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1364 {
"USER", Query_for_list_of_roles, NULL, NULL, Keywords_for_user_thing},
1365 {
"USER MAPPING FOR", NULL, NULL, NULL},
1366 {
"VIEW", NULL, NULL, &Query_for_list_of_views},
1388#define MatchAny NULL
1389#define MatchAnyExcept(pattern) ("!" pattern)
1396 enum TCPatternKind kind;
1398 const char *
const *words;
1402#define TCPAT(id, kind, ...) \
1403 { (id), (kind), VA_ARGS_NARGS(__VA_ARGS__), \
1404 (const char * const []) { __VA_ARGS__ } }
1406#ifdef SWITCH_CONVERSION_APPLIED
1408static const TCPattern tcpatterns[] =
1416static const char *
const table_storage_parameters[] = {
1417 "autovacuum_analyze_scale_factor",
1418 "autovacuum_analyze_threshold",
1419 "autovacuum_enabled",
1420 "autovacuum_freeze_max_age",
1421 "autovacuum_freeze_min_age",
1422 "autovacuum_freeze_table_age",
1423 "autovacuum_multixact_freeze_max_age",
1424 "autovacuum_multixact_freeze_min_age",
1425 "autovacuum_multixact_freeze_table_age",
1426 "autovacuum_vacuum_cost_delay",
1427 "autovacuum_vacuum_cost_limit",
1428 "autovacuum_vacuum_insert_scale_factor",
1429 "autovacuum_vacuum_insert_threshold",
1430 "autovacuum_vacuum_max_threshold",
1431 "autovacuum_vacuum_scale_factor",
1432 "autovacuum_vacuum_threshold",
1434 "log_autovacuum_min_duration",
1435 "log_autoanalyze_min_duration",
1437 "toast.autovacuum_enabled",
1438 "toast.autovacuum_freeze_max_age",
1439 "toast.autovacuum_freeze_min_age",
1440 "toast.autovacuum_freeze_table_age",
1441 "toast.autovacuum_multixact_freeze_max_age",
1442 "toast.autovacuum_multixact_freeze_min_age",
1443 "toast.autovacuum_multixact_freeze_table_age",
1444 "toast.autovacuum_vacuum_cost_delay",
1445 "toast.autovacuum_vacuum_cost_limit",
1446 "toast.autovacuum_vacuum_insert_scale_factor",
1447 "toast.autovacuum_vacuum_insert_threshold",
1448 "toast.autovacuum_vacuum_max_threshold",
1449 "toast.autovacuum_vacuum_scale_factor",
1450 "toast.autovacuum_vacuum_threshold",
1451 "toast.log_autovacuum_min_duration",
1452 "toast.vacuum_index_cleanup",
1453 "toast.vacuum_max_eager_freeze_failure_rate",
1454 "toast.vacuum_truncate",
1455 "toast_tuple_target",
1456 "user_catalog_table",
1457 "vacuum_index_cleanup",
1458 "vacuum_max_eager_freeze_failure_rate",
1464static const char *
const view_optional_parameters[] = {
1472static char **psql_completion(
const char *
text,
int start,
int end);
1473static char **match_previous_words(
int pattern_id,
1475 char **previous_words,
1476 int previous_words_count);
1477static char *create_command_generator(
const char *
text,
int state);
1478static char *drop_command_generator(
const char *
text,
int state);
1479static char *alter_command_generator(
const char *
text,
int state);
1480static char *complete_from_query(
const char *
text,
int state);
1481static char *complete_from_versioned_query(
const char *
text,
int state);
1482static char *complete_from_schema_query(
const char *
text,
int state);
1483static char *complete_from_versioned_schema_query(
const char *
text,
int state);
1484static char *_complete_from_query(
const char *simple_query,
1485 const SchemaQuery *schema_query,
1489static void set_completion_reference(
const char *
word);
1490static void set_completion_reference_verbatim(
const char *
word);
1491static char *complete_from_list(
const char *
text,
int state);
1492static char *complete_from_const(
const char *
text,
int state);
1493static void append_variable_names(
char ***varnames,
int *nvars,
1494 int *maxvars,
const char *varname,
1495 const char *prefix,
const char *suffix);
1496static char **complete_from_variables(
const char *
text,
1497 const char *prefix,
const char *suffix,
bool need_value);
1498static char *complete_from_files(
const char *
text,
int state);
1499static char *_complete_from_files(
const char *
text,
int state);
1501static char *pg_strdup_keyword_case(
const char *s,
const char *ref);
1503static char *make_like_pattern(
const char *
word);
1504static void parse_identifier(
const char *
ident,
1505 char **schemaname,
char **objectname,
1506 bool *schemaquoted,
bool *objectquoted);
1507static char *requote_identifier(
const char *schemaname,
const char *objectname,
1508 bool quote_schema,
bool quote_object);
1509static bool identifier_needs_quotes(
const char *
ident);
1510static PGresult *exec_query(
const char *query);
1512static char **get_previous_words(
int point,
char **buffer,
int *nwords);
1514static char *get_guctype(
const char *varname);
1516#ifdef USE_FILENAME_QUOTING_FUNCTIONS
1517static char *quote_file_name(
char *fname,
int match_type,
char *quote_pointer);
1518static char *dequote_file_name(
char *fname,
int quote_char);
1529 rl_attempted_completion_function = psql_completion;
1531#ifdef USE_FILENAME_QUOTING_FUNCTIONS
1532 rl_filename_quoting_function = quote_file_name;
1533 rl_filename_dequoting_function = dequote_file_name;
1536 rl_basic_word_break_characters = WORD_BREAKS;
1545 rl_completer_quote_characters =
"'";
1553#ifdef HAVE_RL_FILENAME_QUOTE_CHARACTERS
1555 unsigned char *fqc = (
unsigned char *)
pg_malloc(256);
1557 for (
int i = 0;
i < 255;
i++)
1558 fqc[
i] = (
unsigned char) (
i + 1);
1560 rl_filename_quote_characters = (
const char *) fqc;
1564 completion_max_records = 1000;
1588word_matches(
const char *pattern,
1590 bool case_sensitive)
1594#define cimatch(s1, s2, n) \
1595 (case_sensitive ? strncmp(s1, s2, n) == 0 : pg_strncasecmp(s1, s2, n) == 0)
1598 if (pattern == NULL)
1602 if (*pattern ==
'!')
1603 return !word_matches(pattern + 1,
word, case_sensitive);
1606 wordlen = strlen(
word);
1609 const char *star = NULL;
1614 while (*
c !=
'\0' && *
c !=
'|')
1624 size_t beforelen = star - pattern,
1625 afterlen =
c - star - 1;
1627 if (wordlen >= (beforelen + afterlen) &&
1628 cimatch(
word, pattern, beforelen) &&
1629 cimatch(
word + wordlen - afterlen, star + 1, afterlen))
1635 if (wordlen == (
c - pattern) &&
1636 cimatch(
word, pattern, wordlen))
1657TailMatchesArray(
bool case_sensitive,
1658 int previous_words_count,
char **previous_words,
1659 int narg,
const char *
const *
args)
1661 if (previous_words_count < narg)
1664 for (
int argno = 0; argno < narg; argno++)
1666 const char *
arg =
args[argno];
1668 if (!word_matches(
arg, previous_words[narg - argno - 1],
1680TailMatchesImpl(
bool case_sensitive,
1681 int previous_words_count,
char **previous_words,
1684 const char *argarray[64];
1689 if (previous_words_count < narg)
1692 va_start(
args, narg);
1693 for (
int argno = 0; argno < narg; argno++)
1694 argarray[argno] = va_arg(
args,
const char *);
1697 return TailMatchesArray(case_sensitive,
1698 previous_words_count, previous_words,
1707HeadMatchesArray(
bool case_sensitive,
1708 int previous_words_count,
char **previous_words,
1709 int narg,
const char *
const *
args)
1711 if (previous_words_count < narg)
1714 for (
int argno = 0; argno < narg; argno++)
1716 const char *
arg =
args[argno];
1718 if (!word_matches(
arg, previous_words[previous_words_count - argno - 1],
1730HeadMatchesImpl(
bool case_sensitive,
1731 int previous_words_count,
char **previous_words,
1734 const char *argarray[64];
1739 if (previous_words_count < narg)
1742 va_start(
args, narg);
1743 for (
int argno = 0; argno < narg; argno++)
1744 argarray[argno] = va_arg(
args,
const char *);
1747 return HeadMatchesArray(case_sensitive,
1748 previous_words_count, previous_words,
1760MatchesArray(
bool case_sensitive,
1761 int previous_words_count,
char **previous_words,
1762 int narg,
const char *
const *
args)
1764 int match_any_pos = -1;
1767 if (previous_words_count < narg - 1)
1771 for (
int argno = 0; argno < narg; argno++)
1773 const char *
arg =
args[argno];
1775 if (
arg != NULL &&
arg[0] ==
'\0')
1777 match_any_pos = argno;
1782 if (match_any_pos < 0)
1785 if (previous_words_count != narg)
1789 if (!HeadMatchesArray(case_sensitive,
1790 previous_words_count, previous_words,
1797 if (!HeadMatchesArray(case_sensitive,
1798 previous_words_count, previous_words,
1799 match_any_pos,
args))
1803 if (!TailMatchesArray(case_sensitive,
1804 previous_words_count, previous_words,
1805 narg - match_any_pos - 1,
1806 args + match_any_pos + 1))
1817MatchesImpl(
bool case_sensitive,
1818 int previous_words_count,
char **previous_words,
1821 const char *argarray[64];
1827 if (previous_words_count < narg - 1)
1830 va_start(
args, narg);
1831 for (
int argno = 0; argno < narg; argno++)
1832 argarray[argno] = va_arg(
args,
const char *);
1835 return MatchesArray(case_sensitive,
1836 previous_words_count, previous_words,
1844ends_with(
const char *s,
char c)
1846 size_t length = strlen(s);
1848 return (length > 0 && s[length - 1] ==
c);
1860psql_completion(
const char *
text,
int start,
int end)
1863 char **matches = NULL;
1869 char **previous_words;
1872 int previous_words_count;
1881#define prev_wd (previous_words[0])
1882#define prev2_wd (previous_words[1])
1883#define prev3_wd (previous_words[2])
1884#define prev4_wd (previous_words[3])
1885#define prev5_wd (previous_words[4])
1886#define prev6_wd (previous_words[5])
1887#define prev7_wd (previous_words[6])
1888#define prev8_wd (previous_words[7])
1889#define prev9_wd (previous_words[8])
1892#define TailMatches(...) \
1893 TailMatchesImpl(false, previous_words_count, previous_words, \
1894 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1897#define TailMatchesCS(...) \
1898 TailMatchesImpl(true, previous_words_count, previous_words, \
1899 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1902#define Matches(...) \
1903 MatchesImpl(false, previous_words_count, previous_words, \
1904 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1907#define MatchesCS(...) \
1908 MatchesImpl(true, previous_words_count, previous_words, \
1909 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1912#define HeadMatches(...) \
1913 HeadMatchesImpl(false, previous_words_count, previous_words, \
1914 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1917#define HeadMatchesCS(...) \
1918 HeadMatchesImpl(true, previous_words_count, previous_words, \
1919 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1922 static const char *
const backslash_commands[] = {
1924 "\\bind",
"\\bind_named",
1925 "\\connect",
"\\conninfo",
"\\C",
"\\cd",
"\\close_prepared",
"\\copy",
1926 "\\copyright",
"\\crosstabview",
1927 "\\d",
"\\da",
"\\dA",
"\\dAc",
"\\dAf",
"\\dAo",
"\\dAp",
1928 "\\db",
"\\dc",
"\\dconfig",
"\\dC",
"\\dd",
"\\ddp",
"\\dD",
1929 "\\des",
"\\det",
"\\deu",
"\\dew",
"\\dE",
"\\df",
1930 "\\dF",
"\\dFd",
"\\dFp",
"\\dFt",
"\\dg",
"\\di",
"\\dl",
"\\dL",
1931 "\\dm",
"\\dn",
"\\do",
"\\dO",
"\\dp",
"\\dP",
"\\dPi",
"\\dPt",
1932 "\\drds",
"\\drg",
"\\dRs",
"\\dRp",
"\\ds",
1933 "\\dt",
"\\dT",
"\\dv",
"\\du",
"\\dx",
"\\dX",
"\\dy",
1934 "\\echo",
"\\edit",
"\\ef",
"\\elif",
"\\else",
"\\encoding",
1935 "\\endif",
"\\endpipeline",
"\\errverbose",
"\\ev",
1936 "\\f",
"\\flush",
"\\flushrequest",
1937 "\\g",
"\\gdesc",
"\\getenv",
"\\getresults",
"\\gexec",
"\\gset",
"\\gx",
1939 "\\if",
"\\include",
"\\include_relative",
"\\ir",
1940 "\\list",
"\\lo_import",
"\\lo_export",
"\\lo_list",
"\\lo_unlink",
1942 "\\parse",
"\\password",
"\\print",
"\\prompt",
"\\pset",
1943 "\\qecho",
"\\quit",
1944 "\\reset",
"\\restrict",
1945 "\\s",
"\\sendpipeline",
"\\set",
"\\setenv",
"\\sf",
1946 "\\startpipeline",
"\\sv",
"\\syncpipeline",
1947 "\\t",
"\\T",
"\\timing",
1948 "\\unrestrict",
"\\unset",
1950 "\\warn",
"\\watch",
"\\write",
1965 completion_last_char = (end >
start) ?
text[end -
start - 1] :
'\0';
1968 rl_completion_append_character =
' ';
1971 completion_charp = NULL;
1972 completion_charpp = NULL;
1973 completion_vquery = NULL;
1974 completion_squery = NULL;
1975 completion_ref_object = NULL;
1976 completion_ref_schema = NULL;
1983 previous_words = get_previous_words(
start,
1985 &previous_words_count);
1988 if (
text[0] ==
'\\')
1989 COMPLETE_WITH_LIST_CS(backslash_commands);
1992 else if (
text[0] ==
':' &&
text[1] !=
':')
1994 if (
text[1] ==
'\'')
1995 matches = complete_from_variables(
text,
":'",
"'",
true);
1996 else if (
text[1] ==
'"')
1997 matches = complete_from_variables(
text,
":\"",
"\"",
true);
1998 else if (
text[1] ==
'{' &&
text[2] ==
'?')
1999 matches = complete_from_variables(
text,
":{?",
"}",
true);
2001 matches = complete_from_variables(
text,
":",
"",
true);
2005 else if (previous_words_count == 0)
2006 COMPLETE_WITH_LIST(sql_commands);
2011#ifdef SWITCH_CONVERSION_APPLIED
2024 for (
int tindx = 0; tindx <
lengthof(tcpatterns); tindx++)
2026 const TCPattern *tcpat = tcpatterns + tindx;
2029 switch (tcpat->kind)
2032 match = MatchesArray(
false,
2033 previous_words_count,
2035 tcpat->nwords, tcpat->words);
2038 match = MatchesArray(
true,
2039 previous_words_count,
2041 tcpat->nwords, tcpat->words);
2044 match = HeadMatchesArray(
false,
2045 previous_words_count,
2047 tcpat->nwords, tcpat->words);
2050 match = HeadMatchesArray(
true,
2051 previous_words_count,
2053 tcpat->nwords, tcpat->words);
2056 match = TailMatchesArray(
false,
2057 previous_words_count,
2059 tcpat->nwords, tcpat->words);
2062 match = TailMatchesArray(
true,
2063 previous_words_count,
2065 tcpat->nwords, tcpat->words);
2070 matches = match_previous_words(tcpat->id,
text,
start, end,
2072 previous_words_count);
2073 if (matches != NULL)
2082 matches = match_previous_words(0,
text,
start, end,
2084 previous_words_count);
2093 if (matches == NULL && previous_words_count > 0)
2095 const pgsql_thing_t *wac;
2097 for (wac = words_after_create; wac->name != NULL; wac++)
2102 COMPLETE_WITH_QUERY_LIST(wac->query,
2104 else if (wac->vquery)
2105 COMPLETE_WITH_VERSIONED_QUERY_LIST(wac->vquery,
2107 else if (wac->squery)
2108 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_LIST(wac->squery,
2120 if (matches == NULL)
2122 COMPLETE_WITH_CONST(
true,
"");
2124 rl_completion_append_character =
'\0';
2125#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
2126 rl_completion_suppress_quote = 1;
2131 free(previous_words);
2134 free(completion_ref_object);
2135 completion_ref_object = NULL;
2136 free(completion_ref_schema);
2137 completion_ref_schema = NULL;
2182match_previous_words(
int pattern_id,
2184 char **previous_words,
int previous_words_count)
2187 char **matches = NULL;
2200 else if (TailMatches(
"CREATE"))
2203 if (HeadMatches(
"CREATE",
"SCHEMA"))
2204 COMPLETE_WITH(
"TABLE",
"VIEW",
"INDEX",
"SEQUENCE",
"TRIGGER",
2206 "UNIQUE",
"UNLOGGED");
2208 COMPLETE_WITH_GENERATOR(create_command_generator);
2211 else if (TailMatches(
"CREATE",
"OR",
"REPLACE"))
2212 COMPLETE_WITH(
"FUNCTION",
"PROCEDURE",
"LANGUAGE",
"RULE",
"VIEW",
2213 "AGGREGATE",
"TRANSFORM",
"TRIGGER");
2217 else if (Matches(
"DROP"))
2218 COMPLETE_WITH_GENERATOR(drop_command_generator);
2223 else if (Matches(
"ALTER",
"TABLE"))
2224 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
2225 "ALL IN TABLESPACE");
2228 else if (Matches(
"ALTER"))
2229 COMPLETE_WITH_GENERATOR(alter_command_generator);
2231 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny))
2232 COMPLETE_WITH(
"SET TABLESPACE",
"OWNED BY");
2234 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny,
"OWNED",
"BY"))
2235 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
2237 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny,
"OWNED",
"BY", MatchAny))
2238 COMPLETE_WITH(
"SET TABLESPACE");
2240 else if (Matches(
"ALTER",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny))
2243 else if (Matches(
"ALTER",
"AGGREGATE", MatchAny, MatchAny))
2245 if (ends_with(prev_wd,
')'))
2246 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
2248 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
2251 else if (Matches(
"ALTER",
"FUNCTION", MatchAny, MatchAny))
2253 if (ends_with(prev_wd,
')'))
2254 COMPLETE_WITH(Alter_function_options);
2256 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
2259 else if (Matches(
"ALTER",
"PROCEDURE", MatchAny, MatchAny))
2261 if (ends_with(prev_wd,
')'))
2262 COMPLETE_WITH(Alter_procedure_options);
2264 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
2267 else if (Matches(
"ALTER",
"ROUTINE", MatchAny, MatchAny))
2269 if (ends_with(prev_wd,
')'))
2270 COMPLETE_WITH(Alter_routine_options);
2272 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
2275 else if (Matches(
"ALTER",
"FUNCTION|ROUTINE", MatchAny, MatchAny,
"PARALLEL"))
2276 COMPLETE_WITH(
"RESTRICTED",
"SAFE",
"UNSAFE");
2278 else if (Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"SECURITY") ||
2279 Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"EXTERNAL",
"SECURITY"))
2280 COMPLETE_WITH(
"DEFINER",
"INVOKER");
2282 else if (Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"RESET"))
2283 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
2286 else if (Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"SET"))
2287 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
2291 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny))
2292 COMPLETE_WITH(
"ADD",
"DROP",
"OWNER TO",
"RENAME TO",
"SET");
2294 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD"))
2295 COMPLETE_WITH(
"TABLES IN SCHEMA",
"TABLE");
2296 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE"))
2297 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2298 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE") &&
2299 ends_with(prev_wd,
','))
2300 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2309 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE"))
2311 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE",
"("))
2312 COMPLETE_WITH_ATTR(prev3_wd);
2313 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE") &&
2314 !TailMatches(
"WHERE",
"(*)"))
2315 COMPLETE_WITH(
",",
"WHERE (");
2316 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE"))
2319 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"DROP"))
2320 COMPLETE_WITH(
"TABLES IN SCHEMA",
"TABLE");
2322 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"SET"))
2323 COMPLETE_WITH(
"(",
"TABLES IN SCHEMA",
"TABLE");
2324 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|DROP|SET",
"TABLES",
"IN",
"SCHEMA"))
2325 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
2326 " AND nspname NOT LIKE E'pg\\\\_%%'",
2329 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny, MatchAnyN,
"SET",
"("))
2330 COMPLETE_WITH(
"publish",
"publish_generated_columns",
"publish_via_partition_root");
2332 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny))
2333 COMPLETE_WITH(
"CONNECTION",
"ENABLE",
"DISABLE",
"OWNER TO",
2334 "RENAME TO",
"REFRESH PUBLICATION",
"REFRESH SEQUENCES",
2335 "SET",
"SKIP (",
"ADD PUBLICATION",
"DROP PUBLICATION");
2337 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"REFRESH"))
2338 COMPLETE_WITH(
"PUBLICATION",
"SEQUENCES");
2340 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"REFRESH",
"PUBLICATION",
"WITH",
"("))
2341 COMPLETE_WITH(
"copy_data");
2343 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny,
"SET"))
2344 COMPLETE_WITH(
"(",
"PUBLICATION");
2346 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"SET",
"("))
2347 COMPLETE_WITH(
"binary",
"disable_on_error",
"failover",
2348 "max_retention_duration",
"origin",
2349 "password_required",
"retain_dead_tuples",
2350 "run_as_owner",
"slot_name",
"streaming",
2351 "synchronous_commit",
"two_phase");
2353 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"SKIP",
"("))
2354 COMPLETE_WITH(
"lsn");
2356 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"SET",
"PUBLICATION"))
2361 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
2362 "ADD|DROP|SET",
"PUBLICATION", MatchAny))
2363 COMPLETE_WITH(
"WITH (");
2365 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
2366 "ADD|DROP|SET",
"PUBLICATION", MatchAny,
"WITH",
"("))
2367 COMPLETE_WITH(
"copy_data",
"refresh");
2370 else if (Matches(
"ALTER",
"SCHEMA", MatchAny))
2371 COMPLETE_WITH(
"OWNER TO",
"RENAME TO");
2374 else if (Matches(
"ALTER",
"COLLATION", MatchAny))
2375 COMPLETE_WITH(
"OWNER TO",
"REFRESH VERSION",
"RENAME TO",
"SET SCHEMA");
2378 else if (Matches(
"ALTER",
"CONVERSION", MatchAny))
2379 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
2382 else if (Matches(
"ALTER",
"DATABASE", MatchAny))
2383 COMPLETE_WITH(
"RESET",
"SET",
"OWNER TO",
"REFRESH COLLATION VERSION",
"RENAME TO",
2384 "IS_TEMPLATE",
"ALLOW_CONNECTIONS",
2385 "CONNECTION LIMIT");
2388 else if (Matches(
"ALTER",
"DATABASE", MatchAny,
"RESET"))
2390 set_completion_reference(prev2_wd);
2391 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_database_vars,
"ALL");
2395 else if (Matches(
"ALTER",
"DATABASE", MatchAny,
"SET",
"TABLESPACE"))
2396 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
2399 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER"))
2400 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
2403 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER", MatchAny))
2404 COMPLETE_WITH(
"DISABLE",
"ENABLE",
"OWNER TO",
"RENAME TO");
2407 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER", MatchAny,
"ENABLE"))
2408 COMPLETE_WITH(
"REPLICA",
"ALWAYS");
2411 else if (Matches(
"ALTER",
"EXTENSION", MatchAny))
2412 COMPLETE_WITH(
"ADD",
"DROP",
"UPDATE",
"SET SCHEMA");
2415 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP"))
2416 COMPLETE_WITH(
"ACCESS METHOD",
"AGGREGATE",
"CAST",
"COLLATION",
2417 "CONVERSION",
"DOMAIN",
"EVENT TRIGGER",
"FOREIGN",
2418 "FUNCTION",
"MATERIALIZED VIEW",
"OPERATOR",
2419 "LANGUAGE",
"PROCEDURE",
"ROUTINE",
"SCHEMA",
2420 "SEQUENCE",
"SERVER",
"TABLE",
"TEXT SEARCH",
2421 "TRANSFORM FOR",
"TYPE",
"VIEW");
2424 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP",
"FOREIGN"))
2425 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
2428 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP",
"OPERATOR"))
2429 COMPLETE_WITH(
"CLASS",
"FAMILY");
2432 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP",
"TEXT",
"SEARCH"))
2433 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
2436 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"UPDATE"))
2437 COMPLETE_WITH(
"TO");
2440 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"UPDATE",
"TO"))
2442 set_completion_reference(prev3_wd);
2443 COMPLETE_WITH_QUERY(Query_for_list_of_available_extension_versions);
2447 else if (Matches(
"ALTER",
"FOREIGN"))
2448 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
2451 else if (Matches(
"ALTER",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
2452 COMPLETE_WITH(
"HANDLER",
"VALIDATOR",
"NO",
2453 "OPTIONS",
"OWNER TO",
"RENAME TO");
2454 else if (Matches(
"ALTER",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny,
"NO"))
2455 COMPLETE_WITH(
"HANDLER",
"VALIDATOR");
2458 else if (Matches(
"ALTER",
"FOREIGN",
"TABLE", MatchAny))
2459 COMPLETE_WITH(
"ADD",
"ALTER",
"DISABLE TRIGGER",
"DROP",
"ENABLE",
2460 "INHERIT",
"NO INHERIT",
"OPTIONS",
"OWNER TO",
2461 "RENAME",
"SET",
"VALIDATE CONSTRAINT");
2464 else if (Matches(
"ALTER",
"INDEX"))
2465 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
2466 "ALL IN TABLESPACE");
2468 else if (Matches(
"ALTER",
"INDEX", MatchAny))
2469 COMPLETE_WITH(
"ALTER COLUMN",
"OWNER TO",
"RENAME TO",
"SET",
2470 "RESET",
"ATTACH PARTITION",
2471 "DEPENDS ON EXTENSION",
"NO DEPENDS ON EXTENSION");
2472 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ATTACH"))
2473 COMPLETE_WITH(
"PARTITION");
2474 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ATTACH",
"PARTITION"))
2475 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
2477 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER"))
2478 COMPLETE_WITH(
"COLUMN");
2480 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN"))
2482 set_completion_reference(prev3_wd);
2483 COMPLETE_WITH_SCHEMA_QUERY_VERBATIM(Query_for_list_of_attribute_numbers);
2486 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny))
2487 COMPLETE_WITH(
"SET STATISTICS");
2489 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET"))
2490 COMPLETE_WITH(
"STATISTICS");
2492 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STATISTICS"))
2497 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"SET"))
2498 COMPLETE_WITH(
"(",
"TABLESPACE");
2500 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"RESET"))
2503 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"RESET",
"("))
2504 COMPLETE_WITH(
"fillfactor",
2505 "deduplicate_items",
2506 "fastupdate",
"gin_pending_list_limit",
2508 "pages_per_range",
"autosummarize"
2510 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"SET",
"("))
2511 COMPLETE_WITH(
"fillfactor =",
2512 "deduplicate_items =",
2513 "fastupdate =",
"gin_pending_list_limit =",
2515 "pages_per_range =",
"autosummarize ="
2517 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"NO",
"DEPENDS"))
2518 COMPLETE_WITH(
"ON EXTENSION");
2519 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"DEPENDS"))
2520 COMPLETE_WITH(
"ON EXTENSION");
2523 else if (Matches(
"ALTER",
"LANGUAGE", MatchAny))
2524 COMPLETE_WITH(
"OWNER TO",
"RENAME TO");
2527 else if (Matches(
"ALTER",
"LARGE",
"OBJECT", MatchAny))
2528 COMPLETE_WITH(
"OWNER TO");
2531 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW"))
2532 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_matviews,
2533 "ALL IN TABLESPACE");
2536 else if (Matches(
"ALTER",
"USER|ROLE", MatchAny) &&
2537 !TailMatches(
"USER",
"MAPPING"))
2538 COMPLETE_WITH(
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
"CREATEROLE",
2539 "ENCRYPTED PASSWORD",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2540 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2541 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2542 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2543 "VALID UNTIL",
"WITH");
2546 else if (Matches(
"ALTER",
"USER|ROLE", MatchAny,
"RESET"))
2548 set_completion_reference(prev2_wd);
2549 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_user_vars,
"ALL");
2553 else if (Matches(
"ALTER",
"USER|ROLE", MatchAny,
"WITH"))
2555 COMPLETE_WITH(
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
"CREATEROLE",
2556 "ENCRYPTED PASSWORD",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2557 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2558 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2559 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2563 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
2564 COMPLETE_WITH(
"FOR",
"GRANT",
"IN SCHEMA",
"REVOKE");
2566 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR"))
2567 COMPLETE_WITH(
"ROLE");
2569 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN"))
2570 COMPLETE_WITH(
"SCHEMA");
2572 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2574 COMPLETE_WITH(
"GRANT",
"REVOKE",
"IN SCHEMA");
2576 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2578 COMPLETE_WITH(
"GRANT",
"REVOKE",
"FOR ROLE");
2580 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2582 COMPLETE_WITH(
"ROLE");
2585 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2586 MatchAny,
"IN",
"SCHEMA", MatchAny) ||
2587 Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2588 MatchAny,
"FOR",
"ROLE|USER", MatchAny))
2589 COMPLETE_WITH(
"GRANT",
"REVOKE");
2591 else if (Matches(
"ALTER",
"DOMAIN", MatchAny))
2592 COMPLETE_WITH(
"ADD",
"DROP",
"OWNER TO",
"RENAME",
"SET",
2593 "VALIDATE CONSTRAINT");
2595 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"ADD"))
2596 COMPLETE_WITH(
"CONSTRAINT",
"NOT NULL",
"CHECK (");
2598 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"ADD",
"CONSTRAINT", MatchAny))
2599 COMPLETE_WITH(
"NOT NULL",
"CHECK (");
2601 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"DROP"))
2602 COMPLETE_WITH(
"CONSTRAINT",
"DEFAULT",
"NOT NULL");
2604 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"DROP|RENAME|VALIDATE",
"CONSTRAINT"))
2606 set_completion_reference(prev3_wd);
2607 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_type);
2610 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"RENAME"))
2611 COMPLETE_WITH(
"CONSTRAINT",
"TO");
2613 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"RENAME",
"CONSTRAINT", MatchAny))
2614 COMPLETE_WITH(
"TO");
2617 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"SET"))
2618 COMPLETE_WITH(
"DEFAULT",
"NOT NULL",
"SCHEMA");
2620 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny))
2621 COMPLETE_WITH(
"AS",
"INCREMENT",
"MINVALUE",
"MAXVALUE",
"RESTART",
2622 "START",
"NO",
"CACHE",
"CYCLE",
"SET",
"OWNED BY",
2623 "OWNER TO",
"RENAME TO");
2625 else if (TailMatches(
"ALTER",
"SEQUENCE", MatchAny,
"AS"))
2626 COMPLETE_WITH_CS(
"smallint",
"integer",
"bigint");
2628 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny,
"NO"))
2629 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
2631 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny,
"SET"))
2632 COMPLETE_WITH(
"SCHEMA",
"LOGGED",
"UNLOGGED");
2634 else if (Matches(
"ALTER",
"SERVER", MatchAny))
2635 COMPLETE_WITH(
"VERSION",
"OPTIONS",
"OWNER TO",
"RENAME TO");
2637 else if (Matches(
"ALTER",
"SERVER", MatchAny,
"VERSION", MatchAny))
2638 COMPLETE_WITH(
"OPTIONS");
2640 else if (Matches(
"ALTER",
"SYSTEM"))
2641 COMPLETE_WITH(
"SET",
"RESET");
2642 else if (Matches(
"ALTER",
"SYSTEM",
"SET|RESET"))
2643 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_alter_system_set_vars,
2645 else if (Matches(
"ALTER",
"SYSTEM",
"SET", MatchAny))
2646 COMPLETE_WITH(
"TO");
2648 else if (Matches(
"ALTER",
"VIEW", MatchAny))
2649 COMPLETE_WITH(
"ALTER COLUMN",
"OWNER TO",
"RENAME",
"RESET",
"SET");
2651 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME"))
2652 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"TO");
2653 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2654 COMPLETE_WITH_ATTR(prev3_wd);
2656 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER", MatchAny) ||
2657 Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER",
"COLUMN", MatchAny))
2658 COMPLETE_WITH(
"SET DEFAULT",
"DROP DEFAULT");
2660 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME", MatchAnyExcept(
"TO")))
2661 COMPLETE_WITH(
"TO");
2663 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME",
"COLUMN", MatchAnyExcept(
"TO")))
2664 COMPLETE_WITH(
"TO");
2666 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RESET"))
2669 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET"))
2670 COMPLETE_WITH(
"(",
"SCHEMA");
2672 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET|RESET",
"("))
2673 COMPLETE_WITH_LIST(view_optional_parameters);
2674 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET",
"(", MatchAny))
2676 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET",
"(",
"check_option",
"="))
2677 COMPLETE_WITH(
"local",
"cascaded");
2678 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET",
"(",
"security_barrier|security_invoker",
"="))
2679 COMPLETE_WITH(
"true",
"false");
2682 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny))
2683 COMPLETE_WITH(
"ALTER COLUMN",
"CLUSTER ON",
"DEPENDS ON EXTENSION",
2684 "NO DEPENDS ON EXTENSION",
"OWNER TO",
"RENAME",
2687 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME"))
2688 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"TO");
2689 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2690 COMPLETE_WITH_ATTR(prev3_wd);
2692 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME", MatchAnyExcept(
"TO")))
2693 COMPLETE_WITH(
"TO");
2695 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME",
"COLUMN", MatchAnyExcept(
"TO")))
2696 COMPLETE_WITH(
"TO");
2698 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"SET"))
2699 COMPLETE_WITH(
"(",
"ACCESS METHOD",
"SCHEMA",
"TABLESPACE",
"WITHOUT CLUSTER");
2701 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"SET",
"ACCESS",
"METHOD"))
2702 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
2705 else if (Matches(
"ALTER",
"POLICY"))
2706 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
2708 else if (Matches(
"ALTER",
"POLICY", MatchAny))
2709 COMPLETE_WITH(
"ON");
2711 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON"))
2713 set_completion_reference(prev2_wd);
2714 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
2717 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny))
2718 COMPLETE_WITH(
"RENAME TO",
"TO",
"USING (",
"WITH CHECK (");
2720 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"TO"))
2721 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
2722 Keywords_for_list_of_grant_roles);
2724 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"USING"))
2727 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"WITH",
"CHECK"))
2731 else if (Matches(
"ALTER",
"RULE", MatchAny))
2732 COMPLETE_WITH(
"ON");
2735 else if (Matches(
"ALTER",
"RULE", MatchAny,
"ON"))
2737 set_completion_reference(prev2_wd);
2738 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
2742 else if (Matches(
"ALTER",
"RULE", MatchAny,
"ON", MatchAny))
2743 COMPLETE_WITH(
"RENAME TO");
2746 else if (Matches(
"ALTER",
"STATISTICS", MatchAny))
2747 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA",
"SET STATISTICS");
2749 else if (Matches(
"ALTER",
"STATISTICS", MatchAny,
"SET"))
2750 COMPLETE_WITH(
"SCHEMA",
"STATISTICS");
2753 else if (Matches(
"ALTER",
"TRIGGER", MatchAny))
2754 COMPLETE_WITH(
"ON");
2756 else if (Matches(
"ALTER",
"TRIGGER", MatchAny,
"ON"))
2758 set_completion_reference(prev2_wd);
2759 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
2763 else if (Matches(
"ALTER",
"TRIGGER", MatchAny,
"ON", MatchAny))
2764 COMPLETE_WITH(
"RENAME TO",
"DEPENDS ON EXTENSION",
2765 "NO DEPENDS ON EXTENSION");
2770 else if (Matches(
"ALTER",
"TABLE", MatchAny))
2771 COMPLETE_WITH(
"ADD",
"ALTER",
"CLUSTER ON",
"DISABLE",
"DROP",
2772 "ENABLE",
"INHERIT",
"NO",
"RENAME",
"RESET",
2773 "OWNER TO",
"SET",
"VALIDATE CONSTRAINT",
2774 "REPLICA IDENTITY",
"ATTACH PARTITION",
2775 "DETACH PARTITION",
"FORCE ROW LEVEL SECURITY",
2776 "SPLIT PARTITION",
"MERGE PARTITIONS (",
2779 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD"))
2784 COMPLETE_WITH(
"COLUMN",
"CONSTRAINT",
"CHECK (",
"NOT NULL",
"UNIQUE",
2785 "PRIMARY KEY",
"EXCLUDE",
"FOREIGN KEY");
2788 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"COLUMN", MatchAny) ||
2789 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD", MatchAnyExcept(
"COLUMN|CONSTRAINT|CHECK|UNIQUE|PRIMARY|NOT|EXCLUDE|FOREIGN")))
2790 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
2792 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny))
2793 COMPLETE_WITH(
"CHECK (",
"NOT NULL",
"UNIQUE",
"PRIMARY KEY",
"EXCLUDE",
"FOREIGN KEY");
2795 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"NOT",
"NULL"))
2796 COMPLETE_WITH_ATTR(prev4_wd);
2797 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
"NOT",
"NULL"))
2798 COMPLETE_WITH_ATTR(prev6_wd);
2800 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"PRIMARY",
"KEY") ||
2801 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"UNIQUE") ||
2802 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
"PRIMARY",
"KEY") ||
2803 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
"UNIQUE"))
2804 COMPLETE_WITH(
"(",
"USING INDEX");
2806 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"PRIMARY",
"KEY",
"USING",
"INDEX"))
2808 set_completion_reference(prev6_wd);
2809 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2812 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"UNIQUE",
"USING",
"INDEX"))
2814 set_completion_reference(prev5_wd);
2815 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2818 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
2819 "PRIMARY",
"KEY",
"USING",
"INDEX"))
2821 set_completion_reference(prev8_wd);
2822 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2825 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
2826 "UNIQUE",
"USING",
"INDEX"))
2828 set_completion_reference(prev7_wd);
2829 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2832 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE"))
2833 COMPLETE_WITH(
"ALWAYS",
"REPLICA",
"ROW LEVEL SECURITY",
"RULE",
2835 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"REPLICA|ALWAYS"))
2836 COMPLETE_WITH(
"RULE",
"TRIGGER");
2837 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"RULE"))
2839 set_completion_reference(prev3_wd);
2840 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2842 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE", MatchAny,
"RULE"))
2844 set_completion_reference(prev4_wd);
2845 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2847 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"TRIGGER"))
2849 set_completion_reference(prev3_wd);
2850 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2852 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE", MatchAny,
"TRIGGER"))
2854 set_completion_reference(prev4_wd);
2855 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2858 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"INHERIT"))
2859 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2861 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"NO"))
2862 COMPLETE_WITH(
"FORCE ROW LEVEL SECURITY",
"INHERIT");
2864 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"NO",
"INHERIT"))
2865 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2867 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE"))
2868 COMPLETE_WITH(
"ROW LEVEL SECURITY",
"RULE",
"TRIGGER");
2869 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE",
"RULE"))
2871 set_completion_reference(prev3_wd);
2872 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2874 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE",
"TRIGGER"))
2876 set_completion_reference(prev3_wd);
2877 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2881 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER"))
2882 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"CONSTRAINT");
2885 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME"))
2886 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"CONSTRAINT",
"TO");
2887 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2888 COMPLETE_WITH_ATTR(prev3_wd);
2891 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME", MatchAnyExcept(
"CONSTRAINT|TO")))
2892 COMPLETE_WITH(
"TO");
2895 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME",
"COLUMN|CONSTRAINT", MatchAnyExcept(
"TO")))
2896 COMPLETE_WITH(
"TO");
2899 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DROP"))
2900 COMPLETE_WITH(
"COLUMN",
"CONSTRAINT");
2902 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DROP",
"COLUMN"))
2903 COMPLETE_WITH_ATTR(prev3_wd);
2905 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER|DROP|RENAME",
"CONSTRAINT"))
2907 set_completion_reference(prev3_wd);
2908 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_table);
2911 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"VALIDATE",
"CONSTRAINT"))
2913 set_completion_reference(prev3_wd);
2914 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_table_not_validated);
2917 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny) ||
2918 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny))
2919 COMPLETE_WITH(
"TYPE",
"SET",
"RESET",
"RESTART",
"ADD",
"DROP");
2921 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD") ||
2922 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD"))
2923 COMPLETE_WITH(
"GENERATED");
2925 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD",
"GENERATED") ||
2926 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD",
"GENERATED"))
2927 COMPLETE_WITH(
"ALWAYS",
"BY DEFAULT");
2929 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD",
"GENERATED",
"ALWAYS") ||
2930 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD",
"GENERATED",
"ALWAYS") ||
2931 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD",
"GENERATED",
"BY",
"DEFAULT") ||
2932 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD",
"GENERATED",
"BY",
"DEFAULT"))
2933 COMPLETE_WITH(
"AS IDENTITY");
2935 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET") ||
2936 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET"))
2937 COMPLETE_WITH(
"(",
"COMPRESSION",
"DATA TYPE",
"DEFAULT",
"EXPRESSION",
"GENERATED",
"NOT NULL",
2938 "STATISTICS",
"STORAGE",
2940 "INCREMENT",
"MINVALUE",
"MAXVALUE",
"START",
"NO",
"CACHE",
"CYCLE");
2942 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"(") ||
2943 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"("))
2944 COMPLETE_WITH(
"n_distinct",
"n_distinct_inherited");
2946 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"COMPRESSION") ||
2947 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"COMPRESSION"))
2948 COMPLETE_WITH(
"DEFAULT",
"PGLZ",
"LZ4");
2950 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"EXPRESSION") ||
2951 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"EXPRESSION"))
2952 COMPLETE_WITH(
"AS");
2954 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"EXPRESSION",
"AS") ||
2955 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"EXPRESSION",
"AS"))
2958 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"GENERATED") ||
2959 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"GENERATED"))
2960 COMPLETE_WITH(
"ALWAYS",
"BY DEFAULT");
2962 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"NO") ||
2963 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"NO"))
2964 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
2966 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STORAGE") ||
2967 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"STORAGE"))
2968 COMPLETE_WITH(
"DEFAULT",
"PLAIN",
"EXTERNAL",
"EXTENDED",
"MAIN");
2970 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STATISTICS") ||
2971 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"STATISTICS"))
2976 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"DROP") ||
2977 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"DROP"))
2978 COMPLETE_WITH(
"DEFAULT",
"EXPRESSION",
"IDENTITY",
"NOT NULL");
2979 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"CLUSTER"))
2980 COMPLETE_WITH(
"ON");
2981 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"CLUSTER",
"ON"))
2983 set_completion_reference(prev3_wd);
2984 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
2987 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET"))
2988 COMPLETE_WITH(
"(",
"ACCESS METHOD",
"LOGGED",
"SCHEMA",
2989 "TABLESPACE",
"UNLOGGED",
"WITH",
"WITHOUT");
2995 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"ACCESS",
"METHOD"))
2996 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_table_access_methods,
3003 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"TABLESPACE"))
3004 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
3006 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"WITHOUT"))
3007 COMPLETE_WITH(
"CLUSTER",
"OIDS");
3009 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RESET"))
3012 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET|RESET",
"("))
3013 COMPLETE_WITH_LIST(table_storage_parameters);
3014 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY",
"USING",
"INDEX"))
3016 set_completion_reference(prev5_wd);
3017 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
3019 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY",
"USING"))
3020 COMPLETE_WITH(
"INDEX");
3021 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY"))
3022 COMPLETE_WITH(
"FULL",
"NOTHING",
"DEFAULT",
"USING");
3023 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA"))
3024 COMPLETE_WITH(
"IDENTITY");
3030 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ATTACH",
"PARTITION"))
3031 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3033 else if (TailMatches(
"ATTACH",
"PARTITION", MatchAny))
3034 COMPLETE_WITH(
"FOR VALUES",
"DEFAULT");
3035 else if (TailMatches(
"FOR",
"VALUES"))
3036 COMPLETE_WITH(
"FROM (",
"IN (",
"WITH (");
3042 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DETACH|SPLIT",
"PARTITION"))
3044 set_completion_reference(prev3_wd);
3045 COMPLETE_WITH_SCHEMA_QUERY(Query_for_partition_of_table);
3047 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DETACH",
"PARTITION", MatchAny))
3048 COMPLETE_WITH(
"CONCURRENTLY",
"FINALIZE");
3051 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SPLIT",
"PARTITION", MatchAny))
3052 COMPLETE_WITH(
"INTO ( PARTITION");
3055 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"MERGE",
"PARTITIONS",
"("))
3057 set_completion_reference(prev4_wd);
3058 COMPLETE_WITH_SCHEMA_QUERY(Query_for_partition_of_table);
3060 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"MERGE",
"PARTITIONS",
"(*)"))
3061 COMPLETE_WITH(
"INTO");
3064 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"OF"))
3065 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_composite_datatypes);
3068 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny))
3069 COMPLETE_WITH(
"RENAME TO",
"OWNER TO",
"SET",
"RESET");
3071 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny,
"SET|RESET"))
3074 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny,
"SET|RESET",
"("))
3075 COMPLETE_WITH(
"seq_page_cost",
"random_page_cost",
3076 "effective_io_concurrency",
"maintenance_io_concurrency");
3079 else if (Matches(
"ALTER",
"TEXT",
"SEARCH"))
3080 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3081 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"TEMPLATE|PARSER", MatchAny))
3082 COMPLETE_WITH(
"RENAME TO",
"SET SCHEMA");
3083 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"DICTIONARY", MatchAny))
3084 COMPLETE_WITH(
"(",
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
3085 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"CONFIGURATION", MatchAny))
3086 COMPLETE_WITH(
"ADD MAPPING FOR",
"ALTER MAPPING",
3088 "OWNER TO",
"RENAME TO",
"SET SCHEMA");
3091 else if (Matches(
"ALTER",
"TYPE", MatchAny))
3092 COMPLETE_WITH(
"ADD ATTRIBUTE",
"ADD VALUE",
"ALTER ATTRIBUTE",
3094 "OWNER TO",
"RENAME",
"SET SCHEMA",
"SET (");
3096 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ADD"))
3097 COMPLETE_WITH(
"ATTRIBUTE",
"VALUE");
3099 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME"))
3100 COMPLETE_WITH(
"ATTRIBUTE",
"TO",
"VALUE");
3102 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME",
"ATTRIBUTE|VALUE", MatchAny))
3103 COMPLETE_WITH(
"TO");
3105 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME",
"ATTRIBUTE", MatchAny,
"TO", MatchAny))
3106 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3112 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ALTER|DROP|RENAME",
"ATTRIBUTE"))
3113 COMPLETE_WITH_ATTR(prev3_wd);
3115 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ADD",
"ATTRIBUTE", MatchAny))
3116 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3118 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ADD",
"ATTRIBUTE", MatchAny, MatchAny))
3119 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3121 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"DROP",
"ATTRIBUTE", MatchAny))
3122 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3124 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ALTER",
"ATTRIBUTE", MatchAny))
3125 COMPLETE_WITH(
"TYPE");
3127 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ALTER",
"ATTRIBUTE", MatchAny,
"TYPE", MatchAny))
3128 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3130 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME",
"VALUE"))
3131 COMPLETE_WITH_ENUM_VALUE(prev3_wd);
3133 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"SET"))
3134 COMPLETE_WITH(
"(",
"SCHEMA");
3136 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"SET",
"("))
3137 COMPLETE_WITH(
"ANALYZE",
"RECEIVE",
"SEND",
"STORAGE",
"SUBSCRIPT",
3138 "TYPMOD_IN",
"TYPMOD_OUT");
3141 else if (Matches(
"ALTER",
"GROUP", MatchAny))
3142 COMPLETE_WITH(
"ADD USER",
"DROP USER",
"RENAME TO");
3144 else if (Matches(
"ALTER",
"GROUP", MatchAny,
"ADD|DROP"))
3145 COMPLETE_WITH(
"USER");
3147 else if (Matches(
"ALTER",
"GROUP", MatchAny,
"ADD|DROP",
"USER"))
3148 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
3154 else if (Matches(
"ANALYZE"))
3155 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_analyzables,
3156 "(",
"VERBOSE",
"ONLY");
3157 else if (Matches(
"ANALYZE",
"VERBOSE"))
3158 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_analyzables,
3160 else if (HeadMatches(
"ANALYZE",
"(*") &&
3161 !HeadMatches(
"ANALYZE",
"(*)"))
3168 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
3169 COMPLETE_WITH(
"VERBOSE",
"SKIP_LOCKED",
"BUFFER_USAGE_LIMIT");
3170 else if (TailMatches(
"VERBOSE|SKIP_LOCKED"))
3171 COMPLETE_WITH(
"ON",
"OFF");
3173 else if (Matches(
"ANALYZE",
"(*)"))
3174 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_analyzables,
3176 else if (Matches(
"ANALYZE", MatchAnyN,
"("))
3178 COMPLETE_WITH_ATTR(prev2_wd);
3179 else if (HeadMatches(
"ANALYZE"))
3180 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_analyzables);
3183 else if (Matches(
"BEGIN"))
3184 COMPLETE_WITH(
"WORK",
"TRANSACTION",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
3186 else if (Matches(
"END|ABORT"))
3187 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION");
3189 else if (Matches(
"COMMIT"))
3190 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION",
"PREPARED");
3192 else if (Matches(
"RELEASE"))
3193 COMPLETE_WITH(
"SAVEPOINT");
3195 else if (Matches(
"ROLLBACK"))
3196 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION",
"TO SAVEPOINT",
"PREPARED");
3197 else if (Matches(
"ABORT|END|COMMIT|ROLLBACK",
"AND"))
3198 COMPLETE_WITH(
"CHAIN");
3200 else if (Matches(
"CALL"))
3201 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_procedures);
3202 else if (Matches(
"CALL", MatchAny))
3205 else if (Matches(
"CHECKPOINT"))
3207 else if (HeadMatches(
"CHECKPOINT",
"(*") &&
3208 !HeadMatches(
"CHECKPOINT",
"(*)"))
3215 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
3216 COMPLETE_WITH(
"MODE",
"FLUSH_UNLOGGED");
3217 else if (TailMatches(
"MODE"))
3218 COMPLETE_WITH(
"FAST",
"SPREAD");
3221 else if (Matches(
"CLOSE"))
3222 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
3225 else if (Matches(
"CLUSTER"))
3226 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_clusterables,
3228 else if (Matches(
"CLUSTER",
"VERBOSE") ||
3229 Matches(
"CLUSTER",
"(*)"))
3230 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_clusterables);
3232 else if (Matches(
"CLUSTER", MatchAnyExcept(
"VERBOSE|ON|(|(*)")))
3233 COMPLETE_WITH(
"USING");
3235 else if (Matches(
"CLUSTER",
"VERBOSE|(*)", MatchAny))
3236 COMPLETE_WITH(
"USING");
3238 else if (Matches(
"CLUSTER", MatchAny,
"USING") ||
3239 Matches(
"CLUSTER",
"VERBOSE|(*)", MatchAny,
"USING"))
3241 set_completion_reference(prev2_wd);
3242 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
3244 else if (HeadMatches(
"CLUSTER",
"(*") &&
3245 !HeadMatches(
"CLUSTER",
"(*)"))
3252 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
3253 COMPLETE_WITH(
"VERBOSE");
3257 else if (Matches(
"COMMENT"))
3258 COMPLETE_WITH(
"ON");
3259 else if (Matches(
"COMMENT",
"ON"))
3260 COMPLETE_WITH(
"ACCESS METHOD",
"AGGREGATE",
"CAST",
"COLLATION",
3261 "COLUMN",
"CONSTRAINT",
"CONVERSION",
"DATABASE",
3262 "DOMAIN",
"EXTENSION",
"EVENT TRIGGER",
3263 "FOREIGN DATA WRAPPER",
"FOREIGN TABLE",
3264 "FUNCTION",
"INDEX",
"LANGUAGE",
"LARGE OBJECT",
3265 "MATERIALIZED VIEW",
"OPERATOR",
"POLICY",
3266 "PROCEDURE",
"PROCEDURAL LANGUAGE",
"PUBLICATION",
"ROLE",
3267 "ROUTINE",
"RULE",
"SCHEMA",
"SEQUENCE",
"SERVER",
3268 "STATISTICS",
"SUBSCRIPTION",
"TABLE",
3269 "TABLESPACE",
"TEXT SEARCH",
"TRANSFORM FOR",
3270 "TRIGGER",
"TYPE",
"VIEW");
3271 else if (Matches(
"COMMENT",
"ON",
"ACCESS",
"METHOD"))
3272 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
3273 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT"))
3274 COMPLETE_WITH_QUERY(Query_for_all_table_constraints);
3275 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny))
3276 COMPLETE_WITH(
"ON");
3277 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny,
"ON"))
3279 set_completion_reference(prev2_wd);
3280 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables_for_constraint,
3283 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny,
"ON",
"DOMAIN"))
3284 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
3285 else if (Matches(
"COMMENT",
"ON",
"EVENT",
"TRIGGER"))
3286 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
3287 else if (Matches(
"COMMENT",
"ON",
"FOREIGN"))
3288 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
3289 else if (Matches(
"COMMENT",
"ON",
"FOREIGN",
"TABLE"))
3290 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
3291 else if (Matches(
"COMMENT",
"ON",
"MATERIALIZED",
"VIEW"))
3292 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
3293 else if (Matches(
"COMMENT",
"ON",
"POLICY"))
3294 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
3295 else if (Matches(
"COMMENT",
"ON",
"POLICY", MatchAny))
3296 COMPLETE_WITH(
"ON");
3297 else if (Matches(
"COMMENT",
"ON",
"POLICY", MatchAny,
"ON"))
3299 set_completion_reference(prev2_wd);
3300 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
3302 else if (Matches(
"COMMENT",
"ON",
"PROCEDURAL",
"LANGUAGE"))
3303 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3304 else if (Matches(
"COMMENT",
"ON",
"RULE", MatchAny))
3305 COMPLETE_WITH(
"ON");
3306 else if (Matches(
"COMMENT",
"ON",
"RULE", MatchAny,
"ON"))
3308 set_completion_reference(prev2_wd);
3309 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
3311 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH"))
3312 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3313 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"CONFIGURATION"))
3314 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_configurations);
3315 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"DICTIONARY"))
3316 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_dictionaries);
3317 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"PARSER"))
3318 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_parsers);
3319 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"TEMPLATE"))
3320 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_templates);
3321 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR"))
3322 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3323 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR", MatchAny))
3324 COMPLETE_WITH(
"LANGUAGE");
3325 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
3327 set_completion_reference(prev2_wd);
3328 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3330 else if (Matches(
"COMMENT",
"ON",
"TRIGGER", MatchAny))
3331 COMPLETE_WITH(
"ON");
3332 else if (Matches(
"COMMENT",
"ON",
"TRIGGER", MatchAny,
"ON"))
3334 set_completion_reference(prev2_wd);
3335 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
3337 else if (Matches(
"COMMENT",
"ON", MatchAny, MatchAnyExcept(
"IS")) ||
3338 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAnyExcept(
"IS")) ||
3339 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAny, MatchAnyExcept(
"IS")) ||
3340 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAny, MatchAny, MatchAnyExcept(
"IS")))
3341 COMPLETE_WITH(
"IS");
3349 else if (Matches(
"COPY|\\copy"))
3350 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables_for_copy,
"(");
3352 else if (Matches(
"COPY|\\copy",
"("))
3353 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES",
"INSERT INTO",
"UPDATE",
"DELETE FROM",
"MERGE INTO",
"WITH");
3355 else if (Matches(
"COPY|\\copy", MatchAny))
3356 COMPLETE_WITH(
"FROM",
"TO");
3358 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO"))
3360 if (HeadMatches(
"COPY"))
3363 if (TailMatches(
"FROM"))
3364 COMPLETE_WITH_FILES_PLUS(
"",
true,
"STDIN",
"PROGRAM");
3366 COMPLETE_WITH_FILES_PLUS(
"",
true,
"STDOUT",
"PROGRAM");
3371 if (TailMatches(
"FROM"))
3372 COMPLETE_WITH_FILES_PLUS(
"",
false,
"STDIN",
"PSTDIN",
"PROGRAM");
3374 COMPLETE_WITH_FILES_PLUS(
"",
false,
"STDOUT",
"PSTDOUT",
"PROGRAM");
3379 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO",
"PROGRAM"))
3380 COMPLETE_WITH_FILES(
"", HeadMatches(
"COPY"));
3384 else if (Matches(
"COPY|\\copy", MatchAny,
"TO", MatchAnyExcept(
"PROGRAM")) ||
3385 Matches(
"COPY|\\copy", MatchAny,
"TO",
"PROGRAM", MatchAny))
3386 COMPLETE_WITH(
"WITH (");
3389 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM", MatchAnyExcept(
"PROGRAM")) ||
3390 Matches(
"COPY|\\copy", MatchAny,
"FROM",
"PROGRAM", MatchAny))
3391 COMPLETE_WITH(
"WITH (",
"WHERE");
3394 else if (HeadMatches(
"COPY|\\copy", MatchAny,
"FROM|TO", MatchAnyExcept(
"PROGRAM"),
"WITH",
"(*") ||
3395 HeadMatches(
"COPY|\\copy", MatchAny,
"FROM|TO",
"PROGRAM", MatchAny,
"WITH",
"(*"))
3397 if (!HeadMatches(
"COPY|\\copy", MatchAny,
"FROM|TO", MatchAnyExcept(
"PROGRAM"),
"WITH",
"(*)") &&
3398 !HeadMatches(
"COPY|\\copy", MatchAny,
"FROM|TO",
"PROGRAM", MatchAny,
"WITH",
"(*)"))
3406 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
3408 if (HeadMatches(
"COPY|\\copy", MatchAny,
"FROM"))
3409 COMPLETE_WITH(Copy_from_options);
3411 COMPLETE_WITH(Copy_to_options);
3415 else if (TailMatches(
"FORMAT"))
3416 COMPLETE_WITH(
"binary",
"csv",
"text");
3419 else if (TailMatches(
"FREEZE"))
3420 COMPLETE_WITH(
"true",
"false");
3423 else if (TailMatches(
"HEADER"))
3424 COMPLETE_WITH(
"true",
"false",
"MATCH");
3427 else if (TailMatches(
"ON_ERROR"))
3428 COMPLETE_WITH(
"stop",
"ignore");
3431 else if (TailMatches(
"LOG_VERBOSITY"))
3432 COMPLETE_WITH(
"silent",
"default",
"verbose");
3439 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM", MatchAnyExcept(
"PROGRAM"),
"WITH", MatchAny) ||
3440 Matches(
"COPY|\\copy", MatchAny,
"FROM",
"PROGRAM", MatchAny,
"WITH", MatchAny))
3441 COMPLETE_WITH(
"WHERE");
3445 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny))
3446 COMPLETE_WITH(
"TYPE");
3448 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny,
"TYPE"))
3449 COMPLETE_WITH(
"INDEX",
"TABLE");
3451 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny,
"TYPE", MatchAny))
3452 COMPLETE_WITH(
"HANDLER");
3455 else if (Matches(
"CREATE",
"COLLATION", MatchAny))
3456 COMPLETE_WITH(
"(",
"FROM");
3457 else if (Matches(
"CREATE",
"COLLATION", MatchAny,
"FROM"))
3458 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_collations);
3459 else if (HeadMatches(
"CREATE",
"COLLATION", MatchAny,
"(*"))
3461 if (TailMatches(
"(|*,"))
3462 COMPLETE_WITH(
"LOCALE =",
"LC_COLLATE =",
"LC_CTYPE =",
3463 "PROVIDER =",
"DETERMINISTIC =");
3464 else if (TailMatches(
"PROVIDER",
"="))
3465 COMPLETE_WITH(
"libc",
"icu");
3466 else if (TailMatches(
"DETERMINISTIC",
"="))
3467 COMPLETE_WITH(
"true",
"false");
3471 else if (Matches(
"CREATE",
"DATABASE", MatchAny))
3472 COMPLETE_WITH(
"OWNER",
"TEMPLATE",
"ENCODING",
"TABLESPACE",
3473 "IS_TEMPLATE",
"STRATEGY",
3474 "ALLOW_CONNECTIONS",
"CONNECTION LIMIT",
3475 "LC_COLLATE",
"LC_CTYPE",
"LOCALE",
"OID",
3476 "LOCALE_PROVIDER",
"ICU_LOCALE");
3478 else if (Matches(
"CREATE",
"DATABASE", MatchAny,
"TEMPLATE"))
3479 COMPLETE_WITH_QUERY(Query_for_list_of_template_databases);
3480 else if (Matches(
"CREATE",
"DATABASE", MatchAny,
"STRATEGY"))
3481 COMPLETE_WITH(
"WAL_LOG",
"FILE_COPY");
3484 else if (Matches(
"CREATE",
"DOMAIN", MatchAny))
3485 COMPLETE_WITH(
"AS");
3486 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"AS"))
3487 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3488 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"AS", MatchAny))
3489 COMPLETE_WITH(
"COLLATE",
"DEFAULT",
"CONSTRAINT",
3490 "NOT NULL",
"NULL",
"CHECK (");
3491 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"COLLATE"))
3492 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_collations);
3496 else if (Matches(
"CREATE",
"EXTENSION"))
3497 COMPLETE_WITH_QUERY(Query_for_list_of_available_extensions);
3499 else if (Matches(
"CREATE",
"EXTENSION", MatchAny))
3500 COMPLETE_WITH(
"WITH SCHEMA",
"CASCADE",
"VERSION");
3502 else if (Matches(
"CREATE",
"EXTENSION", MatchAny,
"VERSION"))
3504 set_completion_reference(prev2_wd);
3505 COMPLETE_WITH_QUERY(Query_for_list_of_available_extension_versions);
3509 else if (Matches(
"CREATE",
"FOREIGN"))
3510 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
3513 else if (Matches(
"CREATE",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
3514 COMPLETE_WITH(
"HANDLER",
"VALIDATOR",
"OPTIONS");
3517 else if (Matches(
"CREATE",
"FOREIGN",
"TABLE", MatchAny))
3518 COMPLETE_WITH(
"(",
"PARTITION OF");
3522 else if (TailMatches(
"CREATE",
"UNIQUE"))
3523 COMPLETE_WITH(
"INDEX");
3529 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX"))
3530 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
3531 "ON",
"CONCURRENTLY");
3537 else if (TailMatches(
"INDEX|CONCURRENTLY", MatchAny,
"ON") ||
3538 TailMatches(
"INDEX|CONCURRENTLY",
"ON"))
3539 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexables);
3545 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX",
"CONCURRENTLY"))
3546 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
3549 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX", MatchAny) ||
3550 TailMatches(
"CREATE|UNIQUE",
"INDEX",
"CONCURRENTLY", MatchAny))
3551 COMPLETE_WITH(
"ON");
3557 else if (TailMatches(
"INDEX", MatchAny,
"ON", MatchAny) ||
3558 TailMatches(
"INDEX|CONCURRENTLY",
"ON", MatchAny))
3559 COMPLETE_WITH(
"(",
"USING");
3560 else if (TailMatches(
"INDEX", MatchAny,
"ON", MatchAny,
"(") ||
3561 TailMatches(
"INDEX|CONCURRENTLY",
"ON", MatchAny,
"("))
3562 COMPLETE_WITH_ATTR(prev2_wd);
3564 else if (TailMatches(
"ON", MatchAny,
"USING", MatchAny,
"("))
3565 COMPLETE_WITH_ATTR(prev4_wd);
3567 else if (TailMatches(
"INDEX", MatchAny, MatchAny,
"ON", MatchAny,
"USING") ||
3568 TailMatches(
"INDEX", MatchAny,
"ON", MatchAny,
"USING") ||
3569 TailMatches(
"INDEX",
"ON", MatchAny,
"USING"))
3570 COMPLETE_WITH_QUERY(Query_for_list_of_index_access_methods);
3571 else if (TailMatches(
"ON", MatchAny,
"USING", MatchAny) &&
3572 !TailMatches(
"POLICY", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny) &&
3573 !TailMatches(
"FOR", MatchAny, MatchAny, MatchAny))
3577 else if (Matches(
"CREATE",
"OR"))
3578 COMPLETE_WITH(
"REPLACE");
3582 else if (Matches(
"CREATE",
"POLICY", MatchAny))
3583 COMPLETE_WITH(
"ON");
3585 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON"))
3586 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3588 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny))
3589 COMPLETE_WITH(
"AS",
"FOR",
"TO",
"USING (",
"WITH CHECK (");
3591 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS"))
3592 COMPLETE_WITH(
"PERMISSIVE",
"RESTRICTIVE");
3598 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny))
3599 COMPLETE_WITH(
"FOR",
"TO",
"USING",
"WITH CHECK");
3601 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR"))
3602 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
3604 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"INSERT"))
3605 COMPLETE_WITH(
"TO",
"WITH CHECK (");
3607 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"SELECT|DELETE"))
3608 COMPLETE_WITH(
"TO",
"USING (");
3610 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"ALL|UPDATE"))
3611 COMPLETE_WITH(
"TO",
"USING (",
"WITH CHECK (");
3613 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"TO"))
3614 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3615 Keywords_for_list_of_grant_roles);
3617 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"USING"))
3624 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR"))
3625 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
3631 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"INSERT"))
3632 COMPLETE_WITH(
"TO",
"WITH CHECK (");
3638 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"SELECT|DELETE"))
3639 COMPLETE_WITH(
"TO",
"USING (");
3645 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"ALL|UPDATE"))
3646 COMPLETE_WITH(
"TO",
"USING (",
"WITH CHECK (");
3652 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"TO"))
3653 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3654 Keywords_for_list_of_grant_roles);
3660 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"USING"))
3665 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny))
3666 COMPLETE_WITH(
"FOR TABLE",
"FOR TABLES IN SCHEMA",
"FOR ALL TABLES",
"FOR ALL SEQUENCES",
"WITH (");
3667 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR"))
3668 COMPLETE_WITH(
"TABLE",
"TABLES IN SCHEMA",
"ALL TABLES",
"ALL SEQUENCES");
3669 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"ALL"))
3670 COMPLETE_WITH(
"TABLES",
"SEQUENCES");
3671 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"ALL",
"TABLES"))
3672 COMPLETE_WITH(
"WITH (");
3673 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLES"))
3674 COMPLETE_WITH(
"IN SCHEMA");
3675 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLE", MatchAny) && !ends_with(prev_wd,
','))
3676 COMPLETE_WITH(
"WHERE (",
"WITH (");
3678 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLE"))
3679 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3685 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE"))
3687 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE",
"("))
3688 COMPLETE_WITH_ATTR(prev3_wd);
3689 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE",
"(*)"))
3690 COMPLETE_WITH(
" WITH (");
3695 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLES",
"IN",
"SCHEMA"))
3696 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
3697 " AND nspname NOT LIKE E'pg\\\\_%%'",
3699 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLES",
"IN",
"SCHEMA", MatchAny) && (!ends_with(prev_wd,
',')))
3700 COMPLETE_WITH(
"WITH (");
3702 else if (Matches(
"CREATE",
"PUBLICATION", MatchAnyN,
"WITH",
"("))
3703 COMPLETE_WITH(
"publish",
"publish_generated_columns",
"publish_via_partition_root");
3707 else if (Matches(
"CREATE",
"RULE", MatchAny) ||
3708 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny))
3709 COMPLETE_WITH(
"AS ON");
3711 else if (Matches(
"CREATE",
"RULE", MatchAny,
"AS") ||
3712 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny,
"AS"))
3713 COMPLETE_WITH(
"ON");
3719 else if (Matches(
"CREATE",
"RULE", MatchAny,
"AS",
"ON") ||
3720 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny,
"AS",
"ON"))
3721 COMPLETE_WITH(
"SELECT",
"UPDATE",
"INSERT",
"DELETE");
3723 else if (TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE"))
3724 COMPLETE_WITH(
"TO");
3726 else if (TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE",
"TO"))
3727 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3730 else if (Matches(
"CREATE",
"SCHEMA"))
3731 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas,
3733 else if (Matches(
"CREATE",
"SCHEMA",
"AUTHORIZATION") ||
3734 Matches(
"CREATE",
"SCHEMA", MatchAny,
"AUTHORIZATION"))
3735 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3736 Keywords_for_list_of_owner_roles);
3737 else if (Matches(
"CREATE",
"SCHEMA",
"AUTHORIZATION", MatchAny) ||
3738 Matches(
"CREATE",
"SCHEMA", MatchAny,
"AUTHORIZATION", MatchAny))
3739 COMPLETE_WITH(
"CREATE",
"GRANT");
3740 else if (Matches(
"CREATE",
"SCHEMA", MatchAny))
3741 COMPLETE_WITH(
"AUTHORIZATION",
"CREATE",
"GRANT");
3744 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny) ||
3745 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny))
3746 COMPLETE_WITH(
"AS",
"INCREMENT BY",
"MINVALUE",
"MAXVALUE",
"NO",
3747 "CACHE",
"CYCLE",
"OWNED BY",
"START WITH");
3748 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny,
"AS") ||
3749 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny,
"AS"))
3750 COMPLETE_WITH_CS(
"smallint",
"integer",
"bigint");
3751 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny,
"NO") ||
3752 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny,
"NO"))
3753 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
3756 else if (Matches(
"CREATE",
"SERVER", MatchAny))
3757 COMPLETE_WITH(
"TYPE",
"VERSION",
"FOREIGN DATA WRAPPER");
3760 else if (Matches(
"CREATE",
"STATISTICS", MatchAny))
3761 COMPLETE_WITH(
"(",
"ON");
3762 else if (Matches(
"CREATE",
"STATISTICS", MatchAny,
"("))
3763 COMPLETE_WITH(
"ndistinct",
"dependencies",
"mcv");
3764 else if (Matches(
"CREATE",
"STATISTICS", MatchAny,
"(*)"))
3765 COMPLETE_WITH(
"ON");
3766 else if (Matches(
"CREATE",
"STATISTICS", MatchAny, MatchAnyN,
"FROM"))
3767 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3771 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY"))
3772 COMPLETE_WITH(
"SEQUENCE",
"TABLE",
"VIEW");
3774 else if (TailMatches(
"CREATE",
"UNLOGGED"))
3775 COMPLETE_WITH(
"TABLE",
"SEQUENCE");
3777 else if (TailMatches(
"PARTITION",
"BY"))
3778 COMPLETE_WITH(
"RANGE (",
"LIST (",
"HASH (");
3780 else if (TailMatches(
"PARTITION",
"OF"))
3781 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_tables);
3783 else if (TailMatches(
"PARTITION",
"OF", MatchAny))
3784 COMPLETE_WITH(
"FOR VALUES",
"DEFAULT");
3786 else if (TailMatches(
"CREATE",
"TABLE", MatchAny) ||
3787 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny))
3788 COMPLETE_WITH(
"(",
"AS",
"OF",
"PARTITION OF");
3790 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"OF") ||
3791 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"OF"))
3792 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_composite_datatypes);
3794 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"AS") ||
3795 TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)",
"AS") ||
3796 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"AS") ||
3797 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"(*)",
"AS"))
3798 COMPLETE_WITH(
"EXECUTE",
"SELECT",
"TABLE",
"VALUES",
"WITH");
3800 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)"))
3801 COMPLETE_WITH(
"AS",
"INHERITS (",
"PARTITION BY",
"USING",
"TABLESPACE",
"WITH (");
3802 else if (TailMatches(
"CREATE",
"UNLOGGED",
"TABLE", MatchAny,
"(*)"))
3803 COMPLETE_WITH(
"AS",
"INHERITS (",
"USING",
"TABLESPACE",
"WITH (");
3804 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"TABLE", MatchAny,
"(*)"))
3805 COMPLETE_WITH(
"AS",
"INHERITS (",
"ON COMMIT",
"PARTITION BY",
"USING",
3806 "TABLESPACE",
"WITH (");
3808 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)",
"USING") ||
3809 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"(*)",
"USING"))
3810 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
3812 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)",
"WITH",
"(") ||
3813 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"(*)",
"WITH",
"("))
3814 COMPLETE_WITH_LIST(table_storage_parameters);
3816 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"TABLE", MatchAny,
"(*)",
"ON",
"COMMIT"))
3817 COMPLETE_WITH(
"DELETE ROWS",
"DROP",
"PRESERVE ROWS");
3820 else if (Matches(
"CREATE",
"TABLESPACE", MatchAny))
3821 COMPLETE_WITH(
"OWNER",
"LOCATION");
3823 else if (Matches(
"CREATE",
"TABLESPACE", MatchAny,
"OWNER", MatchAny))
3824 COMPLETE_WITH(
"LOCATION");
3827 else if (Matches(
"CREATE",
"TEXT",
"SEARCH"))
3828 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3829 else if (Matches(
"CREATE",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE", MatchAny))
3833 else if (Matches(
"CREATE",
"TRANSFORM") ||
3834 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM"))
3835 COMPLETE_WITH(
"FOR");
3836 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR") ||
3837 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR"))
3838 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3839 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR", MatchAny) ||
3840 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR", MatchAny))
3841 COMPLETE_WITH(
"LANGUAGE");
3842 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE") ||
3843 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
3845 set_completion_reference(prev2_wd);
3846 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3850 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny))
3851 COMPLETE_WITH(
"CONNECTION");
3852 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny,
"CONNECTION", MatchAny))
3853 COMPLETE_WITH(
"PUBLICATION");
3854 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny,
"CONNECTION",
3855 MatchAny,
"PUBLICATION"))
3859 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAnyN,
"PUBLICATION", MatchAny))
3860 COMPLETE_WITH(
"WITH (");
3862 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAnyN,
"WITH",
"("))
3863 COMPLETE_WITH(
"binary",
"connect",
"copy_data",
"create_slot",
3864 "disable_on_error",
"enabled",
"failover",
3865 "max_retention_duration",
"origin",
3866 "password_required",
"retain_dead_tuples",
3867 "run_as_owner",
"slot_name",
"streaming",
3868 "synchronous_commit",
"two_phase");
3876 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny) ||
3877 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny))
3878 COMPLETE_WITH(
"BEFORE",
"AFTER",
"INSTEAD OF");
3884 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER") ||
3885 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER"))
3886 COMPLETE_WITH(
"INSERT",
"DELETE",
"UPDATE",
"TRUNCATE");
3888 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF") ||
3889 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF"))
3890 COMPLETE_WITH(
"INSERT",
"DELETE",
"UPDATE");
3896 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny) ||
3897 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny) ||
3898 TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny) ||
3899 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny))
3900 COMPLETE_WITH(
"ON",
"OR");
3907 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny,
"ON") ||
3908 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny,
"ON"))
3909 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3915 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny,
"ON") ||
3916 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny,
"ON"))
3917 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
3918 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3920 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3924 COMPLETE_WITH(
"NOT DEFERRABLE",
"DEFERRABLE",
"INITIALLY",
3925 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3927 COMPLETE_WITH(
"NOT DEFERRABLE",
"DEFERRABLE",
"INITIALLY",
3928 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3930 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3932 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3934 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3935 "INITIALLY",
"IMMEDIATE|DEFERRED") ||
3936 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3937 "INITIALLY",
"IMMEDIATE|DEFERRED"))
3940 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3942 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3944 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3946 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3948 COMPLETE_WITH(
"OLD TABLE",
"NEW TABLE");
3949 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3950 "OLD|NEW",
"TABLE") ||
3951 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3952 "OLD|NEW",
"TABLE"))
3953 COMPLETE_WITH(
"AS");
3954 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3955 "REFERENCING",
"OLD",
"TABLE",
"AS", MatchAny) ||
3956 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3957 "REFERENCING",
"OLD",
"TABLE",
"AS", MatchAny) ||
3958 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3959 "REFERENCING",
"OLD",
"TABLE", MatchAny) ||
3960 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3961 "REFERENCING",
"OLD",
"TABLE", MatchAny))
3964 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3966 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3968 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3969 "REFERENCING",
"NEW",
"TABLE",
"AS", MatchAny) ||
3970 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3971 "REFERENCING",
"NEW",
"TABLE",
"AS", MatchAny) ||
3972 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3973 "REFERENCING",
"NEW",
"TABLE", MatchAny) ||
3974 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3975 "REFERENCING",
"NEW",
"TABLE", MatchAny))
3978 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3980 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3982 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3983 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3984 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3985 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3986 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3987 "REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3988 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3989 "REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3990 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3991 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE", MatchAny) ||
3992 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3993 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE", MatchAny) ||
3994 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3995 "REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE", MatchAny) ||
3996 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3997 "REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE", MatchAny))
4000 COMPLETE_WITH(
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
4002 COMPLETE_WITH(
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
4004 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
4006 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
4008 COMPLETE_WITH(
"EACH",
"ROW",
"STATEMENT");
4009 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
4011 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
4013 COMPLETE_WITH(
"ROW",
"STATEMENT");
4014 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
4015 "FOR",
"EACH",
"ROW|STATEMENT") ||
4016 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
4017 "FOR",
"EACH",
"ROW|STATEMENT") ||
4018 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
4019 "FOR",
"ROW|STATEMENT") ||
4020 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
4021 "FOR",
"ROW|STATEMENT"))
4024 COMPLETE_WITH(
"WHEN (",
"EXECUTE FUNCTION");
4026 COMPLETE_WITH(
"WHEN (",
"EXECUTE PROCEDURE");
4028 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
4030 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
4034 COMPLETE_WITH(
"EXECUTE FUNCTION");
4036 COMPLETE_WITH(
"EXECUTE PROCEDURE");
4043 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
4045 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
4049 COMPLETE_WITH(
"FUNCTION");
4051 COMPLETE_WITH(
"PROCEDURE");
4053 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
4054 "EXECUTE",
"FUNCTION|PROCEDURE") ||
4055 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
4056 "EXECUTE",
"FUNCTION|PROCEDURE"))
4057 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
4060 else if (Matches(
"CREATE",
"ROLE|GROUP|USER", MatchAny) &&
4061 !TailMatches(
"USER",
"MAPPING"))
4062 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
4063 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
4064 "LOGIN",
"NOBYPASSRLS",
4065 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
4066 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
4067 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
4068 "VALID UNTIL",
"WITH");
4071 else if (Matches(
"CREATE",
"ROLE|GROUP|USER", MatchAny,
"WITH"))
4073 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
4074 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
4075 "LOGIN",
"NOBYPASSRLS",
4076 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
4077 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
4078 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
4082 else if (Matches(
"CREATE",
"ROLE|USER|GROUP", MatchAny,
"IN"))
4083 COMPLETE_WITH(
"GROUP",
"ROLE");
4086 else if (Matches(
"CREATE",
"TYPE", MatchAny))
4087 COMPLETE_WITH(
"(",
"AS");
4088 else if (Matches(
"CREATE",
"TYPE", MatchAny,
"AS"))
4089 COMPLETE_WITH(
"ENUM",
"RANGE",
"(");
4090 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"AS",
"("))
4092 if (TailMatches(
"(|*,", MatchAny))
4093 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4094 else if (TailMatches(
"(|*,", MatchAny, MatchAnyExcept(
"*)")))
4095 COMPLETE_WITH(
"COLLATE",
",",
")");
4097 else if (Matches(
"CREATE",
"TYPE", MatchAny,
"AS",
"ENUM|RANGE"))
4099 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"("))
4101 if (TailMatches(
"(|*,"))
4102 COMPLETE_WITH(
"INPUT",
"OUTPUT",
"RECEIVE",
"SEND",
4103 "TYPMOD_IN",
"TYPMOD_OUT",
"ANALYZE",
"SUBSCRIPT",
4104 "INTERNALLENGTH",
"PASSEDBYVALUE",
"ALIGNMENT",
4105 "STORAGE",
"LIKE",
"CATEGORY",
"PREFERRED",
4106 "DEFAULT",
"ELEMENT",
"DELIMITER",
4108 else if (TailMatches(
"(*|*,", MatchAnyExcept(
"*=")))
4110 else if (TailMatches(
"=", MatchAnyExcept(
"*)")))
4111 COMPLETE_WITH(
",",
")");
4113 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"AS",
"RANGE",
"("))
4115 if (TailMatches(
"(|*,"))
4116 COMPLETE_WITH(
"SUBTYPE",
"SUBTYPE_OPCLASS",
"COLLATION",
4117 "CANONICAL",
"SUBTYPE_DIFF",
4118 "MULTIRANGE_TYPE_NAME");
4119 else if (TailMatches(
"(*|*,", MatchAnyExcept(
"*=")))
4121 else if (TailMatches(
"=", MatchAnyExcept(
"*)")))
4122 COMPLETE_WITH(
",",
")");
4127 else if (TailMatches(
"CREATE",
"VIEW", MatchAny) ||
4128 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny))
4129 COMPLETE_WITH(
"AS",
"WITH");
4131 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"AS") ||
4132 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"AS"))
4133 COMPLETE_WITH(
"SELECT");
4135 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH") ||
4136 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH"))
4138 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(") ||
4139 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"("))
4140 COMPLETE_WITH_LIST(view_optional_parameters);
4141 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option") ||
4142 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option"))
4144 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option",
"=") ||
4145 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option",
"="))
4146 COMPLETE_WITH(
"local",
"cascaded");
4148 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(*)") ||
4149 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(*)"))
4150 COMPLETE_WITH(
"AS");
4152 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(*)",
"AS") ||
4153 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(*)",
"AS"))
4154 COMPLETE_WITH(
"SELECT");
4157 else if (Matches(
"CREATE",
"MATERIALIZED"))
4158 COMPLETE_WITH(
"VIEW");
4160 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny))
4161 COMPLETE_WITH(
"AS",
"USING");
4167 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny,
"USING"))
4168 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
4170 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny,
"USING", MatchAny))
4171 COMPLETE_WITH(
"AS");
4177 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny,
"AS") ||
4178 Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny,
"USING", MatchAny,
"AS"))
4179 COMPLETE_WITH(
"SELECT");
4182 else if (Matches(
"CREATE",
"EVENT"))
4183 COMPLETE_WITH(
"TRIGGER");
4185 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny))
4186 COMPLETE_WITH(
"ON");
4188 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny,
"ON"))
4189 COMPLETE_WITH(
"ddl_command_start",
"ddl_command_end",
"login",
4190 "sql_drop",
"table_rewrite");
4197 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny,
"ON", MatchAny))
4200 COMPLETE_WITH(
"WHEN TAG IN (",
"EXECUTE FUNCTION");
4202 COMPLETE_WITH(
"WHEN TAG IN (",
"EXECUTE PROCEDURE");
4204 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAnyN,
"WHEN|AND", MatchAny,
"IN",
"(*)"))
4207 COMPLETE_WITH(
"EXECUTE FUNCTION");
4209 COMPLETE_WITH(
"EXECUTE PROCEDURE");
4211 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAnyN,
"EXECUTE",
"FUNCTION|PROCEDURE"))
4212 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
4215 else if (Matches(
"DEALLOCATE"))
4216 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_prepared_statements,
4225 else if (Matches(
"DECLARE", MatchAny))
4226 COMPLETE_WITH(
"BINARY",
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
4236 else if (Matches(
"DECLARE", MatchAnyN,
"BINARY"))
4237 COMPLETE_WITH(
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
"CURSOR");
4238 else if (Matches(
"DECLARE", MatchAnyN,
"ASENSITIVE|INSENSITIVE"))
4239 COMPLETE_WITH(
"SCROLL",
"NO SCROLL",
"CURSOR");
4240 else if (Matches(
"DECLARE", MatchAnyN,
"SCROLL"))
4241 COMPLETE_WITH(
"CURSOR");
4243 else if (Matches(
"DECLARE", MatchAnyN,
"NO"))
4244 COMPLETE_WITH(
"SCROLL");
4250 else if (Matches(
"DECLARE", MatchAnyN,
"CURSOR"))
4251 COMPLETE_WITH(
"WITH HOLD",
"WITHOUT HOLD",
"FOR");
4253 else if (Matches(
"DECLARE", MatchAnyN,
"CURSOR",
"WITH|WITHOUT"))
4254 COMPLETE_WITH(
"HOLD");
4256 else if (Matches(
"DECLARE", MatchAnyN,
"CURSOR",
"WITH|WITHOUT",
"HOLD"))
4257 COMPLETE_WITH(
"FOR");
4261 else if (Matches(
"DELETE"))
4262 COMPLETE_WITH(
"FROM");
4264 else if (TailMatches(
"DELETE",
"FROM"))
4265 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
4267 else if (TailMatches(
"DELETE",
"FROM", MatchAny))
4268 COMPLETE_WITH(
"USING",
"WHERE");
4272 else if (Matches(
"DISCARD"))
4273 COMPLETE_WITH(
"ALL",
"PLANS",
"SEQUENCES",
"TEMP");
4276 else if (Matches(
"DO"))
4277 COMPLETE_WITH(
"LANGUAGE");
4281 else if (Matches(
"DROP",
4282 "COLLATION|CONVERSION|DOMAIN|EXTENSION|LANGUAGE|PUBLICATION|SCHEMA|SEQUENCE|SERVER|SUBSCRIPTION|STATISTICS|TABLE|TYPE|VIEW",
4284 Matches(
"DROP",
"ACCESS",
"METHOD", MatchAny) ||
4285 Matches(
"DROP",
"EVENT",
"TRIGGER", MatchAny) ||
4286 Matches(
"DROP",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny) ||
4287 Matches(
"DROP",
"FOREIGN",
"TABLE", MatchAny) ||
4288 Matches(
"DROP",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE", MatchAny))
4289 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4290 else if (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny) &&
4291 ends_with(prev_wd,
')'))
4292 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4295 else if (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny))
4297 else if (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny,
"("))
4298 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
4299 else if (Matches(
"DROP",
"FOREIGN"))
4300 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
4301 else if (Matches(
"DROP",
"DATABASE", MatchAny))
4302 COMPLETE_WITH(
"WITH (");
4303 else if (HeadMatches(
"DROP",
"DATABASE") && (ends_with(prev_wd,
'(')))
4304 COMPLETE_WITH(
"FORCE");
4307 else if (Matches(
"DROP",
"INDEX"))
4308 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
4310 else if (Matches(
"DROP",
"INDEX",
"CONCURRENTLY"))
4311 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
4312 else if (Matches(
"DROP",
"INDEX", MatchAny))
4313 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4314 else if (Matches(
"DROP",
"INDEX",
"CONCURRENTLY", MatchAny))
4315 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4318 else if (Matches(
"DROP",
"MATERIALIZED"))
4319 COMPLETE_WITH(
"VIEW");
4320 else if (Matches(
"DROP",
"MATERIALIZED",
"VIEW"))
4321 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
4322 else if (Matches(
"DROP",
"MATERIALIZED",
"VIEW", MatchAny))
4323 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4326 else if (Matches(
"DROP",
"OWNED"))
4327 COMPLETE_WITH(
"BY");
4328 else if (Matches(
"DROP",
"OWNED",
"BY"))
4329 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4330 else if (Matches(
"DROP",
"OWNED",
"BY", MatchAny))
4331 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4334 else if (Matches(
"DROP",
"TEXT",
"SEARCH"))
4335 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
4338 else if (Matches(
"DROP",
"TRIGGER", MatchAny))
4339 COMPLETE_WITH(
"ON");
4340 else if (Matches(
"DROP",
"TRIGGER", MatchAny,
"ON"))
4342 set_completion_reference(prev2_wd);
4343 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
4345 else if (Matches(
"DROP",
"TRIGGER", MatchAny,
"ON", MatchAny))
4346 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4349 else if (Matches(
"DROP",
"ACCESS"))
4350 COMPLETE_WITH(
"METHOD");
4351 else if (Matches(
"DROP",
"ACCESS",
"METHOD"))
4352 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
4355 else if (Matches(
"DROP",
"EVENT"))
4356 COMPLETE_WITH(
"TRIGGER");
4357 else if (Matches(
"DROP",
"EVENT",
"TRIGGER"))
4358 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
4361 else if (Matches(
"DROP",
"POLICY"))
4362 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
4364 else if (Matches(
"DROP",
"POLICY", MatchAny))
4365 COMPLETE_WITH(
"ON");
4367 else if (Matches(
"DROP",
"POLICY", MatchAny,
"ON"))
4369 set_completion_reference(prev2_wd);
4370 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
4372 else if (Matches(
"DROP",
"POLICY", MatchAny,
"ON", MatchAny))
4373 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4376 else if (Matches(
"DROP",
"RULE", MatchAny))
4377 COMPLETE_WITH(
"ON");
4378 else if (Matches(
"DROP",
"RULE", MatchAny,
"ON"))
4380 set_completion_reference(prev2_wd);
4381 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
4383 else if (Matches(
"DROP",
"RULE", MatchAny,
"ON", MatchAny))
4384 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4387 else if (Matches(
"DROP",
"TRANSFORM"))
4388 COMPLETE_WITH(
"FOR");
4389 else if (Matches(
"DROP",
"TRANSFORM",
"FOR"))
4390 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4391 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny))
4392 COMPLETE_WITH(
"LANGUAGE");
4393 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
4395 set_completion_reference(prev2_wd);
4396 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
4398 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE", MatchAny))
4399 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4402 else if (Matches(
"EXECUTE"))
4403 COMPLETE_WITH_QUERY(Query_for_list_of_prepared_statements);
4409 else if (Matches(
"EXPLAIN"))
4410 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4411 "MERGE INTO",
"EXECUTE",
"ANALYZE",
"VERBOSE");
4412 else if (HeadMatches(
"EXPLAIN",
"(*") &&
4413 !HeadMatches(
"EXPLAIN",
"(*)"))
4420 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
4421 COMPLETE_WITH(
"ANALYZE",
"VERBOSE",
"COSTS",
"SETTINGS",
"GENERIC_PLAN",
4422 "BUFFERS",
"SERIALIZE",
"WAL",
"TIMING",
"SUMMARY",
4423 "MEMORY",
"FORMAT");
4424 else if (TailMatches(
"ANALYZE|VERBOSE|COSTS|SETTINGS|GENERIC_PLAN|BUFFERS|WAL|TIMING|SUMMARY|MEMORY"))
4425 COMPLETE_WITH(
"ON",
"OFF");
4426 else if (TailMatches(
"SERIALIZE"))
4427 COMPLETE_WITH(
"TEXT",
"NONE",
"BINARY");
4428 else if (TailMatches(
"FORMAT"))
4429 COMPLETE_WITH(
"TEXT",
"XML",
"JSON",
"YAML");
4431 else if (Matches(
"EXPLAIN",
"ANALYZE"))
4432 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4433 "MERGE INTO",
"EXECUTE",
"VERBOSE");
4434 else if (Matches(
"EXPLAIN",
"(*)") ||
4435 Matches(
"EXPLAIN",
"VERBOSE") ||
4436 Matches(
"EXPLAIN",
"ANALYZE",
"VERBOSE"))
4437 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4438 "MERGE INTO",
"EXECUTE");
4446 else if (Matches(
"FETCH|MOVE"))
4447 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
4464 else if (Matches(
"FETCH|MOVE",
"BACKWARD|FORWARD"))
4465 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
4475 else if (Matches(
"FETCH|MOVE",
"ABSOLUTE|BACKWARD|FORWARD|RELATIVE",
4476 MatchAnyExcept(
"FROM|IN")) ||
4477 Matches(
"FETCH|MOVE",
"ALL|NEXT|PRIOR|FIRST|LAST"))
4478 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
4482 else if (Matches(
"FETCH|MOVE", MatchAnyN,
"FROM|IN"))
4483 COMPLETE_WITH_QUERY(Query_for_list_of_cursors);
4487 else if (TailMatches(
"FOREIGN",
"DATA",
"WRAPPER") &&
4488 !TailMatches(
"CREATE", MatchAny, MatchAny, MatchAny))
4489 COMPLETE_WITH_QUERY(Query_for_list_of_fdws);
4491 else if (Matches(
"CREATE",
"SERVER", MatchAnyN,
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
4492 COMPLETE_WITH(
"OPTIONS");
4495 else if (TailMatches(
"FOREIGN",
"TABLE") &&
4496 !TailMatches(
"CREATE", MatchAny, MatchAny))
4497 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
4500 else if (TailMatches(
"FOREIGN",
"SERVER"))
4501 COMPLETE_WITH_QUERY(Query_for_list_of_servers);
4508 else if (TailMatches(
"GRANT|REVOKE") ||
4509 TailMatches(
"REVOKE",
"ADMIN|GRANT|INHERIT|SET",
"OPTION",
"FOR"))
4515 if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4517 if (TailMatches(
"GRANT") ||
4518 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR"))
4519 COMPLETE_WITH(
"SELECT",
"INSERT",
"UPDATE",
4520 "DELETE",
"TRUNCATE",
"REFERENCES",
"TRIGGER",
4521 "CREATE",
"EXECUTE",
"USAGE",
"MAINTAIN",
"ALL");
4522 else if (TailMatches(
"REVOKE"))
4523 COMPLETE_WITH(
"SELECT",
"INSERT",
"UPDATE",
4524 "DELETE",
"TRUNCATE",
"REFERENCES",
"TRIGGER",
4525 "CREATE",
"EXECUTE",
"USAGE",
"MAINTAIN",
"ALL",
4526 "GRANT OPTION FOR");
4528 else if (TailMatches(
"GRANT"))
4529 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4530 Privilege_options_of_grant_and_revoke);
4531 else if (TailMatches(
"REVOKE"))
4532 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4533 Privilege_options_of_grant_and_revoke,
4536 "INHERIT OPTION FOR",
4538 else if (TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR"))
4539 COMPLETE_WITH(Privilege_options_of_grant_and_revoke);
4540 else if (TailMatches(
"REVOKE",
"ADMIN|INHERIT|SET",
"OPTION",
"FOR"))
4541 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4544 else if (TailMatches(
"GRANT|REVOKE",
"ALTER") ||
4545 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER"))
4546 COMPLETE_WITH(
"SYSTEM");
4548 else if (TailMatches(
"REVOKE",
"SET"))
4549 COMPLETE_WITH(
"ON PARAMETER",
"OPTION FOR");
4550 else if (TailMatches(
"GRANT",
"SET") ||
4551 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"SET") ||
4552 TailMatches(
"GRANT|REVOKE",
"ALTER",
"SYSTEM") ||
4553 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER",
"SYSTEM"))
4554 COMPLETE_WITH(
"ON PARAMETER");
4556 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"PARAMETER") ||
4557 TailMatches(
"GRANT|REVOKE", MatchAny, MatchAny,
"ON",
"PARAMETER") ||
4558 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"PARAMETER") ||
4559 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny, MatchAny,
"ON",
"PARAMETER"))
4560 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_alter_system_set_vars);
4562 else if (TailMatches(
"GRANT", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4563 TailMatches(
"GRANT", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny))
4564 COMPLETE_WITH(
"TO");
4566 else if (TailMatches(
"REVOKE", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4567 TailMatches(
"REVOKE", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4568 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4569 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny))
4570 COMPLETE_WITH(
"FROM");
4576 else if (TailMatches(
"GRANT|REVOKE", MatchAny) ||
4577 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny))
4579 if (TailMatches(
"SELECT|INSERT|UPDATE|DELETE|TRUNCATE|REFERENCES|TRIGGER|CREATE|CONNECT|TEMPORARY|TEMP|EXECUTE|USAGE|MAINTAIN|ALL"))
4580 COMPLETE_WITH(
"ON");
4581 else if (TailMatches(
"GRANT", MatchAny))
4582 COMPLETE_WITH(
"TO");
4584 COMPLETE_WITH(
"FROM");
4594 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON") ||
4595 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON"))
4601 if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4602 COMPLETE_WITH(
"TABLES",
"SEQUENCES",
"FUNCTIONS",
"PROCEDURES",
"ROUTINES",
"TYPES",
"SCHEMAS",
"LARGE OBJECTS");
4604 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_grantables,
4605 "ALL FUNCTIONS IN SCHEMA",
4606 "ALL PROCEDURES IN SCHEMA",
4607 "ALL ROUTINES IN SCHEMA",
4608 "ALL SEQUENCES IN SCHEMA",
4609 "ALL TABLES IN SCHEMA",
4612 "FOREIGN DATA WRAPPER",
4626 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"ALL") ||
4627 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"ALL"))
4628 COMPLETE_WITH(
"FUNCTIONS IN SCHEMA",
4629 "PROCEDURES IN SCHEMA",
4630 "ROUTINES IN SCHEMA",
4631 "SEQUENCES IN SCHEMA",
4632 "TABLES IN SCHEMA");
4640 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON", MatchAny) ||
4641 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON", MatchAny))
4643 if (TailMatches(
"DATABASE"))
4644 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
4645 else if (TailMatches(
"DOMAIN"))
4646 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
4647 else if (TailMatches(
"FUNCTION"))
4648 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
4649 else if (TailMatches(
"FOREIGN"))
4650 COMPLETE_WITH(
"DATA WRAPPER",
"SERVER");
4651 else if (TailMatches(
"LANGUAGE"))
4652 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
4653 else if (TailMatches(
"LARGE"))
4655 if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4656 COMPLETE_WITH(
"OBJECTS");
4658 COMPLETE_WITH(
"OBJECT");
4660 else if (TailMatches(
"PROCEDURE"))
4661 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_procedures);
4662 else if (TailMatches(
"ROUTINE"))
4663 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
4664 else if (TailMatches(
"SCHEMA"))
4665 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
4666 else if (TailMatches(
"SEQUENCE"))
4667 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_sequences);
4668 else if (TailMatches(
"TABLE"))
4669 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_grantables);
4670 else if (TailMatches(
"TABLESPACE"))
4671 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
4672 else if (TailMatches(
"TYPE"))
4673 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4674 else if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny))
4675 COMPLETE_WITH(
"TO");
4677 COMPLETE_WITH(
"FROM");
4684 else if (Matches(
"GRANT", MatchAnyN,
"TO") ||
4685 Matches(
"REVOKE", MatchAnyN,
"FROM"))
4686 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4687 Keywords_for_list_of_grant_roles);
4692 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny))
4693 COMPLETE_WITH(
"WITH ADMIN",
4696 "WITH GRANT OPTION",
4698 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny,
"WITH"))
4699 COMPLETE_WITH(
"ADMIN",
4703 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny,
"WITH",
"ADMIN|INHERIT|SET"))
4704 COMPLETE_WITH(
"OPTION",
"TRUE",
"FALSE");
4705 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny,
"WITH", MatchAny,
"OPTION"))
4706 COMPLETE_WITH(
"GRANTED BY");
4707 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny,
"WITH", MatchAny,
"OPTION",
"GRANTED",
"BY"))
4708 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4709 Keywords_for_list_of_grant_roles);
4711 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES", MatchAnyN,
"TO|FROM"))
4712 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4713 Keywords_for_list_of_grant_roles);
4715 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES", MatchAnyN,
"TO", MatchAny))
4716 COMPLETE_WITH(
"WITH GRANT OPTION");
4718 else if (Matches(
"GRANT|REVOKE", MatchAnyN,
"ON", MatchAny, MatchAny) &&
4719 !TailMatches(
"FOREIGN",
"SERVER") && !TailMatches(
"LARGE",
"OBJECT"))
4721 if (Matches(
"GRANT", MatchAnyN,
"ON", MatchAny, MatchAny))
4722 COMPLETE_WITH(
"TO");
4724 COMPLETE_WITH(
"FROM");
4728 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"ALL", MatchAny,
"IN",
"SCHEMA", MatchAny) ||
4729 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"ALL", MatchAny,
"IN",
"SCHEMA", MatchAny))
4731 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4732 COMPLETE_WITH(
"TO");
4734 COMPLETE_WITH(
"FROM");
4738 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny) ||
4739 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
4741 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4742 COMPLETE_WITH(
"TO");
4744 COMPLETE_WITH(
"FROM");
4748 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"FOREIGN",
"SERVER", MatchAny) ||
4749 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"FOREIGN",
"SERVER", MatchAny))
4751 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4752 COMPLETE_WITH(
"TO");
4754 COMPLETE_WITH(
"FROM");
4758 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"LARGE",
"OBJECT", MatchAny) ||
4759 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"LARGE",
"OBJECT", MatchAny))
4761 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4762 COMPLETE_WITH(
"TO");
4764 COMPLETE_WITH(
"FROM");
4768 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"LARGE",
"OBJECTS") ||
4769 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"LARGE",
"OBJECTS"))
4771 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny))
4772 COMPLETE_WITH(
"TO");
4774 COMPLETE_WITH(
"FROM");
4778 else if (TailMatches(
"FROM", MatchAny,
"GROUP"))
4779 COMPLETE_WITH(
"BY");
4782 else if (Matches(
"IMPORT"))
4783 COMPLETE_WITH(
"FOREIGN SCHEMA");
4784 else if (Matches(
"IMPORT",
"FOREIGN"))
4785 COMPLETE_WITH(
"SCHEMA");
4786 else if (Matches(
"IMPORT",
"FOREIGN",
"SCHEMA", MatchAny))
4787 COMPLETE_WITH(
"EXCEPT (",
"FROM SERVER",
"LIMIT TO (");
4788 else if (TailMatches(
"LIMIT",
"TO",
"(*)") ||
4789 TailMatches(
"EXCEPT",
"(*)"))
4790 COMPLETE_WITH(
"FROM SERVER");
4791 else if (TailMatches(
"FROM",
"SERVER", MatchAny))
4792 COMPLETE_WITH(
"INTO");
4793 else if (TailMatches(
"FROM",
"SERVER", MatchAny,
"INTO"))
4794 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
4795 else if (TailMatches(
"FROM",
"SERVER", MatchAny,
"INTO", MatchAny))
4796 COMPLETE_WITH(
"OPTIONS (");
4800 else if (TailMatches(
"NOT",
"MATCHED",
"THEN",
"INSERT"))
4801 COMPLETE_WITH(
"VALUES",
"(");
4803 else if (TailMatches(
"INSERT"))
4804 COMPLETE_WITH(
"INTO");
4806 else if (TailMatches(
"INSERT",
"INTO"))
4807 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
4809 else if (TailMatches(
"INSERT",
"INTO", MatchAny,
"("))
4810 COMPLETE_WITH_ATTR(prev2_wd);
4816 else if (TailMatches(
"INSERT",
"INTO", MatchAny))
4817 COMPLETE_WITH(
"(",
"DEFAULT VALUES",
"SELECT",
"TABLE",
"VALUES",
"OVERRIDING");
4823 else if (TailMatches(
"INSERT",
"INTO", MatchAny, MatchAny) &&
4824 ends_with(prev_wd,
')'))
4825 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES",
"OVERRIDING");
4828 else if (TailMatches(
"OVERRIDING"))
4829 COMPLETE_WITH(
"SYSTEM VALUE",
"USER VALUE");
4832 else if (TailMatches(
"OVERRIDING", MatchAny,
"VALUE"))
4833 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES");
4836 else if (TailMatches(
"VALUES") && !TailMatches(
"DEFAULT",
"VALUES"))
4841 else if (Matches(
"LOCK"))
4842 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
4844 else if (Matches(
"LOCK",
"TABLE"))
4845 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
4847 else if (Matches(
"LOCK",
"TABLE",
"ONLY") || Matches(
"LOCK",
"ONLY"))
4848 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
4852 else if (Matches(
"LOCK", MatchAnyExcept(
"TABLE|ONLY")) ||
4853 Matches(
"LOCK",
"TABLE", MatchAnyExcept(
"ONLY")) ||
4854 Matches(
"LOCK",
"ONLY", MatchAny) ||
4855 Matches(
"LOCK",
"TABLE",
"ONLY", MatchAny))
4856 COMPLETE_WITH(
"IN",
"NOWAIT");
4859 else if (Matches(
"LOCK", MatchAnyN,
"IN"))
4860 COMPLETE_WITH(
"ACCESS SHARE MODE",
4861 "ROW SHARE MODE",
"ROW EXCLUSIVE MODE",
4862 "SHARE UPDATE EXCLUSIVE MODE",
"SHARE MODE",
4863 "SHARE ROW EXCLUSIVE MODE",
4864 "EXCLUSIVE MODE",
"ACCESS EXCLUSIVE MODE");
4870 else if (Matches(
"LOCK", MatchAnyN,
"IN",
"ACCESS|ROW"))
4871 COMPLETE_WITH(
"EXCLUSIVE MODE",
"SHARE MODE");
4874 else if (Matches(
"LOCK", MatchAnyN,
"IN",
"SHARE"))
4875 COMPLETE_WITH(
"MODE",
"ROW EXCLUSIVE MODE",
4876 "UPDATE EXCLUSIVE MODE");
4879 else if (Matches(
"LOCK", MatchAnyN,
"MODE"))
4880 COMPLETE_WITH(
"NOWAIT");
4883 else if (TailMatches(
"MERGE"))
4884 COMPLETE_WITH(
"INTO");
4885 else if (TailMatches(
"MERGE",
"INTO"))
4886 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_mergetargets);
4889 else if (TailMatches(
"MERGE",
"INTO", MatchAny))
4890 COMPLETE_WITH(
"USING",
"AS");
4891 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny) ||
4892 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAnyExcept(
"USING|AS")))
4893 COMPLETE_WITH(
"USING");
4899 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING") ||
4900 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING") ||
4901 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING"))
4902 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
4908 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING", MatchAny) ||
4909 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny) ||
4910 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING", MatchAny))
4911 COMPLETE_WITH(
"AS",
"ON");
4912 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING", MatchAny,
"AS", MatchAny) ||
4913 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny,
"AS", MatchAny) ||
4914 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING", MatchAny,
"AS", MatchAny) ||
4915 TailMatches(
"MERGE",
"INTO", MatchAny,
"USING", MatchAny, MatchAnyExcept(
"ON|AS")) ||
4916 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny, MatchAnyExcept(
"ON|AS")) ||
4917 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING", MatchAny, MatchAnyExcept(
"ON|AS")))
4918 COMPLETE_WITH(
"ON");
4921 else if (TailMatches(
"INTO", MatchAny,
"USING", MatchAny,
"ON"))
4922 COMPLETE_WITH_ATTR(prev4_wd);
4923 else if (TailMatches(
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny,
"AS", MatchAny,
"ON"))
4924 COMPLETE_WITH_ATTR(prev8_wd);
4925 else if (TailMatches(
"INTO", MatchAny, MatchAny,
"USING", MatchAny, MatchAny,
"ON"))
4926 COMPLETE_WITH_ATTR(prev6_wd);
4933 else if (TailMatches(
"USING", MatchAny,
"ON", MatchAny) ||
4934 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny) ||
4935 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny) ||
4936 TailMatches(
"USING", MatchAny,
"ON", MatchAny, MatchAnyExcept(
"WHEN"), MatchAnyExcept(
"WHEN")) ||
4937 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny, MatchAnyExcept(
"WHEN"), MatchAnyExcept(
"WHEN")) ||
4938 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny, MatchAnyExcept(
"WHEN"), MatchAnyExcept(
"WHEN")))
4939 COMPLETE_WITH(
"WHEN MATCHED",
"WHEN NOT MATCHED");
4940 else if (TailMatches(
"USING", MatchAny,
"ON", MatchAny,
"WHEN") ||
4941 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny,
"WHEN") ||
4942 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny,
"WHEN") ||
4943 TailMatches(
"USING", MatchAny,
"ON", MatchAny, MatchAny, MatchAny,
"WHEN") ||
4944 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny, MatchAny, MatchAny,
"WHEN") ||
4945 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny, MatchAny, MatchAny,
"WHEN"))
4946 COMPLETE_WITH(
"MATCHED",
"NOT MATCHED");
4952 else if (TailMatches(
"WHEN",
"MATCHED") ||
4953 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"SOURCE|TARGET"))
4954 COMPLETE_WITH(
"THEN",
"AND");
4957 else if (TailMatches(
"WHEN",
"NOT",
"MATCHED"))
4958 COMPLETE_WITH(
"BY",
"THEN",
"AND");
4961 else if (TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY"))
4962 COMPLETE_WITH(
"SOURCE",
"TARGET");
4968 else if (TailMatches(
"WHEN",
"MATCHED",
"THEN") ||
4969 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"SOURCE",
"THEN"))
4970 COMPLETE_WITH(
"UPDATE SET",
"DELETE",
"DO NOTHING");
4975 else if (TailMatches(
"WHEN",
"NOT",
"MATCHED",
"THEN") ||
4976 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"TARGET",
"THEN"))
4977 COMPLETE_WITH(
"INSERT",
"DO NOTHING");
4980 else if (TailMatches(
"NOTIFY"))
4981 COMPLETE_WITH_QUERY(Query_for_list_of_channels);
4984 else if (TailMatches(
"OPTIONS"))
4988 else if (TailMatches(
"OWNER",
"TO"))
4989 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4990 Keywords_for_list_of_owner_roles);
4993 else if (TailMatches(
"FROM", MatchAny,
"ORDER"))
4994 COMPLETE_WITH(
"BY");
4995 else if (TailMatches(
"FROM", MatchAny,
"ORDER",
"BY"))
4996 COMPLETE_WITH_ATTR(prev3_wd);
4999 else if (Matches(
"PREPARE", MatchAny,
"AS"))
5000 COMPLETE_WITH(
"SELECT",
"UPDATE",
"INSERT INTO",
"DELETE FROM",
5001 "MERGE INTO",
"VALUES",
"WITH",
"TABLE");
5009 else if (Matches(
"REASSIGN"))
5010 COMPLETE_WITH(
"OWNED BY");
5011 else if (Matches(
"REASSIGN",
"OWNED"))
5012 COMPLETE_WITH(
"BY");
5013 else if (Matches(
"REASSIGN",
"OWNED",
"BY"))
5014 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
5015 else if (Matches(
"REASSIGN",
"OWNED",
"BY", MatchAny))
5016 COMPLETE_WITH(
"TO");
5017 else if (Matches(
"REASSIGN",
"OWNED",
"BY", MatchAny,
"TO"))
5018 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
5021 else if (Matches(
"REFRESH"))
5022 COMPLETE_WITH(
"MATERIALIZED VIEW");
5023 else if (Matches(
"REFRESH",
"MATERIALIZED"))
5024 COMPLETE_WITH(
"VIEW");
5025 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW"))
5026 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_matviews,
5028 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY"))
5029 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
5030 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny))
5031 COMPLETE_WITH(
"WITH");
5032 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny))
5033 COMPLETE_WITH(
"WITH");
5034 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny,
"WITH"))
5035 COMPLETE_WITH(
"NO DATA",
"DATA");
5036 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny,
"WITH"))
5037 COMPLETE_WITH(
"NO DATA",
"DATA");
5038 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny,
"WITH",
"NO"))
5039 COMPLETE_WITH(
"DATA");
5040 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny,
"WITH",
"NO"))
5041 COMPLETE_WITH(
"DATA");
5044 else if (Matches(
"REINDEX") ||
5045 Matches(
"REINDEX",
"(*)"))
5046 COMPLETE_WITH(
"TABLE",
"INDEX",
"SYSTEM",
"SCHEMA",
"DATABASE");
5047 else if (Matches(
"REINDEX",
"TABLE") ||
5048 Matches(
"REINDEX",
"(*)",
"TABLE"))
5049 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexables,
5051 else if (Matches(
"REINDEX",
"INDEX") ||
5052 Matches(
"REINDEX",
"(*)",
"INDEX"))
5053 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
5055 else if (Matches(
"REINDEX",
"SCHEMA") ||
5056 Matches(
"REINDEX",
"(*)",
"SCHEMA"))
5057 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas,
5059 else if (Matches(
"REINDEX",
"SYSTEM|DATABASE") ||
5060 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE"))
5061 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_databases,
5063 else if (Matches(
"REINDEX",
"TABLE",
"CONCURRENTLY") ||
5064 Matches(
"REINDEX",
"(*)",
"TABLE",
"CONCURRENTLY"))
5065 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexables);
5066 else if (Matches(
"REINDEX",
"INDEX",
"CONCURRENTLY") ||
5067 Matches(
"REINDEX",
"(*)",
"INDEX",
"CONCURRENTLY"))
5068 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
5069 else if (Matches(
"REINDEX",
"SCHEMA",
"CONCURRENTLY") ||
5070 Matches(
"REINDEX",
"(*)",
"SCHEMA",
"CONCURRENTLY"))
5071 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
5072 else if (Matches(
"REINDEX",
"SYSTEM|DATABASE",
"CONCURRENTLY") ||
5073 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE",
"CONCURRENTLY"))
5074 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
5075 else if (HeadMatches(
"REINDEX",
"(*") &&
5076 !HeadMatches(
"REINDEX",
"(*)"))
5083 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
5084 COMPLETE_WITH(
"CONCURRENTLY",
"TABLESPACE",
"VERBOSE");
5085 else if (TailMatches(
"TABLESPACE"))
5086 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
5090 else if (Matches(
"SECURITY"))
5091 COMPLETE_WITH(
"LABEL");
5092 else if (Matches(
"SECURITY",
"LABEL"))
5093 COMPLETE_WITH(
"ON",
"FOR");
5094 else if (Matches(
"SECURITY",
"LABEL",
"FOR", MatchAny))
5095 COMPLETE_WITH(
"ON");
5096 else if (Matches(
"SECURITY",
"LABEL",
"ON") ||
5097 Matches(
"SECURITY",
"LABEL",
"FOR", MatchAny,
"ON"))
5098 COMPLETE_WITH(
"TABLE",
"COLUMN",
"AGGREGATE",
"DATABASE",
"DOMAIN",
5099 "EVENT TRIGGER",
"FOREIGN TABLE",
"FUNCTION",
5100 "LARGE OBJECT",
"MATERIALIZED VIEW",
"LANGUAGE",
5101 "PUBLICATION",
"PROCEDURE",
"ROLE",
"ROUTINE",
"SCHEMA",
5102 "SEQUENCE",
"SUBSCRIPTION",
"TABLESPACE",
"TYPE",
"VIEW");
5103 else if (Matches(
"SECURITY",
"LABEL",
"ON", MatchAny, MatchAny))
5104 COMPLETE_WITH(
"IS");
5111 else if (TailMatches(
"SET|RESET") &&
5112 !TailMatches(
"UPDATE", MatchAny,
"SET") &&
5113 !TailMatches(
"ALTER",
"DATABASE|USER|ROLE", MatchAny,
"RESET"))
5114 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
5121 else if (Matches(
"SHOW"))
5122 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_show_vars,
5123 "SESSION AUTHORIZATION",
5125 else if (Matches(
"SHOW",
"SESSION"))
5126 COMPLETE_WITH(
"AUTHORIZATION");
5128 else if (Matches(
"SET",
"TRANSACTION"))
5129 COMPLETE_WITH(
"SNAPSHOT",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
5130 else if (Matches(
"BEGIN|START",
"TRANSACTION") ||
5131 Matches(
"BEGIN",
"WORK") ||
5133 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION"))
5134 COMPLETE_WITH(
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
5135 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"NOT") ||
5136 Matches(
"BEGIN",
"NOT") ||
5137 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"NOT"))
5138 COMPLETE_WITH(
"DEFERRABLE");
5139 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION") ||
5140 Matches(
"BEGIN",
"ISOLATION") ||
5141 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION"))
5142 COMPLETE_WITH(
"LEVEL");
5143 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL") ||
5144 Matches(
"BEGIN",
"ISOLATION",
"LEVEL") ||
5145 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL"))
5146 COMPLETE_WITH(
"READ",
"REPEATABLE READ",
"SERIALIZABLE");
5147 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"READ") ||
5148 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"READ") ||
5149 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"READ"))
5150 COMPLETE_WITH(
"UNCOMMITTED",
"COMMITTED");
5151 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
5152 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
5153 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"REPEATABLE"))
5154 COMPLETE_WITH(
"READ");
5155 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"READ") ||
5156 Matches(
"BEGIN",
"READ") ||
5157 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"READ"))
5158 COMPLETE_WITH(
"ONLY",
"WRITE");
5160 else if (Matches(
"SET",
"CONSTRAINTS"))
5161 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_constraints_with_schema,
5164 else if (Matches(
"SET",
"CONSTRAINTS", MatchAny))
5165 COMPLETE_WITH(
"DEFERRED",
"IMMEDIATE");
5167 else if (Matches(
"SET",
"ROLE"))
5168 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
5170 else if (Matches(
"SET",
"SESSION"))
5171 COMPLETE_WITH(
"AUTHORIZATION",
"CHARACTERISTICS AS TRANSACTION");
5173 else if (Matches(
"SET",
"SESSION",
"AUTHORIZATION"))
5174 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
5177 else if (Matches(
"RESET",
"SESSION"))
5178 COMPLETE_WITH(
"AUTHORIZATION");
5180 else if (Matches(
"SET", MatchAny))
5181 COMPLETE_WITH(
"TO");
5187 else if (Matches(
"ALTER",
"DATABASE|FUNCTION|PROCEDURE|ROLE|ROUTINE|USER", MatchAnyN,
"SET", MatchAnyExcept(
"SCHEMA")))
5188 COMPLETE_WITH(
"FROM CURRENT",
"TO");
5194 else if (TailMatches(
"SET", MatchAny,
"TO|=") &&
5195 !TailMatches(
"UPDATE", MatchAny,
"SET", MatchAny,
"TO|="))
5198 if (TailMatches(
"DateStyle",
"TO|="))
5199 COMPLETE_WITH(
"ISO",
"SQL",
"Postgres",
"German",
5200 "YMD",
"DMY",
"MDY",
5201 "US",
"European",
"NonEuropean",
5203 else if (TailMatches(
"search_path",
"TO|="))
5206 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
5207 " AND nspname NOT LIKE E'pg\\\\_toast%%'"
5208 " AND nspname NOT LIKE E'pg\\\\_temp%%'",
5211 else if (TailMatches(
"TimeZone",
"TO|="))
5212 COMPLETE_WITH_TIMEZONE_NAME();
5216 char *guctype = get_guctype(prev2_wd);
5225 if (strcmp(guctype,
"enum") == 0)
5227 set_completion_reference_verbatim(prev2_wd);
5228 COMPLETE_WITH_QUERY_PLUS(Query_for_values_of_enum_GUC,
5231 else if (strcmp(guctype,
"bool") == 0)
5232 COMPLETE_WITH(
"on",
"off",
"true",
"false",
"yes",
"no",
5233 "1",
"0",
"DEFAULT");
5235 COMPLETE_WITH(
"DEFAULT");
5243 else if (Matches(
"START"))
5244 COMPLETE_WITH(
"TRANSACTION");
5247 else if (Matches(
"TABLE"))
5248 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
5251 else if (TailMatches(
"TABLESAMPLE"))
5252 COMPLETE_WITH_QUERY(Query_for_list_of_tablesample_methods);
5253 else if (TailMatches(
"TABLESAMPLE", MatchAny))
5257 else if (Matches(
"TRUNCATE"))
5258 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_truncatables,
5260 else if (Matches(
"TRUNCATE",
"TABLE"))
5261 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_truncatables,
5263 else if (Matches(
"TRUNCATE", MatchAnyN,
"ONLY"))
5264 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_truncatables);
5265 else if (Matches(
"TRUNCATE", MatchAny) ||
5266 Matches(
"TRUNCATE",
"TABLE|ONLY", MatchAny) ||
5267 Matches(
"TRUNCATE",
"TABLE",
"ONLY", MatchAny))
5268 COMPLETE_WITH(
"RESTART IDENTITY",
"CONTINUE IDENTITY",
"CASCADE",
"RESTRICT");
5269 else if (Matches(
"TRUNCATE", MatchAnyN,
"IDENTITY"))
5270 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
5273 else if (Matches(
"UNLISTEN"))
5274 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_channels,
"*");
5278 else if (TailMatches(
"UPDATE"))
5279 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
5281 else if (TailMatches(
"UPDATE", MatchAny))
5282 COMPLETE_WITH(
"SET");
5284 else if (TailMatches(
"UPDATE", MatchAny,
"SET"))
5285 COMPLETE_WITH_ATTR(prev2_wd);
5287 else if (TailMatches(
"UPDATE", MatchAny,
"SET", MatchAnyExcept(
"*=")))
5291 else if (Matches(
"ALTER|CREATE|DROP",
"USER",
"MAPPING"))
5292 COMPLETE_WITH(
"FOR");
5293 else if (Matches(
"CREATE",
"USER",
"MAPPING",
"FOR"))
5294 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
5299 else if (Matches(
"ALTER|DROP",
"USER",
"MAPPING",
"FOR"))
5300 COMPLETE_WITH_QUERY(Query_for_list_of_user_mappings);
5301 else if (Matches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING",
"FOR", MatchAny))
5302 COMPLETE_WITH(
"SERVER");
5303 else if (Matches(
"CREATE|ALTER",
"USER",
"MAPPING",
"FOR", MatchAny,
"SERVER", MatchAny))
5304 COMPLETE_WITH(
"OPTIONS");
5310 else if (Matches(
"VACUUM"))
5311 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5318 else if (HeadMatches(
"VACUUM",
"(*") &&
5319 !HeadMatches(
"VACUUM",
"(*)"))
5326 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
5327 COMPLETE_WITH(
"FULL",
"FREEZE",
"ANALYZE",
"VERBOSE",
5328 "DISABLE_PAGE_SKIPPING",
"SKIP_LOCKED",
5329 "INDEX_CLEANUP",
"PROCESS_MAIN",
"PROCESS_TOAST",
5330 "TRUNCATE",
"PARALLEL",
"SKIP_DATABASE_STATS",
5331 "ONLY_DATABASE_STATS",
"BUFFER_USAGE_LIMIT");
5332 else if (TailMatches(
"FULL|FREEZE|ANALYZE|VERBOSE|DISABLE_PAGE_SKIPPING|SKIP_LOCKED|PROCESS_MAIN|PROCESS_TOAST|TRUNCATE|SKIP_DATABASE_STATS|ONLY_DATABASE_STATS"))
5333 COMPLETE_WITH(
"ON",
"OFF");
5334 else if (TailMatches(
"INDEX_CLEANUP"))
5335 COMPLETE_WITH(
"AUTO",
"ON",
"OFF");
5337 else if (Matches(
"VACUUM",
"(*)"))
5338 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5340 else if (Matches(
"VACUUM",
"FULL"))
5341 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5346 else if (Matches(
"VACUUM", MatchAnyN,
"FREEZE"))
5347 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5351 else if (Matches(
"VACUUM", MatchAnyN,
"VERBOSE"))
5352 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5355 else if (Matches(
"VACUUM", MatchAnyN,
"ANALYZE"))
5356 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5358 else if (Matches(
"VACUUM", MatchAnyN,
"("))
5360 COMPLETE_WITH_ATTR(prev2_wd);
5361 else if (HeadMatches(
"VACUUM"))
5362 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_vacuumables);
5373 else if (Matches(
"WAIT"))
5374 COMPLETE_WITH(
"FOR");
5375 else if (Matches(
"WAIT",
"FOR"))
5376 COMPLETE_WITH(
"LSN");
5377 else if (Matches(
"WAIT",
"FOR",
"LSN"))
5380 else if (Matches(
"WAIT",
"FOR",
"LSN", MatchAny))
5381 COMPLETE_WITH(
"WITH");
5382 else if (Matches(
"WAIT",
"FOR",
"LSN", MatchAny,
"WITH"))
5395 else if (HeadMatches(
"WAIT",
"FOR",
"LSN", MatchAny,
"WITH",
"(*") &&
5396 !HeadMatches(
"WAIT",
"FOR",
"LSN", MatchAny,
"WITH",
"(*)"))
5398 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
5399 COMPLETE_WITH(
"mode",
"timeout",
"no_throw");
5400 else if (TailMatches(
"mode"))
5401 COMPLETE_WITH(
"'standby_replay'",
"'standby_write'",
"'standby_flush'",
"'primary_flush'");
5410 else if (Matches(
"WITH"))
5411 COMPLETE_WITH(
"RECURSIVE");
5415 else if (TailMatches(MatchAny,
"WHERE"))
5416 COMPLETE_WITH_ATTR(prev2_wd);
5420 else if (TailMatches(
"FROM") && !Matches(
"COPY|\\copy", MatchAny,
"FROM"))
5421 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
5424 else if (TailMatches(
"JOIN"))
5425 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_selectables,
"LATERAL");
5426 else if (TailMatches(
"JOIN", MatchAny) && !TailMatches(
"CROSS|NATURAL",
"JOIN", MatchAny))
5427 COMPLETE_WITH(
"ON",
"USING (");
5428 else if (TailMatches(
"JOIN", MatchAny, MatchAny) &&
5429 !TailMatches(
"CROSS|NATURAL",
"JOIN", MatchAny, MatchAny) && !TailMatches(
"ON|USING"))
5430 COMPLETE_WITH(
"ON",
"USING (");
5431 else if (TailMatches(
"JOIN",
"LATERAL", MatchAny, MatchAny) &&
5432 !TailMatches(
"CROSS|NATURAL",
"JOIN",
"LATERAL", MatchAny, MatchAny) && !TailMatches(
"ON|USING"))
5433 COMPLETE_WITH(
"ON",
"USING (");
5434 else if (TailMatches(
"JOIN", MatchAny,
"USING") ||
5435 TailMatches(
"JOIN", MatchAny, MatchAny,
"USING") ||
5436 TailMatches(
"JOIN",
"LATERAL", MatchAny, MatchAny,
"USING"))
5438 else if (TailMatches(
"JOIN", MatchAny,
"USING",
"("))
5439 COMPLETE_WITH_ATTR(prev3_wd);
5440 else if (TailMatches(
"JOIN", MatchAny, MatchAny,
"USING",
"("))
5441 COMPLETE_WITH_ATTR(prev4_wd);
5444 else if (TailMatches(
"AT"))
5445 COMPLETE_WITH(
"LOCAL",
"TIME ZONE");
5446 else if (TailMatches(
"AT",
"TIME",
"ZONE"))
5447 COMPLETE_WITH_TIMEZONE_NAME();
5451 else if (TailMatchesCS(
"\\?"))
5452 COMPLETE_WITH_CS(
"commands",
"options",
"variables");
5453 else if (TailMatchesCS(
"\\connect|\\c"))
5456 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
5458 else if (TailMatchesCS(
"\\connect|\\c", MatchAny))
5461 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
5463 else if (TailMatchesCS(
"\\da*"))
5464 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_aggregates);
5465 else if (TailMatchesCS(
"\\dAc*", MatchAny) ||
5466 TailMatchesCS(
"\\dAf*", MatchAny))
5467 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
5468 else if (TailMatchesCS(
"\\dAo*", MatchAny) ||
5469 TailMatchesCS(
"\\dAp*", MatchAny))
5470 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_operator_families);
5471 else if (TailMatchesCS(
"\\dA*"))
5472 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
5473 else if (TailMatchesCS(
"\\db*"))
5474 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
5475 else if (TailMatchesCS(
"\\dconfig*"))
5476 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_show_vars);
5477 else if (TailMatchesCS(
"\\dD*"))
5478 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
5479 else if (TailMatchesCS(
"\\des*"))
5480 COMPLETE_WITH_QUERY(Query_for_list_of_servers);
5481 else if (TailMatchesCS(
"\\deu*"))
5482 COMPLETE_WITH_QUERY(Query_for_list_of_user_mappings);
5483 else if (TailMatchesCS(
"\\dew*"))
5484 COMPLETE_WITH_QUERY(Query_for_list_of_fdws);
5485 else if (TailMatchesCS(
"\\df*"))
5486 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
5487 else if (HeadMatchesCS(
"\\df*"))
5488 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
5490 else if (TailMatchesCS(
"\\dFd*"))
5491 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_dictionaries);
5492 else if (TailMatchesCS(
"\\dFp*"))
5493 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_parsers);
5494 else if (TailMatchesCS(
"\\dFt*"))
5495 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_templates);
5497 else if (TailMatchesCS(
"\\dF*"))
5498 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_configurations);
5500 else if (TailMatchesCS(
"\\di*"))
5501 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
5502 else if (TailMatchesCS(
"\\dL*"))
5503 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
5504 else if (TailMatchesCS(
"\\dn*"))
5505 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
5507 else if (HeadMatchesCS(
"\\do*", MatchAny))
5508 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
5509 else if (TailMatchesCS(
"\\dp") || TailMatchesCS(
"\\z"))
5510 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_grantables);
5511 else if (TailMatchesCS(
"\\dPi*"))
5512 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_indexes);
5513 else if (TailMatchesCS(
"\\dPt*"))
5514 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_tables);
5515 else if (TailMatchesCS(
"\\dP*"))
5516 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_relations);
5517 else if (TailMatchesCS(
"\\dRp*"))
5518 COMPLETE_WITH_VERSIONED_QUERY(Query_for_list_of_publications);
5519 else if (TailMatchesCS(
"\\dRs*"))
5520 COMPLETE_WITH_VERSIONED_QUERY(Query_for_list_of_subscriptions);
5521 else if (TailMatchesCS(
"\\ds*"))
5522 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_sequences);
5523 else if (TailMatchesCS(
"\\dt*"))
5524 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
5525 else if (TailMatchesCS(
"\\dT*"))
5526 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
5527 else if (TailMatchesCS(
"\\du*") ||
5528 TailMatchesCS(
"\\dg*") ||
5529 TailMatchesCS(
"\\drg*"))
5530 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
5531 else if (TailMatchesCS(
"\\dv*"))
5532 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
5533 else if (TailMatchesCS(
"\\dx*"))
5534 COMPLETE_WITH_QUERY(Query_for_list_of_extensions);
5535 else if (TailMatchesCS(
"\\dX*"))
5536 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_statistics);
5537 else if (TailMatchesCS(
"\\dm*"))
5538 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
5539 else if (TailMatchesCS(
"\\dE*"))
5540 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
5541 else if (TailMatchesCS(
"\\dy*"))
5542 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
5545 else if (TailMatchesCS(
"\\d*"))
5546 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_relations);
5548 else if (TailMatchesCS(
"\\ef"))
5549 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
5550 else if (TailMatchesCS(
"\\ev"))
5551 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
5553 else if (TailMatchesCS(
"\\encoding"))
5554 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_encodings);
5555 else if (TailMatchesCS(
"\\h|\\help"))
5556 COMPLETE_WITH_LIST(sql_commands);
5557 else if (TailMatchesCS(
"\\h|\\help", MatchAny))
5559 if (TailMatches(
"DROP"))
5560 COMPLETE_WITH_GENERATOR(drop_command_generator);
5561 else if (TailMatches(
"ALTER"))
5562 COMPLETE_WITH_GENERATOR(alter_command_generator);
5569 else if (TailMatchesCS(
"\\h|\\help", MatchAny, MatchAny))
5571 if (TailMatches(
"CREATE|DROP",
"ACCESS"))
5572 COMPLETE_WITH(
"METHOD");
5573 else if (TailMatches(
"ALTER",
"DEFAULT"))
5574 COMPLETE_WITH(
"PRIVILEGES");
5575 else if (TailMatches(
"CREATE|ALTER|DROP",
"EVENT"))
5576 COMPLETE_WITH(
"TRIGGER");
5577 else if (TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN"))
5578 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
5579 else if (TailMatches(
"ALTER",
"LARGE"))
5580 COMPLETE_WITH(
"OBJECT");
5581 else if (TailMatches(
"CREATE|ALTER|DROP",
"MATERIALIZED"))
5582 COMPLETE_WITH(
"VIEW");
5583 else if (TailMatches(
"CREATE|ALTER|DROP",
"TEXT"))
5584 COMPLETE_WITH(
"SEARCH");
5585 else if (TailMatches(
"CREATE|ALTER|DROP",
"USER"))
5586 COMPLETE_WITH(
"MAPPING FOR");
5588 else if (TailMatchesCS(
"\\h|\\help", MatchAny, MatchAny, MatchAny))
5590 if (TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN",
"DATA"))
5591 COMPLETE_WITH(
"WRAPPER");
5592 else if (TailMatches(
"CREATE|ALTER|DROP",
"TEXT",
"SEARCH"))
5593 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
5594 else if (TailMatches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING"))
5595 COMPLETE_WITH(
"FOR");
5597 else if (TailMatchesCS(
"\\l*") && !TailMatchesCS(
"\\lo*"))
5598 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
5599 else if (TailMatchesCS(
"\\password"))
5600 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
5601 else if (TailMatchesCS(
"\\pset"))
5602 COMPLETE_WITH_CS(
"border",
"columns",
"csv_fieldsep",
5603 "display_false",
"display_true",
"expanded",
5604 "fieldsep",
"fieldsep_zero",
"footer",
"format",
5605 "linestyle",
"null",
"numericlocale",
5606 "pager",
"pager_min_lines",
5607 "recordsep",
"recordsep_zero",
5608 "tableattr",
"title",
"tuples_only",
5609 "unicode_border_linestyle",
5610 "unicode_column_linestyle",
5611 "unicode_header_linestyle",
5613 else if (TailMatchesCS(
"\\pset", MatchAny))
5615 if (TailMatchesCS(
"format"))
5616 COMPLETE_WITH_CS(
"aligned",
"asciidoc",
"csv",
"html",
"latex",
5617 "latex-longtable",
"troff-ms",
"unaligned",
5619 else if (TailMatchesCS(
"xheader_width"))
5620 COMPLETE_WITH_CS(
"full",
"column",
"page");
5621 else if (TailMatchesCS(
"linestyle"))
5622 COMPLETE_WITH_CS(
"ascii",
"old-ascii",
"unicode");
5623 else if (TailMatchesCS(
"pager"))
5624 COMPLETE_WITH_CS(
"on",
"off",
"always");
5625 else if (TailMatchesCS(
"unicode_border_linestyle|"
5626 "unicode_column_linestyle|"
5627 "unicode_header_linestyle"))
5628 COMPLETE_WITH_CS(
"single",
"double");
5630 else if (TailMatchesCS(
"\\unset"))
5631 matches = complete_from_variables(
text,
"",
"",
true);
5632 else if (TailMatchesCS(
"\\set"))
5633 matches = complete_from_variables(
text,
"",
"",
false);
5634 else if (TailMatchesCS(
"\\set", MatchAny))
5636 if (TailMatchesCS(
"AUTOCOMMIT|ON_ERROR_STOP|QUIET|SHOW_ALL_RESULTS|"
5637 "SINGLELINE|SINGLESTEP"))
5638 COMPLETE_WITH_CS(
"on",
"off");
5639 else if (TailMatchesCS(
"COMP_KEYWORD_CASE"))
5640 COMPLETE_WITH_CS(
"lower",
"upper",
5641 "preserve-lower",
"preserve-upper");
5642 else if (TailMatchesCS(
"ECHO"))
5643 COMPLETE_WITH_CS(
"errors",
"queries",
"all",
"none");
5644 else if (TailMatchesCS(
"ECHO_HIDDEN"))
5645 COMPLETE_WITH_CS(
"noexec",
"off",
"on");
5646 else if (TailMatchesCS(
"HISTCONTROL"))
5647 COMPLETE_WITH_CS(
"ignorespace",
"ignoredups",
5648 "ignoreboth",
"none");
5649 else if (TailMatchesCS(
"ON_ERROR_ROLLBACK"))
5650 COMPLETE_WITH_CS(
"on",
"off",
"interactive");
5651 else if (TailMatchesCS(
"SHOW_CONTEXT"))
5652 COMPLETE_WITH_CS(
"never",
"errors",
"always");
5653 else if (TailMatchesCS(
"VERBOSITY"))
5654 COMPLETE_WITH_CS(
"default",
"verbose",
"terse",
"sqlstate");
5656 else if (TailMatchesCS(
"\\sf*"))
5657 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
5658 else if (TailMatchesCS(
"\\sv*"))
5659 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
5660 else if (TailMatchesCS(
"\\cd|\\e|\\edit|\\g|\\gx|\\i|\\include|"
5661 "\\ir|\\include_relative|\\o|\\out|"
5662 "\\s|\\w|\\write|\\lo_import") ||
5663 TailMatchesCS(
"\\lo_export", MatchAny))
5664 COMPLETE_WITH_FILES(
"\\",
false);
5692create_or_drop_command_generator(
const char *
text,
int state,
bits32 excluded)
5694 static int list_index,
5702 string_length = strlen(
text);
5706 while ((
name = words_after_create[list_index++].
name))
5709 !(words_after_create[list_index - 1].flags & excluded))
5710 return pg_strdup_keyword_case(
name,
text);
5721create_command_generator(
const char *
text,
int state)
5723 return create_or_drop_command_generator(
text,
state, THING_NO_CREATE);
5730drop_command_generator(
const char *
text,
int state)
5732 return create_or_drop_command_generator(
text,
state, THING_NO_DROP);
5739alter_command_generator(
const char *
text,
int state)
5741 return create_or_drop_command_generator(
text,
state, THING_NO_ALTER);
5750complete_from_query(
const char *
text,
int state)
5753 return _complete_from_query(completion_charp, NULL, completion_charpp,
5758complete_from_versioned_query(
const char *
text,
int state)
5760 const VersionedQuery *vquery = completion_vquery;
5766 if (vquery->query == NULL)
5769 return _complete_from_query(vquery->query, NULL, completion_charpp,
5774complete_from_schema_query(
const char *
text,
int state)
5777 return _complete_from_query(NULL, completion_squery, completion_charpp,
5782complete_from_versioned_schema_query(
const char *
text,
int state)
5784 const SchemaQuery *squery = completion_squery;
5790 if (squery->catname == NULL)
5793 return _complete_from_query(NULL, squery, completion_charpp,
5840_complete_from_query(
const char *simple_query,
5841 const SchemaQuery *schema_query,
5846 static int list_index,
5851 static bool non_empty_object;
5852 static bool schemaquoted;
5853 static bool objectquoted;
5864 char *e_object_like;
5871 num_schema_only = 0;
5872 num_query_other = 0;
5885 parse_identifier(
text,
5886 &schemaname, &objectname,
5887 &schemaquoted, &objectquoted);
5891 non_empty_object = (*objectname !=
'\0');
5897 e_object_like = make_like_pattern(objectname);
5902 e_schemaname = NULL;
5904 if (completion_ref_object)
5907 e_ref_object = NULL;
5909 if (completion_ref_schema)
5912 e_ref_schema = NULL;
5918 Assert(simple_query == NULL);
5925 if (schemaname == NULL || schema_query->namespace == NULL)
5929 if (schema_query->use_distinct)
5932 "%s, NULL::pg_catalog.text FROM %s",
5933 schema_query->result,
5934 schema_query->catname);
5935 if (schema_query->refnamespace && completion_ref_schema)
5937 ", pg_catalog.pg_namespace nr");
5939 if (schema_query->selcondition)
5941 schema_query->selcondition);
5943 schema_query->result,
5945 if (schema_query->viscondition)
5947 schema_query->viscondition);
5948 if (schema_query->refname)
5950 Assert(completion_ref_object);
5952 schema_query->refname, e_ref_object);
5953 if (schema_query->refnamespace && completion_ref_schema)
5955 " AND %s = nr.oid AND nr.nspname = '%s'",
5956 schema_query->refnamespace,
5958 else if (schema_query->refviscondition)
5961 schema_query->refviscondition);
5971 if (strcmp(schema_query->catname,
5972 "pg_catalog.pg_class c") == 0 &&
5973 strncmp(objectname,
"pg_", 3) != 0)
5976 " AND c.relnamespace <> (SELECT oid FROM"
5977 " pg_catalog.pg_namespace WHERE nspname = 'pg_catalog')");
5984 if (schema_query->namespace)
5987 "SELECT NULL::pg_catalog.text, n.nspname "
5988 "FROM pg_catalog.pg_namespace n "
5989 "WHERE n.nspname LIKE '%s'",
5996 if (strncmp(objectname,
"pg_", 3) != 0)
5998 " AND n.nspname NOT LIKE E'pg\\\\_%'");
6005 schemaquoted = objectquoted;
6012 if (schema_query->use_distinct)
6015 "FROM %s, pg_catalog.pg_namespace n",
6016 schema_query->result,
6017 schema_query->catname);
6018 if (schema_query->refnamespace && completion_ref_schema)
6020 ", pg_catalog.pg_namespace nr");
6022 schema_query->namespace);
6023 if (schema_query->selcondition)
6025 schema_query->selcondition);
6027 schema_query->result,
6031 if (schema_query->refname)
6033 Assert(completion_ref_object);
6035 schema_query->refname, e_ref_object);
6036 if (schema_query->refnamespace && completion_ref_schema)
6038 " AND %s = nr.oid AND nr.nspname = '%s'",
6039 schema_query->refnamespace,
6041 else if (schema_query->refviscondition)
6044 schema_query->refviscondition);
6054 e_ref_object, e_ref_schema);
6059 completion_max_records);
6062 result = exec_query(query_buffer.
data);
6068 free(e_object_like);
6081 const char *item = NULL;
6082 const char *nsp = NULL;
6105 if (non_empty_object)
6107 if (item && !objectquoted && identifier_needs_quotes(item))
6109 if (nsp && !schemaquoted && identifier_needs_quotes(nsp))
6114 if (item == NULL && nsp != NULL)
6119 return requote_identifier(nsp, item, schemaquoted, objectquoted);
6128 if (schema_query && schema_query->keywords)
6130 const char *
const *itemp = schema_query->keywords;
6134 const char *item = *itemp++;
6142 return pg_strdup_keyword_case(item,
text);
6148 const char *
const *itemp =
keywords;
6152 const char *item = *itemp++;
6160 return pg_strdup_keyword_case(item,
text);
6171 if (num_schema_only > 0 && num_query_other == 0 && num_keywords == 0)
6172 rl_completion_append_character =
'\0';
6187set_completion_reference(
const char *
word)
6192 parse_identifier(
word,
6193 &completion_ref_schema, &completion_ref_object,
6194 &schemaquoted, &objectquoted);
6202set_completion_reference_verbatim(
const char *
word)
6204 completion_ref_schema = NULL;
6215complete_from_list(
const char *
text,
int state)
6217 static int string_length,
6220 static bool casesensitive;
6224 Assert(completion_charpp != NULL);
6230 string_length = strlen(
text);
6231 casesensitive = completion_case_sensitive;
6235 while ((item = completion_charpp[list_index++]))
6238 if (casesensitive && strncmp(
text, item, string_length) == 0)
6247 if (completion_case_sensitive)
6255 return pg_strdup_keyword_case(item,
text);
6263 if (casesensitive && matches == 0)
6265 casesensitive =
false;
6295complete_from_const(
const char *
text,
int state)
6297 Assert(completion_charp != NULL);
6300 if (completion_case_sensitive)
6308 return pg_strdup_keyword_case(completion_charp,
text);
6320append_variable_names(
char ***varnames,
int *nvars,
6321 int *maxvars,
const char *varname,
6322 const char *prefix,
const char *suffix)
6324 if (*nvars >= *maxvars)
6328 ((*maxvars) + 1) *
sizeof(
char *));
6331 (*varnames)[(*nvars)++] =
psprintf(
"%s%s%s", prefix, varname, suffix);
6343complete_from_variables(
const char *
text,
const char *prefix,
const char *suffix,
6353 varnames = (
char **)
pg_malloc((maxvars + 1) *
sizeof(
char *));
6357 if (need_value && !(ptr->
value))
6359 append_variable_names(&varnames, &nvars, &maxvars, ptr->
name,
6363 varnames[nvars] = NULL;
6364 COMPLETE_WITH_LIST_CS((
const char *
const *) varnames);
6366 for (
i = 0;
i < nvars;
i++)
6383complete_from_files(
const char *
text,
int state)
6385 static int list_index;
6386 static bool files_done;
6398 char *result = _complete_from_files(
text,
state);
6408 if (!completion_charpp)
6415 while ((item = completion_charpp[list_index++]))
6419 completion_force_quote =
false;
6420 return pg_strdup_keyword_case(item,
text);
6441_complete_from_files(
const char *
text,
int state)
6443#ifdef USE_FILENAME_QUOTING_FUNCTIONS
6460#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
6461 rl_completion_suppress_quote = 1;
6466 completion_force_quote =
true;
6468 return rl_filename_completion_function(
text,
state);
6474 static const char *unquoted_text;
6475 char *unquoted_match;
6480 completion_force_quote =
true;
6485 unquoted_text =
strtokx(
text,
"", NULL,
"'", *completion_charp,
6491 unquoted_text =
text;
6495 unquoted_match = rl_filename_completion_function(unquoted_text,
state);
6498 struct stat statbuf;
6499 bool is_dir = (
stat(unquoted_match, &statbuf) == 0 &&
6500 S_ISDIR(statbuf.st_mode) != 0);
6504 '\'', *completion_charp,
6505 completion_force_quote,
6508 free(unquoted_match);
6510 ret = unquoted_match;
6517 if (*ret ==
'\'' && is_dir)
6519 char *retend = ret + strlen(ret) - 1;
6524 rl_completion_append_character =
'\0';
6541pg_strdup_keyword_case(
const char *s,
const char *ref)
6545 unsigned char first = ref[0];
6554 for (p = ret; *p; p++)
6559 for (p = ret; *p; p++)
6596make_like_pattern(
const char *
word)
6600 char *bptr = buffer;
6642parse_identifier(
const char *
ident,
6643 char **schemaname,
char **objectname,
6644 bool *schemaquoted,
bool *objectquoted)
6646 size_t buflen = strlen(
ident) + 1;
6656 *schemaquoted = *objectquoted =
false;
6662 unsigned char ch = (
unsigned char) *
ident++;
6666 if (inquotes && *
ident ==
'"')
6674 inquotes = !inquotes;
6675 *objectquoted =
true;
6678 else if (ch ==
'.' && !inquotes)
6686 *schemaquoted = *objectquoted;
6687 *objectquoted =
false;
6699 *optr++ = (char) ch;
6714 if (ch >=
'A' && ch <=
'Z')
6716 else if (enc_is_single_byte &&
IS_HIGHBIT_SET(ch) && isupper(ch))
6719 *optr++ = (char) ch;
6724 *schemaname = sname;
6725 *objectname = oname;
6741requote_identifier(
const char *schemaname,
const char *objectname,
6742 bool quote_schema,
bool quote_object)
6754 buflen += strlen(schemaname) + 1;
6756 quote_schema = identifier_needs_quotes(schemaname);
6760 for (
const char *p = schemaname; *p; p++)
6769 buflen += strlen(objectname);
6771 quote_object = identifier_needs_quotes(objectname);
6775 for (
const char *p = objectname; *p; p++)
6788 for (
const char *p = schemaname; *p; p++)
6802 for (
const char *p = objectname; *p; p++)
6823identifier_needs_quotes(
const char *
ident)
6830 if (strspn(
ident,
"abcdefghijklmnopqrstuvwxyz0123456789_$") != strlen(
ident))
6856exec_query(
const char *query)
6873 pg_log_error(
"tab completion query failed: %s\nQuery was:\n%s",
6896get_previous_words(
int point,
char **buffer,
int *nwords)
6898 char **previous_words;
6901 int words_found = 0;
6915 memcpy(
buf +
i, rl_line_buffer, point);
6922 buf = rl_line_buffer;
6931 previous_words = (
char **)
pg_malloc(point *
sizeof(
char *));
6932 *buffer = outptr = (
char *)
pg_malloc(point * 2);
6939 for (
i = point - 1;
i >= 0;
i--)
6941 if (strchr(WORD_BREAKS,
buf[
i]))
6955 bool inquotes =
false;
6956 int parentheses = 0;
6960 for (
i = point;
i >= 0;
i--)
6962 if (!isspace((
unsigned char)
buf[
i]))
6981 inquotes = !inquotes;
6988 if (--parentheses <= 0)
6991 else if (parentheses == 0 &&
6992 strchr(WORD_BREAKS,
buf[
start - 1]))
6998 previous_words[words_found++] = outptr;
7009 if (
buf != rl_line_buffer)
7012 *nwords = words_found;
7013 return previous_words;
7023get_guctype(
const char *varname)
7028 char *guctype = NULL;
7034 "SELECT vartype FROM pg_catalog.pg_settings "
7035 "WHERE pg_catalog.lower(name) = pg_catalog.lower('%s')",
7038 result = exec_query(query_buffer.
data);
7050#ifdef USE_FILENAME_QUOTING_FUNCTIONS
7059quote_file_name(
char *fname,
int match_type,
char *quote_pointer)
7062 struct stat statbuf;
7066 '\'', *completion_charp,
7067 completion_force_quote,
7082 completion_last_char !=
'\'' &&
7083 (match_type != SINGLE_MATCH ||
7084 (quote_pointer && *quote_pointer ==
'\'') ||
7085 stat(fname, &statbuf) != 0 ||
7088 char *
send = s + strlen(s) - 1;
7099#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
7100 rl_completion_suppress_quote = 0;
7108 if (quote_pointer && *quote_pointer !=
'\'')
7109 *quote_pointer =
'\0';
7120dequote_file_name(
char *fname,
int quote_char)
7122 char *unquoted_fname;
7129 if (quote_char ==
'\'')
7131 char *workspace = (
char *)
pg_malloc(strlen(fname) + 2);
7133 workspace[0] = quote_char;
7134 strcpy(workspace + 1, fname);
7135 unquoted_fname =
strtokx(workspace,
"", NULL,
"'", *completion_charp,
7140 unquoted_fname =
strtokx(fname,
"", NULL,
"'", *completion_charp,
7144 if (!unquoted_fname)
7147 unquoted_fname = fname;
bool recognized_connection_string(const char *connstr)
#define IS_HIGHBIT_SET(ch)
const uint8 ScanKeywordCategories[SCANKEYWORDS_NUM_KEYWORDS]
ConnStatusType PQstatus(const PGconn *conn)
char * PQerrorMessage(const PGconn *conn)
size_t PQescapeStringConn(PGconn *conn, char *to, const char *from, size_t length, int *error)
PGresult * PQexec(PGconn *conn, const char *query)
int PQmblenBounded(const char *s, int encoding)
void * pg_malloc(size_t size)
char * pg_strdup(const char *in)
void * pg_realloc(void *ptr, size_t size)
Assert(PointerIsAligned(start, uint64))
static const JsonPathKeyword keywords[]
PGDLLIMPORT const ScanKeywordList ScanKeywords
#define UNRESERVED_KEYWORD
int ScanKeywordLookup(const char *str, const ScanKeywordList *keywords)
#define pg_log_error(...)
char * pnstrdup(const char *in, Size len)
static char buf[DEFAULT_XLOG_SEG_SIZE]
int pg_strcasecmp(const char *s1, const char *s2)
unsigned char pg_toupper(unsigned char ch)
unsigned char pg_tolower(unsigned char ch)
int pg_strncasecmp(const char *s1, const char *s2, size_t n)
void initPQExpBuffer(PQExpBuffer str)
void appendPQExpBuffer(PQExpBuffer str, const char *fmt,...)
void appendPQExpBufferStr(PQExpBuffer str, const char *data)
void termPQExpBuffer(PQExpBuffer str)
char * psprintf(const char *fmt,...)
static void word(struct vars *v, int dir, struct state *lp, struct state *rp)
@ PSQL_COMP_CASE_PRESERVE_LOWER
@ PSQL_COMP_CASE_PRESERVE_UPPER
char * strtokx(const char *s, const char *whitespace, const char *delim, const char *quote, char escape, bool e_strings, bool del_quotes, int encoding)
char * quote_if_needed(const char *source, const char *entails_quote, char quote, char escape, bool force_quote, int encoding)
void initialize_readline(void)
PQExpBuffer tab_completion_query_buf
static bool escape_string(PGconn *conn, PQExpBuffer target, const char *unescaped, size_t unescaped_len, PQExpBuffer escape_err)
static int32 text_length(Datum str)
int pg_encoding_max_length(int encoding)
#define send(s, buf, len, flags)