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')"
1147 #define Privilege_options_of_grant_and_revoke \
1148 "SELECT", "INSERT", "UPDATE", "DELETE", "TRUNCATE", "REFERENCES", "TRIGGER", \
1149 "CREATE", "CONNECT", "TEMPORARY", "EXECUTE", "USAGE", "SET", "ALTER SYSTEM", \
1153 #define Alter_procedure_options \
1154 "DEPENDS ON EXTENSION", "EXTERNAL SECURITY", "NO DEPENDS ON EXTENSION", \
1155 "OWNER TO", "RENAME TO", "RESET", "SECURITY", "SET"
1158 #define Alter_routine_options \
1159 Alter_procedure_options, "COST", "IMMUTABLE", "LEAKPROOF", "NOT LEAKPROOF", \
1160 "PARALLEL", "ROWS", "STABLE", "VOLATILE"
1163 #define Alter_function_options \
1164 Alter_routine_options, "CALLED ON NULL INPUT", "RETURNS NULL ON NULL INPUT", \
1173 static const VersionedQuery Query_for_list_of_publications[] = {
1176 " FROM pg_catalog.pg_publication "
1177 " WHERE pubname LIKE '%s'"
1182 static const VersionedQuery Query_for_list_of_subscriptions[] = {
1184 " SELECT s.subname "
1185 " FROM pg_catalog.pg_subscription s, pg_catalog.pg_database d "
1186 " WHERE s.subname LIKE '%s' "
1187 " AND d.datname = pg_catalog.current_database() "
1188 " AND s.subdbid = d.oid"
1203 const VersionedQuery *vquery;
1204 const SchemaQuery *squery;
1205 const char *
const *keywords;
1209 #define THING_NO_CREATE (1 << 0)
1210 #define THING_NO_DROP (1 << 1)
1211 #define THING_NO_ALTER (1 << 2)
1212 #define THING_NO_SHOW (THING_NO_CREATE | THING_NO_DROP | THING_NO_ALTER)
1215 static const char *
const Keywords_for_user_thing[] = {
1220 static const pgsql_thing_t words_after_create[] = {
1221 {
"ACCESS METHOD", NULL, NULL, NULL, NULL, THING_NO_ALTER},
1222 {
"AGGREGATE", NULL, NULL, Query_for_list_of_aggregates},
1223 {
"CAST", NULL, NULL, NULL},
1225 {
"COLLATION", NULL, NULL, &Query_for_list_of_collations},
1231 {
"CONFIGURATION", NULL, NULL, &Query_for_list_of_ts_configurations, NULL, THING_NO_SHOW},
1232 {
"CONVERSION",
"SELECT conname FROM pg_catalog.pg_conversion WHERE conname LIKE '%s'"},
1233 {
"DATABASE", Query_for_list_of_databases},
1234 {
"DEFAULT PRIVILEGES", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1235 {
"DICTIONARY", NULL, NULL, &Query_for_list_of_ts_dictionaries, NULL, THING_NO_SHOW},
1236 {
"DOMAIN", NULL, NULL, &Query_for_list_of_domains},
1237 {
"EVENT TRIGGER", NULL, NULL, NULL},
1238 {
"EXTENSION", Query_for_list_of_extensions},
1239 {
"FOREIGN DATA WRAPPER", NULL, NULL, NULL},
1240 {
"FOREIGN TABLE", NULL, NULL, NULL},
1241 {
"FUNCTION", NULL, NULL, Query_for_list_of_functions},
1242 {
"GROUP", Query_for_list_of_roles},
1243 {
"INDEX", NULL, NULL, &Query_for_list_of_indexes},
1244 {
"LANGUAGE", Query_for_list_of_languages},
1245 {
"LARGE OBJECT", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1246 {
"MATERIALIZED VIEW", NULL, NULL, &Query_for_list_of_matviews},
1247 {
"OPERATOR", NULL, NULL, NULL},
1249 {
"OR REPLACE", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1250 {
"OWNED", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_ALTER},
1251 {
"PARSER", NULL, NULL, &Query_for_list_of_ts_parsers, NULL, THING_NO_SHOW},
1252 {
"POLICY", NULL, NULL, NULL},
1253 {
"PROCEDURE", NULL, NULL, Query_for_list_of_procedures},
1254 {
"PUBLICATION", NULL, Query_for_list_of_publications},
1255 {
"ROLE", Query_for_list_of_roles},
1256 {
"ROUTINE", NULL, NULL, &Query_for_list_of_routines, NULL, THING_NO_CREATE},
1257 {
"RULE",
"SELECT rulename FROM pg_catalog.pg_rules WHERE rulename LIKE '%s'"},
1258 {
"SCHEMA", Query_for_list_of_schemas},
1259 {
"SEQUENCE", NULL, NULL, &Query_for_list_of_sequences},
1260 {
"SERVER", Query_for_list_of_servers},
1261 {
"STATISTICS", NULL, NULL, &Query_for_list_of_statistics},
1262 {
"SUBSCRIPTION", NULL, Query_for_list_of_subscriptions},
1263 {
"SYSTEM", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1264 {
"TABLE", NULL, NULL, &Query_for_list_of_tables},
1265 {
"TABLESPACE", Query_for_list_of_tablespaces},
1266 {
"TEMP", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1268 {
"TEMPLATE", NULL, NULL, &Query_for_list_of_ts_templates, NULL, THING_NO_SHOW},
1269 {
"TEMPORARY", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1271 {
"TEXT SEARCH", NULL, NULL, NULL},
1272 {
"TRANSFORM", NULL, NULL, NULL, NULL, THING_NO_ALTER},
1273 {
"TRIGGER",
"SELECT tgname FROM pg_catalog.pg_trigger WHERE tgname LIKE '%s' AND NOT tgisinternal"},
1274 {
"TYPE", NULL, NULL, &Query_for_list_of_datatypes},
1275 {
"UNIQUE", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1277 {
"UNLOGGED", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1279 {
"USER", Query_for_list_of_roles, NULL, NULL, Keywords_for_user_thing},
1280 {
"USER MAPPING FOR", NULL, NULL, NULL},
1281 {
"VIEW", NULL, NULL, &Query_for_list_of_views},
1286 static const char *
const table_storage_parameters[] = {
1287 "autovacuum_analyze_scale_factor",
1288 "autovacuum_analyze_threshold",
1289 "autovacuum_enabled",
1290 "autovacuum_freeze_max_age",
1291 "autovacuum_freeze_min_age",
1292 "autovacuum_freeze_table_age",
1293 "autovacuum_multixact_freeze_max_age",
1294 "autovacuum_multixact_freeze_min_age",
1295 "autovacuum_multixact_freeze_table_age",
1296 "autovacuum_vacuum_cost_delay",
1297 "autovacuum_vacuum_cost_limit",
1298 "autovacuum_vacuum_insert_scale_factor",
1299 "autovacuum_vacuum_insert_threshold",
1300 "autovacuum_vacuum_scale_factor",
1301 "autovacuum_vacuum_threshold",
1303 "log_autovacuum_min_duration",
1305 "toast.autovacuum_enabled",
1306 "toast.autovacuum_freeze_max_age",
1307 "toast.autovacuum_freeze_min_age",
1308 "toast.autovacuum_freeze_table_age",
1309 "toast.autovacuum_multixact_freeze_max_age",
1310 "toast.autovacuum_multixact_freeze_min_age",
1311 "toast.autovacuum_multixact_freeze_table_age",
1312 "toast.autovacuum_vacuum_cost_delay",
1313 "toast.autovacuum_vacuum_cost_limit",
1314 "toast.autovacuum_vacuum_insert_scale_factor",
1315 "toast.autovacuum_vacuum_insert_threshold",
1316 "toast.autovacuum_vacuum_scale_factor",
1317 "toast.autovacuum_vacuum_threshold",
1318 "toast.log_autovacuum_min_duration",
1319 "toast.vacuum_index_cleanup",
1320 "toast.vacuum_truncate",
1321 "toast_tuple_target",
1322 "user_catalog_table",
1323 "vacuum_index_cleanup",
1330 static char **psql_completion(
const char *
text,
int start,
int end);
1331 static char *create_command_generator(
const char *
text,
int state);
1332 static char *drop_command_generator(
const char *
text,
int state);
1333 static char *alter_command_generator(
const char *
text,
int state);
1334 static char *complete_from_query(
const char *
text,
int state);
1335 static char *complete_from_versioned_query(
const char *
text,
int state);
1336 static char *complete_from_schema_query(
const char *
text,
int state);
1337 static char *complete_from_versioned_schema_query(
const char *
text,
int state);
1338 static char *_complete_from_query(
const char *simple_query,
1339 const SchemaQuery *schema_query,
1340 const char *
const *keywords,
1343 static void set_completion_reference(
const char *
word);
1344 static void set_completion_reference_verbatim(
const char *
word);
1345 static char *complete_from_list(
const char *
text,
int state);
1346 static char *complete_from_const(
const char *
text,
int state);
1347 static void append_variable_names(
char ***varnames,
int *nvars,
1348 int *maxvars,
const char *varname,
1349 const char *prefix,
const char *suffix);
1350 static char **complete_from_variables(
const char *
text,
1351 const char *prefix,
const char *suffix,
bool need_value);
1352 static char *complete_from_files(
const char *
text,
int state);
1354 static char *pg_strdup_keyword_case(
const char *s,
const char *ref);
1355 static char *escape_string(
const char *
text);
1356 static char *make_like_pattern(
const char *
word);
1357 static void parse_identifier(
const char *ident,
1358 char **schemaname,
char **objectname,
1359 bool *schemaquoted,
bool *objectquoted);
1360 static char *requote_identifier(
const char *schemaname,
const char *objectname,
1361 bool quote_schema,
bool quote_object);
1362 static bool identifier_needs_quotes(
const char *ident);
1363 static PGresult *exec_query(
const char *query);
1365 static char **get_previous_words(
int point,
char **buffer,
int *nwords);
1367 static char *get_guctype(
const char *varname);
1369 #ifdef USE_FILENAME_QUOTING_FUNCTIONS
1370 static char *quote_file_name(
char *fname,
int match_type,
char *quote_pointer);
1371 static char *dequote_file_name(
char *fname,
int quote_char);
1382 rl_attempted_completion_function = psql_completion;
1384 #ifdef USE_FILENAME_QUOTING_FUNCTIONS
1385 rl_filename_quoting_function = quote_file_name;
1386 rl_filename_dequoting_function = dequote_file_name;
1389 rl_basic_word_break_characters = WORD_BREAKS;
1398 rl_completer_quote_characters =
"'";
1406 #ifdef HAVE_RL_FILENAME_QUOTE_CHARACTERS
1408 unsigned char *fqc = (
unsigned char *)
pg_malloc(256);
1410 for (
int i = 0;
i < 255;
i++)
1411 fqc[
i] = (
unsigned char) (
i + 1);
1413 rl_filename_quote_characters = (
const char *) fqc;
1417 completion_max_records = 1000;
1439 #define MatchAny NULL
1440 #define MatchAnyExcept(pattern) ("!" pattern)
1443 word_matches(
const char *pattern,
1445 bool case_sensitive)
1449 #define cimatch(s1, s2, n) \
1450 (case_sensitive ? strncmp(s1, s2, n) == 0 : pg_strncasecmp(s1, s2, n) == 0)
1453 if (pattern == NULL)
1457 if (*pattern ==
'!')
1458 return !word_matches(pattern + 1,
word, case_sensitive);
1461 wordlen = strlen(
word);
1464 const char *star = NULL;
1469 while (*
c !=
'\0' && *
c !=
'|')
1479 size_t beforelen = star - pattern,
1480 afterlen =
c - star - 1;
1482 if (wordlen >= (beforelen + afterlen) &&
1483 cimatch(
word, pattern, beforelen) &&
1484 cimatch(
word + wordlen - afterlen, star + 1, afterlen))
1490 if (wordlen == (
c - pattern) &&
1491 cimatch(
word, pattern, wordlen))
1512 TailMatchesImpl(
bool case_sensitive,
1513 int previous_words_count,
char **previous_words,
1518 if (previous_words_count < narg)
1523 for (
int argno = 0; argno < narg; argno++)
1525 const char *
arg = va_arg(
args,
const char *);
1527 if (!word_matches(
arg, previous_words[narg - argno - 1],
1545 MatchesImpl(
bool case_sensitive,
1546 int previous_words_count,
char **previous_words,
1551 if (previous_words_count != narg)
1556 for (
int argno = 0; argno < narg; argno++)
1558 const char *
arg = va_arg(
args,
const char *);
1560 if (!word_matches(
arg, previous_words[narg - argno - 1],
1578 HeadMatchesImpl(
bool case_sensitive,
1579 int previous_words_count,
char **previous_words,
1584 if (previous_words_count < narg)
1589 for (
int argno = 0; argno < narg; argno++)
1591 const char *
arg = va_arg(
args,
const char *);
1593 if (!word_matches(
arg, previous_words[previous_words_count - argno - 1],
1610 ends_with(
const char *s,
char c)
1612 size_t length = strlen(s);
1614 return (length > 0 && s[length - 1] ==
c);
1626 psql_completion(
const char *
text,
int start,
int end)
1629 char **matches = NULL;
1635 char **previous_words;
1638 int previous_words_count;
1647 #define prev_wd (previous_words[0])
1648 #define prev2_wd (previous_words[1])
1649 #define prev3_wd (previous_words[2])
1650 #define prev4_wd (previous_words[3])
1651 #define prev5_wd (previous_words[4])
1652 #define prev6_wd (previous_words[5])
1653 #define prev7_wd (previous_words[6])
1654 #define prev8_wd (previous_words[7])
1655 #define prev9_wd (previous_words[8])
1658 #define TailMatches(...) \
1659 TailMatchesImpl(false, previous_words_count, previous_words, \
1660 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1663 #define TailMatchesCS(...) \
1664 TailMatchesImpl(true, previous_words_count, previous_words, \
1665 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1668 #define Matches(...) \
1669 MatchesImpl(false, previous_words_count, previous_words, \
1670 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1673 #define MatchesCS(...) \
1674 MatchesImpl(true, previous_words_count, previous_words, \
1675 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1678 #define HeadMatches(...) \
1679 HeadMatchesImpl(false, previous_words_count, previous_words, \
1680 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1683 #define HeadMatchesCS(...) \
1684 HeadMatchesImpl(true, previous_words_count, previous_words, \
1685 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1688 static const char *
const sql_commands[] = {
1689 "ABORT",
"ALTER",
"ANALYZE",
"BEGIN",
"CALL",
"CHECKPOINT",
"CLOSE",
"CLUSTER",
1690 "COMMENT",
"COMMIT",
"COPY",
"CREATE",
"DEALLOCATE",
"DECLARE",
1691 "DELETE FROM",
"DISCARD",
"DO",
"DROP",
"END",
"EXECUTE",
"EXPLAIN",
1692 "FETCH",
"GRANT",
"IMPORT FOREIGN SCHEMA",
"INSERT INTO",
"LISTEN",
"LOAD",
"LOCK",
1693 "MERGE INTO",
"MOVE",
"NOTIFY",
"PREPARE",
1694 "REASSIGN",
"REFRESH MATERIALIZED VIEW",
"REINDEX",
"RELEASE",
1695 "RESET",
"REVOKE",
"ROLLBACK",
1696 "SAVEPOINT",
"SECURITY LABEL",
"SELECT",
"SET",
"SHOW",
"START",
1697 "TABLE",
"TRUNCATE",
"UNLISTEN",
"UPDATE",
"VACUUM",
"VALUES",
"WITH",
1702 static const char *
const backslash_commands[] = {
1705 "\\connect",
"\\conninfo",
"\\C",
"\\cd",
"\\copy",
1706 "\\copyright",
"\\crosstabview",
1707 "\\d",
"\\da",
"\\dA",
"\\dAc",
"\\dAf",
"\\dAo",
"\\dAp",
1708 "\\db",
"\\dc",
"\\dconfig",
"\\dC",
"\\dd",
"\\ddp",
"\\dD",
1709 "\\des",
"\\det",
"\\deu",
"\\dew",
"\\dE",
"\\df",
1710 "\\dF",
"\\dFd",
"\\dFp",
"\\dFt",
"\\dg",
"\\di",
"\\dl",
"\\dL",
1711 "\\dm",
"\\dn",
"\\do",
"\\dO",
"\\dp",
"\\dP",
"\\dPi",
"\\dPt",
1712 "\\drds",
"\\dRs",
"\\dRp",
"\\ds",
1713 "\\dt",
"\\dT",
"\\dv",
"\\du",
"\\dx",
"\\dX",
"\\dy",
1714 "\\echo",
"\\edit",
"\\ef",
"\\elif",
"\\else",
"\\encoding",
1715 "\\endif",
"\\errverbose",
"\\ev",
1717 "\\g",
"\\gdesc",
"\\getenv",
"\\gexec",
"\\gset",
"\\gx",
1719 "\\if",
"\\include",
"\\include_relative",
"\\ir",
1720 "\\list",
"\\lo_import",
"\\lo_export",
"\\lo_list",
"\\lo_unlink",
1722 "\\password",
"\\print",
"\\prompt",
"\\pset",
1723 "\\qecho",
"\\quit",
1725 "\\s",
"\\set",
"\\setenv",
"\\sf",
"\\sv",
1726 "\\t",
"\\T",
"\\timing",
1729 "\\warn",
"\\watch",
"\\write",
1740 char *text_copy =
pnstrdup(rl_line_buffer + start, end - start);
1744 completion_last_char = (end > start) ?
text[end - start - 1] :
'\0';
1747 rl_completion_append_character =
' ';
1750 completion_charp = NULL;
1751 completion_charpp = NULL;
1752 completion_vquery = NULL;
1753 completion_squery = NULL;
1754 completion_ref_object = NULL;
1755 completion_ref_schema = NULL;
1762 previous_words = get_previous_words(start,
1764 &previous_words_count);
1767 if (
text[0] ==
'\\')
1768 COMPLETE_WITH_LIST_CS(backslash_commands);
1771 else if (
text[0] ==
':' &&
text[1] !=
':')
1773 if (
text[1] ==
'\'')
1774 matches = complete_from_variables(
text,
":'",
"'",
true);
1775 else if (
text[1] ==
'"')
1776 matches = complete_from_variables(
text,
":\"",
"\"",
true);
1778 matches = complete_from_variables(
text,
":",
"",
true);
1782 else if (previous_words_count == 0)
1783 COMPLETE_WITH_LIST(sql_commands);
1787 else if (TailMatches(
"CREATE"))
1788 matches = rl_completion_matches(
text, create_command_generator);
1791 else if (TailMatches(
"CREATE",
"OR",
"REPLACE"))
1792 COMPLETE_WITH(
"FUNCTION",
"PROCEDURE",
"LANGUAGE",
"RULE",
"VIEW",
1793 "AGGREGATE",
"TRANSFORM",
"TRIGGER");
1797 else if (Matches(
"DROP"))
1798 matches = rl_completion_matches(
text, drop_command_generator);
1803 else if (Matches(
"ALTER",
"TABLE"))
1804 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
1805 "ALL IN TABLESPACE");
1808 else if (Matches(
"ALTER"))
1809 matches = rl_completion_matches(
text, alter_command_generator);
1811 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny))
1812 COMPLETE_WITH(
"SET TABLESPACE",
"OWNED BY");
1814 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny,
"OWNED",
"BY"))
1815 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
1817 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny,
"OWNED",
"BY", MatchAny))
1818 COMPLETE_WITH(
"SET TABLESPACE");
1820 else if (Matches(
"ALTER",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny))
1823 else if (Matches(
"ALTER",
"AGGREGATE", MatchAny, MatchAny))
1825 if (ends_with(prev_wd,
')'))
1826 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
1828 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
1831 else if (Matches(
"ALTER",
"FUNCTION", MatchAny, MatchAny))
1833 if (ends_with(prev_wd,
')'))
1834 COMPLETE_WITH(Alter_function_options);
1836 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
1839 else if (Matches(
"ALTER",
"PROCEDURE", MatchAny, MatchAny))
1841 if (ends_with(prev_wd,
')'))
1842 COMPLETE_WITH(Alter_procedure_options);
1844 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
1847 else if (Matches(
"ALTER",
"ROUTINE", MatchAny, MatchAny))
1849 if (ends_with(prev_wd,
')'))
1850 COMPLETE_WITH(Alter_routine_options);
1852 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
1855 else if (Matches(
"ALTER",
"FUNCTION|ROUTINE", MatchAny, MatchAny,
"PARALLEL"))
1856 COMPLETE_WITH(
"RESTRICTED",
"SAFE",
"UNSAFE");
1858 else if (Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"SECURITY") ||
1859 Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"EXTERNAL",
"SECURITY"))
1860 COMPLETE_WITH(
"DEFINER",
"INVOKER");
1862 else if (Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"RESET"))
1863 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
1866 else if (Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"SET"))
1867 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
1871 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny))
1872 COMPLETE_WITH(
"ADD",
"DROP",
"OWNER TO",
"RENAME TO",
"SET");
1874 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD"))
1875 COMPLETE_WITH(
"TABLES IN SCHEMA",
"TABLE");
1876 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE") ||
1877 (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE") &&
1878 ends_with(prev_wd,
',')))
1879 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
1888 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny) && TailMatches(
"WHERE"))
1890 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny) && TailMatches(
"WHERE",
"("))
1891 COMPLETE_WITH_ATTR(prev3_wd);
1892 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE") &&
1893 !TailMatches(
"WHERE",
"(*)"))
1894 COMPLETE_WITH(
",",
"WHERE (");
1895 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE"))
1898 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"DROP"))
1899 COMPLETE_WITH(
"TABLES IN SCHEMA",
"TABLE");
1901 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"SET"))
1902 COMPLETE_WITH(
"(",
"TABLES IN SCHEMA",
"TABLE");
1903 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|DROP|SET",
"TABLES",
"IN",
"SCHEMA"))
1904 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
1905 " AND nspname NOT LIKE E'pg\\\\_%%'",
1908 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny) && TailMatches(
"SET",
"("))
1909 COMPLETE_WITH(
"publish",
"publish_via_partition_root");
1911 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny))
1912 COMPLETE_WITH(
"CONNECTION",
"ENABLE",
"DISABLE",
"OWNER TO",
1913 "RENAME TO",
"REFRESH PUBLICATION",
"SET",
"SKIP (",
1914 "ADD PUBLICATION",
"DROP PUBLICATION");
1916 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) &&
1917 TailMatches(
"REFRESH",
"PUBLICATION"))
1918 COMPLETE_WITH(
"WITH (");
1920 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) &&
1921 TailMatches(
"REFRESH",
"PUBLICATION",
"WITH",
"("))
1922 COMPLETE_WITH(
"copy_data");
1924 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny,
"SET"))
1925 COMPLETE_WITH(
"(",
"PUBLICATION");
1927 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) && TailMatches(
"SET",
"("))
1928 COMPLETE_WITH(
"binary",
"disable_on_error",
"origin",
"slot_name",
1929 "streaming",
"synchronous_commit");
1931 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) && TailMatches(
"SKIP",
"("))
1932 COMPLETE_WITH(
"lsn");
1934 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) && TailMatches(
"SET",
"PUBLICATION"))
1939 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) &&
1940 TailMatches(
"ADD|DROP|SET",
"PUBLICATION", MatchAny))
1941 COMPLETE_WITH(
"WITH (");
1943 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) &&
1944 TailMatches(
"ADD|DROP|SET",
"PUBLICATION", MatchAny,
"WITH",
"("))
1945 COMPLETE_WITH(
"copy_data",
"refresh");
1948 else if (Matches(
"ALTER",
"SCHEMA", MatchAny))
1949 COMPLETE_WITH(
"OWNER TO",
"RENAME TO");
1952 else if (Matches(
"ALTER",
"COLLATION", MatchAny))
1953 COMPLETE_WITH(
"OWNER TO",
"REFRESH VERSION",
"RENAME TO",
"SET SCHEMA");
1956 else if (Matches(
"ALTER",
"CONVERSION", MatchAny))
1957 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
1960 else if (Matches(
"ALTER",
"DATABASE", MatchAny))
1961 COMPLETE_WITH(
"RESET",
"SET",
"OWNER TO",
"REFRESH COLLATION VERSION",
"RENAME TO",
1962 "IS_TEMPLATE",
"ALLOW_CONNECTIONS",
1963 "CONNECTION LIMIT");
1966 else if (Matches(
"ALTER",
"DATABASE", MatchAny,
"SET",
"TABLESPACE"))
1967 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
1970 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER"))
1971 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
1974 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER", MatchAny))
1975 COMPLETE_WITH(
"DISABLE",
"ENABLE",
"OWNER TO",
"RENAME TO");
1978 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER", MatchAny,
"ENABLE"))
1979 COMPLETE_WITH(
"REPLICA",
"ALWAYS");
1982 else if (Matches(
"ALTER",
"EXTENSION", MatchAny))
1983 COMPLETE_WITH(
"ADD",
"DROP",
"UPDATE",
"SET SCHEMA");
1986 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP"))
1987 COMPLETE_WITH(
"ACCESS METHOD",
"AGGREGATE",
"CAST",
"COLLATION",
1988 "CONVERSION",
"DOMAIN",
"EVENT TRIGGER",
"FOREIGN",
1989 "FUNCTION",
"MATERIALIZED VIEW",
"OPERATOR",
1990 "LANGUAGE",
"PROCEDURE",
"ROUTINE",
"SCHEMA",
1991 "SEQUENCE",
"SERVER",
"TABLE",
"TEXT SEARCH",
1992 "TRANSFORM FOR",
"TYPE",
"VIEW");
1995 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP",
"FOREIGN"))
1996 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
1999 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP",
"OPERATOR"))
2000 COMPLETE_WITH(
"CLASS",
"FAMILY");
2003 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP",
"TEXT",
"SEARCH"))
2004 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
2007 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"UPDATE"))
2008 COMPLETE_WITH(
"TO");
2011 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"UPDATE",
"TO"))
2013 set_completion_reference(prev3_wd);
2014 COMPLETE_WITH_QUERY(Query_for_list_of_available_extension_versions);
2018 else if (Matches(
"ALTER",
"FOREIGN"))
2019 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
2022 else if (Matches(
"ALTER",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
2023 COMPLETE_WITH(
"HANDLER",
"VALIDATOR",
"NO",
2024 "OPTIONS",
"OWNER TO",
"RENAME TO");
2025 else if (Matches(
"ALTER",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny,
"NO"))
2026 COMPLETE_WITH(
"HANDLER",
"VALIDATOR");
2029 else if (Matches(
"ALTER",
"FOREIGN",
"TABLE", MatchAny))
2030 COMPLETE_WITH(
"ADD",
"ALTER",
"DISABLE TRIGGER",
"DROP",
"ENABLE",
2031 "INHERIT",
"NO INHERIT",
"OPTIONS",
"OWNER TO",
2032 "RENAME",
"SET",
"VALIDATE CONSTRAINT");
2035 else if (Matches(
"ALTER",
"INDEX"))
2036 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
2037 "ALL IN TABLESPACE");
2039 else if (Matches(
"ALTER",
"INDEX", MatchAny))
2040 COMPLETE_WITH(
"ALTER COLUMN",
"OWNER TO",
"RENAME TO",
"SET",
2041 "RESET",
"ATTACH PARTITION",
2042 "DEPENDS ON EXTENSION",
"NO DEPENDS ON EXTENSION");
2043 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ATTACH"))
2044 COMPLETE_WITH(
"PARTITION");
2045 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ATTACH",
"PARTITION"))
2046 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
2048 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER"))
2049 COMPLETE_WITH(
"COLUMN");
2051 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN"))
2053 set_completion_reference(prev3_wd);
2054 COMPLETE_WITH_SCHEMA_QUERY_VERBATIM(Query_for_list_of_attribute_numbers);
2057 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny))
2058 COMPLETE_WITH(
"SET STATISTICS");
2060 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET"))
2061 COMPLETE_WITH(
"STATISTICS");
2063 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STATISTICS"))
2068 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"SET"))
2069 COMPLETE_WITH(
"(",
"TABLESPACE");
2071 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"RESET"))
2074 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"RESET",
"("))
2075 COMPLETE_WITH(
"fillfactor",
2076 "deduplicate_items",
2077 "fastupdate",
"gin_pending_list_limit",
2079 "pages_per_range",
"autosummarize"
2081 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"SET",
"("))
2082 COMPLETE_WITH(
"fillfactor =",
2083 "deduplicate_items =",
2084 "fastupdate =",
"gin_pending_list_limit =",
2086 "pages_per_range =",
"autosummarize ="
2088 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"NO",
"DEPENDS"))
2089 COMPLETE_WITH(
"ON EXTENSION");
2090 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"DEPENDS"))
2091 COMPLETE_WITH(
"ON EXTENSION");
2094 else if (Matches(
"ALTER",
"LANGUAGE", MatchAny))
2095 COMPLETE_WITH(
"OWNER TO",
"RENAME TO");
2098 else if (Matches(
"ALTER",
"LARGE",
"OBJECT", MatchAny))
2099 COMPLETE_WITH(
"OWNER TO");
2102 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW"))
2103 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_matviews,
2104 "ALL IN TABLESPACE");
2107 else if (Matches(
"ALTER",
"USER|ROLE", MatchAny) &&
2108 !TailMatches(
"USER",
"MAPPING"))
2109 COMPLETE_WITH(
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
"CREATEROLE",
2110 "ENCRYPTED PASSWORD",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2111 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2112 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2113 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2114 "VALID UNTIL",
"WITH");
2117 else if (Matches(
"ALTER",
"USER|ROLE", MatchAny,
"WITH"))
2119 COMPLETE_WITH(
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
"CREATEROLE",
2120 "ENCRYPTED PASSWORD",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2121 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2122 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2123 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2127 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
2128 COMPLETE_WITH(
"FOR ROLE",
"IN SCHEMA");
2130 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR"))
2131 COMPLETE_WITH(
"ROLE");
2133 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN"))
2134 COMPLETE_WITH(
"SCHEMA");
2136 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2138 COMPLETE_WITH(
"GRANT",
"REVOKE",
"IN SCHEMA");
2140 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2142 COMPLETE_WITH(
"GRANT",
"REVOKE",
"FOR ROLE");
2144 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2146 COMPLETE_WITH(
"ROLE");
2149 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2150 MatchAny,
"IN",
"SCHEMA", MatchAny) ||
2151 Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2152 MatchAny,
"FOR",
"ROLE|USER", MatchAny))
2153 COMPLETE_WITH(
"GRANT",
"REVOKE");
2155 else if (Matches(
"ALTER",
"DOMAIN", MatchAny))
2156 COMPLETE_WITH(
"ADD",
"DROP",
"OWNER TO",
"RENAME",
"SET",
2157 "VALIDATE CONSTRAINT");
2159 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"DROP"))
2160 COMPLETE_WITH(
"CONSTRAINT",
"DEFAULT",
"NOT NULL");
2162 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"DROP|RENAME|VALIDATE",
"CONSTRAINT"))
2164 set_completion_reference(prev3_wd);
2165 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_type);
2168 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"RENAME"))
2169 COMPLETE_WITH(
"CONSTRAINT",
"TO");
2171 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"RENAME",
"CONSTRAINT", MatchAny))
2172 COMPLETE_WITH(
"TO");
2175 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"SET"))
2176 COMPLETE_WITH(
"DEFAULT",
"NOT NULL",
"SCHEMA");
2178 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny))
2179 COMPLETE_WITH(
"AS",
"INCREMENT",
"MINVALUE",
"MAXVALUE",
"RESTART",
2180 "START",
"NO",
"CACHE",
"CYCLE",
"SET",
"OWNED BY",
2181 "OWNER TO",
"RENAME TO");
2183 else if (TailMatches(
"ALTER",
"SEQUENCE", MatchAny,
"AS"))
2184 COMPLETE_WITH_CS(
"smallint",
"integer",
"bigint");
2186 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny,
"NO"))
2187 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
2189 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny,
"SET"))
2190 COMPLETE_WITH(
"SCHEMA",
"LOGGED",
"UNLOGGED");
2192 else if (Matches(
"ALTER",
"SERVER", MatchAny))
2193 COMPLETE_WITH(
"VERSION",
"OPTIONS",
"OWNER TO",
"RENAME TO");
2195 else if (Matches(
"ALTER",
"SERVER", MatchAny,
"VERSION", MatchAny))
2196 COMPLETE_WITH(
"OPTIONS");
2198 else if (Matches(
"ALTER",
"SYSTEM"))
2199 COMPLETE_WITH(
"SET",
"RESET");
2200 else if (Matches(
"ALTER",
"SYSTEM",
"SET|RESET"))
2201 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_alter_system_set_vars,
2203 else if (Matches(
"ALTER",
"SYSTEM",
"SET", MatchAny))
2204 COMPLETE_WITH(
"TO");
2206 else if (Matches(
"ALTER",
"VIEW", MatchAny))
2207 COMPLETE_WITH(
"ALTER COLUMN",
"OWNER TO",
"RENAME",
2210 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME"))
2211 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"TO");
2212 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2213 COMPLETE_WITH_ATTR(prev3_wd);
2215 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER", MatchAny) ||
2216 Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER",
"COLUMN", MatchAny))
2217 COMPLETE_WITH(
"SET DEFAULT",
"DROP DEFAULT");
2219 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME", MatchAnyExcept(
"TO")))
2220 COMPLETE_WITH(
"TO");
2222 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME",
"COLUMN", MatchAnyExcept(
"TO")))
2223 COMPLETE_WITH(
"TO");
2226 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny))
2227 COMPLETE_WITH(
"ALTER COLUMN",
"CLUSTER ON",
"DEPENDS ON EXTENSION",
2228 "NO DEPENDS ON EXTENSION",
"OWNER TO",
"RENAME",
2231 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME"))
2232 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"TO");
2233 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2234 COMPLETE_WITH_ATTR(prev3_wd);
2236 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME", MatchAnyExcept(
"TO")))
2237 COMPLETE_WITH(
"TO");
2239 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME",
"COLUMN", MatchAnyExcept(
"TO")))
2240 COMPLETE_WITH(
"TO");
2242 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"SET"))
2243 COMPLETE_WITH(
"(",
"ACCESS METHOD",
"SCHEMA",
"TABLESPACE",
"WITHOUT CLUSTER");
2245 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"SET",
"ACCESS",
"METHOD"))
2246 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
2249 else if (Matches(
"ALTER",
"POLICY"))
2250 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
2252 else if (Matches(
"ALTER",
"POLICY", MatchAny))
2253 COMPLETE_WITH(
"ON");
2255 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON"))
2257 set_completion_reference(prev2_wd);
2258 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
2261 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny))
2262 COMPLETE_WITH(
"RENAME TO",
"TO",
"USING (",
"WITH CHECK (");
2264 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"TO"))
2265 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
2266 Keywords_for_list_of_grant_roles);
2268 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"USING"))
2271 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"WITH",
"CHECK"))
2275 else if (Matches(
"ALTER",
"RULE", MatchAny))
2276 COMPLETE_WITH(
"ON");
2279 else if (Matches(
"ALTER",
"RULE", MatchAny,
"ON"))
2281 set_completion_reference(prev2_wd);
2282 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
2286 else if (Matches(
"ALTER",
"RULE", MatchAny,
"ON", MatchAny))
2287 COMPLETE_WITH(
"RENAME TO");
2290 else if (Matches(
"ALTER",
"STATISTICS", MatchAny))
2291 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA",
"SET STATISTICS");
2293 else if (Matches(
"ALTER",
"STATISTICS", MatchAny,
"SET"))
2294 COMPLETE_WITH(
"SCHEMA",
"STATISTICS");
2297 else if (Matches(
"ALTER",
"TRIGGER", MatchAny))
2298 COMPLETE_WITH(
"ON");
2300 else if (Matches(
"ALTER",
"TRIGGER", MatchAny,
"ON"))
2302 set_completion_reference(prev2_wd);
2303 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
2307 else if (Matches(
"ALTER",
"TRIGGER", MatchAny,
"ON", MatchAny))
2308 COMPLETE_WITH(
"RENAME TO",
"DEPENDS ON EXTENSION",
2309 "NO DEPENDS ON EXTENSION");
2314 else if (Matches(
"ALTER",
"TABLE", MatchAny))
2315 COMPLETE_WITH(
"ADD",
"ALTER",
"CLUSTER ON",
"DISABLE",
"DROP",
2316 "ENABLE",
"INHERIT",
"NO",
"RENAME",
"RESET",
2317 "OWNER TO",
"SET",
"VALIDATE CONSTRAINT",
2318 "REPLICA IDENTITY",
"ATTACH PARTITION",
2319 "DETACH PARTITION",
"FORCE ROW LEVEL SECURITY",
2322 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD"))
2325 COMPLETE_WITH(
"COLUMN",
"CONSTRAINT",
"CHECK",
"UNIQUE",
"PRIMARY KEY",
2326 "EXCLUDE",
"FOREIGN KEY");
2329 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"COLUMN", MatchAny) ||
2330 (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD", MatchAny) &&
2331 !Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"COLUMN|CONSTRAINT|CHECK|UNIQUE|PRIMARY|EXCLUDE|FOREIGN")))
2332 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
2334 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny))
2335 COMPLETE_WITH(
"CHECK",
"UNIQUE",
"PRIMARY KEY",
"EXCLUDE",
"FOREIGN KEY");
2337 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"PRIMARY",
"KEY") ||
2338 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"UNIQUE") ||
2339 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
"PRIMARY",
"KEY") ||
2340 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
"UNIQUE"))
2341 COMPLETE_WITH(
"(",
"USING INDEX");
2343 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"PRIMARY",
"KEY",
"USING",
"INDEX"))
2345 set_completion_reference(prev6_wd);
2346 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2349 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"UNIQUE",
"USING",
"INDEX"))
2351 set_completion_reference(prev5_wd);
2352 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2355 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
2356 "PRIMARY",
"KEY",
"USING",
"INDEX"))
2358 set_completion_reference(prev8_wd);
2359 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2362 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
2363 "UNIQUE",
"USING",
"INDEX"))
2365 set_completion_reference(prev7_wd);
2366 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2369 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE"))
2370 COMPLETE_WITH(
"ALWAYS",
"REPLICA",
"ROW LEVEL SECURITY",
"RULE",
2372 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"REPLICA|ALWAYS"))
2373 COMPLETE_WITH(
"RULE",
"TRIGGER");
2374 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"RULE"))
2376 set_completion_reference(prev3_wd);
2377 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2379 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE", MatchAny,
"RULE"))
2381 set_completion_reference(prev4_wd);
2382 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2384 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"TRIGGER"))
2386 set_completion_reference(prev3_wd);
2387 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2389 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE", MatchAny,
"TRIGGER"))
2391 set_completion_reference(prev4_wd);
2392 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2395 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"INHERIT"))
2396 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2398 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"NO"))
2399 COMPLETE_WITH(
"FORCE ROW LEVEL SECURITY",
"INHERIT");
2401 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"NO",
"INHERIT"))
2402 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2404 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE"))
2405 COMPLETE_WITH(
"ROW LEVEL SECURITY",
"RULE",
"TRIGGER");
2406 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE",
"RULE"))
2408 set_completion_reference(prev3_wd);
2409 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2411 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE",
"TRIGGER"))
2413 set_completion_reference(prev3_wd);
2414 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2418 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER"))
2419 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"CONSTRAINT");
2422 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME"))
2423 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"CONSTRAINT",
"TO");
2424 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2425 COMPLETE_WITH_ATTR(prev3_wd);
2428 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME", MatchAnyExcept(
"CONSTRAINT|TO")))
2429 COMPLETE_WITH(
"TO");
2432 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME",
"COLUMN|CONSTRAINT", MatchAnyExcept(
"TO")))
2433 COMPLETE_WITH(
"TO");
2436 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DROP"))
2437 COMPLETE_WITH(
"COLUMN",
"CONSTRAINT");
2439 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DROP",
"COLUMN"))
2440 COMPLETE_WITH_ATTR(prev3_wd);
2442 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER|DROP|RENAME",
"CONSTRAINT"))
2444 set_completion_reference(prev3_wd);
2445 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_table);
2448 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"VALIDATE",
"CONSTRAINT"))
2450 set_completion_reference(prev3_wd);
2451 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_table_not_validated);
2454 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny) ||
2455 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny))
2456 COMPLETE_WITH(
"TYPE",
"SET",
"RESET",
"RESTART",
"ADD",
"DROP");
2458 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD") ||
2459 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD"))
2460 COMPLETE_WITH(
"GENERATED");
2462 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD",
"GENERATED") ||
2463 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD",
"GENERATED"))
2464 COMPLETE_WITH(
"ALWAYS",
"BY DEFAULT");
2466 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD",
"GENERATED",
"ALWAYS") ||
2467 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD",
"GENERATED",
"ALWAYS") ||
2468 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD",
"GENERATED",
"BY",
"DEFAULT") ||
2469 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD",
"GENERATED",
"BY",
"DEFAULT"))
2470 COMPLETE_WITH(
"AS IDENTITY");
2472 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET") ||
2473 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET"))
2474 COMPLETE_WITH(
"(",
"COMPRESSION",
"DEFAULT",
"GENERATED",
"NOT NULL",
"STATISTICS",
"STORAGE",
2476 "INCREMENT",
"MINVALUE",
"MAXVALUE",
"START",
"NO",
"CACHE",
"CYCLE");
2478 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"(") ||
2479 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"("))
2480 COMPLETE_WITH(
"n_distinct",
"n_distinct_inherited");
2482 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"COMPRESSION") ||
2483 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"COMPRESSION"))
2484 COMPLETE_WITH(
"DEFAULT",
"PGLZ",
"LZ4");
2486 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"GENERATED") ||
2487 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"GENERATED"))
2488 COMPLETE_WITH(
"ALWAYS",
"BY DEFAULT");
2490 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"NO") ||
2491 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"NO"))
2492 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
2494 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STORAGE") ||
2495 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"STORAGE"))
2496 COMPLETE_WITH(
"DEFAULT",
"PLAIN",
"EXTERNAL",
"EXTENDED",
"MAIN");
2498 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STATISTICS") ||
2499 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"STATISTICS"))
2504 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"DROP") ||
2505 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"DROP"))
2506 COMPLETE_WITH(
"DEFAULT",
"EXPRESSION",
"IDENTITY",
"NOT NULL");
2507 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"CLUSTER"))
2508 COMPLETE_WITH(
"ON");
2509 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"CLUSTER",
"ON"))
2511 set_completion_reference(prev3_wd);
2512 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
2515 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET"))
2516 COMPLETE_WITH(
"(",
"ACCESS METHOD",
"LOGGED",
"SCHEMA",
2517 "TABLESPACE",
"UNLOGGED",
"WITH",
"WITHOUT");
2523 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"ACCESS",
"METHOD"))
2524 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
2530 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"TABLESPACE"))
2531 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
2533 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"WITHOUT"))
2534 COMPLETE_WITH(
"CLUSTER",
"OIDS");
2536 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RESET"))
2539 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET|RESET",
"("))
2540 COMPLETE_WITH_LIST(table_storage_parameters);
2541 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY",
"USING",
"INDEX"))
2543 set_completion_reference(prev5_wd);
2544 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
2546 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY",
"USING"))
2547 COMPLETE_WITH(
"INDEX");
2548 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY"))
2549 COMPLETE_WITH(
"FULL",
"NOTHING",
"DEFAULT",
"USING");
2550 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA"))
2551 COMPLETE_WITH(
"IDENTITY");
2557 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ATTACH",
"PARTITION"))
2558 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2560 else if (TailMatches(
"ATTACH",
"PARTITION", MatchAny))
2561 COMPLETE_WITH(
"FOR VALUES",
"DEFAULT");
2562 else if (TailMatches(
"FOR",
"VALUES"))
2563 COMPLETE_WITH(
"FROM (",
"IN (",
"WITH (");
2569 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DETACH",
"PARTITION"))
2571 set_completion_reference(prev3_wd);
2572 COMPLETE_WITH_SCHEMA_QUERY(Query_for_partition_of_table);
2574 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DETACH",
"PARTITION", MatchAny))
2575 COMPLETE_WITH(
"CONCURRENTLY",
"FINALIZE");
2578 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"OF"))
2579 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_composite_datatypes);
2582 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny))
2583 COMPLETE_WITH(
"RENAME TO",
"OWNER TO",
"SET",
"RESET");
2585 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny,
"SET|RESET"))
2588 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny,
"SET|RESET",
"("))
2589 COMPLETE_WITH(
"seq_page_cost",
"random_page_cost",
2590 "effective_io_concurrency",
"maintenance_io_concurrency");
2593 else if (Matches(
"ALTER",
"TEXT",
"SEARCH"))
2594 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
2595 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"TEMPLATE|PARSER", MatchAny))
2596 COMPLETE_WITH(
"RENAME TO",
"SET SCHEMA");
2597 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"DICTIONARY", MatchAny))
2598 COMPLETE_WITH(
"(",
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
2599 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"CONFIGURATION", MatchAny))
2600 COMPLETE_WITH(
"ADD MAPPING FOR",
"ALTER MAPPING",
2602 "OWNER TO",
"RENAME TO",
"SET SCHEMA");
2605 else if (Matches(
"ALTER",
"TYPE", MatchAny))
2606 COMPLETE_WITH(
"ADD ATTRIBUTE",
"ADD VALUE",
"ALTER ATTRIBUTE",
2608 "OWNER TO",
"RENAME",
"SET SCHEMA",
"SET (");
2610 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ADD"))
2611 COMPLETE_WITH(
"ATTRIBUTE",
"VALUE");
2613 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME"))
2614 COMPLETE_WITH(
"ATTRIBUTE",
"TO",
"VALUE");
2616 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME",
"ATTRIBUTE|VALUE", MatchAny))
2617 COMPLETE_WITH(
"TO");
2623 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ALTER|DROP|RENAME",
"ATTRIBUTE"))
2624 COMPLETE_WITH_ATTR(prev3_wd);
2626 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ALTER",
"ATTRIBUTE", MatchAny))
2627 COMPLETE_WITH(
"TYPE");
2629 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME",
"VALUE"))
2630 COMPLETE_WITH_ENUM_VALUE(prev3_wd);
2632 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"SET"))
2633 COMPLETE_WITH(
"(",
"SCHEMA");
2635 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"SET",
"("))
2636 COMPLETE_WITH(
"ANALYZE",
"RECEIVE",
"SEND",
"STORAGE",
"SUBSCRIPT",
2637 "TYPMOD_IN",
"TYPMOD_OUT");
2640 else if (Matches(
"ALTER",
"GROUP", MatchAny))
2641 COMPLETE_WITH(
"ADD USER",
"DROP USER",
"RENAME TO");
2643 else if (Matches(
"ALTER",
"GROUP", MatchAny,
"ADD|DROP"))
2644 COMPLETE_WITH(
"USER");
2646 else if (Matches(
"ALTER",
"GROUP", MatchAny,
"ADD|DROP",
"USER"))
2647 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
2653 else if (Matches(
"ANALYZE"))
2654 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_analyzables,
2656 else if (HeadMatches(
"ANALYZE",
"(*") &&
2657 !HeadMatches(
"ANALYZE",
"(*)"))
2664 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
2665 COMPLETE_WITH(
"VERBOSE",
"SKIP_LOCKED");
2666 else if (TailMatches(
"VERBOSE|SKIP_LOCKED"))
2667 COMPLETE_WITH(
"ON",
"OFF");
2669 else if (HeadMatches(
"ANALYZE") && TailMatches(
"("))
2671 COMPLETE_WITH_ATTR(prev2_wd);
2672 else if (HeadMatches(
"ANALYZE"))
2673 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_analyzables);
2676 else if (Matches(
"BEGIN"))
2677 COMPLETE_WITH(
"WORK",
"TRANSACTION",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
2679 else if (Matches(
"END|ABORT"))
2680 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION");
2682 else if (Matches(
"COMMIT"))
2683 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION",
"PREPARED");
2685 else if (Matches(
"RELEASE"))
2686 COMPLETE_WITH(
"SAVEPOINT");
2688 else if (Matches(
"ROLLBACK"))
2689 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION",
"TO SAVEPOINT",
"PREPARED");
2690 else if (Matches(
"ABORT|END|COMMIT|ROLLBACK",
"AND"))
2691 COMPLETE_WITH(
"CHAIN");
2693 else if (Matches(
"CALL"))
2694 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_procedures);
2695 else if (Matches(
"CALL", MatchAny))
2698 else if (Matches(
"CLOSE"))
2699 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
2702 else if (Matches(
"CLUSTER"))
2703 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_clusterables,
2705 else if (Matches(
"CLUSTER",
"VERBOSE") ||
2706 Matches(
"CLUSTER",
"(*)"))
2707 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_clusterables);
2709 else if (Matches(
"CLUSTER", MatchAnyExcept(
"VERBOSE|ON|(|(*)")))
2710 COMPLETE_WITH(
"USING");
2712 else if (Matches(
"CLUSTER",
"VERBOSE|(*)", MatchAny))
2713 COMPLETE_WITH(
"USING");
2715 else if (Matches(
"CLUSTER", MatchAny,
"USING") ||
2716 Matches(
"CLUSTER",
"VERBOSE|(*)", MatchAny,
"USING"))
2718 set_completion_reference(prev2_wd);
2719 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
2721 else if (HeadMatches(
"CLUSTER",
"(*") &&
2722 !HeadMatches(
"CLUSTER",
"(*)"))
2729 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
2730 COMPLETE_WITH(
"VERBOSE");
2734 else if (Matches(
"COMMENT"))
2735 COMPLETE_WITH(
"ON");
2736 else if (Matches(
"COMMENT",
"ON"))
2737 COMPLETE_WITH(
"ACCESS METHOD",
"AGGREGATE",
"CAST",
"COLLATION",
2738 "COLUMN",
"CONSTRAINT",
"CONVERSION",
"DATABASE",
2739 "DOMAIN",
"EXTENSION",
"EVENT TRIGGER",
2740 "FOREIGN DATA WRAPPER",
"FOREIGN TABLE",
2741 "FUNCTION",
"INDEX",
"LANGUAGE",
"LARGE OBJECT",
2742 "MATERIALIZED VIEW",
"OPERATOR",
"POLICY",
2743 "PROCEDURE",
"PROCEDURAL LANGUAGE",
"PUBLICATION",
"ROLE",
2744 "ROUTINE",
"RULE",
"SCHEMA",
"SEQUENCE",
"SERVER",
2745 "STATISTICS",
"SUBSCRIPTION",
"TABLE",
2746 "TABLESPACE",
"TEXT SEARCH",
"TRANSFORM FOR",
2747 "TRIGGER",
"TYPE",
"VIEW");
2748 else if (Matches(
"COMMENT",
"ON",
"ACCESS",
"METHOD"))
2749 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
2750 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT"))
2751 COMPLETE_WITH_QUERY(Query_for_all_table_constraints);
2752 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny))
2753 COMPLETE_WITH(
"ON");
2754 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny,
"ON"))
2756 set_completion_reference(prev2_wd);
2757 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables_for_constraint,
2760 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny,
"ON",
"DOMAIN"))
2761 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
2762 else if (Matches(
"COMMENT",
"ON",
"EVENT",
"TRIGGER"))
2763 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
2764 else if (Matches(
"COMMENT",
"ON",
"FOREIGN"))
2765 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
2766 else if (Matches(
"COMMENT",
"ON",
"FOREIGN",
"TABLE"))
2767 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
2768 else if (Matches(
"COMMENT",
"ON",
"MATERIALIZED",
"VIEW"))
2769 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
2770 else if (Matches(
"COMMENT",
"ON",
"POLICY"))
2771 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
2772 else if (Matches(
"COMMENT",
"ON",
"POLICY", MatchAny))
2773 COMPLETE_WITH(
"ON");
2774 else if (Matches(
"COMMENT",
"ON",
"POLICY", MatchAny,
"ON"))
2776 set_completion_reference(prev2_wd);
2777 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
2779 else if (Matches(
"COMMENT",
"ON",
"PROCEDURAL",
"LANGUAGE"))
2780 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
2781 else if (Matches(
"COMMENT",
"ON",
"RULE", MatchAny))
2782 COMPLETE_WITH(
"ON");
2783 else if (Matches(
"COMMENT",
"ON",
"RULE", MatchAny,
"ON"))
2785 set_completion_reference(prev2_wd);
2786 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
2788 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH"))
2789 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
2790 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"CONFIGURATION"))
2791 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_configurations);
2792 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"DICTIONARY"))
2793 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_dictionaries);
2794 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"PARSER"))
2795 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_parsers);
2796 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"TEMPLATE"))
2797 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_templates);
2798 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR"))
2799 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
2800 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR", MatchAny))
2801 COMPLETE_WITH(
"LANGUAGE");
2802 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
2804 set_completion_reference(prev2_wd);
2805 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
2807 else if (Matches(
"COMMENT",
"ON",
"TRIGGER", MatchAny))
2808 COMPLETE_WITH(
"ON");
2809 else if (Matches(
"COMMENT",
"ON",
"TRIGGER", MatchAny,
"ON"))
2811 set_completion_reference(prev2_wd);
2812 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
2814 else if (Matches(
"COMMENT",
"ON", MatchAny, MatchAnyExcept(
"IS")) ||
2815 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAnyExcept(
"IS")) ||
2816 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAny, MatchAnyExcept(
"IS")) ||
2817 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAny, MatchAny, MatchAnyExcept(
"IS")))
2818 COMPLETE_WITH(
"IS");
2826 else if (Matches(
"COPY|\\copy"))
2827 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
"(");
2829 else if (Matches(
"COPY|\\copy",
"("))
2830 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES",
"INSERT INTO",
"UPDATE",
"DELETE FROM",
"WITH");
2832 else if (Matches(
"COPY|\\copy", MatchAny))
2833 COMPLETE_WITH(
"FROM",
"TO");
2835 else if (Matches(
"COPY", MatchAny,
"FROM|TO"))
2837 completion_charp =
"";
2838 completion_force_quote =
true;
2839 matches = rl_completion_matches(
text, complete_from_files);
2841 else if (Matches(
"\\copy", MatchAny,
"FROM|TO"))
2843 completion_charp =
"";
2844 completion_force_quote =
false;
2845 matches = rl_completion_matches(
text, complete_from_files);
2849 else if (Matches(
"COPY|\\copy", MatchAny,
"TO", MatchAny))
2850 COMPLETE_WITH(
"WITH (");
2853 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM", MatchAny))
2854 COMPLETE_WITH(
"WITH (",
"WHERE");
2857 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO", MatchAny,
"WITH",
"("))
2858 COMPLETE_WITH(
"FORMAT",
"FREEZE",
"DELIMITER",
"NULL",
2859 "HEADER",
"QUOTE",
"ESCAPE",
"FORCE_QUOTE",
2860 "FORCE_NOT_NULL",
"FORCE_NULL",
"ENCODING");
2863 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO", MatchAny,
"WITH",
"(",
"FORMAT"))
2864 COMPLETE_WITH(
"binary",
"csv",
"text");
2867 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM", MatchAny,
"WITH", MatchAny))
2868 COMPLETE_WITH(
"WHERE");
2872 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny))
2873 COMPLETE_WITH(
"TYPE");
2875 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny,
"TYPE"))
2876 COMPLETE_WITH(
"INDEX",
"TABLE");
2878 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny,
"TYPE", MatchAny))
2879 COMPLETE_WITH(
"HANDLER");
2882 else if (Matches(
"CREATE",
"COLLATION", MatchAny))
2883 COMPLETE_WITH(
"(",
"FROM");
2884 else if (Matches(
"CREATE",
"COLLATION", MatchAny,
"FROM"))
2885 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_collations);
2886 else if (HeadMatches(
"CREATE",
"COLLATION", MatchAny,
"(*"))
2888 if (TailMatches(
"(|*,"))
2889 COMPLETE_WITH(
"LOCALE =",
"LC_COLLATE =",
"LC_CTYPE =",
2890 "PROVIDER =",
"DETERMINISTIC =");
2891 else if (TailMatches(
"PROVIDER",
"="))
2892 COMPLETE_WITH(
"libc",
"icu");
2893 else if (TailMatches(
"DETERMINISTIC",
"="))
2894 COMPLETE_WITH(
"true",
"false");
2898 else if (Matches(
"CREATE",
"DATABASE", MatchAny))
2899 COMPLETE_WITH(
"OWNER",
"TEMPLATE",
"ENCODING",
"TABLESPACE",
2900 "IS_TEMPLATE",
"STRATEGY",
2901 "ALLOW_CONNECTIONS",
"CONNECTION LIMIT",
2902 "LC_COLLATE",
"LC_CTYPE",
"LOCALE",
"OID",
2903 "LOCALE_PROVIDER",
"ICU_LOCALE");
2905 else if (Matches(
"CREATE",
"DATABASE", MatchAny,
"TEMPLATE"))
2906 COMPLETE_WITH_QUERY(Query_for_list_of_template_databases);
2907 else if (Matches(
"CREATE",
"DATABASE", MatchAny,
"STRATEGY"))
2908 COMPLETE_WITH(
"WAL_LOG",
"FILE_COPY");
2911 else if (Matches(
"CREATE",
"DOMAIN", MatchAny))
2912 COMPLETE_WITH(
"AS");
2913 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"AS"))
2914 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
2915 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"AS", MatchAny))
2916 COMPLETE_WITH(
"COLLATE",
"DEFAULT",
"CONSTRAINT",
2917 "NOT NULL",
"NULL",
"CHECK (");
2918 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"COLLATE"))
2919 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_collations);
2923 else if (Matches(
"CREATE",
"EXTENSION"))
2924 COMPLETE_WITH_QUERY(Query_for_list_of_available_extensions);
2926 else if (Matches(
"CREATE",
"EXTENSION", MatchAny))
2927 COMPLETE_WITH(
"WITH SCHEMA",
"CASCADE",
"VERSION");
2929 else if (Matches(
"CREATE",
"EXTENSION", MatchAny,
"VERSION"))
2931 set_completion_reference(prev2_wd);
2932 COMPLETE_WITH_QUERY(Query_for_list_of_available_extension_versions);
2936 else if (Matches(
"CREATE",
"FOREIGN"))
2937 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
2940 else if (Matches(
"CREATE",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
2941 COMPLETE_WITH(
"HANDLER",
"VALIDATOR",
"OPTIONS");
2944 else if (Matches(
"CREATE",
"FOREIGN",
"TABLE", MatchAny))
2945 COMPLETE_WITH(
"(",
"PARTITION OF");
2949 else if (TailMatches(
"CREATE",
"UNIQUE"))
2950 COMPLETE_WITH(
"INDEX");
2956 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX"))
2957 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
2958 "ON",
"CONCURRENTLY");
2964 else if (TailMatches(
"INDEX|CONCURRENTLY", MatchAny,
"ON") ||
2965 TailMatches(
"INDEX|CONCURRENTLY",
"ON"))
2966 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexables);
2972 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX",
"CONCURRENTLY"))
2973 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
2976 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX", MatchAny) ||
2977 TailMatches(
"CREATE|UNIQUE",
"INDEX",
"CONCURRENTLY", MatchAny))
2978 COMPLETE_WITH(
"ON");
2984 else if (TailMatches(
"INDEX", MatchAny,
"ON", MatchAny) ||
2985 TailMatches(
"INDEX|CONCURRENTLY",
"ON", MatchAny))
2986 COMPLETE_WITH(
"(",
"USING");
2987 else if (TailMatches(
"INDEX", MatchAny,
"ON", MatchAny,
"(") ||
2988 TailMatches(
"INDEX|CONCURRENTLY",
"ON", MatchAny,
"("))
2989 COMPLETE_WITH_ATTR(prev2_wd);
2991 else if (TailMatches(
"ON", MatchAny,
"USING", MatchAny,
"("))
2992 COMPLETE_WITH_ATTR(prev4_wd);
2994 else if (TailMatches(
"INDEX", MatchAny, MatchAny,
"ON", MatchAny,
"USING") ||
2995 TailMatches(
"INDEX", MatchAny,
"ON", MatchAny,
"USING") ||
2996 TailMatches(
"INDEX",
"ON", MatchAny,
"USING"))
2997 COMPLETE_WITH_QUERY(Query_for_list_of_index_access_methods);
2998 else if (TailMatches(
"ON", MatchAny,
"USING", MatchAny) &&
2999 !TailMatches(
"POLICY", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny) &&
3000 !TailMatches(
"FOR", MatchAny, MatchAny, MatchAny))
3004 else if (Matches(
"CREATE",
"OR"))
3005 COMPLETE_WITH(
"REPLACE");
3009 else if (Matches(
"CREATE",
"POLICY", MatchAny))
3010 COMPLETE_WITH(
"ON");
3012 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON"))
3013 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3015 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny))
3016 COMPLETE_WITH(
"AS",
"FOR",
"TO",
"USING (",
"WITH CHECK (");
3018 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS"))
3019 COMPLETE_WITH(
"PERMISSIVE",
"RESTRICTIVE");
3025 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny))
3026 COMPLETE_WITH(
"FOR",
"TO",
"USING",
"WITH CHECK");
3028 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR"))
3029 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
3031 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"INSERT"))
3032 COMPLETE_WITH(
"TO",
"WITH CHECK (");
3034 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"SELECT|DELETE"))
3035 COMPLETE_WITH(
"TO",
"USING (");
3037 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"ALL|UPDATE"))
3038 COMPLETE_WITH(
"TO",
"USING (",
"WITH CHECK (");
3040 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"TO"))
3041 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3042 Keywords_for_list_of_grant_roles);
3044 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"USING"))
3051 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR"))
3052 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
3058 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"INSERT"))
3059 COMPLETE_WITH(
"TO",
"WITH CHECK (");
3065 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"SELECT|DELETE"))
3066 COMPLETE_WITH(
"TO",
"USING (");
3072 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"ALL|UPDATE"))
3073 COMPLETE_WITH(
"TO",
"USING (",
"WITH CHECK (");
3079 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"TO"))
3080 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3081 Keywords_for_list_of_grant_roles);
3087 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"USING"))
3092 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny))
3093 COMPLETE_WITH(
"FOR TABLE",
"FOR ALL TABLES",
"FOR TABLES IN SCHEMA",
"WITH (");
3094 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR"))
3095 COMPLETE_WITH(
"TABLE",
"ALL TABLES",
"TABLES IN SCHEMA");
3096 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"ALL"))
3097 COMPLETE_WITH(
"TABLES");
3098 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"ALL",
"TABLES"))
3099 COMPLETE_WITH(
"WITH (");
3100 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLES"))
3101 COMPLETE_WITH(
"IN SCHEMA");
3102 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLE", MatchAny) && !ends_with(prev_wd,
','))
3103 COMPLETE_WITH(
"WHERE (",
"WITH (");
3105 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLE"))
3106 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3112 else if (HeadMatches(
"CREATE",
"PUBLICATION", MatchAny) && TailMatches(
"WHERE"))
3114 else if (HeadMatches(
"CREATE",
"PUBLICATION", MatchAny) && TailMatches(
"WHERE",
"("))
3115 COMPLETE_WITH_ATTR(prev3_wd);
3116 else if (HeadMatches(
"CREATE",
"PUBLICATION", MatchAny) && TailMatches(
"WHERE",
"(*)"))
3117 COMPLETE_WITH(
" WITH (");
3122 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLES",
"IN",
"SCHEMA"))
3123 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
3124 " AND nspname NOT LIKE E'pg\\\\_%%'",
3126 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLES",
"IN",
"SCHEMA", MatchAny) && (!ends_with(prev_wd,
',')))
3127 COMPLETE_WITH(
"WITH (");
3129 else if (HeadMatches(
"CREATE",
"PUBLICATION") && TailMatches(
"WITH",
"("))
3130 COMPLETE_WITH(
"publish",
"publish_via_partition_root");
3134 else if (Matches(
"CREATE",
"RULE", MatchAny) ||
3135 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny))
3136 COMPLETE_WITH(
"AS ON");
3138 else if (Matches(
"CREATE",
"RULE", MatchAny,
"AS") ||
3139 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny,
"AS"))
3140 COMPLETE_WITH(
"ON");
3146 else if (Matches(
"CREATE",
"RULE", MatchAny,
"AS",
"ON") ||
3147 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny,
"AS",
"ON"))
3148 COMPLETE_WITH(
"SELECT",
"UPDATE",
"INSERT",
"DELETE");
3150 else if (TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE"))
3151 COMPLETE_WITH(
"TO");
3153 else if (TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE",
"TO"))
3154 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3157 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny) ||
3158 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny))
3159 COMPLETE_WITH(
"AS",
"INCREMENT BY",
"MINVALUE",
"MAXVALUE",
"NO",
3160 "CACHE",
"CYCLE",
"OWNED BY",
"START WITH");
3161 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny,
"AS") ||
3162 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny,
"AS"))
3163 COMPLETE_WITH_CS(
"smallint",
"integer",
"bigint");
3164 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny,
"NO") ||
3165 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny,
"NO"))
3166 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
3169 else if (Matches(
"CREATE",
"SERVER", MatchAny))
3170 COMPLETE_WITH(
"TYPE",
"VERSION",
"FOREIGN DATA WRAPPER");
3173 else if (Matches(
"CREATE",
"STATISTICS", MatchAny))
3174 COMPLETE_WITH(
"(",
"ON");
3175 else if (Matches(
"CREATE",
"STATISTICS", MatchAny,
"("))
3176 COMPLETE_WITH(
"ndistinct",
"dependencies",
"mcv");
3177 else if (Matches(
"CREATE",
"STATISTICS", MatchAny,
"(*)"))
3178 COMPLETE_WITH(
"ON");
3179 else if (HeadMatches(
"CREATE",
"STATISTICS", MatchAny) &&
3180 TailMatches(
"FROM"))
3181 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3185 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY"))
3186 COMPLETE_WITH(
"SEQUENCE",
"TABLE",
"VIEW");
3188 else if (TailMatches(
"CREATE",
"UNLOGGED"))
3189 COMPLETE_WITH(
"TABLE",
"MATERIALIZED VIEW");
3191 else if (TailMatches(
"PARTITION",
"BY"))
3192 COMPLETE_WITH(
"RANGE (",
"LIST (",
"HASH (");
3194 else if (TailMatches(
"PARTITION",
"OF"))
3195 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_tables);
3197 else if (TailMatches(
"PARTITION",
"OF", MatchAny))
3198 COMPLETE_WITH(
"FOR VALUES",
"DEFAULT");
3200 else if (TailMatches(
"CREATE",
"TABLE", MatchAny) ||
3201 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny))
3202 COMPLETE_WITH(
"(",
"OF",
"PARTITION OF");
3204 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"OF") ||
3205 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"OF"))
3206 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_composite_datatypes);
3208 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)") ||
3209 TailMatches(
"CREATE",
"UNLOGGED",
"TABLE", MatchAny,
"(*)"))
3210 COMPLETE_WITH(
"INHERITS (",
"PARTITION BY",
"USING",
"TABLESPACE",
"WITH (");
3211 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"TABLE", MatchAny,
"(*)"))
3212 COMPLETE_WITH(
"INHERITS (",
"ON COMMIT",
"PARTITION BY",
3213 "TABLESPACE",
"WITH (");
3215 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)",
"USING") ||
3216 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"(*)",
"USING"))
3217 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
3219 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)",
"WITH",
"(") ||
3220 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"(*)",
"WITH",
"("))
3221 COMPLETE_WITH_LIST(table_storage_parameters);
3223 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"TABLE", MatchAny,
"(*)",
"ON",
"COMMIT"))
3224 COMPLETE_WITH(
"DELETE ROWS",
"DROP",
"PRESERVE ROWS");
3227 else if (Matches(
"CREATE",
"TABLESPACE", MatchAny))
3228 COMPLETE_WITH(
"OWNER",
"LOCATION");
3230 else if (Matches(
"CREATE",
"TABLESPACE", MatchAny,
"OWNER", MatchAny))
3231 COMPLETE_WITH(
"LOCATION");
3234 else if (Matches(
"CREATE",
"TEXT",
"SEARCH"))
3235 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3236 else if (Matches(
"CREATE",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE", MatchAny))
3240 else if (Matches(
"CREATE",
"TRANSFORM") ||
3241 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM"))
3242 COMPLETE_WITH(
"FOR");
3243 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR") ||
3244 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR"))
3245 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3246 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR", MatchAny) ||
3247 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR", MatchAny))
3248 COMPLETE_WITH(
"LANGUAGE");
3249 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE") ||
3250 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
3252 set_completion_reference(prev2_wd);
3253 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3257 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny))
3258 COMPLETE_WITH(
"CONNECTION");
3259 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny,
"CONNECTION", MatchAny))
3260 COMPLETE_WITH(
"PUBLICATION");
3261 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny,
"CONNECTION",
3262 MatchAny,
"PUBLICATION"))
3266 else if (HeadMatches(
"CREATE",
"SUBSCRIPTION") && TailMatches(
"PUBLICATION", MatchAny))
3267 COMPLETE_WITH(
"WITH (");
3269 else if (HeadMatches(
"CREATE",
"SUBSCRIPTION") && TailMatches(
"WITH",
"("))
3270 COMPLETE_WITH(
"binary",
"connect",
"copy_data",
"create_slot",
3271 "disable_on_error",
"enabled",
"origin",
"slot_name",
3272 "streaming",
"synchronous_commit",
"two_phase");
3280 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny) ||
3281 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny))
3282 COMPLETE_WITH(
"BEFORE",
"AFTER",
"INSTEAD OF");
3288 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER") ||
3289 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER"))
3290 COMPLETE_WITH(
"INSERT",
"DELETE",
"UPDATE",
"TRUNCATE");
3292 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF") ||
3293 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF"))
3294 COMPLETE_WITH(
"INSERT",
"DELETE",
"UPDATE");
3300 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny) ||
3301 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny) ||
3302 TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny) ||
3303 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny))
3304 COMPLETE_WITH(
"ON",
"OR");
3311 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny,
"ON") ||
3312 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny,
"ON"))
3313 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3319 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny,
"ON") ||
3320 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny,
"ON"))
3321 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
3322 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3323 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3324 TailMatches(
"ON", MatchAny))
3327 COMPLETE_WITH(
"NOT DEFERRABLE",
"DEFERRABLE",
"INITIALLY",
3328 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3330 COMPLETE_WITH(
"NOT DEFERRABLE",
"DEFERRABLE",
"INITIALLY",
3331 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3333 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3334 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3335 (TailMatches(
"DEFERRABLE") || TailMatches(
"INITIALLY",
"IMMEDIATE|DEFERRED")))
3338 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3340 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3342 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3343 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3344 TailMatches(
"REFERENCING"))
3345 COMPLETE_WITH(
"OLD TABLE",
"NEW TABLE");
3346 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3347 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3348 TailMatches(
"OLD|NEW",
"TABLE"))
3349 COMPLETE_WITH(
"AS");
3350 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3351 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3352 (TailMatches(
"REFERENCING",
"OLD",
"TABLE",
"AS", MatchAny) ||
3353 TailMatches(
"REFERENCING",
"OLD",
"TABLE", MatchAny)))
3356 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3358 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3360 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3361 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3362 (TailMatches(
"REFERENCING",
"NEW",
"TABLE",
"AS", MatchAny) ||
3363 TailMatches(
"REFERENCING",
"NEW",
"TABLE", MatchAny)))
3366 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3368 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3370 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3371 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3372 (TailMatches(
"REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3373 TailMatches(
"REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3374 TailMatches(
"REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE", MatchAny) ||
3375 TailMatches(
"REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE", MatchAny)))
3378 COMPLETE_WITH(
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3380 COMPLETE_WITH(
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3382 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3383 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3385 COMPLETE_WITH(
"EACH",
"ROW",
"STATEMENT");
3386 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3387 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3388 TailMatches(
"FOR",
"EACH"))
3389 COMPLETE_WITH(
"ROW",
"STATEMENT");
3390 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3391 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3392 (TailMatches(
"FOR",
"EACH",
"ROW|STATEMENT") ||
3393 TailMatches(
"FOR",
"ROW|STATEMENT")))
3396 COMPLETE_WITH(
"WHEN (",
"EXECUTE FUNCTION");
3398 COMPLETE_WITH(
"WHEN (",
"EXECUTE PROCEDURE");
3400 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3401 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3402 TailMatches(
"WHEN",
"(*)"))
3405 COMPLETE_WITH(
"EXECUTE FUNCTION");
3407 COMPLETE_WITH(
"EXECUTE PROCEDURE");
3414 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3415 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3416 TailMatches(
"EXECUTE"))
3419 COMPLETE_WITH(
"FUNCTION");
3421 COMPLETE_WITH(
"PROCEDURE");
3423 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3424 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3425 TailMatches(
"EXECUTE",
"FUNCTION|PROCEDURE"))
3426 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
3429 else if (Matches(
"CREATE",
"ROLE|GROUP|USER", MatchAny) &&
3430 !TailMatches(
"USER",
"MAPPING"))
3431 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
3432 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
3433 "LOGIN",
"NOBYPASSRLS",
3434 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
3435 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
3436 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
3437 "VALID UNTIL",
"WITH");
3440 else if (Matches(
"CREATE",
"ROLE|GROUP|USER", MatchAny,
"WITH"))
3442 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
3443 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
3444 "LOGIN",
"NOBYPASSRLS",
3445 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
3446 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
3447 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
3451 else if (Matches(
"CREATE",
"ROLE|USER|GROUP", MatchAny,
"IN"))
3452 COMPLETE_WITH(
"GROUP",
"ROLE");
3455 else if (Matches(
"CREATE",
"TYPE", MatchAny))
3456 COMPLETE_WITH(
"(",
"AS");
3457 else if (Matches(
"CREATE",
"TYPE", MatchAny,
"AS"))
3458 COMPLETE_WITH(
"ENUM",
"RANGE",
"(");
3459 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"AS",
"("))
3461 if (TailMatches(
"(|*,", MatchAny))
3462 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3463 else if (TailMatches(
"(|*,", MatchAny, MatchAnyExcept(
"*)")))
3464 COMPLETE_WITH(
"COLLATE",
",",
")");
3466 else if (Matches(
"CREATE",
"TYPE", MatchAny,
"AS",
"ENUM|RANGE"))
3468 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"("))
3470 if (TailMatches(
"(|*,"))
3471 COMPLETE_WITH(
"INPUT",
"OUTPUT",
"RECEIVE",
"SEND",
3472 "TYPMOD_IN",
"TYPMOD_OUT",
"ANALYZE",
"SUBSCRIPT",
3473 "INTERNALLENGTH",
"PASSEDBYVALUE",
"ALIGNMENT",
3474 "STORAGE",
"LIKE",
"CATEGORY",
"PREFERRED",
3475 "DEFAULT",
"ELEMENT",
"DELIMITER",
3477 else if (TailMatches(
"(*|*,", MatchAnyExcept(
"*=")))
3479 else if (TailMatches(
"=", MatchAnyExcept(
"*)")))
3480 COMPLETE_WITH(
",",
")");
3482 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"AS",
"RANGE",
"("))
3484 if (TailMatches(
"(|*,"))
3485 COMPLETE_WITH(
"SUBTYPE",
"SUBTYPE_OPCLASS",
"COLLATION",
3486 "CANONICAL",
"SUBTYPE_DIFF",
3487 "MULTIRANGE_TYPE_NAME");
3488 else if (TailMatches(
"(*|*,", MatchAnyExcept(
"*=")))
3490 else if (TailMatches(
"=", MatchAnyExcept(
"*)")))
3491 COMPLETE_WITH(
",",
")");
3496 else if (TailMatches(
"CREATE",
"VIEW", MatchAny) ||
3497 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny))
3498 COMPLETE_WITH(
"AS");
3500 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"AS") ||
3501 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"AS"))
3502 COMPLETE_WITH(
"SELECT");
3505 else if (Matches(
"CREATE",
"MATERIALIZED"))
3506 COMPLETE_WITH(
"VIEW");
3508 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny))
3509 COMPLETE_WITH(
"AS");
3511 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny,
"AS"))
3512 COMPLETE_WITH(
"SELECT");
3515 else if (Matches(
"CREATE",
"EVENT"))
3516 COMPLETE_WITH(
"TRIGGER");
3518 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny))
3519 COMPLETE_WITH(
"ON");
3521 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny,
"ON"))
3522 COMPLETE_WITH(
"ddl_command_start",
"ddl_command_end",
"sql_drop",
3530 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny,
"ON", MatchAny))
3533 COMPLETE_WITH(
"WHEN TAG IN (",
"EXECUTE FUNCTION");
3535 COMPLETE_WITH(
"WHEN TAG IN (",
"EXECUTE PROCEDURE");
3537 else if (HeadMatches(
"CREATE",
"EVENT",
"TRIGGER") &&
3538 TailMatches(
"WHEN|AND", MatchAny,
"IN",
"(*)"))
3541 COMPLETE_WITH(
"EXECUTE FUNCTION");
3543 COMPLETE_WITH(
"EXECUTE PROCEDURE");
3545 else if (HeadMatches(
"CREATE",
"EVENT",
"TRIGGER") &&
3546 TailMatches(
"EXECUTE",
"FUNCTION|PROCEDURE"))
3547 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
3550 else if (Matches(
"DEALLOCATE"))
3551 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_prepared_statements,
3560 else if (Matches(
"DECLARE", MatchAny))
3561 COMPLETE_WITH(
"BINARY",
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
3571 else if (HeadMatches(
"DECLARE") && TailMatches(
"BINARY"))
3572 COMPLETE_WITH(
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
"CURSOR");
3573 else if (HeadMatches(
"DECLARE") && TailMatches(
"ASENSITIVE|INSENSITIVE"))
3574 COMPLETE_WITH(
"SCROLL",
"NO SCROLL",
"CURSOR");
3575 else if (HeadMatches(
"DECLARE") && TailMatches(
"SCROLL"))
3576 COMPLETE_WITH(
"CURSOR");
3578 else if (HeadMatches(
"DECLARE") && TailMatches(
"NO"))
3579 COMPLETE_WITH(
"SCROLL");
3585 else if (HeadMatches(
"DECLARE") && TailMatches(
"CURSOR"))
3586 COMPLETE_WITH(
"WITH HOLD",
"WITHOUT HOLD",
"FOR");
3588 else if (HeadMatches(
"DECLARE") && TailMatches(
"CURSOR",
"WITH|WITHOUT"))
3589 COMPLETE_WITH(
"HOLD");
3591 else if (HeadMatches(
"DECLARE") && TailMatches(
"CURSOR",
"WITH|WITHOUT",
"HOLD"))
3592 COMPLETE_WITH(
"FOR");
3596 else if (Matches(
"DELETE"))
3597 COMPLETE_WITH(
"FROM");
3599 else if (TailMatches(
"DELETE",
"FROM"))
3600 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
3602 else if (TailMatches(
"DELETE",
"FROM", MatchAny))
3603 COMPLETE_WITH(
"USING",
"WHERE");
3607 else if (Matches(
"DISCARD"))
3608 COMPLETE_WITH(
"ALL",
"PLANS",
"SEQUENCES",
"TEMP");
3611 else if (Matches(
"DO"))
3612 COMPLETE_WITH(
"LANGUAGE");
3616 else if (Matches(
"DROP",
3617 "COLLATION|CONVERSION|DOMAIN|EXTENSION|LANGUAGE|PUBLICATION|SCHEMA|SEQUENCE|SERVER|SUBSCRIPTION|STATISTICS|TABLE|TYPE|VIEW",
3619 Matches(
"DROP",
"ACCESS",
"METHOD", MatchAny) ||
3620 (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny) &&
3621 ends_with(prev_wd,
')')) ||
3622 Matches(
"DROP",
"EVENT",
"TRIGGER", MatchAny) ||
3623 Matches(
"DROP",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny) ||
3624 Matches(
"DROP",
"FOREIGN",
"TABLE", MatchAny) ||
3625 Matches(
"DROP",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE", MatchAny))
3626 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3629 else if (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny))
3631 else if (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny,
"("))
3632 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
3633 else if (Matches(
"DROP",
"FOREIGN"))
3634 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
3635 else if (Matches(
"DROP",
"DATABASE", MatchAny))
3636 COMPLETE_WITH(
"WITH (");
3637 else if (HeadMatches(
"DROP",
"DATABASE") && (ends_with(prev_wd,
'(')))
3638 COMPLETE_WITH(
"FORCE");
3641 else if (Matches(
"DROP",
"INDEX"))
3642 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
3644 else if (Matches(
"DROP",
"INDEX",
"CONCURRENTLY"))
3645 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
3646 else if (Matches(
"DROP",
"INDEX", MatchAny))
3647 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3648 else if (Matches(
"DROP",
"INDEX",
"CONCURRENTLY", MatchAny))
3649 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3652 else if (Matches(
"DROP",
"MATERIALIZED"))
3653 COMPLETE_WITH(
"VIEW");
3654 else if (Matches(
"DROP",
"MATERIALIZED",
"VIEW"))
3655 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
3656 else if (Matches(
"DROP",
"MATERIALIZED",
"VIEW", MatchAny))
3657 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3660 else if (Matches(
"DROP",
"OWNED"))
3661 COMPLETE_WITH(
"BY");
3662 else if (Matches(
"DROP",
"OWNED",
"BY"))
3663 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
3664 else if (Matches(
"DROP",
"OWNED",
"BY", MatchAny))
3665 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3668 else if (Matches(
"DROP",
"TEXT",
"SEARCH"))
3669 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3672 else if (Matches(
"DROP",
"TRIGGER", MatchAny))
3673 COMPLETE_WITH(
"ON");
3674 else if (Matches(
"DROP",
"TRIGGER", MatchAny,
"ON"))
3676 set_completion_reference(prev2_wd);
3677 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
3679 else if (Matches(
"DROP",
"TRIGGER", MatchAny,
"ON", MatchAny))
3680 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3683 else if (Matches(
"DROP",
"ACCESS"))
3684 COMPLETE_WITH(
"METHOD");
3685 else if (Matches(
"DROP",
"ACCESS",
"METHOD"))
3686 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
3689 else if (Matches(
"DROP",
"EVENT"))
3690 COMPLETE_WITH(
"TRIGGER");
3691 else if (Matches(
"DROP",
"EVENT",
"TRIGGER"))
3692 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
3695 else if (Matches(
"DROP",
"POLICY"))
3696 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
3698 else if (Matches(
"DROP",
"POLICY", MatchAny))
3699 COMPLETE_WITH(
"ON");
3701 else if (Matches(
"DROP",
"POLICY", MatchAny,
"ON"))
3703 set_completion_reference(prev2_wd);
3704 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
3706 else if (Matches(
"DROP",
"POLICY", MatchAny,
"ON", MatchAny))
3707 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3710 else if (Matches(
"DROP",
"RULE", MatchAny))
3711 COMPLETE_WITH(
"ON");
3712 else if (Matches(
"DROP",
"RULE", MatchAny,
"ON"))
3714 set_completion_reference(prev2_wd);
3715 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
3717 else if (Matches(
"DROP",
"RULE", MatchAny,
"ON", MatchAny))
3718 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3721 else if (Matches(
"DROP",
"TRANSFORM"))
3722 COMPLETE_WITH(
"FOR");
3723 else if (Matches(
"DROP",
"TRANSFORM",
"FOR"))
3724 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3725 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny))
3726 COMPLETE_WITH(
"LANGUAGE");
3727 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
3729 set_completion_reference(prev2_wd);
3730 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3732 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE", MatchAny))
3733 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3736 else if (Matches(
"EXECUTE"))
3737 COMPLETE_WITH_QUERY(Query_for_list_of_prepared_statements);
3743 else if (Matches(
"EXPLAIN"))
3744 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
3745 "MERGE INTO",
"EXECUTE",
"ANALYZE",
"VERBOSE");
3746 else if (HeadMatches(
"EXPLAIN",
"(*") &&
3747 !HeadMatches(
"EXPLAIN",
"(*)"))
3754 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
3755 COMPLETE_WITH(
"ANALYZE",
"VERBOSE",
"COSTS",
"SETTINGS",
3756 "BUFFERS",
"WAL",
"TIMING",
"SUMMARY",
"FORMAT");
3757 else if (TailMatches(
"ANALYZE|VERBOSE|COSTS|SETTINGS|BUFFERS|WAL|TIMING|SUMMARY"))
3758 COMPLETE_WITH(
"ON",
"OFF");
3759 else if (TailMatches(
"FORMAT"))
3760 COMPLETE_WITH(
"TEXT",
"XML",
"JSON",
"YAML");
3762 else if (Matches(
"EXPLAIN",
"ANALYZE"))
3763 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
3764 "MERGE INTO",
"EXECUTE",
"VERBOSE");
3765 else if (Matches(
"EXPLAIN",
"(*)") ||
3766 Matches(
"EXPLAIN",
"VERBOSE") ||
3767 Matches(
"EXPLAIN",
"ANALYZE",
"VERBOSE"))
3768 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
3769 "MERGE INTO",
"EXECUTE");
3777 else if (Matches(
"FETCH|MOVE"))
3778 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
3795 else if (Matches(
"FETCH|MOVE",
"BACKWARD|FORWARD"))
3796 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
3806 else if (Matches(
"FETCH|MOVE",
"ABSOLUTE|BACKWARD|FORWARD|RELATIVE",
3807 MatchAnyExcept(
"FROM|IN")) ||
3808 Matches(
"FETCH|MOVE",
"ALL|NEXT|PRIOR|FIRST|LAST"))
3809 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
3813 else if (HeadMatches(
"FETCH|MOVE") &&
3814 TailMatches(
"FROM|IN"))
3815 COMPLETE_WITH_QUERY(Query_for_list_of_cursors);
3819 else if (TailMatches(
"FOREIGN",
"DATA",
"WRAPPER") &&
3820 !TailMatches(
"CREATE", MatchAny, MatchAny, MatchAny))
3821 COMPLETE_WITH_QUERY(Query_for_list_of_fdws);
3823 else if (TailMatches(
"FOREIGN",
"DATA",
"WRAPPER", MatchAny) &&
3824 HeadMatches(
"CREATE",
"SERVER"))
3825 COMPLETE_WITH(
"OPTIONS");
3828 else if (TailMatches(
"FOREIGN",
"TABLE") &&
3829 !TailMatches(
"CREATE", MatchAny, MatchAny))
3830 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
3833 else if (TailMatches(
"FOREIGN",
"SERVER"))
3834 COMPLETE_WITH_QUERY(Query_for_list_of_servers);
3841 else if (TailMatches(
"GRANT|REVOKE") ||
3842 TailMatches(
"REVOKE",
"ADMIN|GRANT|INHERIT|SET",
"OPTION",
"FOR"))
3848 if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
3849 COMPLETE_WITH(
"SELECT",
"INSERT",
"UPDATE",
3850 "DELETE",
"TRUNCATE",
"REFERENCES",
"TRIGGER",
3851 "CREATE",
"EXECUTE",
"USAGE",
"MAINTAIN",
"ALL");
3852 else if (TailMatches(
"GRANT"))
3853 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3854 Privilege_options_of_grant_and_revoke);
3855 else if (TailMatches(
"REVOKE"))
3856 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3857 Privilege_options_of_grant_and_revoke,
3860 "INHERIT OPTION FOR",
3862 else if (TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR"))
3863 COMPLETE_WITH(Privilege_options_of_grant_and_revoke);
3864 else if (TailMatches(
"REVOKE",
"ADMIN|INHERIT|SET",
"OPTION",
"FOR"))
3865 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
3868 else if (TailMatches(
"GRANT|REVOKE",
"ALTER") ||
3869 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER"))
3870 COMPLETE_WITH(
"SYSTEM");
3872 else if (TailMatches(
"REVOKE",
"SET"))
3873 COMPLETE_WITH(
"ON PARAMETER",
"OPTION FOR");
3874 else if (TailMatches(
"GRANT",
"SET") ||
3875 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"SET") ||
3876 TailMatches(
"GRANT|REVOKE",
"ALTER",
"SYSTEM") ||
3877 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER",
"SYSTEM"))
3878 COMPLETE_WITH(
"ON PARAMETER");
3880 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"PARAMETER") ||
3881 TailMatches(
"GRANT|REVOKE", MatchAny, MatchAny,
"ON",
"PARAMETER") ||
3882 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"PARAMETER") ||
3883 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny, MatchAny,
"ON",
"PARAMETER"))
3884 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_alter_system_set_vars);
3886 else if (TailMatches(
"GRANT", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
3887 TailMatches(
"GRANT", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny))
3888 COMPLETE_WITH(
"TO");
3890 else if (TailMatches(
"REVOKE", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
3891 TailMatches(
"REVOKE", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny) ||
3892 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
3893 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny))
3894 COMPLETE_WITH(
"FROM");
3900 else if (TailMatches(
"GRANT|REVOKE", MatchAny) ||
3901 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny))
3903 if (TailMatches(
"SELECT|INSERT|UPDATE|DELETE|TRUNCATE|REFERENCES|TRIGGER|CREATE|CONNECT|TEMPORARY|TEMP|EXECUTE|USAGE|ALL"))
3904 COMPLETE_WITH(
"ON");
3905 else if (TailMatches(
"GRANT", MatchAny))
3906 COMPLETE_WITH(
"TO");
3908 COMPLETE_WITH(
"FROM");
3918 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON") ||
3919 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON"))
3925 if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
3926 COMPLETE_WITH(
"TABLES",
"SEQUENCES",
"FUNCTIONS",
"PROCEDURES",
"ROUTINES",
"TYPES",
"SCHEMAS");
3928 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_grantables,
3929 "ALL FUNCTIONS IN SCHEMA",
3930 "ALL PROCEDURES IN SCHEMA",
3931 "ALL ROUTINES IN SCHEMA",
3932 "ALL SEQUENCES IN SCHEMA",
3933 "ALL TABLES IN SCHEMA",
3936 "FOREIGN DATA WRAPPER",
3950 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"ALL") ||
3951 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"ALL"))
3952 COMPLETE_WITH(
"FUNCTIONS IN SCHEMA",
3953 "PROCEDURES IN SCHEMA",
3954 "ROUTINES IN SCHEMA",
3955 "SEQUENCES IN SCHEMA",
3956 "TABLES IN SCHEMA");
3957 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"FOREIGN") ||
3958 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"FOREIGN"))
3959 COMPLETE_WITH(
"DATA WRAPPER",
"SERVER");
3967 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON", MatchAny) ||
3968 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON", MatchAny))
3970 if (TailMatches(
"DATABASE"))
3971 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
3972 else if (TailMatches(
"DOMAIN"))
3973 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
3974 else if (TailMatches(
"FUNCTION"))
3975 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
3976 else if (TailMatches(
"LANGUAGE"))
3977 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3978 else if (TailMatches(
"PROCEDURE"))
3979 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_procedures);
3980 else if (TailMatches(
"ROUTINE"))
3981 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
3982 else if (TailMatches(
"SCHEMA"))
3983 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
3984 else if (TailMatches(
"SEQUENCE"))
3985 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_sequences);
3986 else if (TailMatches(
"TABLE"))
3987 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_grantables);
3988 else if (TailMatches(
"TABLESPACE"))
3989 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
3990 else if (TailMatches(
"TYPE"))
3991 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3992 else if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny))
3993 COMPLETE_WITH(
"TO");
3995 COMPLETE_WITH(
"FROM");
4002 else if ((HeadMatches(
"GRANT") && TailMatches(
"TO")) ||
4003 (HeadMatches(
"REVOKE") && TailMatches(
"FROM")))
4004 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4005 Keywords_for_list_of_grant_roles);
4010 else if (HeadMatches(
"GRANT") && TailMatches(
"TO", MatchAny))
4011 COMPLETE_WITH(
"WITH ADMIN",
4014 "WITH GRANT OPTION",
4016 else if (HeadMatches(
"GRANT") && TailMatches(
"TO", MatchAny,
"WITH"))
4017 COMPLETE_WITH(
"ADMIN",
4021 else if (HeadMatches(
"GRANT") &&
4022 (TailMatches(
"TO", MatchAny,
"WITH",
"ADMIN|INHERIT|SET")))
4023 COMPLETE_WITH(
"OPTION",
"TRUE",
"FALSE");
4024 else if (HeadMatches(
"GRANT") && TailMatches(
"TO", MatchAny,
"WITH", MatchAny,
"OPTION"))
4025 COMPLETE_WITH(
"GRANTED BY");
4026 else if (HeadMatches(
"GRANT") && TailMatches(
"TO", MatchAny,
"WITH", MatchAny,
"OPTION",
"GRANTED",
"BY"))
4027 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4028 Keywords_for_list_of_grant_roles);
4030 else if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES") && TailMatches(
"TO|FROM"))
4031 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4032 Keywords_for_list_of_grant_roles);
4034 else if (HeadMatches(
"GRANT") && TailMatches(
"ON", MatchAny, MatchAny))
4035 COMPLETE_WITH(
"TO");
4036 else if (HeadMatches(
"REVOKE") && TailMatches(
"ON", MatchAny, MatchAny))
4037 COMPLETE_WITH(
"FROM");
4040 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"ALL", MatchAny,
"IN",
"SCHEMA", MatchAny) ||
4041 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"ALL", MatchAny,
"IN",
"SCHEMA", MatchAny))
4043 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4044 COMPLETE_WITH(
"TO");
4046 COMPLETE_WITH(
"FROM");
4050 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny) ||
4051 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
4053 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4054 COMPLETE_WITH(
"TO");
4056 COMPLETE_WITH(
"FROM");
4060 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"FOREIGN",
"SERVER", MatchAny) ||
4061 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"FOREIGN",
"SERVER", MatchAny))
4063 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4064 COMPLETE_WITH(
"TO");
4066 COMPLETE_WITH(
"FROM");
4070 else if (TailMatches(
"FROM", MatchAny,
"GROUP"))
4071 COMPLETE_WITH(
"BY");
4074 else if (Matches(
"IMPORT"))
4075 COMPLETE_WITH(
"FOREIGN SCHEMA");
4076 else if (Matches(
"IMPORT",
"FOREIGN"))
4077 COMPLETE_WITH(
"SCHEMA");
4078 else if (Matches(
"IMPORT",
"FOREIGN",
"SCHEMA", MatchAny))
4079 COMPLETE_WITH(
"EXCEPT (",
"FROM SERVER",
"LIMIT TO (");
4080 else if (TailMatches(
"LIMIT",
"TO",
"(*)") ||
4081 TailMatches(
"EXCEPT",
"(*)"))
4082 COMPLETE_WITH(
"FROM SERVER");
4083 else if (TailMatches(
"FROM",
"SERVER", MatchAny))
4084 COMPLETE_WITH(
"INTO");
4085 else if (TailMatches(
"FROM",
"SERVER", MatchAny,
"INTO"))
4086 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
4087 else if (TailMatches(
"FROM",
"SERVER", MatchAny,
"INTO", MatchAny))
4088 COMPLETE_WITH(
"OPTIONS (");
4092 else if (TailMatches(
"NOT",
"MATCHED",
"THEN",
"INSERT"))
4093 COMPLETE_WITH(
"VALUES",
"(");
4095 else if (TailMatches(
"INSERT"))
4096 COMPLETE_WITH(
"INTO");
4098 else if (TailMatches(
"INSERT",
"INTO"))
4099 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
4101 else if (TailMatches(
"INSERT",
"INTO", MatchAny,
"("))
4102 COMPLETE_WITH_ATTR(prev2_wd);
4108 else if (TailMatches(
"INSERT",
"INTO", MatchAny))
4109 COMPLETE_WITH(
"(",
"DEFAULT VALUES",
"SELECT",
"TABLE",
"VALUES",
"OVERRIDING");
4115 else if (TailMatches(
"INSERT",
"INTO", MatchAny, MatchAny) &&
4116 ends_with(prev_wd,
')'))
4117 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES",
"OVERRIDING");
4120 else if (TailMatches(
"OVERRIDING"))
4121 COMPLETE_WITH(
"SYSTEM VALUE",
"USER VALUE");
4124 else if (TailMatches(
"OVERRIDING", MatchAny,
"VALUE"))
4125 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES");
4128 else if (TailMatches(
"VALUES") && !TailMatches(
"DEFAULT",
"VALUES"))
4133 else if (Matches(
"LOCK"))
4134 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
4136 else if (Matches(
"LOCK",
"TABLE"))
4137 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
4139 else if (Matches(
"LOCK",
"TABLE",
"ONLY") || Matches(
"LOCK",
"ONLY"))
4140 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
4144 else if (Matches(
"LOCK", MatchAnyExcept(
"TABLE|ONLY")) ||
4145 Matches(
"LOCK",
"TABLE", MatchAnyExcept(
"ONLY")) ||
4146 Matches(
"LOCK",
"ONLY", MatchAny) ||
4147 Matches(
"LOCK",
"TABLE",
"ONLY", MatchAny))
4148 COMPLETE_WITH(
"IN",
"NOWAIT");
4151 else if (HeadMatches(
"LOCK") && TailMatches(
"IN"))
4152 COMPLETE_WITH(
"ACCESS SHARE MODE",
4153 "ROW SHARE MODE",
"ROW EXCLUSIVE MODE",
4154 "SHARE UPDATE EXCLUSIVE MODE",
"SHARE MODE",
4155 "SHARE ROW EXCLUSIVE MODE",
4156 "EXCLUSIVE MODE",
"ACCESS EXCLUSIVE MODE");
4162 else if (HeadMatches(
"LOCK") && TailMatches(
"IN",
"ACCESS|ROW"))
4163 COMPLETE_WITH(
"EXCLUSIVE MODE",
"SHARE MODE");
4166 else if (HeadMatches(
"LOCK") && TailMatches(
"IN",
"SHARE"))
4167 COMPLETE_WITH(
"MODE",
"ROW EXCLUSIVE MODE",
4168 "UPDATE EXCLUSIVE MODE");
4171 else if (HeadMatches(
"LOCK") && TailMatches(
"MODE"))
4172 COMPLETE_WITH(
"NOWAIT");
4175 else if (TailMatches(
"MERGE"))
4176 COMPLETE_WITH(
"INTO");
4177 else if (TailMatches(
"MERGE",
"INTO"))
4178 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_mergetargets);
4181 else if (TailMatches(
"MERGE",
"INTO", MatchAny))
4182 COMPLETE_WITH(
"USING",
"AS");
4183 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny) ||
4184 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAnyExcept(
"USING|AS")))
4185 COMPLETE_WITH(
"USING");
4191 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING") ||
4192 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING") ||
4193 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING"))
4194 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
4200 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING", MatchAny) ||
4201 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny) ||
4202 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING", MatchAny))
4203 COMPLETE_WITH(
"AS",
"ON");
4204 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING", MatchAny,
"AS", MatchAny) ||
4205 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny,
"AS", MatchAny) ||
4206 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING", MatchAny,
"AS", MatchAny) ||
4207 TailMatches(
"MERGE",
"INTO", MatchAny,
"USING", MatchAny, MatchAnyExcept(
"ON|AS")) ||
4208 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny, MatchAnyExcept(
"ON|AS")) ||
4209 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING", MatchAny, MatchAnyExcept(
"ON|AS")))
4210 COMPLETE_WITH(
"ON");
4213 else if (TailMatches(
"INTO", MatchAny,
"USING", MatchAny,
"ON"))
4214 COMPLETE_WITH_ATTR(prev4_wd);
4215 else if (TailMatches(
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny,
"AS", MatchAny,
"ON"))
4216 COMPLETE_WITH_ATTR(prev8_wd);
4217 else if (TailMatches(
"INTO", MatchAny, MatchAny,
"USING", MatchAny, MatchAny,
"ON"))
4218 COMPLETE_WITH_ATTR(prev6_wd);
4225 else if (TailMatches(
"USING", MatchAny,
"ON", MatchAny) ||
4226 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny) ||
4227 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny) ||
4228 TailMatches(
"USING", MatchAny,
"ON", MatchAny, MatchAnyExcept(
"WHEN"), MatchAnyExcept(
"WHEN")) ||
4229 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny, MatchAnyExcept(
"WHEN"), MatchAnyExcept(
"WHEN")) ||
4230 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny, MatchAnyExcept(
"WHEN"), MatchAnyExcept(
"WHEN")))
4231 COMPLETE_WITH(
"WHEN MATCHED",
"WHEN NOT MATCHED");
4232 else if (TailMatches(
"USING", MatchAny,
"ON", MatchAny,
"WHEN") ||
4233 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny,
"WHEN") ||
4234 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny,
"WHEN") ||
4235 TailMatches(
"USING", MatchAny,
"ON", MatchAny, MatchAny, MatchAny,
"WHEN") ||
4236 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny, MatchAny, MatchAny,
"WHEN") ||
4237 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny, MatchAny, MatchAny,
"WHEN"))
4238 COMPLETE_WITH(
"MATCHED",
"NOT MATCHED");
4241 else if (TailMatches(
"WHEN",
"MATCHED") ||
4242 TailMatches(
"WHEN",
"NOT",
"MATCHED"))
4243 COMPLETE_WITH(
"THEN",
"AND");
4246 else if (TailMatches(
"WHEN",
"MATCHED",
"THEN"))
4247 COMPLETE_WITH(
"UPDATE SET",
"DELETE",
"DO NOTHING");
4250 else if (TailMatches(
"WHEN",
"NOT",
"MATCHED",
"THEN"))
4251 COMPLETE_WITH(
"INSERT",
"DO NOTHING");
4254 else if (TailMatches(
"NOTIFY"))
4255 COMPLETE_WITH_QUERY(Query_for_list_of_channels);
4258 else if (TailMatches(
"OPTIONS"))
4262 else if (TailMatches(
"OWNER",
"TO"))
4263 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4269 else if (TailMatches(
"FROM", MatchAny,
"ORDER"))
4270 COMPLETE_WITH(
"BY");
4271 else if (TailMatches(
"FROM", MatchAny,
"ORDER",
"BY"))
4272 COMPLETE_WITH_ATTR(prev3_wd);
4275 else if (Matches(
"PREPARE", MatchAny,
"AS"))
4276 COMPLETE_WITH(
"SELECT",
"UPDATE",
"INSERT INTO",
"DELETE FROM");
4284 else if (Matches(
"REASSIGN"))
4285 COMPLETE_WITH(
"OWNED BY");
4286 else if (Matches(
"REASSIGN",
"OWNED"))
4287 COMPLETE_WITH(
"BY");
4288 else if (Matches(
"REASSIGN",
"OWNED",
"BY"))
4289 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4290 else if (Matches(
"REASSIGN",
"OWNED",
"BY", MatchAny))
4291 COMPLETE_WITH(
"TO");
4292 else if (Matches(
"REASSIGN",
"OWNED",
"BY", MatchAny,
"TO"))
4293 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4296 else if (Matches(
"REFRESH"))
4297 COMPLETE_WITH(
"MATERIALIZED VIEW");
4298 else if (Matches(
"REFRESH",
"MATERIALIZED"))
4299 COMPLETE_WITH(
"VIEW");
4300 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW"))
4301 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_matviews,
4303 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY"))
4304 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
4305 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny))
4306 COMPLETE_WITH(
"WITH");
4307 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny))
4308 COMPLETE_WITH(
"WITH");
4309 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny,
"WITH"))
4310 COMPLETE_WITH(
"NO DATA",
"DATA");
4311 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny,
"WITH"))
4312 COMPLETE_WITH(
"NO DATA",
"DATA");
4313 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny,
"WITH",
"NO"))
4314 COMPLETE_WITH(
"DATA");
4315 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny,
"WITH",
"NO"))
4316 COMPLETE_WITH(
"DATA");
4319 else if (Matches(
"REINDEX") ||
4320 Matches(
"REINDEX",
"(*)"))
4321 COMPLETE_WITH(
"TABLE",
"INDEX",
"SYSTEM",
"SCHEMA",
"DATABASE");
4322 else if (Matches(
"REINDEX",
"TABLE") ||
4323 Matches(
"REINDEX",
"(*)",
"TABLE"))
4324 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexables,
4326 else if (Matches(
"REINDEX",
"INDEX") ||
4327 Matches(
"REINDEX",
"(*)",
"INDEX"))
4328 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
4330 else if (Matches(
"REINDEX",
"SCHEMA") ||
4331 Matches(
"REINDEX",
"(*)",
"SCHEMA"))
4332 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas,
4334 else if (Matches(
"REINDEX",
"SYSTEM|DATABASE") ||
4335 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE"))
4336 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_databases,
4338 else if (Matches(
"REINDEX",
"TABLE",
"CONCURRENTLY") ||
4339 Matches(
"REINDEX",
"(*)",
"TABLE",
"CONCURRENTLY"))
4340 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexables);
4341 else if (Matches(
"REINDEX",
"INDEX",
"CONCURRENTLY") ||
4342 Matches(
"REINDEX",
"(*)",
"INDEX",
"CONCURRENTLY"))
4343 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
4344 else if (Matches(
"REINDEX",
"SCHEMA",
"CONCURRENTLY") ||
4345 Matches(
"REINDEX",
"(*)",
"SCHEMA",
"CONCURRENTLY"))
4346 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
4347 else if (Matches(
"REINDEX",
"SYSTEM|DATABASE",
"CONCURRENTLY") ||
4348 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE",
"CONCURRENTLY"))
4349 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
4350 else if (HeadMatches(
"REINDEX",
"(*") &&
4351 !HeadMatches(
"REINDEX",
"(*)"))
4358 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
4359 COMPLETE_WITH(
"CONCURRENTLY",
"TABLESPACE",
"VERBOSE");
4360 else if (TailMatches(
"TABLESPACE"))
4361 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
4365 else if (Matches(
"SECURITY"))
4366 COMPLETE_WITH(
"LABEL");
4367 else if (Matches(
"SECURITY",
"LABEL"))
4368 COMPLETE_WITH(
"ON",
"FOR");
4369 else if (Matches(
"SECURITY",
"LABEL",
"FOR", MatchAny))
4370 COMPLETE_WITH(
"ON");
4371 else if (Matches(
"SECURITY",
"LABEL",
"ON") ||
4372 Matches(
"SECURITY",
"LABEL",
"FOR", MatchAny,
"ON"))
4373 COMPLETE_WITH(
"TABLE",
"COLUMN",
"AGGREGATE",
"DATABASE",
"DOMAIN",
4374 "EVENT TRIGGER",
"FOREIGN TABLE",
"FUNCTION",
4375 "LARGE OBJECT",
"MATERIALIZED VIEW",
"LANGUAGE",
4376 "PUBLICATION",
"PROCEDURE",
"ROLE",
"ROUTINE",
"SCHEMA",
4377 "SEQUENCE",
"SUBSCRIPTION",
"TABLESPACE",
"TYPE",
"VIEW");
4378 else if (Matches(
"SECURITY",
"LABEL",
"ON", MatchAny, MatchAny))
4379 COMPLETE_WITH(
"IS");
4386 else if (TailMatches(
"SET|RESET") && !TailMatches(
"UPDATE", MatchAny,
"SET"))
4387 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
4394 else if (Matches(
"SHOW"))
4395 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_show_vars,
4396 "SESSION AUTHORIZATION",
4398 else if (Matches(
"SHOW",
"SESSION"))
4399 COMPLETE_WITH(
"AUTHORIZATION");
4401 else if (Matches(
"SET",
"TRANSACTION"))
4402 COMPLETE_WITH(
"SNAPSHOT",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
4403 else if (Matches(
"BEGIN|START",
"TRANSACTION") ||
4404 Matches(
"BEGIN",
"WORK") ||
4406 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION"))
4407 COMPLETE_WITH(
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
4408 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"NOT") ||
4409 Matches(
"BEGIN",
"NOT") ||
4410 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"NOT"))
4411 COMPLETE_WITH(
"DEFERRABLE");
4412 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION") ||
4413 Matches(
"BEGIN",
"ISOLATION") ||
4414 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION"))
4415 COMPLETE_WITH(
"LEVEL");
4416 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL") ||
4417 Matches(
"BEGIN",
"ISOLATION",
"LEVEL") ||
4418 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL"))
4419 COMPLETE_WITH(
"READ",
"REPEATABLE READ",
"SERIALIZABLE");
4420 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"READ") ||
4421 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"READ") ||
4422 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"READ"))
4423 COMPLETE_WITH(
"UNCOMMITTED",
"COMMITTED");
4424 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
4425 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
4426 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"REPEATABLE"))
4427 COMPLETE_WITH(
"READ");
4428 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"READ") ||
4429 Matches(
"BEGIN",
"READ") ||
4430 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"READ"))
4431 COMPLETE_WITH(
"ONLY",
"WRITE");
4433 else if (Matches(
"SET",
"CONSTRAINTS"))
4434 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_constraints_with_schema,
4437 else if (Matches(
"SET",
"CONSTRAINTS", MatchAny))
4438 COMPLETE_WITH(
"DEFERRED",
"IMMEDIATE");
4440 else if (Matches(
"SET",
"ROLE"))
4441 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4443 else if (Matches(
"SET",
"SESSION"))
4444 COMPLETE_WITH(
"AUTHORIZATION",
"CHARACTERISTICS AS TRANSACTION");
4446 else if (Matches(
"SET",
"SESSION",
"AUTHORIZATION"))
4447 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4450 else if (Matches(
"RESET",
"SESSION"))
4451 COMPLETE_WITH(
"AUTHORIZATION");
4453 else if (Matches(
"SET", MatchAny))
4454 COMPLETE_WITH(
"TO");
4460 else if (HeadMatches(
"ALTER",
"DATABASE|FUNCTION|PROCEDURE|ROLE|ROUTINE|USER") &&
4461 TailMatches(
"SET", MatchAny) &&
4462 !TailMatches(
"SCHEMA"))
4463 COMPLETE_WITH(
"FROM CURRENT",
"TO");
4469 else if (TailMatches(
"SET", MatchAny,
"TO|=") &&
4470 !TailMatches(
"UPDATE", MatchAny,
"SET", MatchAny,
"TO|="))
4473 if (TailMatches(
"DateStyle",
"TO|="))
4474 COMPLETE_WITH(
"ISO",
"SQL",
"Postgres",
"German",
4475 "YMD",
"DMY",
"MDY",
4476 "US",
"European",
"NonEuropean",
4478 else if (TailMatches(
"search_path",
"TO|="))
4481 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
4482 " AND nspname NOT LIKE E'pg\\\\_toast%%'"
4483 " AND nspname NOT LIKE E'pg\\\\_temp%%'",
4486 else if (TailMatches(
"TimeZone",
"TO|="))
4487 COMPLETE_WITH_TIMEZONE_NAME();
4491 char *guctype = get_guctype(prev2_wd);
4500 if (strcmp(guctype,
"enum") == 0)
4502 set_completion_reference_verbatim(prev2_wd);
4503 COMPLETE_WITH_QUERY_PLUS(Query_for_values_of_enum_GUC,
4506 else if (strcmp(guctype,
"bool") == 0)
4507 COMPLETE_WITH(
"on",
"off",
"true",
"false",
"yes",
"no",
4508 "1",
"0",
"DEFAULT");
4510 COMPLETE_WITH(
"DEFAULT");
4517 else if (HeadMatches(
"ALTER",
"DATABASE|ROLE|USER") &&
4518 TailMatches(
"SET", MatchAny,
"TO|=", MatchAny))
4519 COMPLETE_WITH(
"USER SET");
4522 else if (Matches(
"START"))
4523 COMPLETE_WITH(
"TRANSACTION");
4526 else if (Matches(
"TABLE"))
4527 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
4530 else if (TailMatches(
"TABLESAMPLE"))
4531 COMPLETE_WITH_QUERY(Query_for_list_of_tablesample_methods);
4532 else if (TailMatches(
"TABLESAMPLE", MatchAny))
4536 else if (Matches(
"TRUNCATE"))
4537 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_truncatables,
4539 else if (Matches(
"TRUNCATE",
"TABLE"))
4540 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_truncatables,
4542 else if (HeadMatches(
"TRUNCATE") && TailMatches(
"ONLY"))
4543 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_truncatables);
4544 else if (Matches(
"TRUNCATE", MatchAny) ||
4545 Matches(
"TRUNCATE",
"TABLE|ONLY", MatchAny) ||
4546 Matches(
"TRUNCATE",
"TABLE",
"ONLY", MatchAny))
4547 COMPLETE_WITH(
"RESTART IDENTITY",
"CONTINUE IDENTITY",
"CASCADE",
"RESTRICT");
4548 else if (HeadMatches(
"TRUNCATE") && TailMatches(
"IDENTITY"))
4549 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4552 else if (Matches(
"UNLISTEN"))
4553 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_channels,
"*");
4557 else if (TailMatches(
"UPDATE"))
4558 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
4560 else if (TailMatches(
"UPDATE", MatchAny))
4561 COMPLETE_WITH(
"SET");
4563 else if (TailMatches(
"UPDATE", MatchAny,
"SET"))
4564 COMPLETE_WITH_ATTR(prev2_wd);
4566 else if (TailMatches(
"UPDATE", MatchAny,
"SET", MatchAnyExcept(
"*=")))
4570 else if (Matches(
"ALTER|CREATE|DROP",
"USER",
"MAPPING"))
4571 COMPLETE_WITH(
"FOR");
4572 else if (Matches(
"CREATE",
"USER",
"MAPPING",
"FOR"))
4573 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4578 else if (Matches(
"ALTER|DROP",
"USER",
"MAPPING",
"FOR"))
4579 COMPLETE_WITH_QUERY(Query_for_list_of_user_mappings);
4580 else if (Matches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING",
"FOR", MatchAny))
4581 COMPLETE_WITH(
"SERVER");
4582 else if (Matches(
"CREATE|ALTER",
"USER",
"MAPPING",
"FOR", MatchAny,
"SERVER", MatchAny))
4583 COMPLETE_WITH(
"OPTIONS");
4589 else if (Matches(
"VACUUM"))
4590 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
4595 else if (Matches(
"VACUUM",
"FULL"))
4596 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
4600 else if (Matches(
"VACUUM",
"FREEZE") ||
4601 Matches(
"VACUUM",
"FULL",
"FREEZE"))
4602 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
4605 else if (Matches(
"VACUUM",
"VERBOSE") ||
4606 Matches(
"VACUUM",
"FULL|FREEZE",
"VERBOSE") ||
4607 Matches(
"VACUUM",
"FULL",
"FREEZE",
"VERBOSE"))
4608 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
4610 else if (HeadMatches(
"VACUUM",
"(*") &&
4611 !HeadMatches(
"VACUUM",
"(*)"))
4618 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
4619 COMPLETE_WITH(
"FULL",
"FREEZE",
"ANALYZE",
"VERBOSE",
4620 "DISABLE_PAGE_SKIPPING",
"SKIP_LOCKED",
4621 "INDEX_CLEANUP",
"PROCESS_TOAST",
4622 "TRUNCATE",
"PARALLEL",
"SKIP_DATABASE_STATS",
4623 "ONLY_DATABASE_STATS");
4624 else if (TailMatches(
"FULL|FREEZE|ANALYZE|VERBOSE|DISABLE_PAGE_SKIPPING|SKIP_LOCKED|PROCESS_TOAST|TRUNCATE|SKIP_DATABASE_STATS|ONLY_DATABASE_STATS"))
4625 COMPLETE_WITH(
"ON",
"OFF");
4626 else if (TailMatches(
"INDEX_CLEANUP"))
4627 COMPLETE_WITH(
"AUTO",
"ON",
"OFF");
4629 else if (HeadMatches(
"VACUUM") && TailMatches(
"("))
4631 COMPLETE_WITH_ATTR(prev2_wd);
4632 else if (HeadMatches(
"VACUUM"))
4633 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_vacuumables);
4641 else if (Matches(
"WITH"))
4642 COMPLETE_WITH(
"RECURSIVE");
4646 else if (TailMatches(MatchAny,
"WHERE"))
4647 COMPLETE_WITH_ATTR(prev2_wd);
4651 else if (TailMatches(
"FROM") && !Matches(
"COPY|\\copy", MatchAny,
"FROM"))
4652 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
4655 else if (TailMatches(
"JOIN"))
4656 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
4660 else if (TailMatchesCS(
"\\?"))
4661 COMPLETE_WITH_CS(
"commands",
"options",
"variables");
4662 else if (TailMatchesCS(
"\\connect|\\c"))
4665 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
4667 else if (TailMatchesCS(
"\\connect|\\c", MatchAny))
4670 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4672 else if (TailMatchesCS(
"\\da*"))
4673 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_aggregates);
4674 else if (TailMatchesCS(
"\\dAc*", MatchAny) ||
4675 TailMatchesCS(
"\\dAf*", MatchAny))
4676 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4677 else if (TailMatchesCS(
"\\dAo*", MatchAny) ||
4678 TailMatchesCS(
"\\dAp*", MatchAny))
4679 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_operator_families);
4680 else if (TailMatchesCS(
"\\dA*"))
4681 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
4682 else if (TailMatchesCS(
"\\db*"))
4683 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
4684 else if (TailMatchesCS(
"\\dconfig*"))
4685 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_show_vars);
4686 else if (TailMatchesCS(
"\\dD*"))
4687 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
4688 else if (TailMatchesCS(
"\\des*"))
4689 COMPLETE_WITH_QUERY(Query_for_list_of_servers);
4690 else if (TailMatchesCS(
"\\deu*"))
4691 COMPLETE_WITH_QUERY(Query_for_list_of_user_mappings);
4692 else if (TailMatchesCS(
"\\dew*"))
4693 COMPLETE_WITH_QUERY(Query_for_list_of_fdws);
4694 else if (TailMatchesCS(
"\\df*"))
4695 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
4696 else if (HeadMatchesCS(
"\\df*"))
4697 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4699 else if (TailMatchesCS(
"\\dFd*"))
4700 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_dictionaries);
4701 else if (TailMatchesCS(
"\\dFp*"))
4702 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_parsers);
4703 else if (TailMatchesCS(
"\\dFt*"))
4704 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_templates);
4706 else if (TailMatchesCS(
"\\dF*"))
4707 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_configurations);
4709 else if (TailMatchesCS(
"\\di*"))
4710 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
4711 else if (TailMatchesCS(
"\\dL*"))
4712 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
4713 else if (TailMatchesCS(
"\\dn*"))
4714 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
4716 else if (HeadMatchesCS(
"\\do*", MatchAny))
4717 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4718 else if (TailMatchesCS(
"\\dp") || TailMatchesCS(
"\\z"))
4719 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_grantables);
4720 else if (TailMatchesCS(
"\\dPi*"))
4721 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_indexes);
4722 else if (TailMatchesCS(
"\\dPt*"))
4723 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_tables);
4724 else if (TailMatchesCS(
"\\dP*"))
4725 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_relations);
4726 else if (TailMatchesCS(
"\\dRp*"))
4727 COMPLETE_WITH_VERSIONED_QUERY(Query_for_list_of_publications);
4728 else if (TailMatchesCS(
"\\dRs*"))
4729 COMPLETE_WITH_VERSIONED_QUERY(Query_for_list_of_subscriptions);
4730 else if (TailMatchesCS(
"\\ds*"))
4731 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_sequences);
4732 else if (TailMatchesCS(
"\\dt*"))
4733 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
4734 else if (TailMatchesCS(
"\\dT*"))
4735 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4736 else if (TailMatchesCS(
"\\du*") || TailMatchesCS(
"\\dg*"))
4737 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4738 else if (TailMatchesCS(
"\\dv*"))
4739 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
4740 else if (TailMatchesCS(
"\\dx*"))
4741 COMPLETE_WITH_QUERY(Query_for_list_of_extensions);
4742 else if (TailMatchesCS(
"\\dX*"))
4743 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_statistics);
4744 else if (TailMatchesCS(
"\\dm*"))
4745 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
4746 else if (TailMatchesCS(
"\\dE*"))
4747 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
4748 else if (TailMatchesCS(
"\\dy*"))
4749 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
4752 else if (TailMatchesCS(
"\\d*"))
4753 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_relations);
4755 else if (TailMatchesCS(
"\\ef"))
4756 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
4757 else if (TailMatchesCS(
"\\ev"))
4758 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
4760 else if (TailMatchesCS(
"\\encoding"))
4761 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_encodings);
4762 else if (TailMatchesCS(
"\\h|\\help"))
4763 COMPLETE_WITH_LIST(sql_commands);
4764 else if (TailMatchesCS(
"\\h|\\help", MatchAny))
4766 if (TailMatches(
"DROP"))
4767 matches = rl_completion_matches(
text, drop_command_generator);
4768 else if (TailMatches(
"ALTER"))
4769 matches = rl_completion_matches(
text, alter_command_generator);
4776 else if (TailMatchesCS(
"\\h|\\help", MatchAny, MatchAny))
4778 if (TailMatches(
"CREATE|DROP",
"ACCESS"))
4779 COMPLETE_WITH(
"METHOD");
4780 else if (TailMatches(
"ALTER",
"DEFAULT"))
4781 COMPLETE_WITH(
"PRIVILEGES");
4782 else if (TailMatches(
"CREATE|ALTER|DROP",
"EVENT"))
4783 COMPLETE_WITH(
"TRIGGER");
4784 else if (TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN"))
4785 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
4786 else if (TailMatches(
"ALTER",
"LARGE"))
4787 COMPLETE_WITH(
"OBJECT");
4788 else if (TailMatches(
"CREATE|ALTER|DROP",
"MATERIALIZED"))
4789 COMPLETE_WITH(
"VIEW");
4790 else if (TailMatches(
"CREATE|ALTER|DROP",
"TEXT"))
4791 COMPLETE_WITH(
"SEARCH");
4792 else if (TailMatches(
"CREATE|ALTER|DROP",
"USER"))
4793 COMPLETE_WITH(
"MAPPING FOR");
4795 else if (TailMatchesCS(
"\\h|\\help", MatchAny, MatchAny, MatchAny))
4797 if (TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN",
"DATA"))
4798 COMPLETE_WITH(
"WRAPPER");
4799 else if (TailMatches(
"CREATE|ALTER|DROP",
"TEXT",
"SEARCH"))
4800 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
4801 else if (TailMatches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING"))
4802 COMPLETE_WITH(
"FOR");
4804 else if (TailMatchesCS(
"\\l*") && !TailMatchesCS(
"\\lo*"))
4805 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
4806 else if (TailMatchesCS(
"\\password"))
4807 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4808 else if (TailMatchesCS(
"\\pset"))
4809 COMPLETE_WITH_CS(
"border",
"columns",
"csv_fieldsep",
"expanded",
4810 "fieldsep",
"fieldsep_zero",
"footer",
"format",
4811 "linestyle",
"null",
"numericlocale",
4812 "pager",
"pager_min_lines",
4813 "recordsep",
"recordsep_zero",
4814 "tableattr",
"title",
"tuples_only",
4815 "unicode_border_linestyle",
4816 "unicode_column_linestyle",
4817 "unicode_header_linestyle",
4819 else if (TailMatchesCS(
"\\pset", MatchAny))
4821 if (TailMatchesCS(
"format"))
4822 COMPLETE_WITH_CS(
"aligned",
"asciidoc",
"csv",
"html",
"latex",
4823 "latex-longtable",
"troff-ms",
"unaligned",
4825 else if (TailMatchesCS(
"xheader_width"))
4826 COMPLETE_WITH_CS(
"full",
"column",
"page");
4827 else if (TailMatchesCS(
"linestyle"))
4828 COMPLETE_WITH_CS(
"ascii",
"old-ascii",
"unicode");
4829 else if (TailMatchesCS(
"pager"))
4830 COMPLETE_WITH_CS(
"on",
"off",
"always");
4831 else if (TailMatchesCS(
"unicode_border_linestyle|"
4832 "unicode_column_linestyle|"
4833 "unicode_header_linestyle"))
4834 COMPLETE_WITH_CS(
"single",
"double");
4836 else if (TailMatchesCS(
"\\unset"))
4837 matches = complete_from_variables(
text,
"",
"",
true);
4838 else if (TailMatchesCS(
"\\set"))
4839 matches = complete_from_variables(
text,
"",
"",
false);
4840 else if (TailMatchesCS(
"\\set", MatchAny))
4842 if (TailMatchesCS(
"AUTOCOMMIT|ON_ERROR_STOP|QUIET|SHOW_ALL_RESULTS|"
4843 "SINGLELINE|SINGLESTEP"))
4844 COMPLETE_WITH_CS(
"on",
"off");
4845 else if (TailMatchesCS(
"COMP_KEYWORD_CASE"))
4846 COMPLETE_WITH_CS(
"lower",
"upper",
4847 "preserve-lower",
"preserve-upper");
4848 else if (TailMatchesCS(
"ECHO"))
4849 COMPLETE_WITH_CS(
"errors",
"queries",
"all",
"none");
4850 else if (TailMatchesCS(
"ECHO_HIDDEN"))
4851 COMPLETE_WITH_CS(
"noexec",
"off",
"on");
4852 else if (TailMatchesCS(
"HISTCONTROL"))
4853 COMPLETE_WITH_CS(
"ignorespace",
"ignoredups",
4854 "ignoreboth",
"none");
4855 else if (TailMatchesCS(
"ON_ERROR_ROLLBACK"))
4856 COMPLETE_WITH_CS(
"on",
"off",
"interactive");
4857 else if (TailMatchesCS(
"SHOW_CONTEXT"))
4858 COMPLETE_WITH_CS(
"never",
"errors",
"always");
4859 else if (TailMatchesCS(
"VERBOSITY"))
4860 COMPLETE_WITH_CS(
"default",
"verbose",
"terse",
"sqlstate");
4862 else if (TailMatchesCS(
"\\sf*"))
4863 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
4864 else if (TailMatchesCS(
"\\sv*"))
4865 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
4866 else if (TailMatchesCS(
"\\cd|\\e|\\edit|\\g|\\gx|\\i|\\include|"
4867 "\\ir|\\include_relative|\\o|\\out|"
4868 "\\s|\\w|\\write|\\lo_import"))
4870 completion_charp =
"\\";
4871 completion_force_quote =
false;
4872 matches = rl_completion_matches(
text, complete_from_files);
4882 const pgsql_thing_t *wac;
4884 for (wac = words_after_create; wac->name != NULL; wac++)
4889 COMPLETE_WITH_QUERY_LIST(wac->query,
4891 else if (wac->vquery)
4892 COMPLETE_WITH_VERSIONED_QUERY_LIST(wac->vquery,
4894 else if (wac->squery)
4895 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_LIST(wac->squery,
4907 if (matches == NULL)
4909 COMPLETE_WITH_CONST(
true,
"");
4911 rl_completion_append_character =
'\0';
4912 #ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
4913 rl_completion_suppress_quote = 1;
4918 free(previous_words);
4921 free(completion_ref_object);
4922 completion_ref_object = NULL;
4923 free(completion_ref_schema);
4924 completion_ref_schema = NULL;
4950 create_or_drop_command_generator(
const char *
text,
int state,
bits32 excluded)
4952 static int list_index,
4960 string_length = strlen(
text);
4964 while ((
name = words_after_create[list_index++].
name))
4967 !(words_after_create[list_index - 1].flags & excluded))
4968 return pg_strdup_keyword_case(
name,
text);
4979 create_command_generator(
const char *
text,
int state)
4981 return create_or_drop_command_generator(
text,
state, THING_NO_CREATE);
4988 drop_command_generator(
const char *
text,
int state)
4990 return create_or_drop_command_generator(
text,
state, THING_NO_DROP);
4997 alter_command_generator(
const char *
text,
int state)
4999 return create_or_drop_command_generator(
text,
state, THING_NO_ALTER);
5008 complete_from_query(
const char *
text,
int state)
5011 return _complete_from_query(completion_charp, NULL, completion_charpp,
5016 complete_from_versioned_query(
const char *
text,
int state)
5018 const VersionedQuery *vquery = completion_vquery;
5024 if (vquery->query == NULL)
5027 return _complete_from_query(vquery->query, NULL, completion_charpp,
5032 complete_from_schema_query(
const char *
text,
int state)
5035 return _complete_from_query(NULL, completion_squery, completion_charpp,
5040 complete_from_versioned_schema_query(
const char *
text,
int state)
5042 const SchemaQuery *squery = completion_squery;
5048 if (squery->catname == NULL)
5051 return _complete_from_query(NULL, squery, completion_charpp,
5098 _complete_from_query(
const char *simple_query,
5099 const SchemaQuery *schema_query,
5100 const char *
const *keywords,
5104 static int list_index,
5109 static bool non_empty_object;
5110 static bool schemaquoted;
5111 static bool objectquoted;
5122 char *e_object_like;
5129 num_schema_only = 0;
5130 num_query_other = 0;
5143 parse_identifier(
text,
5144 &schemaname, &objectname,
5145 &schemaquoted, &objectquoted);
5149 non_empty_object = (*objectname !=
'\0');
5155 e_object_like = make_like_pattern(objectname);
5158 e_schemaname = escape_string(schemaname);
5160 e_schemaname = NULL;
5162 if (completion_ref_object)
5163 e_ref_object = escape_string(completion_ref_object);
5165 e_ref_object = NULL;
5167 if (completion_ref_schema)
5168 e_ref_schema = escape_string(completion_ref_schema);
5170 e_ref_schema = NULL;
5176 Assert(simple_query == NULL);
5183 if (schemaname == NULL || schema_query->namespace == NULL)
5187 if (schema_query->use_distinct)
5190 "%s, NULL::pg_catalog.text FROM %s",
5191 schema_query->result,
5192 schema_query->catname);
5193 if (schema_query->refnamespace && completion_ref_schema)
5195 ", pg_catalog.pg_namespace nr");
5197 if (schema_query->selcondition)
5199 schema_query->selcondition);
5201 schema_query->result,
5203 if (schema_query->viscondition)
5205 schema_query->viscondition);
5206 if (schema_query->refname)
5208 Assert(completion_ref_object);
5210 schema_query->refname, e_ref_object);
5211 if (schema_query->refnamespace && completion_ref_schema)
5213 " AND %s = nr.oid AND nr.nspname = '%s'",
5214 schema_query->refnamespace,
5216 else if (schema_query->refviscondition)
5219 schema_query->refviscondition);
5229 if (strcmp(schema_query->catname,
5230 "pg_catalog.pg_class c") == 0 &&
5231 strncmp(objectname,
"pg_", 3) != 0)
5234 " AND c.relnamespace <> (SELECT oid FROM"
5235 " pg_catalog.pg_namespace WHERE nspname = 'pg_catalog')");
5242 if (schema_query->namespace)
5245 "SELECT NULL::pg_catalog.text, n.nspname "
5246 "FROM pg_catalog.pg_namespace n "
5247 "WHERE n.nspname LIKE '%s'",
5254 if (strncmp(objectname,
"pg_", 3) != 0)
5256 " AND n.nspname NOT LIKE E'pg\\\\_%'");
5263 schemaquoted = objectquoted;
5270 if (schema_query->use_distinct)
5273 "FROM %s, pg_catalog.pg_namespace n",
5274 schema_query->result,
5275 schema_query->catname);
5276 if (schema_query->refnamespace && completion_ref_schema)
5278 ", pg_catalog.pg_namespace nr");
5280 schema_query->namespace);
5281 if (schema_query->selcondition)
5283 schema_query->selcondition);
5285 schema_query->result,
5289 if (schema_query->refname)
5291 Assert(completion_ref_object);
5293 schema_query->refname, e_ref_object);
5294 if (schema_query->refnamespace && completion_ref_schema)
5296 " AND %s = nr.oid AND nr.nspname = '%s'",
5297 schema_query->refnamespace,
5299 else if (schema_query->refviscondition)
5302 schema_query->refviscondition);
5312 e_ref_object, e_ref_schema);
5317 completion_max_records);
5320 result = exec_query(query_buffer.
data);
5326 free(e_object_like);
5339 const char *item = NULL;
5340 const char *nsp = NULL;
5363 if (non_empty_object)
5365 if (item && !objectquoted && identifier_needs_quotes(item))