46 #include "catalog/pg_am_d.h"
47 #include "catalog/pg_class_d.h"
61 #ifndef HAVE_RL_FILENAME_COMPLETION_FUNCTION
62 #define rl_filename_completion_function filename_completion_function
65 #ifndef HAVE_RL_COMPLETION_MATCHES
66 #define rl_completion_matches completion_matches
74 #ifdef HAVE_RL_FILENAME_QUOTING_FUNCTION
75 #define USE_FILENAME_QUOTING_FUNCTIONS 1
79 #define WORD_BREAKS "\t\n@$><=;|&{() "
100 typedef struct VersionedQuery
102 int min_server_version;
122 typedef struct SchemaQuery
129 int min_server_version;
145 const char *selcondition;
152 const char *viscondition;
160 const char *
namespace;
178 const char *
const *keywords;
196 const char *refviscondition;
203 const char *refnamespace;
210 static int completion_max_records;
217 static char completion_last_char;
218 static const char *completion_charp;
219 static const char *
const *completion_charpp;
220 static const VersionedQuery *completion_vquery;
221 static const SchemaQuery *completion_squery;
222 static char *completion_ref_object;
223 static char *completion_ref_schema;
224 static bool completion_case_sensitive;
225 static bool completion_verbatim;
226 static bool completion_force_quote;
249 #define COMPLETE_WITH_QUERY(query) \
250 COMPLETE_WITH_QUERY_LIST(query, NULL)
252 #define COMPLETE_WITH_QUERY_LIST(query, list) \
254 completion_charp = query; \
255 completion_charpp = list; \
256 completion_verbatim = false; \
257 matches = rl_completion_matches(text, complete_from_query); \
260 #define COMPLETE_WITH_QUERY_PLUS(query, ...) \
262 static const char *const list[] = { __VA_ARGS__, NULL }; \
263 COMPLETE_WITH_QUERY_LIST(query, list); \
266 #define COMPLETE_WITH_QUERY_VERBATIM(query) \
267 COMPLETE_WITH_QUERY_VERBATIM_LIST(query, NULL)
269 #define COMPLETE_WITH_QUERY_VERBATIM_LIST(query, list) \
271 completion_charp = query; \
272 completion_charpp = list; \
273 completion_verbatim = true; \
274 matches = rl_completion_matches(text, complete_from_query); \
277 #define COMPLETE_WITH_QUERY_VERBATIM_PLUS(query, ...) \
279 static const char *const list[] = { __VA_ARGS__, NULL }; \
280 COMPLETE_WITH_QUERY_VERBATIM_LIST(query, list); \
283 #define COMPLETE_WITH_VERSIONED_QUERY(query) \
284 COMPLETE_WITH_VERSIONED_QUERY_LIST(query, NULL)
286 #define COMPLETE_WITH_VERSIONED_QUERY_LIST(query, list) \
288 completion_vquery = query; \
289 completion_charpp = list; \
290 completion_verbatim = false; \
291 matches = rl_completion_matches(text, complete_from_versioned_query); \
294 #define COMPLETE_WITH_VERSIONED_QUERY_PLUS(query, ...) \
296 static const char *const list[] = { __VA_ARGS__, NULL }; \
297 COMPLETE_WITH_VERSIONED_QUERY_LIST(query, list); \
300 #define COMPLETE_WITH_SCHEMA_QUERY(query) \
301 COMPLETE_WITH_SCHEMA_QUERY_LIST(query, NULL)
303 #define COMPLETE_WITH_SCHEMA_QUERY_LIST(query, list) \
305 completion_squery = &(query); \
306 completion_charpp = list; \
307 completion_verbatim = false; \
308 matches = rl_completion_matches(text, complete_from_schema_query); \
311 #define COMPLETE_WITH_SCHEMA_QUERY_PLUS(query, ...) \
313 static const char *const list[] = { __VA_ARGS__, NULL }; \
314 COMPLETE_WITH_SCHEMA_QUERY_LIST(query, list); \
317 #define COMPLETE_WITH_SCHEMA_QUERY_VERBATIM(query) \
319 completion_squery = &(query); \
320 completion_charpp = NULL; \
321 completion_verbatim = true; \
322 matches = rl_completion_matches(text, complete_from_schema_query); \
325 #define COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(query) \
326 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_LIST(query, NULL)
328 #define COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_LIST(query, list) \
330 completion_squery = query; \
331 completion_charpp = list; \
332 completion_verbatim = false; \
333 matches = rl_completion_matches(text, complete_from_versioned_schema_query); \
336 #define COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_PLUS(query, ...) \
338 static const char *const list[] = { __VA_ARGS__, NULL }; \
339 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_LIST(query, list); \
346 #define COMPLETE_WITH_CONST(cs, con) \
348 completion_case_sensitive = (cs); \
349 completion_charp = (con); \
350 matches = rl_completion_matches(text, complete_from_const); \
353 #define COMPLETE_WITH_LIST_INT(cs, list) \
355 completion_case_sensitive = (cs); \
356 completion_charpp = (list); \
357 matches = rl_completion_matches(text, complete_from_list); \
360 #define COMPLETE_WITH_LIST(list) COMPLETE_WITH_LIST_INT(false, list)
361 #define COMPLETE_WITH_LIST_CS(list) COMPLETE_WITH_LIST_INT(true, list)
363 #define COMPLETE_WITH(...) \
365 static const char *const list[] = { __VA_ARGS__, NULL }; \
366 COMPLETE_WITH_LIST(list); \
369 #define COMPLETE_WITH_CS(...) \
371 static const char *const list[] = { __VA_ARGS__, NULL }; \
372 COMPLETE_WITH_LIST_CS(list); \
375 #define COMPLETE_WITH_ATTR(relation) \
376 COMPLETE_WITH_ATTR_LIST(relation, NULL)
378 #define COMPLETE_WITH_ATTR_LIST(relation, list) \
380 set_completion_reference(relation); \
381 completion_squery = &(Query_for_list_of_attributes); \
382 completion_charpp = list; \
383 completion_verbatim = false; \
384 matches = rl_completion_matches(text, complete_from_schema_query); \
387 #define COMPLETE_WITH_ATTR_PLUS(relation, ...) \
389 static const char *const list[] = { __VA_ARGS__, NULL }; \
390 COMPLETE_WITH_ATTR_LIST(relation, list); \
399 #define COMPLETE_WITH_ENUM_VALUE(type) \
401 set_completion_reference(type); \
402 if (text[0] == '\'' || \
403 start == 0 || rl_line_buffer[start - 1] != '\'') \
404 completion_squery = &(Query_for_list_of_enum_values_quoted); \
406 completion_squery = &(Query_for_list_of_enum_values_unquoted); \
407 completion_charpp = NULL; \
408 completion_verbatim = true; \
409 matches = rl_completion_matches(text, complete_from_schema_query); \
416 #define COMPLETE_WITH_TIMEZONE_NAME() \
418 static const char *const list[] = { "DEFAULT", NULL }; \
419 if (text[0] == '\'') \
420 completion_charp = Query_for_list_of_timezone_names_quoted_in; \
421 else if (start == 0 || rl_line_buffer[start - 1] != '\'') \
422 completion_charp = Query_for_list_of_timezone_names_quoted_out; \
424 completion_charp = Query_for_list_of_timezone_names_unquoted; \
425 completion_charpp = list; \
426 completion_verbatim = true; \
427 matches = rl_completion_matches(text, complete_from_query); \
430 #define COMPLETE_WITH_FUNCTION_ARG(function) \
432 set_completion_reference(function); \
433 completion_squery = &(Query_for_list_of_arguments); \
434 completion_charpp = NULL; \
435 completion_verbatim = true; \
436 matches = rl_completion_matches(text, complete_from_schema_query); \
446 static const SchemaQuery Query_for_constraint_of_table = {
447 .catname =
"pg_catalog.pg_constraint con, pg_catalog.pg_class c1",
448 .selcondition =
"con.conrelid=c1.oid",
449 .result =
"con.conname",
450 .refname =
"c1.relname",
451 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
452 .refnamespace =
"c1.relnamespace",
455 static const SchemaQuery Query_for_constraint_of_table_not_validated = {
456 .catname =
"pg_catalog.pg_constraint con, pg_catalog.pg_class c1",
457 .selcondition =
"con.conrelid=c1.oid and not con.convalidated",
458 .result =
"con.conname",
459 .refname =
"c1.relname",
460 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
461 .refnamespace =
"c1.relnamespace",
464 static const SchemaQuery Query_for_constraint_of_type = {
465 .catname =
"pg_catalog.pg_constraint con, pg_catalog.pg_type t",
466 .selcondition =
"con.contypid=t.oid",
467 .result =
"con.conname",
468 .refname =
"t.typname",
469 .refviscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
470 .refnamespace =
"t.typnamespace",
473 static const SchemaQuery Query_for_index_of_table = {
474 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_index i",
475 .selcondition =
"c1.oid=i.indrelid and i.indexrelid=c2.oid",
476 .result =
"c2.relname",
477 .refname =
"c1.relname",
478 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
479 .refnamespace =
"c1.relnamespace",
482 static const SchemaQuery Query_for_unique_index_of_table = {
483 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_index i",
484 .selcondition =
"c1.oid=i.indrelid and i.indexrelid=c2.oid and i.indisunique",
485 .result =
"c2.relname",
486 .refname =
"c1.relname",
487 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
488 .refnamespace =
"c1.relnamespace",
491 static const SchemaQuery Query_for_list_of_aggregates[] = {
493 .min_server_version = 110000,
494 .catname =
"pg_catalog.pg_proc p",
495 .selcondition =
"p.prokind = 'a'",
496 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
497 .namespace =
"p.pronamespace",
498 .result =
"p.proname",
501 .catname =
"pg_catalog.pg_proc p",
502 .selcondition =
"p.proisagg",
503 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
504 .namespace =
"p.pronamespace",
505 .result =
"p.proname",
509 static const SchemaQuery Query_for_list_of_arguments = {
510 .catname =
"pg_catalog.pg_proc p",
511 .result =
"pg_catalog.oidvectortypes(p.proargtypes)||')'",
512 .refname =
"p.proname",
513 .refviscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
514 .refnamespace =
"p.pronamespace",
517 static const SchemaQuery Query_for_list_of_attributes = {
518 .catname =
"pg_catalog.pg_attribute a, pg_catalog.pg_class c",
519 .selcondition =
"c.oid = a.attrelid and a.attnum > 0 and not a.attisdropped",
520 .result =
"a.attname",
521 .refname =
"c.relname",
522 .refviscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
523 .refnamespace =
"c.relnamespace",
526 static const SchemaQuery Query_for_list_of_attribute_numbers = {
527 .catname =
"pg_catalog.pg_attribute a, pg_catalog.pg_class c",
528 .selcondition =
"c.oid = a.attrelid and a.attnum > 0 and not a.attisdropped",
529 .result =
"a.attnum::pg_catalog.text",
530 .refname =
"c.relname",
531 .refviscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
532 .refnamespace =
"c.relnamespace",
535 static const char *
const Keywords_for_list_of_datatypes[] = {
555 "time with time zone",
556 "time without time zone",
557 "timestamp with time zone",
558 "timestamp without time zone",
563 static const SchemaQuery Query_for_list_of_datatypes = {
564 .catname =
"pg_catalog.pg_type t",
566 .selcondition =
"(t.typrelid = 0 "
567 " OR (SELECT c.relkind = " CppAsString2(RELKIND_COMPOSITE_TYPE)
568 " FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)) "
569 "AND t.typname !~ '^_'",
570 .viscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
571 .namespace =
"t.typnamespace",
572 .result =
"t.typname",
573 .keywords = Keywords_for_list_of_datatypes,
576 static const SchemaQuery Query_for_list_of_composite_datatypes = {
577 .catname =
"pg_catalog.pg_type t",
579 .selcondition =
"(SELECT c.relkind = " CppAsString2(RELKIND_COMPOSITE_TYPE)
580 " FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid) "
581 "AND t.typname !~ '^_'",
582 .viscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
583 .namespace =
"t.typnamespace",
584 .result =
"t.typname",
587 static const SchemaQuery Query_for_list_of_domains = {
588 .catname =
"pg_catalog.pg_type t",
589 .selcondition =
"t.typtype = 'd'",
590 .viscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
591 .namespace =
"t.typnamespace",
592 .result =
"t.typname",
595 static const SchemaQuery Query_for_list_of_enum_values_quoted = {
596 .catname =
"pg_catalog.pg_enum e, pg_catalog.pg_type t",
597 .selcondition =
"t.oid = e.enumtypid",
598 .result =
"pg_catalog.quote_literal(enumlabel)",
599 .refname =
"t.typname",
600 .refviscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
601 .refnamespace =
"t.typnamespace",
604 static const SchemaQuery Query_for_list_of_enum_values_unquoted = {
605 .catname =
"pg_catalog.pg_enum e, pg_catalog.pg_type t",
606 .selcondition =
"t.oid = e.enumtypid",
607 .result =
"e.enumlabel",
608 .refname =
"t.typname",
609 .refviscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
610 .refnamespace =
"t.typnamespace",
614 static const SchemaQuery Query_for_list_of_functions[] = {
616 .min_server_version = 110000,
617 .catname =
"pg_catalog.pg_proc p",
618 .selcondition =
"p.prokind != 'p'",
619 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
620 .namespace =
"p.pronamespace",
621 .result =
"p.proname",
624 .catname =
"pg_catalog.pg_proc p",
625 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
626 .namespace =
"p.pronamespace",
627 .result =
"p.proname",
631 static const SchemaQuery Query_for_list_of_procedures[] = {
633 .min_server_version = 110000,
634 .catname =
"pg_catalog.pg_proc p",
635 .selcondition =
"p.prokind = 'p'",
636 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
637 .namespace =
"p.pronamespace",
638 .result =
"p.proname",
646 static const SchemaQuery Query_for_list_of_routines = {
647 .catname =
"pg_catalog.pg_proc p",
648 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
649 .namespace =
"p.pronamespace",
650 .result =
"p.proname",
653 static const SchemaQuery Query_for_list_of_sequences = {
654 .catname =
"pg_catalog.pg_class c",
655 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_SEQUENCE)
")",
656 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
657 .namespace =
"c.relnamespace",
658 .result =
"c.relname",
661 static const SchemaQuery Query_for_list_of_foreign_tables = {
662 .catname =
"pg_catalog.pg_class c",
663 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_FOREIGN_TABLE)
")",
664 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
665 .namespace =
"c.relnamespace",
666 .result =
"c.relname",
669 static const SchemaQuery Query_for_list_of_tables = {
670 .catname =
"pg_catalog.pg_class c",
674 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
675 .namespace =
"c.relnamespace",
676 .result =
"c.relname",
679 static const SchemaQuery Query_for_list_of_partitioned_tables = {
680 .catname =
"pg_catalog.pg_class c",
681 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_PARTITIONED_TABLE)
")",
682 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
683 .namespace =
"c.relnamespace",
684 .result =
"c.relname",
687 static const SchemaQuery Query_for_list_of_tables_for_constraint = {
688 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_constraint con",
689 .selcondition =
"c.oid=con.conrelid and c.relkind IN ("
692 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
693 .namespace =
"c.relnamespace",
694 .result =
"c.relname",
695 .use_distinct =
true,
696 .refname =
"con.conname",
699 static const SchemaQuery Query_for_list_of_tables_for_policy = {
700 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_policy p",
701 .selcondition =
"c.oid=p.polrelid",
702 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
703 .namespace =
"c.relnamespace",
704 .result =
"c.relname",
705 .use_distinct =
true,
706 .refname =
"p.polname",
709 static const SchemaQuery Query_for_list_of_tables_for_rule = {
710 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_rewrite r",
711 .selcondition =
"c.oid=r.ev_class",
712 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
713 .namespace =
"c.relnamespace",
714 .result =
"c.relname",
715 .use_distinct =
true,
716 .refname =
"r.rulename",
719 static const SchemaQuery Query_for_list_of_tables_for_trigger = {
720 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_trigger t",
721 .selcondition =
"c.oid=t.tgrelid",
722 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
723 .namespace =
"c.relnamespace",
724 .result =
"c.relname",
725 .use_distinct =
true,
726 .refname =
"t.tgname",
729 static const SchemaQuery Query_for_list_of_ts_configurations = {
730 .catname =
"pg_catalog.pg_ts_config c",
731 .viscondition =
"pg_catalog.pg_ts_config_is_visible(c.oid)",
732 .namespace =
"c.cfgnamespace",
733 .result =
"c.cfgname",
736 static const SchemaQuery Query_for_list_of_ts_dictionaries = {
737 .catname =
"pg_catalog.pg_ts_dict d",
738 .viscondition =
"pg_catalog.pg_ts_dict_is_visible(d.oid)",
739 .namespace =
"d.dictnamespace",
740 .result =
"d.dictname",
743 static const SchemaQuery Query_for_list_of_ts_parsers = {
744 .catname =
"pg_catalog.pg_ts_parser p",
745 .viscondition =
"pg_catalog.pg_ts_parser_is_visible(p.oid)",
746 .namespace =
"p.prsnamespace",
747 .result =
"p.prsname",
750 static const SchemaQuery Query_for_list_of_ts_templates = {
751 .catname =
"pg_catalog.pg_ts_template t",
752 .viscondition =
"pg_catalog.pg_ts_template_is_visible(t.oid)",
753 .namespace =
"t.tmplnamespace",
754 .result =
"t.tmplname",
757 static const SchemaQuery Query_for_list_of_views = {
758 .catname =
"pg_catalog.pg_class c",
759 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_VIEW)
")",
760 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
761 .namespace =
"c.relnamespace",
762 .result =
"c.relname",
765 static const SchemaQuery Query_for_list_of_matviews = {
766 .catname =
"pg_catalog.pg_class c",
767 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_MATVIEW)
")",
768 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
769 .namespace =
"c.relnamespace",
770 .result =
"c.relname",
773 static const SchemaQuery Query_for_list_of_indexes = {
774 .catname =
"pg_catalog.pg_class c",
778 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
779 .namespace =
"c.relnamespace",
780 .result =
"c.relname",
783 static const SchemaQuery Query_for_list_of_partitioned_indexes = {
784 .catname =
"pg_catalog.pg_class c",
785 .selcondition =
"c.relkind = " CppAsString2(RELKIND_PARTITIONED_INDEX),
786 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
787 .namespace =
"c.relnamespace",
788 .result =
"c.relname",
793 static const SchemaQuery Query_for_list_of_relations = {
794 .catname =
"pg_catalog.pg_class c",
795 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
796 .namespace =
"c.relnamespace",
797 .result =
"c.relname",
801 static const SchemaQuery Query_for_list_of_partitioned_relations = {
802 .catname =
"pg_catalog.pg_class c",
803 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_PARTITIONED_TABLE)
805 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
806 .namespace =
"c.relnamespace",
807 .result =
"c.relname",
810 static const SchemaQuery Query_for_list_of_operator_families = {
811 .catname =
"pg_catalog.pg_opfamily c",
812 .viscondition =
"pg_catalog.pg_opfamily_is_visible(c.oid)",
813 .namespace =
"c.opfnamespace",
814 .result =
"c.opfname",
818 static const SchemaQuery Query_for_list_of_updatables = {
819 .catname =
"pg_catalog.pg_class c",
825 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
826 .namespace =
"c.relnamespace",
827 .result =
"c.relname",
831 static const SchemaQuery Query_for_list_of_mergetargets = {
832 .catname =
"pg_catalog.pg_class c",
836 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
837 .namespace =
"c.relnamespace",
838 .result =
"c.relname",
842 static const SchemaQuery Query_for_list_of_selectables = {
843 .catname =
"pg_catalog.pg_class c",
851 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
852 .namespace =
"c.relnamespace",
853 .result =
"c.relname",
857 static const SchemaQuery Query_for_list_of_truncatables = {
858 .catname =
"pg_catalog.pg_class c",
863 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
864 .namespace =
"c.relnamespace",
865 .result =
"c.relname",
869 #define Query_for_list_of_grantables Query_for_list_of_selectables
872 static const SchemaQuery Query_for_list_of_analyzables = {
873 .catname =
"pg_catalog.pg_class c",
879 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
880 .namespace =
"c.relnamespace",
881 .result =
"c.relname",
885 static const SchemaQuery Query_for_list_of_indexables = {
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",
900 #define Query_for_list_of_vacuumables Query_for_list_of_indexables
903 static const SchemaQuery Query_for_list_of_clusterables = {
904 .catname =
"pg_catalog.pg_class c",
909 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
910 .namespace =
"c.relnamespace",
911 .result =
"c.relname",
914 static const SchemaQuery Query_for_list_of_constraints_with_schema = {
915 .catname =
"pg_catalog.pg_constraint c",
916 .selcondition =
"c.conrelid <> 0",
917 .namespace =
"c.connamespace",
918 .result =
"c.conname",
921 static const SchemaQuery Query_for_list_of_statistics = {
922 .catname =
"pg_catalog.pg_statistic_ext s",
923 .viscondition =
"pg_catalog.pg_statistics_obj_is_visible(s.oid)",
924 .namespace =
"s.stxnamespace",
925 .result =
"s.stxname",
928 static const SchemaQuery Query_for_list_of_collations = {
929 .catname =
"pg_catalog.pg_collation c",
930 .selcondition =
"c.collencoding IN (-1, pg_catalog.pg_char_to_encoding(pg_catalog.getdatabaseencoding()))",
931 .viscondition =
"pg_catalog.pg_collation_is_visible(c.oid)",
932 .namespace =
"c.collnamespace",
933 .result =
"c.collname",
936 static const SchemaQuery Query_for_partition_of_table = {
937 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_inherits i",
938 .selcondition =
"c1.oid=i.inhparent and i.inhrelid=c2.oid and c2.relispartition",
939 .viscondition =
"pg_catalog.pg_table_is_visible(c2.oid)",
940 .namespace =
"c2.relnamespace",
941 .result =
"c2.relname",
942 .refname =
"c1.relname",
943 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
944 .refnamespace =
"c1.relnamespace",
947 static const SchemaQuery Query_for_rule_of_table = {
948 .catname =
"pg_catalog.pg_rewrite r, pg_catalog.pg_class c1",
949 .selcondition =
"r.ev_class=c1.oid",
950 .result =
"r.rulename",
951 .refname =
"c1.relname",
952 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
953 .refnamespace =
"c1.relnamespace",
956 static const SchemaQuery Query_for_trigger_of_table = {
957 .catname =
"pg_catalog.pg_trigger t, pg_catalog.pg_class c1",
958 .selcondition =
"t.tgrelid=c1.oid and not t.tgisinternal",
959 .result =
"t.tgname",
960 .refname =
"c1.relname",
961 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
962 .refnamespace =
"c1.relnamespace",
985 #define Query_for_list_of_template_databases \
987 " FROM pg_catalog.pg_database d "\
988 " WHERE d.datname LIKE '%s' "\
989 " AND (d.datistemplate OR pg_catalog.pg_has_role(d.datdba, 'USAGE'))"
991 #define Query_for_list_of_databases \
992 "SELECT datname FROM pg_catalog.pg_database "\
993 " WHERE datname LIKE '%s'"
995 #define Query_for_list_of_tablespaces \
996 "SELECT spcname FROM pg_catalog.pg_tablespace "\
997 " WHERE spcname LIKE '%s'"
999 #define Query_for_list_of_encodings \
1000 " SELECT DISTINCT pg_catalog.pg_encoding_to_char(conforencoding) "\
1001 " FROM pg_catalog.pg_conversion "\
1002 " WHERE pg_catalog.pg_encoding_to_char(conforencoding) LIKE pg_catalog.upper('%s')"
1004 #define Query_for_list_of_languages \
1006 " FROM pg_catalog.pg_language "\
1007 " WHERE lanname != 'internal' "\
1008 " AND lanname LIKE '%s'"
1010 #define Query_for_list_of_schemas \
1011 "SELECT nspname FROM pg_catalog.pg_namespace "\
1012 " WHERE nspname LIKE '%s'"
1015 #define Query_for_list_of_alter_system_set_vars \
1016 "SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1017 " WHERE context != 'internal' "\
1018 " AND pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1020 #define Query_for_list_of_set_vars \
1021 "SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1022 " WHERE context IN ('user', 'superuser') "\
1023 " AND pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1025 #define Query_for_list_of_show_vars \
1026 "SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1027 " WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1029 #define Query_for_list_of_roles \
1031 " FROM pg_catalog.pg_roles "\
1032 " WHERE rolname LIKE '%s'"
1035 #define Keywords_for_list_of_grant_roles \
1036 "PUBLIC", "CURRENT_ROLE", "CURRENT_USER", "SESSION_USER"
1038 #define Query_for_all_table_constraints \
1040 " FROM pg_catalog.pg_constraint c "\
1041 " WHERE c.conrelid <> 0 "\
1042 " and conname LIKE '%s'"
1044 #define Query_for_list_of_fdws \
1046 " FROM pg_catalog.pg_foreign_data_wrapper "\
1047 " WHERE fdwname LIKE '%s'"
1049 #define Query_for_list_of_servers \
1051 " FROM pg_catalog.pg_foreign_server "\
1052 " WHERE srvname LIKE '%s'"
1054 #define Query_for_list_of_user_mappings \
1056 " FROM pg_catalog.pg_user_mappings "\
1057 " WHERE usename LIKE '%s'"
1059 #define Query_for_list_of_access_methods \
1061 " FROM pg_catalog.pg_am "\
1062 " WHERE amname LIKE '%s'"
1064 #define Query_for_list_of_index_access_methods \
1066 " FROM pg_catalog.pg_am "\
1067 " WHERE amname LIKE '%s' AND "\
1068 " amtype=" CppAsString2(AMTYPE_INDEX)
1070 #define Query_for_list_of_table_access_methods \
1072 " FROM pg_catalog.pg_am "\
1073 " WHERE amname LIKE '%s' AND "\
1074 " amtype=" CppAsString2(AMTYPE_TABLE)
1076 #define Query_for_list_of_extensions \
1078 " FROM pg_catalog.pg_extension "\
1079 " WHERE extname LIKE '%s'"
1081 #define Query_for_list_of_available_extensions \
1083 " FROM pg_catalog.pg_available_extensions "\
1084 " WHERE name LIKE '%s' AND installed_version IS NULL"
1086 #define Query_for_list_of_available_extension_versions \
1088 " FROM pg_catalog.pg_available_extension_versions "\
1089 " WHERE version LIKE '%s' AND name='%s'"
1091 #define Query_for_list_of_prepared_statements \
1093 " FROM pg_catalog.pg_prepared_statements "\
1094 " WHERE name LIKE '%s'"
1096 #define Query_for_list_of_event_triggers \
1098 " FROM pg_catalog.pg_event_trigger "\
1099 " WHERE evtname LIKE '%s'"
1101 #define Query_for_list_of_tablesample_methods \
1103 " FROM pg_catalog.pg_proc "\
1104 " WHERE prorettype = 'pg_catalog.tsm_handler'::pg_catalog.regtype AND "\
1105 " proargtypes[0] = 'pg_catalog.internal'::pg_catalog.regtype AND "\
1106 " proname LIKE '%s'"
1108 #define Query_for_list_of_policies \
1110 " FROM pg_catalog.pg_policy "\
1111 " WHERE polname LIKE '%s'"
1113 #define Query_for_values_of_enum_GUC \
1114 " SELECT val FROM ( "\
1115 " SELECT name, pg_catalog.unnest(enumvals) AS val "\
1116 " FROM pg_catalog.pg_settings "\
1118 " WHERE val LIKE '%s'"\
1119 " and pg_catalog.lower(name)=pg_catalog.lower('%s')"
1121 #define Query_for_list_of_channels \
1123 " FROM pg_catalog.pg_listening_channels() AS channel "\
1124 " WHERE channel LIKE '%s'"
1126 #define Query_for_list_of_cursors \
1128 " FROM pg_catalog.pg_cursors "\
1129 " WHERE name LIKE '%s'"
1131 #define Query_for_list_of_timezone_names_unquoted \
1133 " FROM pg_catalog.pg_timezone_names() "\
1134 " WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1136 #define Query_for_list_of_timezone_names_quoted_out \
1137 "SELECT pg_catalog.quote_literal(name) AS name "\
1138 " FROM pg_catalog.pg_timezone_names() "\
1139 " WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1141 #define Query_for_list_of_timezone_names_quoted_in \
1142 "SELECT pg_catalog.quote_literal(name) AS name "\
1143 " FROM pg_catalog.pg_timezone_names() "\
1144 " WHERE pg_catalog.quote_literal(pg_catalog.lower(name)) LIKE pg_catalog.lower('%s')"
1152 static const VersionedQuery Query_for_list_of_publications[] = {
1155 " FROM pg_catalog.pg_publication "
1156 " WHERE pubname LIKE '%s'"
1161 static const VersionedQuery Query_for_list_of_subscriptions[] = {
1163 " SELECT s.subname "
1164 " FROM pg_catalog.pg_subscription s, pg_catalog.pg_database d "
1165 " WHERE s.subname LIKE '%s' "
1166 " AND d.datname = pg_catalog.current_database() "
1167 " AND s.subdbid = d.oid"
1182 const VersionedQuery *vquery;
1183 const SchemaQuery *squery;
1184 const char *
const *keywords;
1188 #define THING_NO_CREATE (1 << 0)
1189 #define THING_NO_DROP (1 << 1)
1190 #define THING_NO_ALTER (1 << 2)
1191 #define THING_NO_SHOW (THING_NO_CREATE | THING_NO_DROP | THING_NO_ALTER)
1194 static const char *
const Keywords_for_user_thing[] = {
1199 static const pgsql_thing_t words_after_create[] = {
1200 {
"ACCESS METHOD", NULL, NULL, NULL, NULL, THING_NO_ALTER},
1201 {
"AGGREGATE", NULL, NULL, Query_for_list_of_aggregates},
1202 {
"CAST", NULL, NULL, NULL},
1204 {
"COLLATION", NULL, NULL, &Query_for_list_of_collations},
1210 {
"CONFIGURATION", NULL, NULL, &Query_for_list_of_ts_configurations, NULL, THING_NO_SHOW},
1211 {
"CONVERSION",
"SELECT conname FROM pg_catalog.pg_conversion WHERE conname LIKE '%s'"},
1212 {
"DATABASE", Query_for_list_of_databases},
1213 {
"DEFAULT PRIVILEGES", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1214 {
"DICTIONARY", NULL, NULL, &Query_for_list_of_ts_dictionaries, NULL, THING_NO_SHOW},
1215 {
"DOMAIN", NULL, NULL, &Query_for_list_of_domains},
1216 {
"EVENT TRIGGER", NULL, NULL, NULL},
1217 {
"EXTENSION", Query_for_list_of_extensions},
1218 {
"FOREIGN DATA WRAPPER", NULL, NULL, NULL},
1219 {
"FOREIGN TABLE", NULL, NULL, NULL},
1220 {
"FUNCTION", NULL, NULL, Query_for_list_of_functions},
1221 {
"GROUP", Query_for_list_of_roles},
1222 {
"INDEX", NULL, NULL, &Query_for_list_of_indexes},
1223 {
"LANGUAGE", Query_for_list_of_languages},
1224 {
"LARGE OBJECT", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1225 {
"MATERIALIZED VIEW", NULL, NULL, &Query_for_list_of_matviews},
1226 {
"OPERATOR", NULL, NULL, NULL},
1228 {
"OR REPLACE", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1229 {
"OWNED", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_ALTER},
1230 {
"PARSER", NULL, NULL, &Query_for_list_of_ts_parsers, NULL, THING_NO_SHOW},
1231 {
"POLICY", NULL, NULL, NULL},
1232 {
"PROCEDURE", NULL, NULL, Query_for_list_of_procedures},
1233 {
"PUBLICATION", NULL, Query_for_list_of_publications},
1234 {
"ROLE", Query_for_list_of_roles},
1235 {
"ROUTINE", NULL, NULL, &Query_for_list_of_routines, NULL, THING_NO_CREATE},
1236 {
"RULE",
"SELECT rulename FROM pg_catalog.pg_rules WHERE rulename LIKE '%s'"},
1237 {
"SCHEMA", Query_for_list_of_schemas},
1238 {
"SEQUENCE", NULL, NULL, &Query_for_list_of_sequences},
1239 {
"SERVER", Query_for_list_of_servers},
1240 {
"STATISTICS", NULL, NULL, &Query_for_list_of_statistics},
1241 {
"SUBSCRIPTION", NULL, Query_for_list_of_subscriptions},
1242 {
"SYSTEM", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1243 {
"TABLE", NULL, NULL, &Query_for_list_of_tables},
1244 {
"TABLESPACE", Query_for_list_of_tablespaces},
1245 {
"TEMP", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1247 {
"TEMPLATE", NULL, NULL, &Query_for_list_of_ts_templates, NULL, THING_NO_SHOW},
1248 {
"TEMPORARY", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1250 {
"TEXT SEARCH", NULL, NULL, NULL},
1251 {
"TRANSFORM", NULL, NULL, NULL, NULL, THING_NO_ALTER},
1252 {
"TRIGGER",
"SELECT tgname FROM pg_catalog.pg_trigger WHERE tgname LIKE '%s' AND NOT tgisinternal"},
1253 {
"TYPE", NULL, NULL, &Query_for_list_of_datatypes},
1254 {
"UNIQUE", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1256 {
"UNLOGGED", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1258 {
"USER", Query_for_list_of_roles, NULL, NULL, Keywords_for_user_thing},
1259 {
"USER MAPPING FOR", NULL, NULL, NULL},
1260 {
"VIEW", NULL, NULL, &Query_for_list_of_views},
1265 static const char *
const table_storage_parameters[] = {
1266 "autovacuum_analyze_scale_factor",
1267 "autovacuum_analyze_threshold",
1268 "autovacuum_enabled",
1269 "autovacuum_freeze_max_age",
1270 "autovacuum_freeze_min_age",
1271 "autovacuum_freeze_table_age",
1272 "autovacuum_multixact_freeze_max_age",
1273 "autovacuum_multixact_freeze_min_age",
1274 "autovacuum_multixact_freeze_table_age",
1275 "autovacuum_vacuum_cost_delay",
1276 "autovacuum_vacuum_cost_limit",
1277 "autovacuum_vacuum_insert_scale_factor",
1278 "autovacuum_vacuum_insert_threshold",
1279 "autovacuum_vacuum_scale_factor",
1280 "autovacuum_vacuum_threshold",
1282 "log_autovacuum_min_duration",
1284 "toast.autovacuum_enabled",
1285 "toast.autovacuum_freeze_max_age",
1286 "toast.autovacuum_freeze_min_age",
1287 "toast.autovacuum_freeze_table_age",
1288 "toast.autovacuum_multixact_freeze_max_age",
1289 "toast.autovacuum_multixact_freeze_min_age",
1290 "toast.autovacuum_multixact_freeze_table_age",
1291 "toast.autovacuum_vacuum_cost_delay",
1292 "toast.autovacuum_vacuum_cost_limit",
1293 "toast.autovacuum_vacuum_insert_scale_factor",
1294 "toast.autovacuum_vacuum_insert_threshold",
1295 "toast.autovacuum_vacuum_scale_factor",
1296 "toast.autovacuum_vacuum_threshold",
1297 "toast.log_autovacuum_min_duration",
1298 "toast.vacuum_index_cleanup",
1299 "toast.vacuum_truncate",
1300 "toast_tuple_target",
1301 "user_catalog_table",
1302 "vacuum_index_cleanup",
1309 static char **psql_completion(
const char *
text,
int start,
int end);
1310 static char *create_command_generator(
const char *
text,
int state);
1311 static char *drop_command_generator(
const char *
text,
int state);
1312 static char *alter_command_generator(
const char *
text,
int state);
1313 static char *complete_from_query(
const char *
text,
int state);
1314 static char *complete_from_versioned_query(
const char *
text,
int state);
1315 static char *complete_from_schema_query(
const char *
text,
int state);
1316 static char *complete_from_versioned_schema_query(
const char *
text,
int state);
1317 static char *_complete_from_query(
const char *simple_query,
1318 const SchemaQuery *schema_query,
1319 const char *
const *keywords,
1322 static void set_completion_reference(
const char *
word);
1323 static void set_completion_reference_verbatim(
const char *
word);
1324 static char *complete_from_list(
const char *
text,
int state);
1325 static char *complete_from_const(
const char *
text,
int state);
1326 static void append_variable_names(
char ***varnames,
int *nvars,
1327 int *maxvars,
const char *varname,
1328 const char *prefix,
const char *suffix);
1329 static char **complete_from_variables(
const char *
text,
1330 const char *prefix,
const char *suffix,
bool need_value);
1331 static char *complete_from_files(
const char *
text,
int state);
1333 static char *pg_strdup_keyword_case(
const char *s,
const char *ref);
1334 static char *escape_string(
const char *
text);
1335 static char *make_like_pattern(
const char *
word);
1336 static void parse_identifier(
const char *ident,
1337 char **schemaname,
char **objectname,
1338 bool *schemaquoted,
bool *objectquoted);
1339 static char *requote_identifier(
const char *schemaname,
const char *objectname,
1340 bool quote_schema,
bool quote_object);
1341 static bool identifier_needs_quotes(
const char *ident);
1342 static PGresult *exec_query(
const char *query);
1344 static char **get_previous_words(
int point,
char **buffer,
int *nwords);
1346 static char *get_guctype(
const char *varname);
1348 #ifdef USE_FILENAME_QUOTING_FUNCTIONS
1349 static char *quote_file_name(
char *fname,
int match_type,
char *quote_pointer);
1350 static char *dequote_file_name(
char *fname,
int quote_char);
1361 rl_attempted_completion_function = psql_completion;
1363 #ifdef USE_FILENAME_QUOTING_FUNCTIONS
1364 rl_filename_quoting_function = quote_file_name;
1365 rl_filename_dequoting_function = dequote_file_name;
1368 rl_basic_word_break_characters = WORD_BREAKS;
1377 rl_completer_quote_characters =
"'";
1385 #ifdef HAVE_RL_FILENAME_QUOTE_CHARACTERS
1387 unsigned char *fqc = (
unsigned char *)
pg_malloc(256);
1389 for (
int i = 0;
i < 255;
i++)
1390 fqc[
i] = (
unsigned char) (
i + 1);
1392 rl_filename_quote_characters = (
const char *) fqc;
1396 completion_max_records = 1000;
1418 #define MatchAny NULL
1419 #define MatchAnyExcept(pattern) ("!" pattern)
1422 word_matches(
const char *pattern,
1424 bool case_sensitive)
1428 #define cimatch(s1, s2, n) \
1429 (case_sensitive ? strncmp(s1, s2, n) == 0 : pg_strncasecmp(s1, s2, n) == 0)
1432 if (pattern == NULL)
1436 if (*pattern ==
'!')
1437 return !word_matches(pattern + 1,
word, case_sensitive);
1440 wordlen = strlen(
word);
1443 const char *star = NULL;
1448 while (*
c !=
'\0' && *
c !=
'|')
1458 size_t beforelen = star - pattern,
1459 afterlen =
c - star - 1;
1461 if (wordlen >= (beforelen + afterlen) &&
1462 cimatch(
word, pattern, beforelen) &&
1463 cimatch(
word + wordlen - afterlen, star + 1, afterlen))
1469 if (wordlen == (
c - pattern) &&
1470 cimatch(
word, pattern, wordlen))
1491 TailMatchesImpl(
bool case_sensitive,
1492 int previous_words_count,
char **previous_words,
1497 if (previous_words_count < narg)
1502 for (
int argno = 0; argno < narg; argno++)
1504 const char *
arg = va_arg(
args,
const char *);
1506 if (!word_matches(
arg, previous_words[narg - argno - 1],
1524 MatchesImpl(
bool case_sensitive,
1525 int previous_words_count,
char **previous_words,
1530 if (previous_words_count != narg)
1535 for (
int argno = 0; argno < narg; argno++)
1537 const char *
arg = va_arg(
args,
const char *);
1539 if (!word_matches(
arg, previous_words[narg - argno - 1],
1557 HeadMatchesImpl(
bool case_sensitive,
1558 int previous_words_count,
char **previous_words,
1563 if (previous_words_count < narg)
1568 for (
int argno = 0; argno < narg; argno++)
1570 const char *
arg = va_arg(
args,
const char *);
1572 if (!word_matches(
arg, previous_words[previous_words_count - argno - 1],
1589 ends_with(
const char *s,
char c)
1591 size_t length = strlen(s);
1593 return (length > 0 && s[length - 1] ==
c);
1605 psql_completion(
const char *
text,
int start,
int end)
1608 char **matches = NULL;
1614 char **previous_words;
1617 int previous_words_count;
1626 #define prev_wd (previous_words[0])
1627 #define prev2_wd (previous_words[1])
1628 #define prev3_wd (previous_words[2])
1629 #define prev4_wd (previous_words[3])
1630 #define prev5_wd (previous_words[4])
1631 #define prev6_wd (previous_words[5])
1632 #define prev7_wd (previous_words[6])
1633 #define prev8_wd (previous_words[7])
1634 #define prev9_wd (previous_words[8])
1637 #define TailMatches(...) \
1638 TailMatchesImpl(false, previous_words_count, previous_words, \
1639 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1642 #define TailMatchesCS(...) \
1643 TailMatchesImpl(true, previous_words_count, previous_words, \
1644 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1647 #define Matches(...) \
1648 MatchesImpl(false, previous_words_count, previous_words, \
1649 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1652 #define MatchesCS(...) \
1653 MatchesImpl(true, previous_words_count, previous_words, \
1654 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1657 #define HeadMatches(...) \
1658 HeadMatchesImpl(false, previous_words_count, previous_words, \
1659 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1662 #define HeadMatchesCS(...) \
1663 HeadMatchesImpl(true, previous_words_count, previous_words, \
1664 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1667 static const char *
const sql_commands[] = {
1668 "ABORT",
"ALTER",
"ANALYZE",
"BEGIN",
"CALL",
"CHECKPOINT",
"CLOSE",
"CLUSTER",
1669 "COMMENT",
"COMMIT",
"COPY",
"CREATE",
"DEALLOCATE",
"DECLARE",
1670 "DELETE FROM",
"DISCARD",
"DO",
"DROP",
"END",
"EXECUTE",
"EXPLAIN",
1671 "FETCH",
"GRANT",
"IMPORT FOREIGN SCHEMA",
"INSERT INTO",
"LISTEN",
"LOAD",
"LOCK",
1672 "MERGE",
"MOVE",
"NOTIFY",
"PREPARE",
1673 "REASSIGN",
"REFRESH MATERIALIZED VIEW",
"REINDEX",
"RELEASE",
1674 "RESET",
"REVOKE",
"ROLLBACK",
1675 "SAVEPOINT",
"SECURITY LABEL",
"SELECT",
"SET",
"SHOW",
"START",
1676 "TABLE",
"TRUNCATE",
"UNLISTEN",
"UPDATE",
"VACUUM",
"VALUES",
"WITH",
1681 static const char *
const backslash_commands[] = {
1683 "\\connect",
"\\conninfo",
"\\C",
"\\cd",
"\\copy",
1684 "\\copyright",
"\\crosstabview",
1685 "\\d",
"\\da",
"\\dA",
"\\dAc",
"\\dAf",
"\\dAo",
"\\dAp",
1686 "\\db",
"\\dc",
"\\dconfig",
"\\dC",
"\\dd",
"\\ddp",
"\\dD",
1687 "\\des",
"\\det",
"\\deu",
"\\dew",
"\\dE",
"\\df",
1688 "\\dF",
"\\dFd",
"\\dFp",
"\\dFt",
"\\dg",
"\\di",
"\\dl",
"\\dL",
1689 "\\dm",
"\\dn",
"\\do",
"\\dO",
"\\dp",
"\\dP",
"\\dPi",
"\\dPt",
1690 "\\drds",
"\\dRs",
"\\dRp",
"\\ds",
1691 "\\dt",
"\\dT",
"\\dv",
"\\du",
"\\dx",
"\\dX",
"\\dy",
1692 "\\echo",
"\\edit",
"\\ef",
"\\elif",
"\\else",
"\\encoding",
1693 "\\endif",
"\\errverbose",
"\\ev",
1695 "\\g",
"\\gdesc",
"\\getenv",
"\\gexec",
"\\gset",
"\\gx",
1697 "\\if",
"\\include",
"\\include_relative",
"\\ir",
1698 "\\list",
"\\lo_import",
"\\lo_export",
"\\lo_list",
"\\lo_unlink",
1700 "\\password",
"\\print",
"\\prompt",
"\\pset",
1701 "\\qecho",
"\\quit",
1703 "\\s",
"\\set",
"\\setenv",
"\\sf",
"\\sv",
1704 "\\t",
"\\T",
"\\timing",
1707 "\\warn",
"\\watch",
"\\write",
1718 char *text_copy =
pnstrdup(rl_line_buffer + start, end - start);
1722 completion_last_char = (end > start) ?
text[end - start - 1] :
'\0';
1725 rl_completion_append_character =
' ';
1728 completion_charp = NULL;
1729 completion_charpp = NULL;
1730 completion_vquery = NULL;
1731 completion_squery = NULL;
1732 completion_ref_object = NULL;
1733 completion_ref_schema = NULL;
1740 previous_words = get_previous_words(start,
1742 &previous_words_count);
1745 if (
text[0] ==
'\\')
1746 COMPLETE_WITH_LIST_CS(backslash_commands);
1749 else if (
text[0] ==
':' &&
text[1] !=
':')
1751 if (
text[1] ==
'\'')
1752 matches = complete_from_variables(
text,
":'",
"'",
true);
1753 else if (
text[1] ==
'"')
1754 matches = complete_from_variables(
text,
":\"",
"\"",
true);
1756 matches = complete_from_variables(
text,
":",
"",
true);
1760 else if (previous_words_count == 0)
1761 COMPLETE_WITH_LIST(sql_commands);
1765 else if (TailMatches(
"CREATE"))
1766 matches = rl_completion_matches(
text, create_command_generator);
1769 else if (TailMatches(
"CREATE",
"OR",
"REPLACE"))
1770 COMPLETE_WITH(
"FUNCTION",
"PROCEDURE",
"LANGUAGE",
"RULE",
"VIEW",
1771 "AGGREGATE",
"TRANSFORM",
"TRIGGER");
1775 else if (Matches(
"DROP"))
1776 matches = rl_completion_matches(
text, drop_command_generator);
1781 else if (Matches(
"ALTER",
"TABLE"))
1782 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
1783 "ALL IN TABLESPACE");
1786 else if (Matches(
"ALTER"))
1787 matches = rl_completion_matches(
text, alter_command_generator);
1789 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny))
1790 COMPLETE_WITH(
"SET TABLESPACE",
"OWNED BY");
1792 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny,
"OWNED",
"BY"))
1793 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
1795 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny,
"OWNED",
"BY", MatchAny))
1796 COMPLETE_WITH(
"SET TABLESPACE");
1798 else if (Matches(
"ALTER",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny))
1801 else if (Matches(
"ALTER",
"AGGREGATE", MatchAny, MatchAny))
1803 if (ends_with(prev_wd,
')'))
1804 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
1806 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
1809 else if (Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny))
1811 if (ends_with(prev_wd,
')'))
1812 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA",
1813 "DEPENDS ON EXTENSION",
"NO DEPENDS ON EXTENSION");
1815 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
1819 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny))
1820 COMPLETE_WITH(
"ADD",
"DROP",
"OWNER TO",
"RENAME TO",
"SET");
1822 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD"))
1823 COMPLETE_WITH(
"ALL TABLES IN SCHEMA",
"TABLE");
1824 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE") ||
1825 (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE") &&
1826 ends_with(prev_wd,
',')))
1827 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
1836 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny) && TailMatches(
"WHERE"))
1838 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny) && TailMatches(
"WHERE",
"("))
1839 COMPLETE_WITH_ATTR(prev3_wd);
1840 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE") &&
1841 !TailMatches(
"WHERE",
"(*)"))
1842 COMPLETE_WITH(
",",
"WHERE (");
1843 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE"))
1846 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"DROP"))
1847 COMPLETE_WITH(
"ALL TABLES IN SCHEMA",
"TABLE");
1849 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"SET"))
1850 COMPLETE_WITH(
"(",
"ALL TABLES IN SCHEMA",
"TABLE");
1851 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|DROP|SET",
"ALL",
"TABLES",
"IN",
"SCHEMA"))
1852 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
1853 " AND nspname NOT LIKE E'pg\\\\_%%'",
1856 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny) && TailMatches(
"SET",
"("))
1857 COMPLETE_WITH(
"publish",
"publish_via_partition_root");
1859 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny))
1860 COMPLETE_WITH(
"CONNECTION",
"ENABLE",
"DISABLE",
"OWNER TO",
1861 "RENAME TO",
"REFRESH PUBLICATION",
"SET",
"SKIP (",
1862 "ADD PUBLICATION",
"DROP PUBLICATION");
1864 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) &&
1865 TailMatches(
"REFRESH",
"PUBLICATION"))
1866 COMPLETE_WITH(
"WITH (");
1868 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) &&
1869 TailMatches(
"REFRESH",
"PUBLICATION",
"WITH",
"("))
1870 COMPLETE_WITH(
"copy_data");
1872 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny,
"SET"))
1873 COMPLETE_WITH(
"(",
"PUBLICATION");
1875 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) && TailMatches(
"SET",
"("))
1876 COMPLETE_WITH(
"binary",
"slot_name",
"streaming",
"synchronous_commit",
"disable_on_error");
1878 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) && TailMatches(
"SKIP",
"("))
1879 COMPLETE_WITH(
"lsn");
1881 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) && TailMatches(
"SET",
"PUBLICATION"))
1886 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) &&
1887 TailMatches(
"ADD|DROP|SET",
"PUBLICATION", MatchAny))
1888 COMPLETE_WITH(
"WITH (");
1890 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) &&
1891 TailMatches(
"ADD|DROP|SET",
"PUBLICATION", MatchAny,
"WITH",
"("))
1892 COMPLETE_WITH(
"copy_data",
"refresh");
1895 else if (Matches(
"ALTER",
"SCHEMA", MatchAny))
1896 COMPLETE_WITH(
"OWNER TO",
"RENAME TO");
1899 else if (Matches(
"ALTER",
"COLLATION", MatchAny))
1900 COMPLETE_WITH(
"OWNER TO",
"REFRESH VERSION",
"RENAME TO",
"SET SCHEMA");
1903 else if (Matches(
"ALTER",
"CONVERSION", MatchAny))
1904 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
1907 else if (Matches(
"ALTER",
"DATABASE", MatchAny))
1908 COMPLETE_WITH(
"RESET",
"SET",
"OWNER TO",
"REFRESH COLLATION VERSION",
"RENAME TO",
1909 "IS_TEMPLATE",
"ALLOW_CONNECTIONS",
1910 "CONNECTION LIMIT");
1913 else if (Matches(
"ALTER",
"DATABASE", MatchAny,
"SET",
"TABLESPACE"))
1914 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
1917 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER"))
1918 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
1921 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER", MatchAny))
1922 COMPLETE_WITH(
"DISABLE",
"ENABLE",
"OWNER TO",
"RENAME TO");
1925 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER", MatchAny,
"ENABLE"))
1926 COMPLETE_WITH(
"REPLICA",
"ALWAYS");
1929 else if (Matches(
"ALTER",
"EXTENSION", MatchAny))
1930 COMPLETE_WITH(
"ADD",
"DROP",
"UPDATE TO",
"SET SCHEMA");
1933 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"UPDATE"))
1934 COMPLETE_WITH(
"TO");
1937 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"UPDATE",
"TO"))
1939 set_completion_reference(prev3_wd);
1940 COMPLETE_WITH_QUERY(Query_for_list_of_available_extension_versions);
1944 else if (Matches(
"ALTER",
"FOREIGN"))
1945 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
1948 else if (Matches(
"ALTER",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
1949 COMPLETE_WITH(
"HANDLER",
"VALIDATOR",
"NO",
1950 "OPTIONS",
"OWNER TO",
"RENAME TO");
1951 else if (Matches(
"ALTER",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny,
"NO"))
1952 COMPLETE_WITH(
"HANDLER",
"VALIDATOR");
1955 else if (Matches(
"ALTER",
"FOREIGN",
"TABLE", MatchAny))
1956 COMPLETE_WITH(
"ADD",
"ALTER",
"DISABLE TRIGGER",
"DROP",
"ENABLE",
1957 "INHERIT",
"NO INHERIT",
"OPTIONS",
"OWNER TO",
1958 "RENAME",
"SET",
"VALIDATE CONSTRAINT");
1961 else if (Matches(
"ALTER",
"INDEX"))
1962 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
1963 "ALL IN TABLESPACE");
1965 else if (Matches(
"ALTER",
"INDEX", MatchAny))
1966 COMPLETE_WITH(
"ALTER COLUMN",
"OWNER TO",
"RENAME TO",
"SET",
1967 "RESET",
"ATTACH PARTITION",
1968 "DEPENDS ON EXTENSION",
"NO DEPENDS ON EXTENSION");
1969 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ATTACH"))
1970 COMPLETE_WITH(
"PARTITION");
1971 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ATTACH",
"PARTITION"))
1972 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
1974 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER"))
1975 COMPLETE_WITH(
"COLUMN");
1977 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN"))
1979 set_completion_reference(prev3_wd);
1980 COMPLETE_WITH_SCHEMA_QUERY_VERBATIM(Query_for_list_of_attribute_numbers);
1983 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny))
1984 COMPLETE_WITH(
"SET STATISTICS");
1986 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET"))
1987 COMPLETE_WITH(
"STATISTICS");
1989 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STATISTICS"))
1994 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"SET"))
1995 COMPLETE_WITH(
"(",
"TABLESPACE");
1997 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"RESET"))
2000 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"RESET",
"("))
2001 COMPLETE_WITH(
"fillfactor",
2002 "deduplicate_items",
2003 "fastupdate",
"gin_pending_list_limit",
2005 "pages_per_range",
"autosummarize"
2007 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"SET",
"("))
2008 COMPLETE_WITH(
"fillfactor =",
2009 "deduplicate_items =",
2010 "fastupdate =",
"gin_pending_list_limit =",
2012 "pages_per_range =",
"autosummarize ="
2014 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"NO",
"DEPENDS"))
2015 COMPLETE_WITH(
"ON EXTENSION");
2016 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"DEPENDS"))
2017 COMPLETE_WITH(
"ON EXTENSION");
2020 else if (Matches(
"ALTER",
"LANGUAGE", MatchAny))
2021 COMPLETE_WITH(
"OWNER TO",
"RENAME TO");
2024 else if (Matches(
"ALTER",
"LARGE",
"OBJECT", MatchAny))
2025 COMPLETE_WITH(
"OWNER TO");
2028 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW"))
2029 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_matviews,
2030 "ALL IN TABLESPACE");
2033 else if (Matches(
"ALTER",
"USER|ROLE", MatchAny) &&
2034 !TailMatches(
"USER",
"MAPPING"))
2035 COMPLETE_WITH(
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
"CREATEROLE",
2036 "ENCRYPTED PASSWORD",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2037 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2038 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2039 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2040 "VALID UNTIL",
"WITH");
2043 else if (Matches(
"ALTER",
"USER|ROLE", MatchAny,
"WITH"))
2045 COMPLETE_WITH(
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
"CREATEROLE",
2046 "ENCRYPTED PASSWORD",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2047 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2048 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2049 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2053 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
2054 COMPLETE_WITH(
"FOR ROLE",
"IN SCHEMA");
2056 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR"))
2057 COMPLETE_WITH(
"ROLE");
2059 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN"))
2060 COMPLETE_WITH(
"SCHEMA");
2062 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2064 COMPLETE_WITH(
"GRANT",
"REVOKE",
"IN SCHEMA");
2066 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2068 COMPLETE_WITH(
"GRANT",
"REVOKE",
"FOR ROLE");
2070 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2072 COMPLETE_WITH(
"ROLE");
2075 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2076 MatchAny,
"IN",
"SCHEMA", MatchAny) ||
2077 Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2078 MatchAny,
"FOR",
"ROLE|USER", MatchAny))
2079 COMPLETE_WITH(
"GRANT",
"REVOKE");
2081 else if (Matches(
"ALTER",
"DOMAIN", MatchAny))
2082 COMPLETE_WITH(
"ADD",
"DROP",
"OWNER TO",
"RENAME",
"SET",
2083 "VALIDATE CONSTRAINT");
2085 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"DROP"))
2086 COMPLETE_WITH(
"CONSTRAINT",
"DEFAULT",
"NOT NULL");
2088 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"DROP|RENAME|VALIDATE",
"CONSTRAINT"))
2090 set_completion_reference(prev3_wd);
2091 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_type);
2094 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"RENAME"))
2095 COMPLETE_WITH(
"CONSTRAINT",
"TO");
2097 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"RENAME",
"CONSTRAINT", MatchAny))
2098 COMPLETE_WITH(
"TO");
2101 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"SET"))
2102 COMPLETE_WITH(
"DEFAULT",
"NOT NULL",
"SCHEMA");
2104 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny))
2105 COMPLETE_WITH(
"AS",
"INCREMENT",
"MINVALUE",
"MAXVALUE",
"RESTART",
2106 "NO",
"CACHE",
"CYCLE",
"SET",
"OWNED BY",
2107 "OWNER TO",
"RENAME TO");
2109 else if (TailMatches(
"ALTER",
"SEQUENCE", MatchAny,
"AS"))
2110 COMPLETE_WITH_CS(
"smallint",
"integer",
"bigint");
2112 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny,
"NO"))
2113 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
2115 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny,
"SET"))
2116 COMPLETE_WITH(
"SCHEMA",
"LOGGED",
"UNLOGGED");
2118 else if (Matches(
"ALTER",
"SERVER", MatchAny))
2119 COMPLETE_WITH(
"VERSION",
"OPTIONS",
"OWNER TO",
"RENAME TO");
2121 else if (Matches(
"ALTER",
"SERVER", MatchAny,
"VERSION", MatchAny))
2122 COMPLETE_WITH(
"OPTIONS");
2124 else if (Matches(
"ALTER",
"SYSTEM"))
2125 COMPLETE_WITH(
"SET",
"RESET");
2126 else if (Matches(
"ALTER",
"SYSTEM",
"SET|RESET"))
2127 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_alter_system_set_vars,
2129 else if (Matches(
"ALTER",
"SYSTEM",
"SET", MatchAny))
2130 COMPLETE_WITH(
"TO");
2132 else if (Matches(
"ALTER",
"VIEW", MatchAny))
2133 COMPLETE_WITH(
"ALTER COLUMN",
"OWNER TO",
"RENAME",
2136 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME"))
2137 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"TO");
2138 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2139 COMPLETE_WITH_ATTR(prev3_wd);
2141 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER", MatchAny) ||
2142 Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER",
"COLUMN", MatchAny))
2143 COMPLETE_WITH(
"SET DEFAULT",
"DROP DEFAULT");
2145 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME", MatchAnyExcept(
"TO")))
2146 COMPLETE_WITH(
"TO");
2148 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME",
"COLUMN", MatchAnyExcept(
"TO")))
2149 COMPLETE_WITH(
"TO");
2152 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny))
2153 COMPLETE_WITH(
"ALTER COLUMN",
"CLUSTER ON",
"DEPENDS ON EXTENSION",
2154 "NO DEPENDS ON EXTENSION",
"OWNER TO",
"RENAME",
2157 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME"))
2158 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"TO");
2159 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2160 COMPLETE_WITH_ATTR(prev3_wd);
2162 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME", MatchAnyExcept(
"TO")))
2163 COMPLETE_WITH(
"TO");
2165 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME",
"COLUMN", MatchAnyExcept(
"TO")))
2166 COMPLETE_WITH(
"TO");
2168 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"SET"))
2169 COMPLETE_WITH(
"(",
"ACCESS METHOD",
"SCHEMA",
"TABLESPACE",
"WITHOUT CLUSTER");
2171 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"SET",
"ACCESS",
"METHOD"))
2172 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
2175 else if (Matches(
"ALTER",
"POLICY"))
2176 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
2178 else if (Matches(
"ALTER",
"POLICY", MatchAny))
2179 COMPLETE_WITH(
"ON");
2181 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON"))
2183 set_completion_reference(prev2_wd);
2184 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
2187 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny))
2188 COMPLETE_WITH(
"RENAME TO",
"TO",
"USING (",
"WITH CHECK (");
2190 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"TO"))
2191 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
2192 Keywords_for_list_of_grant_roles);
2194 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"USING"))
2197 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"WITH",
"CHECK"))
2201 else if (Matches(
"ALTER",
"RULE", MatchAny))
2202 COMPLETE_WITH(
"ON");
2205 else if (Matches(
"ALTER",
"RULE", MatchAny,
"ON"))
2207 set_completion_reference(prev2_wd);
2208 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
2212 else if (Matches(
"ALTER",
"RULE", MatchAny,
"ON", MatchAny))
2213 COMPLETE_WITH(
"RENAME TO");
2216 else if (Matches(
"ALTER",
"STATISTICS", MatchAny))
2217 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA",
"SET STATISTICS");
2220 else if (Matches(
"ALTER",
"TRIGGER", MatchAny))
2221 COMPLETE_WITH(
"ON");
2223 else if (Matches(
"ALTER",
"TRIGGER", MatchAny,
"ON"))
2225 set_completion_reference(prev2_wd);
2226 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
2230 else if (Matches(
"ALTER",
"TRIGGER", MatchAny,
"ON", MatchAny))
2231 COMPLETE_WITH(
"RENAME TO",
"DEPENDS ON EXTENSION",
2232 "NO DEPENDS ON EXTENSION");
2237 else if (Matches(
"ALTER",
"TABLE", MatchAny))
2238 COMPLETE_WITH(
"ADD",
"ALTER",
"CLUSTER ON",
"DISABLE",
"DROP",
2239 "ENABLE",
"INHERIT",
"NO",
"RENAME",
"RESET",
2240 "OWNER TO",
"SET",
"VALIDATE CONSTRAINT",
2241 "REPLICA IDENTITY",
"ATTACH PARTITION",
2242 "DETACH PARTITION",
"FORCE ROW LEVEL SECURITY");
2244 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD"))
2247 COMPLETE_WITH(
"COLUMN",
"CONSTRAINT",
"CHECK",
"UNIQUE",
"PRIMARY KEY",
2248 "EXCLUDE",
"FOREIGN KEY");
2251 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"COLUMN", MatchAny) ||
2252 (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD", MatchAny) &&
2253 !Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"COLUMN|CONSTRAINT|CHECK|UNIQUE|PRIMARY|EXCLUDE|FOREIGN")))
2254 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
2256 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny))
2257 COMPLETE_WITH(
"CHECK",
"UNIQUE",
"PRIMARY KEY",
"EXCLUDE",
"FOREIGN KEY");
2259 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"PRIMARY",
"KEY") ||
2260 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"UNIQUE") ||
2261 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
"PRIMARY",
"KEY") ||
2262 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
"UNIQUE"))
2263 COMPLETE_WITH(
"(",
"USING INDEX");
2265 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"PRIMARY",
"KEY",
"USING",
"INDEX"))
2267 set_completion_reference(prev6_wd);
2268 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2271 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"UNIQUE",
"USING",
"INDEX"))
2273 set_completion_reference(prev5_wd);
2274 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2277 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
2278 "PRIMARY",
"KEY",
"USING",
"INDEX"))
2280 set_completion_reference(prev8_wd);
2281 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2284 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
2285 "UNIQUE",
"USING",
"INDEX"))
2287 set_completion_reference(prev7_wd);
2288 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2291 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE"))
2292 COMPLETE_WITH(
"ALWAYS",
"REPLICA",
"ROW LEVEL SECURITY",
"RULE",
2294 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"REPLICA|ALWAYS"))
2295 COMPLETE_WITH(
"RULE",
"TRIGGER");
2296 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"RULE"))
2298 set_completion_reference(prev3_wd);
2299 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2301 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE", MatchAny,
"RULE"))
2303 set_completion_reference(prev4_wd);
2304 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2306 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"TRIGGER"))
2308 set_completion_reference(prev3_wd);
2309 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2311 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE", MatchAny,
"TRIGGER"))
2313 set_completion_reference(prev4_wd);
2314 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2317 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"INHERIT"))
2318 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2320 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"NO"))
2321 COMPLETE_WITH(
"FORCE ROW LEVEL SECURITY",
"INHERIT");
2323 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"NO",
"INHERIT"))
2324 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2326 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE"))
2327 COMPLETE_WITH(
"ROW LEVEL SECURITY",
"RULE",
"TRIGGER");
2328 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE",
"RULE"))
2330 set_completion_reference(prev3_wd);
2331 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2333 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE",
"TRIGGER"))
2335 set_completion_reference(prev3_wd);
2336 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2340 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER"))
2341 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"CONSTRAINT");
2344 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME"))
2345 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"CONSTRAINT",
"TO");
2346 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2347 COMPLETE_WITH_ATTR(prev3_wd);
2350 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME", MatchAnyExcept(
"CONSTRAINT|TO")))
2351 COMPLETE_WITH(
"TO");
2354 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME",
"COLUMN|CONSTRAINT", MatchAnyExcept(
"TO")))
2355 COMPLETE_WITH(
"TO");
2358 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DROP"))
2359 COMPLETE_WITH(
"COLUMN",
"CONSTRAINT");
2361 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DROP",
"COLUMN"))
2362 COMPLETE_WITH_ATTR(prev3_wd);
2364 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER|DROP|RENAME",
"CONSTRAINT"))
2366 set_completion_reference(prev3_wd);
2367 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_table);
2370 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"VALIDATE",
"CONSTRAINT"))
2372 set_completion_reference(prev3_wd);
2373 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_table_not_validated);
2376 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny) ||
2377 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny))
2378 COMPLETE_WITH(
"TYPE",
"SET",
"RESET",
"RESTART",
"ADD",
"DROP");
2380 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET") ||
2381 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET"))
2382 COMPLETE_WITH(
"(",
"COMPRESSION",
"DEFAULT",
"NOT NULL",
"STATISTICS",
"STORAGE");
2384 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"(") ||
2385 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"("))
2386 COMPLETE_WITH(
"n_distinct",
"n_distinct_inherited");
2388 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STORAGE") ||
2389 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"STORAGE"))
2390 COMPLETE_WITH(
"PLAIN",
"EXTERNAL",
"EXTENDED",
"MAIN");
2392 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STATISTICS") ||
2393 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"STATISTICS"))
2398 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"DROP") ||
2399 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"DROP"))
2400 COMPLETE_WITH(
"DEFAULT",
"EXPRESSION",
"IDENTITY",
"NOT NULL");
2401 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"CLUSTER"))
2402 COMPLETE_WITH(
"ON");
2403 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"CLUSTER",
"ON"))
2405 set_completion_reference(prev3_wd);
2406 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
2409 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET"))
2410 COMPLETE_WITH(
"(",
"ACCESS METHOD",
"LOGGED",
"SCHEMA",
2411 "TABLESPACE",
"UNLOGGED",
"WITH",
"WITHOUT");
2417 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"ACCESS",
"METHOD"))
2418 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
2424 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"TABLESPACE"))
2425 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
2427 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"WITHOUT"))
2428 COMPLETE_WITH(
"CLUSTER",
"OIDS");
2430 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RESET"))
2433 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET|RESET",
"("))
2434 COMPLETE_WITH_LIST(table_storage_parameters);
2435 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY",
"USING",
"INDEX"))
2437 set_completion_reference(prev5_wd);
2438 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
2440 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY",
"USING"))
2441 COMPLETE_WITH(
"INDEX");
2442 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY"))
2443 COMPLETE_WITH(
"FULL",
"NOTHING",
"DEFAULT",
"USING");
2444 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA"))
2445 COMPLETE_WITH(
"IDENTITY");
2451 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ATTACH",
"PARTITION"))
2452 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2454 else if (TailMatches(
"ATTACH",
"PARTITION", MatchAny))
2455 COMPLETE_WITH(
"FOR VALUES",
"DEFAULT");
2456 else if (TailMatches(
"FOR",
"VALUES"))
2457 COMPLETE_WITH(
"FROM (",
"IN (",
"WITH (");
2463 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DETACH",
"PARTITION"))
2465 set_completion_reference(prev3_wd);
2466 COMPLETE_WITH_SCHEMA_QUERY(Query_for_partition_of_table);
2468 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DETACH",
"PARTITION", MatchAny))
2469 COMPLETE_WITH(
"CONCURRENTLY",
"FINALIZE");
2472 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny))
2473 COMPLETE_WITH(
"RENAME TO",
"OWNER TO",
"SET",
"RESET");
2475 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny,
"SET|RESET"))
2478 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny,
"SET|RESET",
"("))
2479 COMPLETE_WITH(
"seq_page_cost",
"random_page_cost",
2480 "effective_io_concurrency",
"maintenance_io_concurrency");
2483 else if (Matches(
"ALTER",
"TEXT",
"SEARCH"))
2484 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
2485 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"TEMPLATE|PARSER", MatchAny))
2486 COMPLETE_WITH(
"RENAME TO",
"SET SCHEMA");
2487 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"DICTIONARY", MatchAny))
2488 COMPLETE_WITH(
"(",
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
2489 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"CONFIGURATION", MatchAny))
2490 COMPLETE_WITH(
"ADD MAPPING FOR",
"ALTER MAPPING",
2492 "OWNER TO",
"RENAME TO",
"SET SCHEMA");
2495 else if (Matches(
"ALTER",
"TYPE", MatchAny))
2496 COMPLETE_WITH(
"ADD ATTRIBUTE",
"ADD VALUE",
"ALTER ATTRIBUTE",
2498 "OWNER TO",
"RENAME",
"SET SCHEMA",
"SET (");
2500 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ADD"))
2501 COMPLETE_WITH(
"ATTRIBUTE",
"VALUE");
2503 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME"))
2504 COMPLETE_WITH(
"ATTRIBUTE",
"TO",
"VALUE");
2506 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME",
"ATTRIBUTE|VALUE", MatchAny))
2507 COMPLETE_WITH(
"TO");
2513 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ALTER|DROP|RENAME",
"ATTRIBUTE"))
2514 COMPLETE_WITH_ATTR(prev3_wd);
2516 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ALTER",
"ATTRIBUTE", MatchAny))
2517 COMPLETE_WITH(
"TYPE");
2519 else if (Matches(
"ALTER",
"GROUP", MatchAny))
2520 COMPLETE_WITH(
"ADD USER",
"DROP USER",
"RENAME TO");
2522 else if (Matches(
"ALTER",
"GROUP", MatchAny,
"ADD|DROP"))
2523 COMPLETE_WITH(
"USER");
2525 else if (Matches(
"ALTER",
"GROUP", MatchAny,
"ADD|DROP",
"USER"))
2526 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
2531 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME",
"VALUE"))
2532 COMPLETE_WITH_ENUM_VALUE(prev3_wd);
2538 else if (Matches(
"ANALYZE"))
2539 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_analyzables,
2541 else if (HeadMatches(
"ANALYZE",
"(*") &&
2542 !HeadMatches(
"ANALYZE",
"(*)"))
2549 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
2550 COMPLETE_WITH(
"VERBOSE",
"SKIP_LOCKED");
2551 else if (TailMatches(
"VERBOSE|SKIP_LOCKED"))
2552 COMPLETE_WITH(
"ON",
"OFF");
2554 else if (HeadMatches(
"ANALYZE") && TailMatches(
"("))
2556 COMPLETE_WITH_ATTR(prev2_wd);
2557 else if (HeadMatches(
"ANALYZE"))
2558 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_analyzables);
2561 else if (Matches(
"BEGIN"))
2562 COMPLETE_WITH(
"WORK",
"TRANSACTION",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
2564 else if (Matches(
"END|ABORT"))
2565 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION");
2567 else if (Matches(
"COMMIT"))
2568 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION",
"PREPARED");
2570 else if (Matches(
"RELEASE"))
2571 COMPLETE_WITH(
"SAVEPOINT");
2573 else if (Matches(
"ROLLBACK"))
2574 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION",
"TO SAVEPOINT",
"PREPARED");
2575 else if (Matches(
"ABORT|END|COMMIT|ROLLBACK",
"AND"))
2576 COMPLETE_WITH(
"CHAIN");
2578 else if (Matches(
"CALL"))
2579 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_procedures);
2580 else if (Matches(
"CALL", MatchAny))
2583 else if (Matches(
"CLOSE"))
2584 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
2587 else if (Matches(
"CLUSTER"))
2588 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_clusterables,
2590 else if (Matches(
"CLUSTER",
"VERBOSE") ||
2591 Matches(
"CLUSTER",
"(*)"))
2592 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_clusterables);
2594 else if (Matches(
"CLUSTER", MatchAnyExcept(
"VERBOSE|ON|(|(*)")))
2595 COMPLETE_WITH(
"USING");
2597 else if (Matches(
"CLUSTER",
"VERBOSE|(*)", MatchAny))
2598 COMPLETE_WITH(
"USING");
2600 else if (Matches(
"CLUSTER", MatchAny,
"USING") ||
2601 Matches(
"CLUSTER",
"VERBOSE|(*)", MatchAny,
"USING"))
2603 set_completion_reference(prev2_wd);
2604 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
2606 else if (HeadMatches(
"CLUSTER",
"(*") &&
2607 !HeadMatches(
"CLUSTER",
"(*)"))
2614 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
2615 COMPLETE_WITH(
"VERBOSE");
2619 else if (Matches(
"COMMENT"))
2620 COMPLETE_WITH(
"ON");
2621 else if (Matches(
"COMMENT",
"ON"))
2622 COMPLETE_WITH(
"ACCESS METHOD",
"AGGREGATE",
"CAST",
"COLLATION",
2623 "COLUMN",
"CONSTRAINT",
"CONVERSION",
"DATABASE",
2624 "DOMAIN",
"EXTENSION",
"EVENT TRIGGER",
2625 "FOREIGN DATA WRAPPER",
"FOREIGN TABLE",
2626 "FUNCTION",
"INDEX",
"LANGUAGE",
"LARGE OBJECT",
2627 "MATERIALIZED VIEW",
"OPERATOR",
"POLICY",
2628 "PROCEDURE",
"PROCEDURAL LANGUAGE",
"PUBLICATION",
"ROLE",
2629 "ROUTINE",
"RULE",
"SCHEMA",
"SEQUENCE",
"SERVER",
2630 "STATISTICS",
"SUBSCRIPTION",
"TABLE",
2631 "TABLESPACE",
"TEXT SEARCH",
"TRANSFORM FOR",
2632 "TRIGGER",
"TYPE",
"VIEW");
2633 else if (Matches(
"COMMENT",
"ON",
"ACCESS",
"METHOD"))
2634 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
2635 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT"))
2636 COMPLETE_WITH_QUERY(Query_for_all_table_constraints);
2637 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny))
2638 COMPLETE_WITH(
"ON");
2639 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny,
"ON"))
2641 set_completion_reference(prev2_wd);
2642 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables_for_constraint,
2645 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny,
"ON",
"DOMAIN"))
2646 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
2647 else if (Matches(
"COMMENT",
"ON",
"EVENT",
"TRIGGER"))
2648 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
2649 else if (Matches(
"COMMENT",
"ON",
"FOREIGN"))
2650 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
2651 else if (Matches(
"COMMENT",
"ON",
"FOREIGN",
"TABLE"))
2652 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
2653 else if (Matches(
"COMMENT",
"ON",
"MATERIALIZED",
"VIEW"))
2654 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
2655 else if (Matches(
"COMMENT",
"ON",
"POLICY"))
2656 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
2657 else if (Matches(
"COMMENT",
"ON",
"POLICY", MatchAny))
2658 COMPLETE_WITH(
"ON");
2659 else if (Matches(
"COMMENT",
"ON",
"POLICY", MatchAny,
"ON"))
2661 set_completion_reference(prev2_wd);
2662 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
2664 else if (Matches(
"COMMENT",
"ON",
"PROCEDURAL",
"LANGUAGE"))
2665 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
2666 else if (Matches(
"COMMENT",
"ON",
"RULE", MatchAny))
2667 COMPLETE_WITH(
"ON");
2668 else if (Matches(
"COMMENT",
"ON",
"RULE", MatchAny,
"ON"))
2670 set_completion_reference(prev2_wd);
2671 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
2673 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH"))
2674 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
2675 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"CONFIGURATION"))
2676 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_configurations);
2677 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"DICTIONARY"))
2678 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_dictionaries);
2679 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"PARSER"))
2680 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_parsers);
2681 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"TEMPLATE"))
2682 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_templates);
2683 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR"))
2684 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
2685 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR", MatchAny))
2686 COMPLETE_WITH(
"LANGUAGE");
2687 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
2689 set_completion_reference(prev2_wd);
2690 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
2692 else if (Matches(
"COMMENT",
"ON",
"TRIGGER", MatchAny))
2693 COMPLETE_WITH(
"ON");
2694 else if (Matches(
"COMMENT",
"ON",
"TRIGGER", MatchAny,
"ON"))
2696 set_completion_reference(prev2_wd);
2697 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
2699 else if (Matches(
"COMMENT",
"ON", MatchAny, MatchAnyExcept(
"IS")) ||
2700 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAnyExcept(
"IS")) ||
2701 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAny, MatchAnyExcept(
"IS")) ||
2702 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAny, MatchAny, MatchAnyExcept(
"IS")))
2703 COMPLETE_WITH(
"IS");
2711 else if (Matches(
"COPY|\\copy"))
2712 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
"(");
2714 else if (Matches(
"COPY|\\copy",
"("))
2715 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES",
"INSERT INTO",
"UPDATE",
"DELETE FROM",
"WITH");
2717 else if (Matches(
"COPY|\\copy", MatchAny))
2718 COMPLETE_WITH(
"FROM",
"TO");
2720 else if (Matches(
"COPY", MatchAny,
"FROM|TO"))
2722 completion_charp =
"";
2723 completion_force_quote =
true;
2724 matches = rl_completion_matches(
text, complete_from_files);
2726 else if (Matches(
"\\copy", MatchAny,
"FROM|TO"))
2728 completion_charp =
"";
2729 completion_force_quote =
false;
2730 matches = rl_completion_matches(
text, complete_from_files);
2734 else if (Matches(
"COPY|\\copy", MatchAny,
"TO", MatchAny))
2735 COMPLETE_WITH(
"WITH (");
2738 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM", MatchAny))
2739 COMPLETE_WITH(
"WITH (",
"WHERE");
2742 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO", MatchAny,
"WITH",
"("))
2743 COMPLETE_WITH(
"FORMAT",
"FREEZE",
"DELIMITER",
"NULL",
2744 "HEADER",
"QUOTE",
"ESCAPE",
"FORCE_QUOTE",
2745 "FORCE_NOT_NULL",
"FORCE_NULL",
"ENCODING");
2748 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO", MatchAny,
"WITH",
"(",
"FORMAT"))
2749 COMPLETE_WITH(
"binary",
"csv",
"text");
2752 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM", MatchAny,
"WITH", MatchAny))
2753 COMPLETE_WITH(
"WHERE");
2757 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny))
2758 COMPLETE_WITH(
"TYPE");
2760 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny,
"TYPE"))
2761 COMPLETE_WITH(
"INDEX",
"TABLE");
2763 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny,
"TYPE", MatchAny))
2764 COMPLETE_WITH(
"HANDLER");
2767 else if (Matches(
"CREATE",
"COLLATION", MatchAny))
2768 COMPLETE_WITH(
"(",
"FROM");
2769 else if (Matches(
"CREATE",
"COLLATION", MatchAny,
"FROM"))
2770 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_collations);
2771 else if (HeadMatches(
"CREATE",
"COLLATION", MatchAny,
"(*"))
2773 if (TailMatches(
"(|*,"))
2774 COMPLETE_WITH(
"LOCALE =",
"LC_COLLATE =",
"LC_CTYPE =",
2775 "PROVIDER =",
"DETERMINISTIC =");
2776 else if (TailMatches(
"PROVIDER",
"="))
2777 COMPLETE_WITH(
"libc",
"icu");
2778 else if (TailMatches(
"DETERMINISTIC",
"="))
2779 COMPLETE_WITH(
"true",
"false");
2783 else if (Matches(
"CREATE",
"DATABASE", MatchAny))
2784 COMPLETE_WITH(
"OWNER",
"TEMPLATE",
"ENCODING",
"TABLESPACE",
2785 "IS_TEMPLATE",
"STRATEGY",
2786 "ALLOW_CONNECTIONS",
"CONNECTION LIMIT",
2787 "LC_COLLATE",
"LC_CTYPE",
"LOCALE",
"OID",
2788 "LOCALE_PROVIDER",
"ICU_LOCALE");
2790 else if (Matches(
"CREATE",
"DATABASE", MatchAny,
"TEMPLATE"))
2791 COMPLETE_WITH_QUERY(Query_for_list_of_template_databases);
2792 else if (Matches(
"CREATE",
"DATABASE", MatchAny,
"STRATEGY"))
2793 COMPLETE_WITH(
"WAL_LOG",
"FILE_COPY");
2796 else if (Matches(
"CREATE",
"DOMAIN", MatchAny))
2797 COMPLETE_WITH(
"AS");
2798 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"AS"))
2799 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
2800 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"AS", MatchAny))
2801 COMPLETE_WITH(
"COLLATE",
"DEFAULT",
"CONSTRAINT",
2802 "NOT NULL",
"NULL",
"CHECK (");
2803 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"COLLATE"))
2804 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_collations);
2808 else if (Matches(
"CREATE",
"EXTENSION"))
2809 COMPLETE_WITH_QUERY(Query_for_list_of_available_extensions);
2811 else if (Matches(
"CREATE",
"EXTENSION", MatchAny))
2812 COMPLETE_WITH(
"WITH SCHEMA",
"CASCADE",
"VERSION");
2814 else if (Matches(
"CREATE",
"EXTENSION", MatchAny,
"VERSION"))
2816 set_completion_reference(prev2_wd);
2817 COMPLETE_WITH_QUERY(Query_for_list_of_available_extension_versions);
2821 else if (Matches(
"CREATE",
"FOREIGN"))
2822 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
2825 else if (Matches(
"CREATE",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
2826 COMPLETE_WITH(
"HANDLER",
"VALIDATOR",
"OPTIONS");
2829 else if (Matches(
"CREATE",
"FOREIGN",
"TABLE", MatchAny))
2830 COMPLETE_WITH(
"(",
"PARTITION OF");
2834 else if (TailMatches(
"CREATE",
"UNIQUE"))
2835 COMPLETE_WITH(
"INDEX");
2841 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX"))
2842 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
2843 "ON",
"CONCURRENTLY");
2849 else if (TailMatches(
"INDEX|CONCURRENTLY", MatchAny,
"ON") ||
2850 TailMatches(
"INDEX|CONCURRENTLY",
"ON"))
2851 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexables);
2857 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX",
"CONCURRENTLY"))
2858 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
2861 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX", MatchAny) ||
2862 TailMatches(
"CREATE|UNIQUE",
"INDEX",
"CONCURRENTLY", MatchAny))
2863 COMPLETE_WITH(
"ON");
2869 else if (TailMatches(
"INDEX", MatchAny,
"ON", MatchAny) ||
2870 TailMatches(
"INDEX|CONCURRENTLY",
"ON", MatchAny))
2871 COMPLETE_WITH(
"(",
"USING");
2872 else if (TailMatches(
"INDEX", MatchAny,
"ON", MatchAny,
"(") ||
2873 TailMatches(
"INDEX|CONCURRENTLY",
"ON", MatchAny,
"("))
2874 COMPLETE_WITH_ATTR(prev2_wd);
2876 else if (TailMatches(
"ON", MatchAny,
"USING", MatchAny,
"("))
2877 COMPLETE_WITH_ATTR(prev4_wd);
2879 else if (TailMatches(
"INDEX", MatchAny, MatchAny,
"ON", MatchAny,
"USING") ||
2880 TailMatches(
"INDEX", MatchAny,
"ON", MatchAny,
"USING") ||
2881 TailMatches(
"INDEX",
"ON", MatchAny,
"USING"))
2882 COMPLETE_WITH_QUERY(Query_for_list_of_index_access_methods);
2883 else if (TailMatches(
"ON", MatchAny,
"USING", MatchAny) &&
2884 !TailMatches(
"POLICY", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny) &&
2885 !TailMatches(
"FOR", MatchAny, MatchAny, MatchAny))
2889 else if (Matches(
"CREATE",
"OR"))
2890 COMPLETE_WITH(
"REPLACE");
2894 else if (Matches(
"CREATE",
"POLICY", MatchAny))
2895 COMPLETE_WITH(
"ON");
2897 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON"))
2898 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2900 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny))
2901 COMPLETE_WITH(
"AS",
"FOR",
"TO",
"USING (",
"WITH CHECK (");
2903 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS"))
2904 COMPLETE_WITH(
"PERMISSIVE",
"RESTRICTIVE");
2910 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny))
2911 COMPLETE_WITH(
"FOR",
"TO",
"USING",
"WITH CHECK");
2913 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR"))
2914 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
2916 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"INSERT"))
2917 COMPLETE_WITH(
"TO",
"WITH CHECK (");
2919 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"SELECT|DELETE"))
2920 COMPLETE_WITH(
"TO",
"USING (");
2922 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"ALL|UPDATE"))
2923 COMPLETE_WITH(
"TO",
"USING (",
"WITH CHECK (");
2925 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"TO"))
2926 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
2927 Keywords_for_list_of_grant_roles);
2929 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"USING"))
2936 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR"))
2937 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
2943 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"INSERT"))
2944 COMPLETE_WITH(
"TO",
"WITH CHECK (");
2950 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"SELECT|DELETE"))
2951 COMPLETE_WITH(
"TO",
"USING (");
2957 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"ALL|UPDATE"))
2958 COMPLETE_WITH(
"TO",
"USING (",
"WITH CHECK (");
2964 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"TO"))
2965 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
2966 Keywords_for_list_of_grant_roles);
2972 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"USING"))
2977 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny))
2978 COMPLETE_WITH(
"FOR TABLE",
"FOR ALL TABLES",
"FOR ALL TABLES IN SCHEMA",
"WITH (");
2979 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR"))
2980 COMPLETE_WITH(
"TABLE",
"ALL TABLES",
"ALL TABLES IN SCHEMA");
2981 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"ALL"))
2982 COMPLETE_WITH(
"TABLES",
"TABLES IN SCHEMA");
2983 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"ALL",
"TABLES"))
2984 COMPLETE_WITH(
"IN SCHEMA",
"WITH (");
2985 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLE", MatchAny) && !ends_with(prev_wd,
','))
2986 COMPLETE_WITH(
"WHERE (",
"WITH (");
2988 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLE"))
2989 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2995 else if (HeadMatches(
"CREATE",
"PUBLICATION", MatchAny) && TailMatches(
"WHERE"))
2997 else if (HeadMatches(
"CREATE",
"PUBLICATION", MatchAny) && TailMatches(
"WHERE",
"("))
2998 COMPLETE_WITH_ATTR(prev3_wd);
2999 else if (HeadMatches(
"CREATE",
"PUBLICATION", MatchAny) && TailMatches(
"WHERE",
"(*)"))
3000 COMPLETE_WITH(
" WITH (");
3006 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"ALL",
"TABLES",
"IN",
"SCHEMA"))
3007 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
3008 " AND nspname NOT LIKE E'pg\\\\_%%'",
3010 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"ALL",
"TABLES",
"IN",
"SCHEMA", MatchAny) && (!ends_with(prev_wd,
',')))
3011 COMPLETE_WITH(
"WITH (");
3013 else if (HeadMatches(
"CREATE",
"PUBLICATION") && TailMatches(
"WITH",
"("))
3014 COMPLETE_WITH(
"publish",
"publish_via_partition_root");
3018 else if (Matches(
"CREATE",
"RULE", MatchAny) ||
3019 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny))
3020 COMPLETE_WITH(
"AS ON");
3022 else if (Matches(
"CREATE",
"RULE", MatchAny,
"AS") ||
3023 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny,
"AS"))
3024 COMPLETE_WITH(
"ON");
3030 else if (Matches(
"CREATE",
"RULE", MatchAny,
"AS",
"ON") ||
3031 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny,
"AS",
"ON"))
3032 COMPLETE_WITH(
"SELECT",
"UPDATE",
"INSERT",
"DELETE");
3034 else if (TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE"))
3035 COMPLETE_WITH(
"TO");
3037 else if (TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE",
"TO"))
3038 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3041 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny) ||
3042 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny))
3043 COMPLETE_WITH(
"AS",
"INCREMENT BY",
"MINVALUE",
"MAXVALUE",
"NO",
3044 "CACHE",
"CYCLE",
"OWNED BY",
"START WITH");
3045 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny,
"AS") ||
3046 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny,
"AS"))
3047 COMPLETE_WITH_CS(
"smallint",
"integer",
"bigint");
3048 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny,
"NO") ||
3049 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny,
"NO"))
3050 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
3053 else if (Matches(
"CREATE",
"SERVER", MatchAny))
3054 COMPLETE_WITH(
"TYPE",
"VERSION",
"FOREIGN DATA WRAPPER");
3057 else if (Matches(
"CREATE",
"STATISTICS", MatchAny))
3058 COMPLETE_WITH(
"(",
"ON");
3059 else if (Matches(
"CREATE",
"STATISTICS", MatchAny,
"("))
3060 COMPLETE_WITH(
"ndistinct",
"dependencies",
"mcv");
3061 else if (Matches(
"CREATE",
"STATISTICS", MatchAny,
"(*)"))
3062 COMPLETE_WITH(
"ON");
3063 else if (HeadMatches(
"CREATE",
"STATISTICS", MatchAny) &&
3064 TailMatches(
"FROM"))
3065 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3069 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY"))
3070 COMPLETE_WITH(
"SEQUENCE",
"TABLE",
"VIEW");
3072 else if (TailMatches(
"CREATE",
"UNLOGGED"))
3073 COMPLETE_WITH(
"TABLE",
"MATERIALIZED VIEW");
3075 else if (TailMatches(
"PARTITION",
"BY"))
3076 COMPLETE_WITH(
"RANGE (",
"LIST (",
"HASH (");
3078 else if (TailMatches(
"PARTITION",
"OF"))
3079 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_tables);
3081 else if (TailMatches(
"PARTITION",
"OF", MatchAny))
3082 COMPLETE_WITH(
"FOR VALUES",
"DEFAULT");
3084 else if (TailMatches(
"CREATE",
"TABLE", MatchAny) ||
3085 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny))
3086 COMPLETE_WITH(
"(",
"OF",
"PARTITION OF");
3088 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"OF") ||
3089 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"OF"))
3090 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_composite_datatypes);
3092 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)") ||
3093 TailMatches(
"CREATE",
"UNLOGGED",
"TABLE", MatchAny,
"(*)"))
3094 COMPLETE_WITH(
"INHERITS (",
"PARTITION BY",
"USING",
"TABLESPACE",
"WITH (");
3095 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"TABLE", MatchAny,
"(*)"))
3096 COMPLETE_WITH(
"INHERITS (",
"ON COMMIT",
"PARTITION BY",
3097 "TABLESPACE",
"WITH (");
3099 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)",
"USING") ||
3100 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"(*)",
"USING"))
3101 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
3103 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)",
"WITH",
"(") ||
3104 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"(*)",
"WITH",
"("))
3105 COMPLETE_WITH_LIST(table_storage_parameters);
3107 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"TABLE", MatchAny,
"(*)",
"ON",
"COMMIT"))
3108 COMPLETE_WITH(
"DELETE ROWS",
"DROP",
"PRESERVE ROWS");
3111 else if (Matches(
"CREATE",
"TABLESPACE", MatchAny))
3112 COMPLETE_WITH(
"OWNER",
"LOCATION");
3114 else if (Matches(
"CREATE",
"TABLESPACE", MatchAny,
"OWNER", MatchAny))
3115 COMPLETE_WITH(
"LOCATION");
3118 else if (Matches(
"CREATE",
"TEXT",
"SEARCH"))
3119 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3120 else if (Matches(
"CREATE",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE", MatchAny))
3124 else if (Matches(
"CREATE",
"TRANSFORM") ||
3125 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM"))
3126 COMPLETE_WITH(
"FOR");
3127 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR") ||
3128 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR"))
3129 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3130 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR", MatchAny) ||
3131 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR", MatchAny))
3132 COMPLETE_WITH(
"LANGUAGE");
3133 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE") ||
3134 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
3136 set_completion_reference(prev2_wd);
3137 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3141 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny))
3142 COMPLETE_WITH(
"CONNECTION");
3143 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny,
"CONNECTION", MatchAny))
3144 COMPLETE_WITH(
"PUBLICATION");
3145 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny,
"CONNECTION",
3146 MatchAny,
"PUBLICATION"))
3150 else if (HeadMatches(
"CREATE",
"SUBSCRIPTION") && TailMatches(
"PUBLICATION", MatchAny))
3151 COMPLETE_WITH(
"WITH (");
3153 else if (HeadMatches(
"CREATE",
"SUBSCRIPTION") && TailMatches(
"WITH",
"("))
3154 COMPLETE_WITH(
"binary",
"connect",
"copy_data",
"create_slot",
3155 "enabled",
"slot_name",
"streaming",
3156 "synchronous_commit",
"two_phase",
"disable_on_error");
3164 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny) ||
3165 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny))
3166 COMPLETE_WITH(
"BEFORE",
"AFTER",
"INSTEAD OF");
3172 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER") ||
3173 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER"))
3174 COMPLETE_WITH(
"INSERT",
"DELETE",
"UPDATE",
"TRUNCATE");
3176 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF") ||
3177 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF"))
3178 COMPLETE_WITH(
"INSERT",
"DELETE",
"UPDATE");
3184 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny) ||
3185 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny) ||
3186 TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny) ||
3187 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny))
3188 COMPLETE_WITH(
"ON",
"OR");
3195 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny,
"ON") ||
3196 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny,
"ON"))
3197 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3203 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny,
"ON") ||
3204 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny,
"ON"))
3205 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
3206 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3207 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3208 TailMatches(
"ON", MatchAny))
3211 COMPLETE_WITH(
"NOT DEFERRABLE",
"DEFERRABLE",
"INITIALLY",
3212 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3214 COMPLETE_WITH(
"NOT DEFERRABLE",
"DEFERRABLE",
"INITIALLY",
3215 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3217 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3218 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3219 (TailMatches(
"DEFERRABLE") || TailMatches(
"INITIALLY",
"IMMEDIATE|DEFERRED")))
3222 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3224 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3226 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3227 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3228 TailMatches(
"REFERENCING"))
3229 COMPLETE_WITH(
"OLD TABLE",
"NEW TABLE");
3230 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3231 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3232 TailMatches(
"OLD|NEW",
"TABLE"))
3233 COMPLETE_WITH(
"AS");
3234 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3235 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3236 (TailMatches(
"REFERENCING",
"OLD",
"TABLE",
"AS", MatchAny) ||
3237 TailMatches(
"REFERENCING",
"OLD",
"TABLE", MatchAny)))
3240 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3242 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3244 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3245 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3246 (TailMatches(
"REFERENCING",
"NEW",
"TABLE",
"AS", MatchAny) ||
3247 TailMatches(
"REFERENCING",
"NEW",
"TABLE", MatchAny)))
3250 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3252 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3254 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3255 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3256 (TailMatches(
"REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3257 TailMatches(
"REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3258 TailMatches(
"REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE", MatchAny) ||
3259 TailMatches(
"REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE", MatchAny)))
3262 COMPLETE_WITH(
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3264 COMPLETE_WITH(
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3266 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3267 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3269 COMPLETE_WITH(
"EACH",
"ROW",
"STATEMENT");
3270 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3271 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3272 TailMatches(
"FOR",
"EACH"))
3273 COMPLETE_WITH(
"ROW",
"STATEMENT");
3274 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3275 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3276 (TailMatches(
"FOR",
"EACH",
"ROW|STATEMENT") ||
3277 TailMatches(
"FOR",
"ROW|STATEMENT")))
3280 COMPLETE_WITH(
"WHEN (",
"EXECUTE FUNCTION");
3282 COMPLETE_WITH(
"WHEN (",
"EXECUTE PROCEDURE");
3284 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3285 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3286 TailMatches(
"WHEN",
"(*)"))
3289 COMPLETE_WITH(
"EXECUTE FUNCTION");
3291 COMPLETE_WITH(
"EXECUTE PROCEDURE");
3298 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3299 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3300 TailMatches(
"EXECUTE"))
3303 COMPLETE_WITH(
"FUNCTION");
3305 COMPLETE_WITH(
"PROCEDURE");
3307 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3308 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3309 TailMatches(
"EXECUTE",
"FUNCTION|PROCEDURE"))
3310 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
3313 else if (Matches(
"CREATE",
"ROLE|GROUP|USER", MatchAny) &&
3314 !TailMatches(
"USER",
"MAPPING"))
3315 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
3316 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
3317 "LOGIN",
"NOBYPASSRLS",
3318 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
3319 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
3320 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
3321 "VALID UNTIL",
"WITH");
3324 else if (Matches(
"CREATE",
"ROLE|GROUP|USER", MatchAny,
"WITH"))
3326 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
3327 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
3328 "LOGIN",
"NOBYPASSRLS",
3329 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
3330 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
3331 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
3335 else if (Matches(
"CREATE",
"ROLE|USER|GROUP", MatchAny,
"IN"))
3336 COMPLETE_WITH(
"GROUP",
"ROLE");
3339 else if (Matches(
"CREATE",
"TYPE", MatchAny))
3340 COMPLETE_WITH(
"(",
"AS");
3341 else if (Matches(
"CREATE",
"TYPE", MatchAny,
"AS"))
3342 COMPLETE_WITH(
"ENUM",
"RANGE",
"(");
3343 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"AS",
"("))
3345 if (TailMatches(
"(|*,", MatchAny))
3346 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3347 else if (TailMatches(
"(|*,", MatchAny, MatchAnyExcept(
"*)")))
3348 COMPLETE_WITH(
"COLLATE",
",",
")");
3350 else if (Matches(
"CREATE",
"TYPE", MatchAny,
"AS",
"ENUM|RANGE"))
3352 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"("))
3354 if (TailMatches(
"(|*,"))
3355 COMPLETE_WITH(
"INPUT",
"OUTPUT",
"RECEIVE",
"SEND",
3356 "TYPMOD_IN",
"TYPMOD_OUT",
"ANALYZE",
"SUBSCRIPT",
3357 "INTERNALLENGTH",
"PASSEDBYVALUE",
"ALIGNMENT",
3358 "STORAGE",
"LIKE",
"CATEGORY",
"PREFERRED",
3359 "DEFAULT",
"ELEMENT",
"DELIMITER",
3361 else if (TailMatches(
"(*|*,", MatchAnyExcept(
"*=")))
3363 else if (TailMatches(
"=", MatchAnyExcept(
"*)")))
3364 COMPLETE_WITH(
",",
")");
3366 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"AS",
"RANGE",
"("))
3368 if (TailMatches(
"(|*,"))
3369 COMPLETE_WITH(
"SUBTYPE",
"SUBTYPE_OPCLASS",
"COLLATION",
3370 "CANONICAL",
"SUBTYPE_DIFF",
3371 "MULTIRANGE_TYPE_NAME");
3372 else if (TailMatches(
"(*|*,", MatchAnyExcept(
"*=")))
3374 else if (TailMatches(
"=", MatchAnyExcept(
"*)")))
3375 COMPLETE_WITH(
",",
")");
3380 else if (TailMatches(
"CREATE",
"VIEW", MatchAny) ||
3381 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny))
3382 COMPLETE_WITH(
"AS");
3384 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"AS") ||
3385 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"AS"))
3386 COMPLETE_WITH(
"SELECT");
3389 else if (Matches(
"CREATE",
"MATERIALIZED"))
3390 COMPLETE_WITH(
"VIEW");
3392 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny))
3393 COMPLETE_WITH(
"AS");
3395 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny,
"AS"))
3396 COMPLETE_WITH(
"SELECT");
3399 else if (Matches(
"CREATE",
"EVENT"))
3400 COMPLETE_WITH(
"TRIGGER");
3402 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny))
3403 COMPLETE_WITH(
"ON");
3405 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny,
"ON"))
3406 COMPLETE_WITH(
"ddl_command_start",
"ddl_command_end",
"sql_drop",
3414 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny,
"ON", MatchAny))
3417 COMPLETE_WITH(
"WHEN TAG IN (",
"EXECUTE FUNCTION");
3419 COMPLETE_WITH(
"WHEN TAG IN (",
"EXECUTE PROCEDURE");
3421 else if (HeadMatches(
"CREATE",
"EVENT",
"TRIGGER") &&
3422 TailMatches(
"WHEN|AND", MatchAny,
"IN",
"(*)"))
3425 COMPLETE_WITH(
"EXECUTE FUNCTION");
3427 COMPLETE_WITH(
"EXECUTE PROCEDURE");
3429 else if (HeadMatches(
"CREATE",
"EVENT",
"TRIGGER") &&
3430 TailMatches(
"EXECUTE",
"FUNCTION|PROCEDURE"))
3431 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
3434 else if (Matches(
"DEALLOCATE"))
3435 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_prepared_statements,
3444 else if (Matches(
"DECLARE", MatchAny))
3445 COMPLETE_WITH(
"BINARY",
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
3455 else if (HeadMatches(
"DECLARE") && TailMatches(
"BINARY"))
3456 COMPLETE_WITH(
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
"CURSOR");
3457 else if (HeadMatches(
"DECLARE") && TailMatches(
"ASENSITIVE|INSENSITIVE"))
3458 COMPLETE_WITH(
"SCROLL",
"NO SCROLL",
"CURSOR");
3459 else if (HeadMatches(
"DECLARE") && TailMatches(
"SCROLL"))
3460 COMPLETE_WITH(
"CURSOR");
3462 else if (HeadMatches(
"DECLARE") && TailMatches(
"NO"))
3463 COMPLETE_WITH(
"SCROLL");
3469 else if (HeadMatches(
"DECLARE") && TailMatches(
"CURSOR"))
3470 COMPLETE_WITH(
"WITH HOLD",
"WITHOUT HOLD",
"FOR");
3472 else if (HeadMatches(
"DECLARE") && TailMatches(
"CURSOR",
"WITH|WITHOUT"))
3473 COMPLETE_WITH(
"HOLD");
3475 else if (HeadMatches(
"DECLARE") && TailMatches(
"CURSOR",
"WITH|WITHOUT",
"HOLD"))
3476 COMPLETE_WITH(
"FOR");
3480 else if (Matches(
"DELETE"))
3481 COMPLETE_WITH(
"FROM");
3483 else if (TailMatches(
"DELETE",
"FROM"))
3484 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
3486 else if (TailMatches(
"DELETE",
"FROM", MatchAny))
3487 COMPLETE_WITH(
"USING",
"WHERE");
3491 else if (Matches(
"DISCARD"))
3492 COMPLETE_WITH(
"ALL",
"PLANS",
"SEQUENCES",
"TEMP");
3495 else if (Matches(
"DO"))
3496 COMPLETE_WITH(
"LANGUAGE");
3500 else if (Matches(
"DROP",
3501 "COLLATION|CONVERSION|DOMAIN|EXTENSION|LANGUAGE|PUBLICATION|SCHEMA|SEQUENCE|SERVER|SUBSCRIPTION|STATISTICS|TABLE|TYPE|VIEW",
3503 Matches(
"DROP",
"ACCESS",
"METHOD", MatchAny) ||
3504 (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny) &&
3505 ends_with(prev_wd,
')')) ||
3506 Matches(
"DROP",
"EVENT",
"TRIGGER", MatchAny) ||
3507 Matches(
"DROP",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny) ||
3508 Matches(
"DROP",
"FOREIGN",
"TABLE", MatchAny) ||
3509 Matches(
"DROP",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE", MatchAny))
3510 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3513 else if (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny))
3515 else if (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny,
"("))
3516 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
3517 else if (Matches(
"DROP",
"FOREIGN"))
3518 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
3519 else if (Matches(
"DROP",
"DATABASE", MatchAny))
3520 COMPLETE_WITH(
"WITH (");
3521 else if (HeadMatches(
"DROP",
"DATABASE") && (ends_with(prev_wd,
'(')))
3522 COMPLETE_WITH(
"FORCE");
3525 else if (Matches(
"DROP",
"INDEX"))
3526 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
3528 else if (Matches(
"DROP",
"INDEX",
"CONCURRENTLY"))
3529 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
3530 else if (Matches(
"DROP",
"INDEX", MatchAny))
3531 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3532 else if (Matches(
"DROP",
"INDEX",
"CONCURRENTLY", MatchAny))
3533 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3536 else if (Matches(
"DROP",
"MATERIALIZED"))
3537 COMPLETE_WITH(
"VIEW");
3538 else if (Matches(
"DROP",
"MATERIALIZED",
"VIEW"))
3539 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
3540 else if (Matches(
"DROP",
"MATERIALIZED",
"VIEW", MatchAny))
3541 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3544 else if (Matches(
"DROP",
"OWNED"))
3545 COMPLETE_WITH(
"BY");
3546 else if (Matches(
"DROP",
"OWNED",
"BY"))
3547 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
3548 else if (Matches(
"DROP",
"OWNED",
"BY", MatchAny))
3549 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3552 else if (Matches(
"DROP",
"TEXT",
"SEARCH"))
3553 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3556 else if (Matches(
"DROP",
"TRIGGER", MatchAny))
3557 COMPLETE_WITH(
"ON");
3558 else if (Matches(
"DROP",
"TRIGGER", MatchAny,
"ON"))
3560 set_completion_reference(prev2_wd);
3561 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
3563 else if (Matches(
"DROP",
"TRIGGER", MatchAny,
"ON", MatchAny))
3564 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3567 else if (Matches(
"DROP",
"ACCESS"))
3568 COMPLETE_WITH(
"METHOD");
3569 else if (Matches(
"DROP",
"ACCESS",
"METHOD"))
3570 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
3573 else if (Matches(
"DROP",
"EVENT"))
3574 COMPLETE_WITH(
"TRIGGER");
3575 else if (Matches(
"DROP",
"EVENT",
"TRIGGER"))
3576 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
3579 else if (Matches(
"DROP",
"POLICY"))
3580 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
3582 else if (Matches(
"DROP",
"POLICY", MatchAny))
3583 COMPLETE_WITH(
"ON");
3585 else if (Matches(
"DROP",
"POLICY", MatchAny,
"ON"))
3587 set_completion_reference(prev2_wd);
3588 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
3590 else if (Matches(
"DROP",
"POLICY", MatchAny,
"ON", MatchAny))
3591 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3594 else if (Matches(
"DROP",
"RULE", MatchAny))
3595 COMPLETE_WITH(
"ON");
3596 else if (Matches(
"DROP",
"RULE", MatchAny,
"ON"))
3598 set_completion_reference(prev2_wd);
3599 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
3601 else if (Matches(
"DROP",
"RULE", MatchAny,
"ON", MatchAny))
3602 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3605 else if (Matches(
"DROP",
"TRANSFORM"))
3606 COMPLETE_WITH(
"FOR");
3607 else if (Matches(
"DROP",
"TRANSFORM",
"FOR"))
3608 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3609 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny))
3610 COMPLETE_WITH(
"LANGUAGE");
3611 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
3613 set_completion_reference(prev2_wd);
3614 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3616 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE", MatchAny))
3617 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3620 else if (Matches(
"EXECUTE"))
3621 COMPLETE_WITH_QUERY(Query_for_list_of_prepared_statements);
3627 else if (Matches(
"EXPLAIN"))
3628 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
3629 "MERGE",
"EXECUTE",
"ANALYZE",
"VERBOSE");
3630 else if (HeadMatches(
"EXPLAIN",
"(*") &&
3631 !HeadMatches(
"EXPLAIN",
"(*)"))
3638 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
3639 COMPLETE_WITH(
"ANALYZE",
"VERBOSE",
"COSTS",
"SETTINGS",
3640 "BUFFERS",
"WAL",
"TIMING",
"SUMMARY",
"FORMAT");
3641 else if (TailMatches(
"ANALYZE|VERBOSE|COSTS|SETTINGS|BUFFERS|WAL|TIMING|SUMMARY"))
3642 COMPLETE_WITH(
"ON",
"OFF");
3643 else if (TailMatches(
"FORMAT"))
3644 COMPLETE_WITH(
"TEXT",
"XML",
"JSON",
"YAML");
3646 else if (Matches(
"EXPLAIN",
"ANALYZE"))
3647 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
3648 "MERGE",
"EXECUTE",
"VERBOSE");
3649 else if (Matches(
"EXPLAIN",
"(*)") ||
3650 Matches(
"EXPLAIN",
"VERBOSE") ||
3651 Matches(
"EXPLAIN",
"ANALYZE",
"VERBOSE"))
3652 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
3653 "MERGE",
"EXECUTE");
3661 else if (Matches(
"FETCH|MOVE"))
3662 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
3679 else if (Matches(
"FETCH|MOVE",
"BACKWARD|FORWARD"))
3680 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
3690 else if (Matches(
"FETCH|MOVE",
"ABSOLUTE|BACKWARD|FORWARD|RELATIVE",
3691 MatchAnyExcept(
"FROM|IN")) ||
3692 Matches(
"FETCH|MOVE",
"ALL|NEXT|PRIOR|FIRST|LAST"))
3693 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
3697 else if (HeadMatches(
"FETCH|MOVE") &&
3698 TailMatches(
"FROM|IN"))
3699 COMPLETE_WITH_QUERY(Query_for_list_of_cursors);
3703 else if (TailMatches(
"FOREIGN",
"DATA",
"WRAPPER") &&
3704 !TailMatches(
"CREATE", MatchAny, MatchAny, MatchAny))
3705 COMPLETE_WITH_QUERY(Query_for_list_of_fdws);
3707 else if (TailMatches(
"FOREIGN",
"DATA",
"WRAPPER", MatchAny) &&
3708 HeadMatches(
"CREATE",
"SERVER"))
3709 COMPLETE_WITH(
"OPTIONS");
3712 else if (TailMatches(
"FOREIGN",
"TABLE") &&
3713 !TailMatches(
"CREATE", MatchAny, MatchAny))
3714 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
3717 else if (TailMatches(
"FOREIGN",
"SERVER"))
3718 COMPLETE_WITH_QUERY(Query_for_list_of_servers);
3725 else if (TailMatches(
"GRANT|REVOKE") ||
3726 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR"))
3732 if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
3733 COMPLETE_WITH(
"SELECT",
"INSERT",
"UPDATE",
3734 "DELETE",
"TRUNCATE",
"REFERENCES",
"TRIGGER",
3735 "EXECUTE",
"USAGE",
"ALL");
3737 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3756 else if (TailMatches(
"REVOKE",
"GRANT"))
3757 COMPLETE_WITH(
"OPTION FOR");
3758 else if (TailMatches(
"REVOKE",
"GRANT",
"OPTION"))
3759 COMPLETE_WITH(
"FOR");
3761 else if (TailMatches(
"GRANT|REVOKE",
"ALTER") ||
3762 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER"))
3763 COMPLETE_WITH(
"SYSTEM");
3765 else if (TailMatches(
"GRANT|REVOKE",
"SET") ||
3766 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"SET") ||
3767 TailMatches(
"GRANT|REVOKE",
"ALTER",
"SYSTEM") ||
3768 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER",
"SYSTEM"))
3769 COMPLETE_WITH(
"ON PARAMETER");
3771 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"PARAMETER") ||
3772 TailMatches(
"GRANT|REVOKE", MatchAny, MatchAny,
"ON",
"PARAMETER") ||
3773 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"PARAMETER") ||
3774 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny, MatchAny,
"ON",
"PARAMETER"))
3775 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_alter_system_set_vars);
3777 else if (TailMatches(
"GRANT", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
3778 TailMatches(
"GRANT", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny))
3779 COMPLETE_WITH(
"TO");
3781 else if (TailMatches(
"REVOKE", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
3782 TailMatches(
"REVOKE", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny) ||
3783 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
3784 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny))
3785 COMPLETE_WITH(
"FROM");
3791 else if (TailMatches(
"GRANT|REVOKE", MatchAny) ||
3792 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny))
3794 if (TailMatches(
"SELECT|INSERT|UPDATE|DELETE|TRUNCATE|REFERENCES|TRIGGER|CREATE|CONNECT|TEMPORARY|TEMP|EXECUTE|USAGE|ALL"))
3795 COMPLETE_WITH(
"ON");
3796 else if (TailMatches(
"GRANT", MatchAny))
3797 COMPLETE_WITH(
"TO");
3799 COMPLETE_WITH(
"FROM");
3809 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON") ||
3810 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON"))
3816 if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
3817 COMPLETE_WITH(
"TABLES",
"SEQUENCES",
"FUNCTIONS",
"PROCEDURES",
"ROUTINES",
"TYPES",
"SCHEMAS");
3819 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_grantables,
3820 "ALL FUNCTIONS IN SCHEMA",
3821 "ALL PROCEDURES IN SCHEMA",
3822 "ALL ROUTINES IN SCHEMA",
3823 "ALL SEQUENCES IN SCHEMA",
3824 "ALL TABLES IN SCHEMA",
3827 "FOREIGN DATA WRAPPER",
3841 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"ALL") ||
3842 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"ALL"))
3843 COMPLETE_WITH(
"FUNCTIONS IN SCHEMA",
3844 "PROCEDURES IN SCHEMA",
3845 "ROUTINES IN SCHEMA",
3846 "SEQUENCES IN SCHEMA",
3847 "TABLES IN SCHEMA");
3848 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"FOREIGN") ||
3849 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"FOREIGN"))
3850 COMPLETE_WITH(
"DATA WRAPPER",
"SERVER");
3858 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON", MatchAny) ||
3859 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON", MatchAny))
3861 if (TailMatches(
"DATABASE"))
3862 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
3863 else if (TailMatches(
"DOMAIN"))
3864 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
3865 else if (TailMatches(
"FUNCTION"))
3866 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
3867 else if (TailMatches(
"LANGUAGE"))
3868 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3869 else if (TailMatches(
"PROCEDURE"))
3870 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_procedures);
3871 else if (TailMatches(
"ROUTINE"))
3872 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
3873 else if (TailMatches(
"SCHEMA"))
3874 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
3875 else if (TailMatches(
"SEQUENCE"))
3876 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_sequences);
3877 else if (TailMatches(
"TABLE"))
3878 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_grantables);
3879 else if (TailMatches(
"TABLESPACE"))
3880 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
3881 else if (TailMatches(
"TYPE"))
3882 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3883 else if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny))
3884 COMPLETE_WITH(
"TO");
3886 COMPLETE_WITH(
"FROM");
3893 else if ((HeadMatches(
"GRANT") && TailMatches(
"TO")) ||
3894 (HeadMatches(
"REVOKE") && TailMatches(
"FROM")))
3895 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3896 Keywords_for_list_of_grant_roles);
3901 else if (HeadMatches(
"GRANT") && TailMatches(
"TO", MatchAny))
3902 COMPLETE_WITH(
"WITH ADMIN OPTION",
3903 "WITH GRANT OPTION",
3905 else if (HeadMatches(
"GRANT") && TailMatches(
"TO", MatchAny,
"WITH"))
3906 COMPLETE_WITH(
"ADMIN OPTION",
3908 else if (HeadMatches(
"GRANT") && TailMatches(
"TO", MatchAny,
"WITH", MatchAny,
"OPTION"))
3909 COMPLETE_WITH(
"GRANTED BY");
3910 else if (HeadMatches(
"GRANT") && TailMatches(
"TO", MatchAny,
"WITH", MatchAny,
"OPTION",
"GRANTED",
"BY"))
3911 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3912 Keywords_for_list_of_grant_roles);
3914 else if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES") && TailMatches(
"TO|FROM"))
3915 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3916 Keywords_for_list_of_grant_roles);
3918 else if (HeadMatches(
"GRANT") && TailMatches(
"ON", MatchAny, MatchAny))
3919 COMPLETE_WITH(
"TO");
3920 else if (HeadMatches(
"REVOKE") && TailMatches(
"ON", MatchAny, MatchAny))
3921 COMPLETE_WITH(
"FROM");
3924 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"ALL", MatchAny,
"IN",
"SCHEMA", MatchAny) ||
3925 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"ALL", MatchAny,
"IN",
"SCHEMA", MatchAny))
3927 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
3928 COMPLETE_WITH(
"TO");
3930 COMPLETE_WITH(
"FROM");
3934 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny) ||
3935 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
3937 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
3938 COMPLETE_WITH(
"TO");
3940 COMPLETE_WITH(
"FROM");
3944 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"FOREIGN",
"SERVER", MatchAny) ||
3945 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"FOREIGN",
"SERVER", MatchAny))
3947 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
3948 COMPLETE_WITH(
"TO");
3950 COMPLETE_WITH(
"FROM");
3954 else if (TailMatches(
"FROM", MatchAny,
"GROUP"))
3955 COMPLETE_WITH(
"BY");
3958 else if (Matches(
"IMPORT"))
3959 COMPLETE_WITH(
"FOREIGN SCHEMA");
3960 else if (Matches(
"IMPORT",
"FOREIGN"))
3961 COMPLETE_WITH(
"SCHEMA");
3962 else if (Matches(
"IMPORT",
"FOREIGN",
"SCHEMA", MatchAny))
3963 COMPLETE_WITH(
"EXCEPT (",
"FROM SERVER",
"LIMIT TO (");
3964 else if (TailMatches(
"LIMIT",
"TO",
"(*)") ||
3965 TailMatches(
"EXCEPT",
"(*)"))
3966 COMPLETE_WITH(
"FROM SERVER");
3967 else if (TailMatches(
"FROM",
"SERVER", MatchAny))
3968 COMPLETE_WITH(
"INTO");
3969 else if (TailMatches(
"FROM",
"SERVER", MatchAny,
"INTO"))
3970 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
3971 else if (TailMatches(
"FROM",
"SERVER", MatchAny,
"INTO", MatchAny))
3972 COMPLETE_WITH(
"OPTIONS (");
3976 else if (TailMatches(
"NOT",
"MATCHED",
"THEN",
"INSERT"))
3977 COMPLETE_WITH(
"VALUES",
"(");
3979 else if (TailMatches(
"INSERT"))
3980 COMPLETE_WITH(
"INTO");
3982 else if (TailMatches(
"INSERT",
"INTO"))
3983 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
3985 else if (TailMatches(
"INSERT",
"INTO", MatchAny,
"("))
3986 COMPLETE_WITH_ATTR(prev2_wd);
3992 else if (TailMatches(
"INSERT",
"INTO", MatchAny))
3993 COMPLETE_WITH(
"(",
"DEFAULT VALUES",
"SELECT",
"TABLE",
"VALUES",
"OVERRIDING");
3999 else if (TailMatches(
"INSERT",
"INTO", MatchAny, MatchAny) &&
4000 ends_with(prev_wd,
')'))
4001 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES",
"OVERRIDING");
4004 else if (TailMatches(
"OVERRIDING"))
4005 COMPLETE_WITH(
"SYSTEM VALUE",
"USER VALUE");
4008 else if (TailMatches(
"OVERRIDING", MatchAny,
"VALUE"))
4009 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES");
4012 else if (TailMatches(
"VALUES") && !TailMatches(
"DEFAULT",
"VALUES"))
4017 else if (Matches(
"LOCK"))
4018 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
4020 else if (Matches(
"LOCK",
"TABLE"))
4021 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
4023 else if (Matches(
"LOCK",
"TABLE",
"ONLY") || Matches(
"LOCK",
"ONLY"))
4024 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
4028 else if (Matches(
"LOCK", MatchAnyExcept(
"TABLE|ONLY")) ||
4029 Matches(
"LOCK",
"TABLE", MatchAnyExcept(
"ONLY")) ||
4030 Matches(
"LOCK",
"ONLY", MatchAny) ||
4031 Matches(
"LOCK",
"TABLE",
"ONLY", MatchAny))
4032 COMPLETE_WITH(
"IN",
"NOWAIT");
4035 else if (HeadMatches(
"LOCK") && TailMatches(
"IN"))
4036 COMPLETE_WITH(
"ACCESS SHARE MODE",
4037 "ROW SHARE MODE",
"ROW EXCLUSIVE MODE",
4038 "SHARE UPDATE EXCLUSIVE MODE",
"SHARE MODE",
4039 "SHARE ROW EXCLUSIVE MODE",
4040 "EXCLUSIVE MODE",
"ACCESS EXCLUSIVE MODE");
4046 else if (HeadMatches(
"LOCK") && TailMatches(
"IN",
"ACCESS|ROW"))
4047 COMPLETE_WITH(
"EXCLUSIVE MODE",
"SHARE MODE");
4050 else if (HeadMatches(
"LOCK") && TailMatches(
"IN",
"SHARE"))
4051 COMPLETE_WITH(
"MODE",
"ROW EXCLUSIVE MODE",
4052 "UPDATE EXCLUSIVE MODE");
4054 else if (TailMatches(
"MERGE"))
4055 COMPLETE_WITH(
"INTO");
4056 else if (TailMatches(
"MERGE",
"INTO"))
4057 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_mergetargets);
4058 else if (TailMatches(
"MERGE",
"INTO", MatchAny))
4059 COMPLETE_WITH(
"USING",
"AS");
4060 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING"))
4061 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
4063 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny))
4064 COMPLETE_WITH(
"USING");
4065 else if (TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny))
4066 COMPLETE_WITH(
"USING");
4067 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING"))
4068 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
4069 else if (TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING"))
4070 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
4072 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING", MatchAny))
4073 COMPLETE_WITH(
"ON");
4074 else if (TailMatches(
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny,
"AS", MatchAny))
4075 COMPLETE_WITH(
"ON");
4076 else if (TailMatches(
"INTO", MatchAny, MatchAny,
"USING", MatchAny, MatchAny))
4077 COMPLETE_WITH(
"ON");
4079 else if (TailMatches(
"INTO", MatchAny,
"USING", MatchAny,
"ON"))
4080 COMPLETE_WITH_ATTR(prev4_wd);
4081 else if (TailMatches(
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny,
"AS", MatchAny,
"ON"))
4082 COMPLETE_WITH_ATTR(prev8_wd);
4083 else if (TailMatches(
"INTO", MatchAny, MatchAny,
"USING", MatchAny, MatchAny,
"ON"))
4084 COMPLETE_WITH_ATTR(prev6_wd);
4086 else if (TailMatches(
"USING", MatchAny,
"ON", MatchAny))
4087 COMPLETE_WITH(
"WHEN MATCHED",
"WHEN NOT MATCHED");
4088 else if (TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny))
4089 COMPLETE_WITH(
"WHEN MATCHED",
"WHEN NOT MATCHED");
4090 else if (TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny))
4091 COMPLETE_WITH(
"WHEN MATCHED",
"WHEN NOT MATCHED");
4092 else if (TailMatches(
"WHEN",
"MATCHED"))
4093 COMPLETE_WITH(
"THEN",
"AND");
4094 else if (TailMatches(
"WHEN",
"NOT",
"MATCHED"))
4095 COMPLETE_WITH(
"THEN",
"AND");
4096 else if (TailMatches(
"WHEN",
"MATCHED",
"THEN"))
4097 COMPLETE_WITH(
"UPDATE",
"DELETE");
4098 else if (TailMatches(
"WHEN",
"NOT",
"MATCHED",
"THEN"))
4099 COMPLETE_WITH(
"INSERT",
"DO NOTHING");
4102 else if (HeadMatches(
"LOCK") && TailMatches(
"MODE"))
4103 COMPLETE_WITH(
"NOWAIT");
4106 else if (TailMatches(
"NOTIFY"))
4107 COMPLETE_WITH_QUERY(Query_for_list_of_channels);
4110 else if (TailMatches(
"OPTIONS"))
4114 else if (TailMatches(
"OWNER",
"TO"))
4115 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4118 else if (TailMatches(
"FROM", MatchAny,
"ORDER"))
4119 COMPLETE_WITH(
"BY");
4120 else if (TailMatches(
"FROM", MatchAny,
"ORDER",
"BY"))
4121 COMPLETE_WITH_ATTR(prev3_wd);
4124 else if (Matches(
"PREPARE", MatchAny,
"AS"))
4125 COMPLETE_WITH(
"SELECT",
"UPDATE",
"INSERT INTO",
"DELETE FROM");
4133 else if (Matches(
"REASSIGN"))
4134 COMPLETE_WITH(
"OWNED BY");
4135 else if (Matches(
"REASSIGN",
"OWNED"))
4136 COMPLETE_WITH(
"BY");
4137 else if (Matches(
"REASSIGN",
"OWNED",
"BY"))
4138 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4139 else if (Matches(
"REASSIGN",
"OWNED",
"BY", MatchAny))
4140 COMPLETE_WITH(
"TO");
4141 else if (Matches(
"REASSIGN",
"OWNED",
"BY", MatchAny,
"TO"))
4142 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4145 else if (Matches(
"REFRESH"))
4146 COMPLETE_WITH(
"MATERIALIZED VIEW");
4147 else if (Matches(
"REFRESH",
"MATERIALIZED"))
4148 COMPLETE_WITH(
"VIEW");
4149 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW"))
4150 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_matviews,
4152 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY"))
4153 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
4154 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny))
4155 COMPLETE_WITH(
"WITH");
4156 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny))
4157 COMPLETE_WITH(
"WITH");
4158 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny,
"WITH"))
4159 COMPLETE_WITH(
"NO DATA",
"DATA");
4160 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny,
"WITH"))
4161 COMPLETE_WITH(
"NO DATA",
"DATA");
4162 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny,
"WITH",
"NO"))
4163 COMPLETE_WITH(
"DATA");
4164 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny,
"WITH",
"NO"))
4165 COMPLETE_WITH(
"DATA");
4168 else if (Matches(
"REINDEX") ||
4169 Matches(
"REINDEX",
"(*)"))
4170 COMPLETE_WITH(
"TABLE",
"INDEX",
"SYSTEM",
"SCHEMA",
"DATABASE");
4171 else if (Matches(
"REINDEX",
"TABLE") ||
4172 Matches(
"REINDEX",
"(*)",
"TABLE"))
4173 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexables,
4175 else if (Matches(
"REINDEX",
"INDEX") ||
4176 Matches(
"REINDEX",
"(*)",
"INDEX"))
4177 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
4179 else if (Matches(
"REINDEX",
"SCHEMA") ||
4180 Matches(
"REINDEX",
"(*)",
"SCHEMA"))
4181 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas,
4183 else if (Matches(
"REINDEX",
"SYSTEM|DATABASE") ||
4184 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE"))
4185 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_databases,
4187 else if (Matches(
"REINDEX",
"TABLE",
"CONCURRENTLY") ||
4188 Matches(
"REINDEX",
"(*)",
"TABLE",
"CONCURRENTLY"))
4189 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexables);
4190 else if (Matches(
"REINDEX",
"INDEX",
"CONCURRENTLY") ||
4191 Matches(
"REINDEX",
"(*)",
"INDEX",
"CONCURRENTLY"))
4192 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
4193 else if (Matches(
"REINDEX",
"SCHEMA",
"CONCURRENTLY") ||
4194 Matches(
"REINDEX",
"(*)",
"SCHEMA",
"CONCURRENTLY"))
4195 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
4196 else if (Matches(
"REINDEX",
"SYSTEM|DATABASE",
"CONCURRENTLY") ||
4197 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE",
"CONCURRENTLY"))
4198 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
4199 else if (HeadMatches(
"REINDEX",
"(*") &&
4200 !HeadMatches(
"REINDEX",
"(*)"))
4207 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
4208 COMPLETE_WITH(
"CONCURRENTLY",
"TABLESPACE",
"VERBOSE");
4209 else if (TailMatches(
"TABLESPACE"))
4210 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
4214 else if (Matches(
"SECURITY"))
4215 COMPLETE_WITH(
"LABEL");
4216 else if (Matches(
"SECURITY",
"LABEL"))
4217 COMPLETE_WITH(
"ON",
"FOR");
4218 else if (Matches(
"SECURITY",
"LABEL",
"FOR", MatchAny))
4219 COMPLETE_WITH(
"ON");
4220 else if (Matches(
"SECURITY",
"LABEL",
"ON") ||
4221 Matches(
"SECURITY",
"LABEL",
"FOR", MatchAny,
"ON"))
4222 COMPLETE_WITH(
"TABLE",
"COLUMN",
"AGGREGATE",
"DATABASE",
"DOMAIN",
4223 "EVENT TRIGGER",
"FOREIGN TABLE",
"FUNCTION",
4224 "LARGE OBJECT",
"MATERIALIZED VIEW",
"LANGUAGE",
4225 "PUBLICATION",
"PROCEDURE",
"ROLE",
"ROUTINE",
"SCHEMA",
4226 "SEQUENCE",
"SUBSCRIPTION",
"TABLESPACE",
"TYPE",
"VIEW");
4227 else if (Matches(
"SECURITY",
"LABEL",
"ON", MatchAny, MatchAny))
4228 COMPLETE_WITH(
"IS");
4235 else if (TailMatches(
"SET|RESET") && !TailMatches(
"UPDATE", MatchAny,
"SET"))
4236 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
4243 else if (Matches(
"SHOW"))
4244 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_show_vars,
4245 "SESSION AUTHORIZATION",
4247 else if (Matches(
"SHOW",
"SESSION"))
4248 COMPLETE_WITH(
"AUTHORIZATION");
4250 else if (Matches(
"SET",
"TRANSACTION"))
4251 COMPLETE_WITH(
"SNAPSHOT",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
4252 else if (Matches(
"BEGIN|START",
"TRANSACTION") ||
4253 Matches(
"BEGIN",
"WORK") ||
4255 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION"))
4256 COMPLETE_WITH(
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
4257 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"NOT") ||
4258 Matches(
"BEGIN",
"NOT") ||
4259 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"NOT"))
4260 COMPLETE_WITH(
"DEFERRABLE");
4261 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION") ||
4262 Matches(
"BEGIN",
"ISOLATION") ||
4263 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION"))
4264 COMPLETE_WITH(
"LEVEL");
4265 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL") ||
4266 Matches(
"BEGIN",
"ISOLATION",
"LEVEL") ||
4267 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL"))
4268 COMPLETE_WITH(
"READ",
"REPEATABLE READ",
"SERIALIZABLE");
4269 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"READ") ||
4270 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"READ") ||
4271 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"READ"))
4272 COMPLETE_WITH(
"UNCOMMITTED",
"COMMITTED");
4273 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
4274 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
4275 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"REPEATABLE"))
4276 COMPLETE_WITH(
"READ");
4277 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"READ") ||
4278 Matches(
"BEGIN",
"READ") ||
4279 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"READ"))
4280 COMPLETE_WITH(
"ONLY",
"WRITE");
4282 else if (Matches(
"SET",
"CONSTRAINTS"))
4283 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_constraints_with_schema,
4286 else if (Matches(
"SET",
"CONSTRAINTS", MatchAny))
4287 COMPLETE_WITH(
"DEFERRED",
"IMMEDIATE");
4289 else if (Matches(
"SET",
"ROLE"))
4290 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4292 else if (Matches(
"SET",
"SESSION"))
4293 COMPLETE_WITH(
"AUTHORIZATION",
"CHARACTERISTICS AS TRANSACTION");
4295 else if (Matches(
"SET",
"SESSION",
"AUTHORIZATION"))
4296 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4299 else if (Matches(
"RESET",
"SESSION"))
4300 COMPLETE_WITH(
"AUTHORIZATION");
4302 else if (Matches(
"SET", MatchAny))
4303 COMPLETE_WITH(
"TO");
4309 else if (HeadMatches(
"ALTER",
"DATABASE|FUNCTION|PROCEDURE|ROLE|ROUTINE|USER") &&
4310 TailMatches(
"SET", MatchAny))
4311 COMPLETE_WITH(
"FROM CURRENT",
"TO");
4317 else if (TailMatches(
"SET", MatchAny,
"TO|=") &&
4318 !TailMatches(
"UPDATE", MatchAny,
"SET", MatchAny,
"TO|="))
4321 if (TailMatches(
"DateStyle",
"TO|="))
4322 COMPLETE_WITH(
"ISO",
"SQL",
"Postgres",
"German",
4323 "YMD",
"DMY",
"MDY",
4324 "US",
"European",
"NonEuropean",
4326 else if (TailMatches(
"search_path",
"TO|="))
4329 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
4330 " AND nspname NOT LIKE E'pg\\\\_toast%%'"
4331 " AND nspname NOT LIKE E'pg\\\\_temp%%'",
4334 else if (TailMatches(
"TimeZone",
"TO|="))
4335 COMPLETE_WITH_TIMEZONE_NAME();
4339 char *guctype = get_guctype(prev2_wd);
4348 if (strcmp(guctype,
"enum") == 0)
4350 set_completion_reference_verbatim(prev2_wd);
4351 COMPLETE_WITH_QUERY_PLUS(Query_for_values_of_enum_GUC,
4354 else if (strcmp(guctype,
"bool") == 0)
4355 COMPLETE_WITH(
"on",
"off",
"true",
"false",
"yes",
"no",
4356 "1",
"0",
"DEFAULT");
4358 COMPLETE_WITH(
"DEFAULT");
4366 else if (Matches(
"START"))
4367 COMPLETE_WITH(
"TRANSACTION");
4370 else if (Matches(
"TABLE"))
4371 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
4374 else if (TailMatches(
"TABLESAMPLE"))
4375 COMPLETE_WITH_QUERY(Query_for_list_of_tablesample_methods);
4376 else if (TailMatches(
"TABLESAMPLE", MatchAny))
4380 else if (Matches(
"TRUNCATE"))
4381 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_truncatables,
4383 else if (Matches(
"TRUNCATE",
"TABLE"))
4384 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_truncatables,
4386 else if (HeadMatches(
"TRUNCATE") && TailMatches(
"ONLY"))
4387 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_truncatables);
4388 else if (Matches(
"TRUNCATE", MatchAny) ||
4389 Matches(
"TRUNCATE",
"TABLE|ONLY", MatchAny) ||
4390 Matches(
"TRUNCATE",
"TABLE",
"ONLY", MatchAny))
4391 COMPLETE_WITH(
"RESTART IDENTITY",
"CONTINUE IDENTITY",
"CASCADE",
"RESTRICT");
4392 else if (HeadMatches(
"TRUNCATE") && TailMatches(
"IDENTITY"))
4393 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4396 else if (Matches(
"UNLISTEN"))
4397 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_channels,
"*");
4401 else if (TailMatches(
"UPDATE"))
4402 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
4404 else if (TailMatches(
"UPDATE", MatchAny))
4405 COMPLETE_WITH(
"SET");
4407 else if (TailMatches(
"UPDATE", MatchAny,
"SET"))
4408 COMPLETE_WITH_ATTR(prev2_wd);
4410 else if (TailMatches(
"UPDATE", MatchAny,
"SET", MatchAnyExcept(
"*=")))
4414 else if (Matches(
"ALTER|CREATE|DROP",
"USER",
"MAPPING"))
4415 COMPLETE_WITH(
"FOR");
4416 else if (Matches(
"CREATE",
"USER",
"MAPPING",
"FOR"))
4417 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4422 else if (Matches(
"ALTER|DROP",
"USER",
"MAPPING",
"FOR"))
4423 COMPLETE_WITH_QUERY(Query_for_list_of_user_mappings);
4424 else if (Matches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING",
"FOR", MatchAny))
4425 COMPLETE_WITH(
"SERVER");
4426 else if (Matches(
"CREATE|ALTER",
"USER",
"MAPPING",
"FOR", MatchAny,
"SERVER", MatchAny))
4427 COMPLETE_WITH(
"OPTIONS");
4433 else if (Matches(
"VACUUM"))
4434 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
4439 else if (Matches(
"VACUUM",
"FULL"))
4440 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
4444 else if (Matches(
"VACUUM",
"FREEZE") ||
4445 Matches(
"VACUUM",
"FULL",
"FREEZE"))
4446 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
4449 else if (Matches(
"VACUUM",
"VERBOSE") ||
4450 Matches(
"VACUUM",
"FULL|FREEZE",
"VERBOSE") ||
4451 Matches(
"VACUUM",
"FULL",
"FREEZE",
"VERBOSE"))
4452 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
4454 else if (HeadMatches(
"VACUUM",
"(*") &&
4455 !HeadMatches(
"VACUUM",
"(*)"))
4462 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
4463 COMPLETE_WITH(
"FULL",
"FREEZE",
"ANALYZE",
"VERBOSE",
4464 "DISABLE_PAGE_SKIPPING",
"SKIP_LOCKED",
4465 "INDEX_CLEANUP",
"PROCESS_TOAST",
4466 "TRUNCATE",
"PARALLEL");
4467 else if (TailMatches(
"FULL|FREEZE|ANALYZE|VERBOSE|DISABLE_PAGE_SKIPPING|SKIP_LOCKED|PROCESS_TOAST|TRUNCATE"))
4468 COMPLETE_WITH(
"ON",
"OFF");
4469 else if (TailMatches(
"INDEX_CLEANUP"))
4470 COMPLETE_WITH(
"AUTO",
"ON",
"OFF");
4472 else if (HeadMatches(
"VACUUM") && TailMatches(
"("))
4474 COMPLETE_WITH_ATTR(prev2_wd);
4475 else if (HeadMatches(
"VACUUM"))
4476 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_vacuumables);
4484 else if (Matches(
"WITH"))
4485 COMPLETE_WITH(
"RECURSIVE");
4489 else if (TailMatches(MatchAny,
"WHERE"))
4490 COMPLETE_WITH_ATTR(prev2_wd);
4494 else if (TailMatches(
"FROM") && !Matches(
"COPY|\\copy", MatchAny,
"FROM"))
4495 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
4498 else if (TailMatches(
"JOIN"))
4499 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
4503 else if (TailMatchesCS(
"\\?"))
4504 COMPLETE_WITH_CS(
"commands",
"options",
"variables");
4505 else if (TailMatchesCS(
"\\connect|\\c"))
4508 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
4510 else if (TailMatchesCS(
"\\connect|\\c", MatchAny))
4513 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4515 else if (TailMatchesCS(
"\\da*"))
4516 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_aggregates);
4517 else if (TailMatchesCS(
"\\dAc*", MatchAny) ||
4518 TailMatchesCS(
"\\dAf*", MatchAny))
4519 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4520 else if (TailMatchesCS(
"\\dAo*", MatchAny) ||
4521 TailMatchesCS(
"\\dAp*", MatchAny))
4522 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_operator_families);
4523 else if (TailMatchesCS(
"\\dA*"))
4524 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
4525 else if (TailMatchesCS(
"\\db*"))
4526 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
4527 else if (TailMatchesCS(
"\\dconfig*"))
4528 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_show_vars);
4529 else if (TailMatchesCS(
"\\dD*"))
4530 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
4531 else if (TailMatchesCS(
"\\des*"))
4532 COMPLETE_WITH_QUERY(Query_for_list_of_servers);
4533 else if (TailMatchesCS(
"\\deu*"))
4534 COMPLETE_WITH_QUERY(Query_for_list_of_user_mappings);
4535 else if (TailMatchesCS(
"\\dew*"))
4536 COMPLETE_WITH_QUERY(Query_for_list_of_fdws);
4537 else if (TailMatchesCS(
"\\df*"))
4538 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
4539 else if (HeadMatchesCS(
"\\df*"))
4540 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4542 else if (TailMatchesCS(
"\\dFd*"))
4543 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_dictionaries);
4544 else if (TailMatchesCS(
"\\dFp*"))
4545 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_parsers);
4546 else if (TailMatchesCS(
"\\dFt*"))
4547 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_templates);
4549 else if (TailMatchesCS(
"\\dF*"))
4550 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_configurations);
4552 else if (TailMatchesCS(
"\\di*"))
4553 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
4554 else if (TailMatchesCS(
"\\dL*"))
4555 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
4556 else if (TailMatchesCS(
"\\dn*"))
4557 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
4559 else if (HeadMatchesCS(
"\\do*", MatchAny))
4560 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4561 else if (TailMatchesCS(
"\\dp") || TailMatchesCS(
"\\z"))
4562 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_grantables);
4563 else if (TailMatchesCS(
"\\dPi*"))
4564 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_indexes);
4565 else if (TailMatchesCS(
"\\dPt*"))
4566 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_tables);
4567 else if (TailMatchesCS(
"\\dP*"))
4568 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_relations);
4569 else if (TailMatchesCS(
"\\ds*"))
4570 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_sequences);
4571 else if (TailMatchesCS(
"\\dt*"))
4572 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
4573 else if (TailMatchesCS(
"\\dT*"))
4574 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4575 else if (TailMatchesCS(
"\\du*") || TailMatchesCS(
"\\dg*"))
4576 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4577 else if (TailMatchesCS(
"\\dv*"))
4578 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
4579 else if (TailMatchesCS(
"\\dx*"))
4580 COMPLETE_WITH_QUERY(Query_for_list_of_extensions);
4581 else if (TailMatchesCS(
"\\dX*"))
4582 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_statistics);
4583 else if (TailMatchesCS(
"\\dm*"))
4584 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
4585 else if (TailMatchesCS(
"\\dE*"))
4586 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
4587 else if (TailMatchesCS(
"\\dy*"))
4588 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
4591 else if (TailMatchesCS(
"\\d*"))
4592 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_relations);
4594 else if (TailMatchesCS(
"\\ef"))
4595 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
4596 else if (TailMatchesCS(
"\\ev"))
4597 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
4599 else if (TailMatchesCS(
"\\encoding"))
4600 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_encodings);
4601 else if (TailMatchesCS(
"\\h|\\help"))
4602 COMPLETE_WITH_LIST(sql_commands);
4603 else if (TailMatchesCS(
"\\h|\\help", MatchAny))
4605 if (TailMatches(
"DROP"))
4606 matches = rl_completion_matches(
text, drop_command_generator);
4607 else if (TailMatches(
"ALTER"))
4608 matches = rl_completion_matches(
text, alter_command_generator);
4615 else if (TailMatchesCS(
"\\h|\\help", MatchAny, MatchAny))
4617 if (TailMatches(
"CREATE|DROP",
"ACCESS"))
4618 COMPLETE_WITH(
"METHOD");
4619 else if (TailMatches(
"ALTER",
"DEFAULT"))
4620 COMPLETE_WITH(
"PRIVILEGES");
4621 else if (TailMatches(
"CREATE|ALTER|DROP",
"EVENT"))
4622 COMPLETE_WITH(
"TRIGGER");
4623 else if (TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN"))
4624 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
4625 else if (TailMatches(
"ALTER",
"LARGE"))
4626 COMPLETE_WITH(
"OBJECT");
4627 else if (TailMatches(
"CREATE|ALTER|DROP",
"MATERIALIZED"))
4628 COMPLETE_WITH(
"VIEW");
4629 else if (TailMatches(
"CREATE|ALTER|DROP",
"TEXT"))
4630 COMPLETE_WITH(
"SEARCH");
4631 else if (TailMatches(
"CREATE|ALTER|DROP",
"USER"))
4632 COMPLETE_WITH(
"MAPPING FOR");
4634 else if (TailMatchesCS(
"\\h|\\help", MatchAny, MatchAny, MatchAny))
4636 if (TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN",
"DATA"))
4637 COMPLETE_WITH(
"WRAPPER");
4638 else if (TailMatches(
"CREATE|ALTER|DROP",
"TEXT",
"SEARCH"))
4639 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
4640 else if (TailMatches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING"))
4641 COMPLETE_WITH(
"FOR");
4643 else if (TailMatchesCS(
"\\l*") && !TailMatchesCS(
"\\lo*"))
4644 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
4645 else if (TailMatchesCS(
"\\password"))
4646 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4647 else if (TailMatchesCS(
"\\pset"))
4648 COMPLETE_WITH_CS(
"border",
"columns",
"csv_fieldsep",
"expanded",
4649 "fieldsep",
"fieldsep_zero",
"footer",
"format",
4650 "linestyle",
"null",
"numericlocale",
4651 "pager",
"pager_min_lines",
4652 "recordsep",
"recordsep_zero",
4653 "tableattr",
"title",
"tuples_only",
4654 "unicode_border_linestyle",
4655 "unicode_column_linestyle",
4656 "unicode_header_linestyle");
4657 else if (TailMatchesCS(
"\\pset", MatchAny))
4659 if (TailMatchesCS(
"format"))
4660 COMPLETE_WITH_CS(
"aligned",
"asciidoc",
"csv",
"html",
"latex",
4661 "latex-longtable",
"troff-ms",
"unaligned",
4663 else if (TailMatchesCS(
"linestyle"))
4664 COMPLETE_WITH_CS(
"ascii",
"old-ascii",
"unicode");
4665 else if (TailMatchesCS(
"pager"))
4666 COMPLETE_WITH_CS(
"on",
"off",
"always");
4667 else if (TailMatchesCS(
"unicode_border_linestyle|"
4668 "unicode_column_linestyle|"
4669 "unicode_header_linestyle"))
4670 COMPLETE_WITH_CS(
"single",
"double");
4672 else if (TailMatchesCS(
"\\unset"))
4673 matches = complete_from_variables(
text,
"",
"",
true);
4674 else if (TailMatchesCS(
"\\set"))
4675 matches = complete_from_variables(
text,
"",
"",
false);
4676 else if (TailMatchesCS(
"\\set", MatchAny))
4678 if (TailMatchesCS(
"AUTOCOMMIT|ON_ERROR_STOP|QUIET|SHOW_ALL_RESULTS|"
4679 "SINGLELINE|SINGLESTEP"))
4680 COMPLETE_WITH_CS(
"on",
"off");
4681 else if (TailMatchesCS(
"COMP_KEYWORD_CASE"))
4682 COMPLETE_WITH_CS(
"lower",
"upper",
4683 "preserve-lower",
"preserve-upper");
4684 else if (TailMatchesCS(
"ECHO"))
4685 COMPLETE_WITH_CS(
"errors",
"queries",
"all",
"none");
4686 else if (TailMatchesCS(
"ECHO_HIDDEN"))
4687 COMPLETE_WITH_CS(
"noexec",
"off",
"on");
4688 else if (TailMatchesCS(
"HISTCONTROL"))
4689 COMPLETE_WITH_CS(
"ignorespace",
"ignoredups",
4690 "ignoreboth",
"none");
4691 else if (TailMatchesCS(
"ON_ERROR_ROLLBACK"))
4692 COMPLETE_WITH_CS(
"on",
"off",
"interactive");
4693 else if (TailMatchesCS(
"SHOW_CONTEXT"))
4694 COMPLETE_WITH_CS(
"never",
"errors",
"always");
4695 else if (TailMatchesCS(
"VERBOSITY"))
4696 COMPLETE_WITH_CS(
"default",
"verbose",
"terse",
"sqlstate");
4698 else if (TailMatchesCS(
"\\sf*"))
4699 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
4700 else if (TailMatchesCS(
"\\sv*"))
4701 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
4702 else if (TailMatchesCS(
"\\cd|\\e|\\edit|\\g|\\gx|\\i|\\include|"
4703 "\\ir|\\include_relative|\\o|\\out|"
4704 "\\s|\\w|\\write|\\lo_import"))
4706 completion_charp =
"\\";
4707 completion_force_quote =
false;
4708 matches = rl_completion_matches(
text, complete_from_files);
4718 const pgsql_thing_t *wac;
4720 for (wac = words_after_create; wac->name != NULL; wac++)
4725 COMPLETE_WITH_QUERY_LIST(wac->query,
4727 else if (wac->vquery)
4728 COMPLETE_WITH_VERSIONED_QUERY_LIST(wac->vquery,
4730 else if (wac->squery)
4731 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_LIST(wac->squery,
4743 if (matches == NULL)
4745 COMPLETE_WITH_CONST(
true,
"");
4747 rl_completion_append_character =
'\0';
4748 #ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
4749 rl_completion_suppress_quote = 1;
4754 free(previous_words);
4757 if (completion_ref_object)
4758 free(completion_ref_object);
4759 completion_ref_object = NULL;
4760 if (completion_ref_schema)
4761 free(completion_ref_schema);
4762 completion_ref_schema = NULL;
4788 create_or_drop_command_generator(
const char *
text,
int state,
bits32 excluded)
4790 static int list_index,
4798 string_length = strlen(
text);
4802 while ((
name = words_after_create[list_index++].
name))
4805 !(words_after_create[list_index - 1].flags & excluded))
4806 return pg_strdup_keyword_case(
name,
text);
4817 create_command_generator(
const char *
text,
int state)
4819 return create_or_drop_command_generator(
text,
state, THING_NO_CREATE);
4826 drop_command_generator(
const char *
text,
int state)
4828 return create_or_drop_command_generator(
text,
state, THING_NO_DROP);
4835 alter_command_generator(
const char *
text,
int state)
4837 return create_or_drop_command_generator(
text,
state, THING_NO_ALTER);
4846 complete_from_query(
const char *
text,
int state)
4849 return _complete_from_query(completion_charp, NULL, completion_charpp,
4854 complete_from_versioned_query(
const char *
text,
int state)
4856 const VersionedQuery *vquery = completion_vquery;
4862 if (vquery->query == NULL)
4865 return _complete_from_query(vquery->query, NULL, completion_charpp,
4870 complete_from_schema_query(
const char *
text,
int state)
4873 return _complete_from_query(NULL, completion_squery, completion_charpp,
4878 complete_from_versioned_schema_query(
const char *
text,
int state)
4880 const SchemaQuery *squery = completion_squery;
4886 if (squery->catname == NULL)
4889 return _complete_from_query(NULL, squery, completion_charpp,
4936 _complete_from_query(
const char *simple_query,
4937 const SchemaQuery *schema_query,
4938 const char *
const *keywords,
4942 static int list_index,
4947 static bool non_empty_object;
4948 static bool schemaquoted;
4949 static bool objectquoted;
4960 char *e_object_like;
4967 num_schema_only = 0;
4968 num_query_other = 0;
4981 parse_identifier(
text,
4982 &schemaname, &objectname,
4983 &schemaquoted, &objectquoted);
4987 non_empty_object = (*objectname !=
'\0');
4993 e_object_like = make_like_pattern(objectname);
4996 e_schemaname = escape_string(schemaname);
4998 e_schemaname = NULL;
5000 if (completion_ref_object)
5001 e_ref_object = escape_string(completion_ref_object);
5003 e_ref_object = NULL;
5005 if (completion_ref_schema)
5006 e_ref_schema = escape_string(completion_ref_schema);
5008 e_ref_schema = NULL;
5014 Assert(simple_query == NULL);
5021 if (schemaname == NULL || schema_query->namespace == NULL)
5025 if (schema_query->use_distinct)
5028 "%s, NULL::pg_catalog.text FROM %s",
5029 schema_query->result,
5030 schema_query->catname);
5031 if (schema_query->refnamespace && completion_ref_schema)
5033 ", pg_catalog.pg_namespace nr");
5035 if (schema_query->selcondition)
5037 schema_query->selcondition);
5039 schema_query->result,
5041 if (schema_query->viscondition)
5043 schema_query->viscondition);
5044 if (schema_query->refname)
5046 Assert(completion_ref_object);
5048 schema_query->refname, e_ref_object);
5049 if (schema_query->refnamespace && completion_ref_schema)
5051 " AND %s = nr.oid AND nr.nspname = '%s'",
5052 schema_query->refnamespace,
5054 else if (schema_query->refviscondition)
5057 schema_query->refviscondition);
5067 if (strcmp(schema_query->catname,
5068 "pg_catalog.pg_class c") == 0 &&
5069 strncmp(objectname,
"pg_", 3) != 0)
5072 " AND c.relnamespace <> (SELECT oid FROM"
5073 " pg_catalog.pg_namespace WHERE nspname = 'pg_catalog')");
5080 if (schema_query->namespace)
5083 "SELECT NULL::pg_catalog.text, n.nspname "
5084 "FROM pg_catalog.pg_namespace n "
5085 "WHERE n.nspname LIKE '%s'",
5092 if (strncmp(objectname,
"pg_", 3) != 0)
5094 " AND n.nspname NOT LIKE E'pg\\\\_%'");
5101 schemaquoted = objectquoted;
5108 if (schema_query->use_distinct)
5111 "FROM %s, pg_catalog.pg_namespace n",
5112 schema_query->result,
5113 schema_query->catname);
5114 if (schema_query->refnamespace && completion_ref_schema)
5116 ", pg_catalog.pg_namespace nr");
5118 schema_query->namespace);
5119 if (schema_query->selcondition)
5121 schema_query->selcondition);
5123 schema_query->result,
5127 if (schema_query->refname)
5129 Assert(completion_ref_object);
5131 schema_query->refname, e_ref_object);
5132 if (schema_query->refnamespace && completion_ref_schema)
5134 " AND %s = nr.oid AND nr.nspname = '%s'",
5135 schema_query->refnamespace,
5137 else if (schema_query->refviscondition)
5140 schema_query->refviscondition);
5150 e_ref_object, e_ref_schema);
5155 completion_max_records);
5158 result = exec_query(query_buffer.
data);
5162 free(e_object_like);
5178 const char *item = NULL;
5179 const char *nsp = NULL;
5202 if (non_empty_object)
5204 if (item && !objectquoted && identifier_needs_quotes(item))
5206 if (nsp && !schemaquoted && identifier_needs_quotes(nsp))
5211 if (item == NULL && nsp != NULL)
5216 return requote_identifier(nsp, item, schemaquoted, objectquoted);
5225 if (schema_query && schema_query->keywords)
5227 const char *
const *itemp = schema_query->keywords;
5231 const char *item = *itemp++;
5239 return pg_strdup_keyword_case(item,
text);
5245 const char *
const *itemp = keywords;
5249 const char *item = *itemp++;
5257 return pg_strdup_keyword_case(item,
text);
5268 if (num_schema_only > 0 && num_query_other == 0 && num_keywords == 0)
5269 rl_completion_append_character =
'\0';
5284 set_completion_reference(
const char *
word)
5289 parse_identifier(
word,
5290 &completion_ref_schema, &completion_ref_object,
5291 &schemaquoted, &objectquoted);
5299 set_completion_reference_verbatim(
const char *
word)
5301 completion_ref_schema = NULL;
5312 complete_from_list(
const char *
text,
int state)
5314 static int string_length,
5317 static bool casesensitive;
5321 Assert(completion_charpp != NULL);
5327 string_length = strlen(
text);
5328 casesensitive = completion_case_sensitive;
5332 while ((item = completion_charpp[list_index++]))
5335 if (casesensitive && strncmp(
text, item, string_length) == 0)
5344 if (completion_case_sensitive)
5352 return pg_strdup_keyword_case(item,
text);
5360 if (casesensitive && matches == 0)
5362 casesensitive =
false;
5392 complete_from_const(
const char *
text,
int state)
5394 Assert(completion_charp != NULL);
5397 if (completion_case_sensitive)
5405 return pg_strdup_keyword_case(completion_charp,
text);
5417 append_variable_names(
char ***varnames,
int *nvars,
5418 int *maxvars,
const char *varname,
5419 const char *prefix,
const char *suffix)
5421 if (*nvars >= *maxvars)
5425 ((*maxvars) + 1) *
sizeof(
char *));
5428 (*varnames)[(*nvars)++] =
psprintf(
"%s%s%s", prefix, varname, suffix);
5440 complete_from_variables(
const char *
text,
const char *prefix,
const char *suffix,
5450 varnames = (
char **)
pg_malloc((maxvars + 1) *
sizeof(
char *));
5454 if (need_value && !(ptr->
value))
5456 append_variable_names(&varnames, &nvars, &maxvars, ptr->
name,
5460 varnames[nvars] = NULL;
5461 COMPLETE_WITH_LIST_CS((
const char *
const *) varnames);
5463 for (
i = 0;
i < nvars;
i++)
<