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",
837 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
838 .namespace =
"c.relnamespace",
839 .result =
"c.relname",
843 static const SchemaQuery Query_for_list_of_selectables = {
844 .catname =
"pg_catalog.pg_class c",
852 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
853 .namespace =
"c.relnamespace",
854 .result =
"c.relname",
858 static const SchemaQuery Query_for_list_of_truncatables = {
859 .catname =
"pg_catalog.pg_class c",
864 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
865 .namespace =
"c.relnamespace",
866 .result =
"c.relname",
870 #define Query_for_list_of_grantables Query_for_list_of_selectables
873 static const SchemaQuery Query_for_list_of_analyzables = {
874 .catname =
"pg_catalog.pg_class c",
880 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
881 .namespace =
"c.relnamespace",
882 .result =
"c.relname",
886 static const SchemaQuery Query_for_list_of_indexables = {
887 .catname =
"pg_catalog.pg_class c",
892 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
893 .namespace =
"c.relnamespace",
894 .result =
"c.relname",
901 #define Query_for_list_of_vacuumables Query_for_list_of_indexables
904 static const SchemaQuery Query_for_list_of_clusterables = {
905 .catname =
"pg_catalog.pg_class c",
910 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
911 .namespace =
"c.relnamespace",
912 .result =
"c.relname",
915 static const SchemaQuery Query_for_list_of_constraints_with_schema = {
916 .catname =
"pg_catalog.pg_constraint c",
917 .selcondition =
"c.conrelid <> 0",
918 .namespace =
"c.connamespace",
919 .result =
"c.conname",
922 static const SchemaQuery Query_for_list_of_statistics = {
923 .catname =
"pg_catalog.pg_statistic_ext s",
924 .viscondition =
"pg_catalog.pg_statistics_obj_is_visible(s.oid)",
925 .namespace =
"s.stxnamespace",
926 .result =
"s.stxname",
929 static const SchemaQuery Query_for_list_of_collations = {
930 .catname =
"pg_catalog.pg_collation c",
931 .selcondition =
"c.collencoding IN (-1, pg_catalog.pg_char_to_encoding(pg_catalog.getdatabaseencoding()))",
932 .viscondition =
"pg_catalog.pg_collation_is_visible(c.oid)",
933 .namespace =
"c.collnamespace",
934 .result =
"c.collname",
937 static const SchemaQuery Query_for_partition_of_table = {
938 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_inherits i",
939 .selcondition =
"c1.oid=i.inhparent and i.inhrelid=c2.oid and c2.relispartition",
940 .viscondition =
"pg_catalog.pg_table_is_visible(c2.oid)",
941 .namespace =
"c2.relnamespace",
942 .result =
"c2.relname",
943 .refname =
"c1.relname",
944 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
945 .refnamespace =
"c1.relnamespace",
948 static const SchemaQuery Query_for_rule_of_table = {
949 .catname =
"pg_catalog.pg_rewrite r, pg_catalog.pg_class c1",
950 .selcondition =
"r.ev_class=c1.oid",
951 .result =
"r.rulename",
952 .refname =
"c1.relname",
953 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
954 .refnamespace =
"c1.relnamespace",
957 static const SchemaQuery Query_for_trigger_of_table = {
958 .catname =
"pg_catalog.pg_trigger t, pg_catalog.pg_class c1",
959 .selcondition =
"t.tgrelid=c1.oid and not t.tgisinternal",
960 .result =
"t.tgname",
961 .refname =
"c1.relname",
962 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
963 .refnamespace =
"c1.relnamespace",
986 #define Query_for_list_of_template_databases \
988 " FROM pg_catalog.pg_database d "\
989 " WHERE d.datname LIKE '%s' "\
990 " AND (d.datistemplate OR pg_catalog.pg_has_role(d.datdba, 'USAGE'))"
992 #define Query_for_list_of_databases \
993 "SELECT datname FROM pg_catalog.pg_database "\
994 " WHERE datname LIKE '%s'"
996 #define Query_for_list_of_tablespaces \
997 "SELECT spcname FROM pg_catalog.pg_tablespace "\
998 " WHERE spcname LIKE '%s'"
1000 #define Query_for_list_of_encodings \
1001 " SELECT DISTINCT pg_catalog.pg_encoding_to_char(conforencoding) "\
1002 " FROM pg_catalog.pg_conversion "\
1003 " WHERE pg_catalog.pg_encoding_to_char(conforencoding) LIKE pg_catalog.upper('%s')"
1005 #define Query_for_list_of_languages \
1007 " FROM pg_catalog.pg_language "\
1008 " WHERE lanname != 'internal' "\
1009 " AND lanname LIKE '%s'"
1011 #define Query_for_list_of_schemas \
1012 "SELECT nspname FROM pg_catalog.pg_namespace "\
1013 " WHERE nspname LIKE '%s'"
1016 #define Query_for_list_of_alter_system_set_vars \
1017 "SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1018 " WHERE context != 'internal' "\
1019 " AND pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1021 #define Query_for_list_of_set_vars \
1022 "SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1023 " WHERE context IN ('user', 'superuser') "\
1024 " AND pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1026 #define Query_for_list_of_show_vars \
1027 "SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1028 " WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1030 #define Query_for_list_of_roles \
1032 " FROM pg_catalog.pg_roles "\
1033 " WHERE rolname LIKE '%s'"
1036 #define Keywords_for_list_of_owner_roles \
1037 "CURRENT_ROLE", "CURRENT_USER", "SESSION_USER"
1040 #define Keywords_for_list_of_grant_roles \
1041 Keywords_for_list_of_owner_roles, "PUBLIC"
1043 #define Query_for_all_table_constraints \
1045 " FROM pg_catalog.pg_constraint c "\
1046 " WHERE c.conrelid <> 0 "\
1047 " and conname LIKE '%s'"
1049 #define Query_for_list_of_fdws \
1051 " FROM pg_catalog.pg_foreign_data_wrapper "\
1052 " WHERE fdwname LIKE '%s'"
1054 #define Query_for_list_of_servers \
1056 " FROM pg_catalog.pg_foreign_server "\
1057 " WHERE srvname LIKE '%s'"
1059 #define Query_for_list_of_user_mappings \
1061 " FROM pg_catalog.pg_user_mappings "\
1062 " WHERE usename LIKE '%s'"
1064 #define Query_for_list_of_access_methods \
1066 " FROM pg_catalog.pg_am "\
1067 " WHERE amname LIKE '%s'"
1069 #define Query_for_list_of_index_access_methods \
1071 " FROM pg_catalog.pg_am "\
1072 " WHERE amname LIKE '%s' AND "\
1073 " amtype=" CppAsString2(AMTYPE_INDEX)
1075 #define Query_for_list_of_table_access_methods \
1077 " FROM pg_catalog.pg_am "\
1078 " WHERE amname LIKE '%s' AND "\
1079 " amtype=" CppAsString2(AMTYPE_TABLE)
1081 #define Query_for_list_of_extensions \
1083 " FROM pg_catalog.pg_extension "\
1084 " WHERE extname LIKE '%s'"
1086 #define Query_for_list_of_available_extensions \
1088 " FROM pg_catalog.pg_available_extensions "\
1089 " WHERE name LIKE '%s' AND installed_version IS NULL"
1091 #define Query_for_list_of_available_extension_versions \
1093 " FROM pg_catalog.pg_available_extension_versions "\
1094 " WHERE version LIKE '%s' AND name='%s'"
1096 #define Query_for_list_of_prepared_statements \
1098 " FROM pg_catalog.pg_prepared_statements "\
1099 " WHERE name LIKE '%s'"
1101 #define Query_for_list_of_event_triggers \
1103 " FROM pg_catalog.pg_event_trigger "\
1104 " WHERE evtname LIKE '%s'"
1106 #define Query_for_list_of_tablesample_methods \
1108 " FROM pg_catalog.pg_proc "\
1109 " WHERE prorettype = 'pg_catalog.tsm_handler'::pg_catalog.regtype AND "\
1110 " proargtypes[0] = 'pg_catalog.internal'::pg_catalog.regtype AND "\
1111 " proname LIKE '%s'"
1113 #define Query_for_list_of_policies \
1115 " FROM pg_catalog.pg_policy "\
1116 " WHERE polname LIKE '%s'"
1118 #define Query_for_values_of_enum_GUC \
1119 " SELECT val FROM ( "\
1120 " SELECT name, pg_catalog.unnest(enumvals) AS val "\
1121 " FROM pg_catalog.pg_settings "\
1123 " WHERE val LIKE '%s'"\
1124 " and pg_catalog.lower(name)=pg_catalog.lower('%s')"
1126 #define Query_for_list_of_channels \
1128 " FROM pg_catalog.pg_listening_channels() AS channel "\
1129 " WHERE channel LIKE '%s'"
1131 #define Query_for_list_of_cursors \
1133 " FROM pg_catalog.pg_cursors "\
1134 " WHERE name LIKE '%s'"
1136 #define Query_for_list_of_timezone_names_unquoted \
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_out \
1142 "SELECT pg_catalog.quote_literal(name) AS name "\
1143 " FROM pg_catalog.pg_timezone_names() "\
1144 " WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1146 #define Query_for_list_of_timezone_names_quoted_in \
1147 "SELECT pg_catalog.quote_literal(name) AS name "\
1148 " FROM pg_catalog.pg_timezone_names() "\
1149 " WHERE pg_catalog.quote_literal(pg_catalog.lower(name)) LIKE pg_catalog.lower('%s')"
1152 #define Privilege_options_of_grant_and_revoke \
1153 "SELECT", "INSERT", "UPDATE", "DELETE", "TRUNCATE", "REFERENCES", "TRIGGER", \
1154 "CREATE", "CONNECT", "TEMPORARY", "EXECUTE", "USAGE", "SET", "ALTER SYSTEM", \
1158 #define Alter_procedure_options \
1159 "DEPENDS ON EXTENSION", "EXTERNAL SECURITY", "NO DEPENDS ON EXTENSION", \
1160 "OWNER TO", "RENAME TO", "RESET", "SECURITY", "SET"
1163 #define Alter_routine_options \
1164 Alter_procedure_options, "COST", "IMMUTABLE", "LEAKPROOF", "NOT LEAKPROOF", \
1165 "PARALLEL", "ROWS", "STABLE", "VOLATILE"
1168 #define Alter_function_options \
1169 Alter_routine_options, "CALLED ON NULL INPUT", "RETURNS NULL ON NULL INPUT", \
1178 static const VersionedQuery Query_for_list_of_publications[] = {
1181 " FROM pg_catalog.pg_publication "
1182 " WHERE pubname LIKE '%s'"
1187 static const VersionedQuery Query_for_list_of_subscriptions[] = {
1189 " SELECT s.subname "
1190 " FROM pg_catalog.pg_subscription s, pg_catalog.pg_database d "
1191 " WHERE s.subname LIKE '%s' "
1192 " AND d.datname = pg_catalog.current_database() "
1193 " AND s.subdbid = d.oid"
1208 const VersionedQuery *vquery;
1209 const SchemaQuery *squery;
1210 const char *
const *keywords;
1214 #define THING_NO_CREATE (1 << 0)
1215 #define THING_NO_DROP (1 << 1)
1216 #define THING_NO_ALTER (1 << 2)
1217 #define THING_NO_SHOW (THING_NO_CREATE | THING_NO_DROP | THING_NO_ALTER)
1220 static const char *
const Keywords_for_user_thing[] = {
1225 static const pgsql_thing_t words_after_create[] = {
1226 {
"ACCESS METHOD", NULL, NULL, NULL, NULL, THING_NO_ALTER},
1227 {
"AGGREGATE", NULL, NULL, Query_for_list_of_aggregates},
1228 {
"CAST", NULL, NULL, NULL},
1230 {
"COLLATION", NULL, NULL, &Query_for_list_of_collations},
1236 {
"CONFIGURATION", NULL, NULL, &Query_for_list_of_ts_configurations, NULL, THING_NO_SHOW},
1237 {
"CONVERSION",
"SELECT conname FROM pg_catalog.pg_conversion WHERE conname LIKE '%s'"},
1238 {
"DATABASE", Query_for_list_of_databases},
1239 {
"DEFAULT PRIVILEGES", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1240 {
"DICTIONARY", NULL, NULL, &Query_for_list_of_ts_dictionaries, NULL, THING_NO_SHOW},
1241 {
"DOMAIN", NULL, NULL, &Query_for_list_of_domains},
1242 {
"EVENT TRIGGER", NULL, NULL, NULL},
1243 {
"EXTENSION", Query_for_list_of_extensions},
1244 {
"FOREIGN DATA WRAPPER", NULL, NULL, NULL},
1245 {
"FOREIGN TABLE", NULL, NULL, NULL},
1246 {
"FUNCTION", NULL, NULL, Query_for_list_of_functions},
1247 {
"GROUP", Query_for_list_of_roles},
1248 {
"INDEX", NULL, NULL, &Query_for_list_of_indexes},
1249 {
"LANGUAGE", Query_for_list_of_languages},
1250 {
"LARGE OBJECT", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1251 {
"MATERIALIZED VIEW", NULL, NULL, &Query_for_list_of_matviews},
1252 {
"OPERATOR", NULL, NULL, NULL},
1254 {
"OR REPLACE", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1255 {
"OWNED", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_ALTER},
1256 {
"PARSER", NULL, NULL, &Query_for_list_of_ts_parsers, NULL, THING_NO_SHOW},
1257 {
"POLICY", NULL, NULL, NULL},
1258 {
"PROCEDURE", NULL, NULL, Query_for_list_of_procedures},
1259 {
"PUBLICATION", NULL, Query_for_list_of_publications},
1260 {
"ROLE", Query_for_list_of_roles},
1261 {
"ROUTINE", NULL, NULL, &Query_for_list_of_routines, NULL, THING_NO_CREATE},
1262 {
"RULE",
"SELECT rulename FROM pg_catalog.pg_rules WHERE rulename LIKE '%s'"},
1263 {
"SCHEMA", Query_for_list_of_schemas},
1264 {
"SEQUENCE", NULL, NULL, &Query_for_list_of_sequences},
1265 {
"SERVER", Query_for_list_of_servers},
1266 {
"STATISTICS", NULL, NULL, &Query_for_list_of_statistics},
1267 {
"SUBSCRIPTION", NULL, Query_for_list_of_subscriptions},
1268 {
"SYSTEM", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1269 {
"TABLE", NULL, NULL, &Query_for_list_of_tables},
1270 {
"TABLESPACE", Query_for_list_of_tablespaces},
1271 {
"TEMP", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1273 {
"TEMPLATE", NULL, NULL, &Query_for_list_of_ts_templates, NULL, THING_NO_SHOW},
1274 {
"TEMPORARY", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1276 {
"TEXT SEARCH", NULL, NULL, NULL},
1277 {
"TRANSFORM", NULL, NULL, NULL, NULL, THING_NO_ALTER},
1278 {
"TRIGGER",
"SELECT tgname FROM pg_catalog.pg_trigger WHERE tgname LIKE '%s' AND NOT tgisinternal"},
1279 {
"TYPE", NULL, NULL, &Query_for_list_of_datatypes},
1280 {
"UNIQUE", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1282 {
"UNLOGGED", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1284 {
"USER", Query_for_list_of_roles, NULL, NULL, Keywords_for_user_thing},
1285 {
"USER MAPPING FOR", NULL, NULL, NULL},
1286 {
"VIEW", NULL, NULL, &Query_for_list_of_views},
1291 static const char *
const table_storage_parameters[] = {
1292 "autovacuum_analyze_scale_factor",
1293 "autovacuum_analyze_threshold",
1294 "autovacuum_enabled",
1295 "autovacuum_freeze_max_age",
1296 "autovacuum_freeze_min_age",
1297 "autovacuum_freeze_table_age",
1298 "autovacuum_multixact_freeze_max_age",
1299 "autovacuum_multixact_freeze_min_age",
1300 "autovacuum_multixact_freeze_table_age",
1301 "autovacuum_vacuum_cost_delay",
1302 "autovacuum_vacuum_cost_limit",
1303 "autovacuum_vacuum_insert_scale_factor",
1304 "autovacuum_vacuum_insert_threshold",
1305 "autovacuum_vacuum_scale_factor",
1306 "autovacuum_vacuum_threshold",
1308 "log_autovacuum_min_duration",
1310 "toast.autovacuum_enabled",
1311 "toast.autovacuum_freeze_max_age",
1312 "toast.autovacuum_freeze_min_age",
1313 "toast.autovacuum_freeze_table_age",
1314 "toast.autovacuum_multixact_freeze_max_age",
1315 "toast.autovacuum_multixact_freeze_min_age",
1316 "toast.autovacuum_multixact_freeze_table_age",
1317 "toast.autovacuum_vacuum_cost_delay",
1318 "toast.autovacuum_vacuum_cost_limit",
1319 "toast.autovacuum_vacuum_insert_scale_factor",
1320 "toast.autovacuum_vacuum_insert_threshold",
1321 "toast.autovacuum_vacuum_scale_factor",
1322 "toast.autovacuum_vacuum_threshold",
1323 "toast.log_autovacuum_min_duration",
1324 "toast.vacuum_index_cleanup",
1325 "toast.vacuum_truncate",
1326 "toast_tuple_target",
1327 "user_catalog_table",
1328 "vacuum_index_cleanup",
1334 static const char *
const view_optional_parameters[] = {
1342 static char **psql_completion(
const char *
text,
int start,
int end);
1343 static char *create_command_generator(
const char *
text,
int state);
1344 static char *drop_command_generator(
const char *
text,
int state);
1345 static char *alter_command_generator(
const char *
text,
int state);
1346 static char *complete_from_query(
const char *
text,
int state);
1347 static char *complete_from_versioned_query(
const char *
text,
int state);
1348 static char *complete_from_schema_query(
const char *
text,
int state);
1349 static char *complete_from_versioned_schema_query(
const char *
text,
int state);
1350 static char *_complete_from_query(
const char *simple_query,
1351 const SchemaQuery *schema_query,
1352 const char *
const *keywords,
1355 static void set_completion_reference(
const char *
word);
1356 static void set_completion_reference_verbatim(
const char *
word);
1357 static char *complete_from_list(
const char *
text,
int state);
1358 static char *complete_from_const(
const char *
text,
int state);
1359 static void append_variable_names(
char ***varnames,
int *nvars,
1360 int *maxvars,
const char *varname,
1361 const char *prefix,
const char *suffix);
1362 static char **complete_from_variables(
const char *
text,
1363 const char *prefix,
const char *suffix,
bool need_value);
1364 static char *complete_from_files(
const char *
text,
int state);
1366 static char *pg_strdup_keyword_case(
const char *s,
const char *ref);
1367 static char *escape_string(
const char *
text);
1368 static char *make_like_pattern(
const char *
word);
1369 static void parse_identifier(
const char *
ident,
1370 char **schemaname,
char **objectname,
1371 bool *schemaquoted,
bool *objectquoted);
1372 static char *requote_identifier(
const char *schemaname,
const char *objectname,
1373 bool quote_schema,
bool quote_object);
1374 static bool identifier_needs_quotes(
const char *
ident);
1375 static PGresult *exec_query(
const char *query);
1377 static char **get_previous_words(
int point,
char **buffer,
int *nwords);
1379 static char *get_guctype(
const char *varname);
1381 #ifdef USE_FILENAME_QUOTING_FUNCTIONS
1382 static char *quote_file_name(
char *fname,
int match_type,
char *quote_pointer);
1383 static char *dequote_file_name(
char *fname,
int quote_char);
1394 rl_attempted_completion_function = psql_completion;
1396 #ifdef USE_FILENAME_QUOTING_FUNCTIONS
1397 rl_filename_quoting_function = quote_file_name;
1398 rl_filename_dequoting_function = dequote_file_name;
1401 rl_basic_word_break_characters = WORD_BREAKS;
1410 rl_completer_quote_characters =
"'";
1418 #ifdef HAVE_RL_FILENAME_QUOTE_CHARACTERS
1420 unsigned char *fqc = (
unsigned char *)
pg_malloc(256);
1422 for (
int i = 0;
i < 255;
i++)
1423 fqc[
i] = (
unsigned char) (
i + 1);
1425 rl_filename_quote_characters = (
const char *) fqc;
1429 completion_max_records = 1000;
1451 #define MatchAny NULL
1452 #define MatchAnyExcept(pattern) ("!" pattern)
1455 word_matches(
const char *pattern,
1457 bool case_sensitive)
1461 #define cimatch(s1, s2, n) \
1462 (case_sensitive ? strncmp(s1, s2, n) == 0 : pg_strncasecmp(s1, s2, n) == 0)
1465 if (pattern == NULL)
1469 if (*pattern ==
'!')
1470 return !word_matches(pattern + 1,
word, case_sensitive);
1473 wordlen = strlen(
word);
1476 const char *star = NULL;
1481 while (*
c !=
'\0' && *
c !=
'|')
1491 size_t beforelen = star - pattern,
1492 afterlen =
c - star - 1;
1494 if (wordlen >= (beforelen + afterlen) &&
1495 cimatch(
word, pattern, beforelen) &&
1496 cimatch(
word + wordlen - afterlen, star + 1, afterlen))
1502 if (wordlen == (
c - pattern) &&
1503 cimatch(
word, pattern, wordlen))
1524 TailMatchesImpl(
bool case_sensitive,
1525 int previous_words_count,
char **previous_words,
1530 if (previous_words_count < narg)
1535 for (
int argno = 0; argno < narg; argno++)
1537 const char *
arg = va_arg(
args,
const char *);
1539 if (!word_matches(
arg, previous_words[narg - argno - 1],
1557 MatchesImpl(
bool case_sensitive,
1558 int previous_words_count,
char **previous_words,
1563 if (previous_words_count != narg)
1568 for (
int argno = 0; argno < narg; argno++)
1570 const char *
arg = va_arg(
args,
const char *);
1572 if (!word_matches(
arg, previous_words[narg - argno - 1],
1590 HeadMatchesImpl(
bool case_sensitive,
1591 int previous_words_count,
char **previous_words,
1596 if (previous_words_count < narg)
1601 for (
int argno = 0; argno < narg; argno++)
1603 const char *
arg = va_arg(
args,
const char *);
1605 if (!word_matches(
arg, previous_words[previous_words_count - argno - 1],
1622 ends_with(
const char *s,
char c)
1624 size_t length = strlen(s);
1626 return (length > 0 && s[length - 1] ==
c);
1638 psql_completion(
const char *
text,
int start,
int end)
1641 char **matches = NULL;
1647 char **previous_words;
1650 int previous_words_count;
1659 #define prev_wd (previous_words[0])
1660 #define prev2_wd (previous_words[1])
1661 #define prev3_wd (previous_words[2])
1662 #define prev4_wd (previous_words[3])
1663 #define prev5_wd (previous_words[4])
1664 #define prev6_wd (previous_words[5])
1665 #define prev7_wd (previous_words[6])
1666 #define prev8_wd (previous_words[7])
1667 #define prev9_wd (previous_words[8])
1670 #define TailMatches(...) \
1671 TailMatchesImpl(false, previous_words_count, previous_words, \
1672 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1675 #define TailMatchesCS(...) \
1676 TailMatchesImpl(true, previous_words_count, previous_words, \
1677 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1680 #define Matches(...) \
1681 MatchesImpl(false, previous_words_count, previous_words, \
1682 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1685 #define MatchesCS(...) \
1686 MatchesImpl(true, previous_words_count, previous_words, \
1687 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1690 #define HeadMatches(...) \
1691 HeadMatchesImpl(false, previous_words_count, previous_words, \
1692 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1695 #define HeadMatchesCS(...) \
1696 HeadMatchesImpl(true, previous_words_count, previous_words, \
1697 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1700 static const char *
const sql_commands[] = {
1701 "ABORT",
"ALTER",
"ANALYZE",
"BEGIN",
"CALL",
"CHECKPOINT",
"CLOSE",
"CLUSTER",
1702 "COMMENT",
"COMMIT",
"COPY",
"CREATE",
"DEALLOCATE",
"DECLARE",
1703 "DELETE FROM",
"DISCARD",
"DO",
"DROP",
"END",
"EXECUTE",
"EXPLAIN",
1704 "FETCH",
"GRANT",
"IMPORT FOREIGN SCHEMA",
"INSERT INTO",
"LISTEN",
"LOAD",
"LOCK",
1705 "MERGE INTO",
"MOVE",
"NOTIFY",
"PREPARE",
1706 "REASSIGN",
"REFRESH MATERIALIZED VIEW",
"REINDEX",
"RELEASE",
1707 "RESET",
"REVOKE",
"ROLLBACK",
1708 "SAVEPOINT",
"SECURITY LABEL",
"SELECT",
"SET",
"SHOW",
"START",
1709 "TABLE",
"TRUNCATE",
"UNLISTEN",
"UPDATE",
"VACUUM",
"VALUES",
"WITH",
1714 static const char *
const backslash_commands[] = {
1717 "\\connect",
"\\conninfo",
"\\C",
"\\cd",
"\\copy",
1718 "\\copyright",
"\\crosstabview",
1719 "\\d",
"\\da",
"\\dA",
"\\dAc",
"\\dAf",
"\\dAo",
"\\dAp",
1720 "\\db",
"\\dc",
"\\dconfig",
"\\dC",
"\\dd",
"\\ddp",
"\\dD",
1721 "\\des",
"\\det",
"\\deu",
"\\dew",
"\\dE",
"\\df",
1722 "\\dF",
"\\dFd",
"\\dFp",
"\\dFt",
"\\dg",
"\\di",
"\\dl",
"\\dL",
1723 "\\dm",
"\\dn",
"\\do",
"\\dO",
"\\dp",
"\\dP",
"\\dPi",
"\\dPt",
1724 "\\drds",
"\\drg",
"\\dRs",
"\\dRp",
"\\ds",
1725 "\\dt",
"\\dT",
"\\dv",
"\\du",
"\\dx",
"\\dX",
"\\dy",
1726 "\\echo",
"\\edit",
"\\ef",
"\\elif",
"\\else",
"\\encoding",
1727 "\\endif",
"\\errverbose",
"\\ev",
1729 "\\g",
"\\gdesc",
"\\getenv",
"\\gexec",
"\\gset",
"\\gx",
1731 "\\if",
"\\include",
"\\include_relative",
"\\ir",
1732 "\\list",
"\\lo_import",
"\\lo_export",
"\\lo_list",
"\\lo_unlink",
1734 "\\password",
"\\print",
"\\prompt",
"\\pset",
1735 "\\qecho",
"\\quit",
1737 "\\s",
"\\set",
"\\setenv",
"\\sf",
"\\sv",
1738 "\\t",
"\\T",
"\\timing",
1741 "\\warn",
"\\watch",
"\\write",
1756 completion_last_char = (end >
start) ?
text[end -
start - 1] :
'\0';
1759 rl_completion_append_character =
' ';
1762 completion_charp = NULL;
1763 completion_charpp = NULL;
1764 completion_vquery = NULL;
1765 completion_squery = NULL;
1766 completion_ref_object = NULL;
1767 completion_ref_schema = NULL;
1774 previous_words = get_previous_words(
start,
1776 &previous_words_count);
1779 if (
text[0] ==
'\\')
1780 COMPLETE_WITH_LIST_CS(backslash_commands);
1783 else if (
text[0] ==
':' &&
text[1] !=
':')
1785 if (
text[1] ==
'\'')
1786 matches = complete_from_variables(
text,
":'",
"'",
true);
1787 else if (
text[1] ==
'"')
1788 matches = complete_from_variables(
text,
":\"",
"\"",
true);
1789 else if (
text[1] ==
'{' &&
text[2] ==
'?')
1790 matches = complete_from_variables(
text,
":{?",
"}",
true);
1792 matches = complete_from_variables(
text,
":",
"",
true);
1796 else if (previous_words_count == 0)
1797 COMPLETE_WITH_LIST(sql_commands);
1801 else if (TailMatches(
"CREATE"))
1804 if (HeadMatches(
"CREATE",
"SCHEMA"))
1805 COMPLETE_WITH(
"TABLE",
"VIEW",
"INDEX",
"SEQUENCE",
"TRIGGER",
1807 "UNIQUE",
"UNLOGGED");
1809 matches = rl_completion_matches(
text, create_command_generator);
1812 else if (TailMatches(
"CREATE",
"OR",
"REPLACE"))
1813 COMPLETE_WITH(
"FUNCTION",
"PROCEDURE",
"LANGUAGE",
"RULE",
"VIEW",
1814 "AGGREGATE",
"TRANSFORM",
"TRIGGER");
1818 else if (Matches(
"DROP"))
1819 matches = rl_completion_matches(
text, drop_command_generator);
1824 else if (Matches(
"ALTER",
"TABLE"))
1825 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
1826 "ALL IN TABLESPACE");
1829 else if (Matches(
"ALTER"))
1830 matches = rl_completion_matches(
text, alter_command_generator);
1832 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny))
1833 COMPLETE_WITH(
"SET TABLESPACE",
"OWNED BY");
1835 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny,
"OWNED",
"BY"))
1836 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
1838 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny,
"OWNED",
"BY", MatchAny))
1839 COMPLETE_WITH(
"SET TABLESPACE");
1841 else if (Matches(
"ALTER",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny))
1844 else if (Matches(
"ALTER",
"AGGREGATE", MatchAny, MatchAny))
1846 if (ends_with(prev_wd,
')'))
1847 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
1849 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
1852 else if (Matches(
"ALTER",
"FUNCTION", MatchAny, MatchAny))
1854 if (ends_with(prev_wd,
')'))
1855 COMPLETE_WITH(Alter_function_options);
1857 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
1860 else if (Matches(
"ALTER",
"PROCEDURE", MatchAny, MatchAny))
1862 if (ends_with(prev_wd,
')'))
1863 COMPLETE_WITH(Alter_procedure_options);
1865 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
1868 else if (Matches(
"ALTER",
"ROUTINE", MatchAny, MatchAny))
1870 if (ends_with(prev_wd,
')'))
1871 COMPLETE_WITH(Alter_routine_options);
1873 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
1876 else if (Matches(
"ALTER",
"FUNCTION|ROUTINE", MatchAny, MatchAny,
"PARALLEL"))
1877 COMPLETE_WITH(
"RESTRICTED",
"SAFE",
"UNSAFE");
1879 else if (Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"SECURITY") ||
1880 Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"EXTERNAL",
"SECURITY"))
1881 COMPLETE_WITH(
"DEFINER",
"INVOKER");
1883 else if (Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"RESET"))
1884 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
1887 else if (Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"SET"))
1888 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
1892 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny))
1893 COMPLETE_WITH(
"ADD",
"DROP",
"OWNER TO",
"RENAME TO",
"SET");
1895 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD"))
1896 COMPLETE_WITH(
"TABLES IN SCHEMA",
"TABLE");
1897 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE") ||
1898 (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE") &&
1899 ends_with(prev_wd,
',')))
1900 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
1909 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny) && TailMatches(
"WHERE"))
1911 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny) && TailMatches(
"WHERE",
"("))
1912 COMPLETE_WITH_ATTR(prev3_wd);
1913 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE") &&
1914 !TailMatches(
"WHERE",
"(*)"))
1915 COMPLETE_WITH(
",",
"WHERE (");
1916 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE"))
1919 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"DROP"))
1920 COMPLETE_WITH(
"TABLES IN SCHEMA",
"TABLE");
1922 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"SET"))
1923 COMPLETE_WITH(
"(",
"TABLES IN SCHEMA",
"TABLE");
1924 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|DROP|SET",
"TABLES",
"IN",
"SCHEMA"))
1925 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
1926 " AND nspname NOT LIKE E'pg\\\\_%%'",
1929 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny) && TailMatches(
"SET",
"("))
1930 COMPLETE_WITH(
"publish",
"publish_via_partition_root");
1932 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny))
1933 COMPLETE_WITH(
"CONNECTION",
"ENABLE",
"DISABLE",
"OWNER TO",
1934 "RENAME TO",
"REFRESH PUBLICATION",
"SET",
"SKIP (",
1935 "ADD PUBLICATION",
"DROP PUBLICATION");
1937 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) &&
1938 TailMatches(
"REFRESH",
"PUBLICATION"))
1939 COMPLETE_WITH(
"WITH (");
1941 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) &&
1942 TailMatches(
"REFRESH",
"PUBLICATION",
"WITH",
"("))
1943 COMPLETE_WITH(
"copy_data");
1945 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny,
"SET"))
1946 COMPLETE_WITH(
"(",
"PUBLICATION");
1948 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) && TailMatches(
"SET",
"("))
1949 COMPLETE_WITH(
"binary",
"disable_on_error",
"failover",
"origin",
1950 "password_required",
"run_as_owner",
"slot_name",
1951 "streaming",
"synchronous_commit");
1953 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) && TailMatches(
"SKIP",
"("))
1954 COMPLETE_WITH(
"lsn");
1956 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) && TailMatches(
"SET",
"PUBLICATION"))
1961 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) &&
1962 TailMatches(
"ADD|DROP|SET",
"PUBLICATION", MatchAny))
1963 COMPLETE_WITH(
"WITH (");
1965 else if (HeadMatches(
"ALTER",
"SUBSCRIPTION", MatchAny) &&
1966 TailMatches(
"ADD|DROP|SET",
"PUBLICATION", MatchAny,
"WITH",
"("))
1967 COMPLETE_WITH(
"copy_data",
"refresh");
1970 else if (Matches(
"ALTER",
"SCHEMA", MatchAny))
1971 COMPLETE_WITH(
"OWNER TO",
"RENAME TO");
1974 else if (Matches(
"ALTER",
"COLLATION", MatchAny))
1975 COMPLETE_WITH(
"OWNER TO",
"REFRESH VERSION",
"RENAME TO",
"SET SCHEMA");
1978 else if (Matches(
"ALTER",
"CONVERSION", MatchAny))
1979 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
1982 else if (Matches(
"ALTER",
"DATABASE", MatchAny))
1983 COMPLETE_WITH(
"RESET",
"SET",
"OWNER TO",
"REFRESH COLLATION VERSION",
"RENAME TO",
1984 "IS_TEMPLATE",
"ALLOW_CONNECTIONS",
1985 "CONNECTION LIMIT");
1988 else if (Matches(
"ALTER",
"DATABASE", MatchAny,
"SET",
"TABLESPACE"))
1989 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
1992 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER"))
1993 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
1996 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER", MatchAny))
1997 COMPLETE_WITH(
"DISABLE",
"ENABLE",
"OWNER TO",
"RENAME TO");
2000 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER", MatchAny,
"ENABLE"))
2001 COMPLETE_WITH(
"REPLICA",
"ALWAYS");
2004 else if (Matches(
"ALTER",
"EXTENSION", MatchAny))
2005 COMPLETE_WITH(
"ADD",
"DROP",
"UPDATE",
"SET SCHEMA");
2008 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP"))
2009 COMPLETE_WITH(
"ACCESS METHOD",
"AGGREGATE",
"CAST",
"COLLATION",
2010 "CONVERSION",
"DOMAIN",
"EVENT TRIGGER",
"FOREIGN",
2011 "FUNCTION",
"MATERIALIZED VIEW",
"OPERATOR",
2012 "LANGUAGE",
"PROCEDURE",
"ROUTINE",
"SCHEMA",
2013 "SEQUENCE",
"SERVER",
"TABLE",
"TEXT SEARCH",
2014 "TRANSFORM FOR",
"TYPE",
"VIEW");
2017 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP",
"FOREIGN"))
2018 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
2021 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP",
"OPERATOR"))
2022 COMPLETE_WITH(
"CLASS",
"FAMILY");
2025 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP",
"TEXT",
"SEARCH"))
2026 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
2029 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"UPDATE"))
2030 COMPLETE_WITH(
"TO");
2033 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"UPDATE",
"TO"))
2035 set_completion_reference(prev3_wd);
2036 COMPLETE_WITH_QUERY(Query_for_list_of_available_extension_versions);
2040 else if (Matches(
"ALTER",
"FOREIGN"))
2041 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
2044 else if (Matches(
"ALTER",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
2045 COMPLETE_WITH(
"HANDLER",
"VALIDATOR",
"NO",
2046 "OPTIONS",
"OWNER TO",
"RENAME TO");
2047 else if (Matches(
"ALTER",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny,
"NO"))
2048 COMPLETE_WITH(
"HANDLER",
"VALIDATOR");
2051 else if (Matches(
"ALTER",
"FOREIGN",
"TABLE", MatchAny))
2052 COMPLETE_WITH(
"ADD",
"ALTER",
"DISABLE TRIGGER",
"DROP",
"ENABLE",
2053 "INHERIT",
"NO INHERIT",
"OPTIONS",
"OWNER TO",
2054 "RENAME",
"SET",
"VALIDATE CONSTRAINT");
2057 else if (Matches(
"ALTER",
"INDEX"))
2058 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
2059 "ALL IN TABLESPACE");
2061 else if (Matches(
"ALTER",
"INDEX", MatchAny))
2062 COMPLETE_WITH(
"ALTER COLUMN",
"OWNER TO",
"RENAME TO",
"SET",
2063 "RESET",
"ATTACH PARTITION",
2064 "DEPENDS ON EXTENSION",
"NO DEPENDS ON EXTENSION");
2065 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ATTACH"))
2066 COMPLETE_WITH(
"PARTITION");
2067 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ATTACH",
"PARTITION"))
2068 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
2070 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER"))
2071 COMPLETE_WITH(
"COLUMN");
2073 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN"))
2075 set_completion_reference(prev3_wd);
2076 COMPLETE_WITH_SCHEMA_QUERY_VERBATIM(Query_for_list_of_attribute_numbers);
2079 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny))
2080 COMPLETE_WITH(
"SET STATISTICS");
2082 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET"))
2083 COMPLETE_WITH(
"STATISTICS");
2085 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STATISTICS"))
2090 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"SET"))
2091 COMPLETE_WITH(
"(",
"TABLESPACE");
2093 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"RESET"))
2096 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"RESET",
"("))
2097 COMPLETE_WITH(
"fillfactor",
2098 "deduplicate_items",
2099 "fastupdate",
"gin_pending_list_limit",
2101 "pages_per_range",
"autosummarize"
2103 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"SET",
"("))
2104 COMPLETE_WITH(
"fillfactor =",
2105 "deduplicate_items =",
2106 "fastupdate =",
"gin_pending_list_limit =",
2108 "pages_per_range =",
"autosummarize ="
2110 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"NO",
"DEPENDS"))
2111 COMPLETE_WITH(
"ON EXTENSION");
2112 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"DEPENDS"))
2113 COMPLETE_WITH(
"ON EXTENSION");
2116 else if (Matches(
"ALTER",
"LANGUAGE", MatchAny))
2117 COMPLETE_WITH(
"OWNER TO",
"RENAME TO");
2120 else if (Matches(
"ALTER",
"LARGE",
"OBJECT", MatchAny))
2121 COMPLETE_WITH(
"OWNER TO");
2124 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW"))
2125 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_matviews,
2126 "ALL IN TABLESPACE");
2129 else if (Matches(
"ALTER",
"USER|ROLE", MatchAny) &&
2130 !TailMatches(
"USER",
"MAPPING"))
2131 COMPLETE_WITH(
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
"CREATEROLE",
2132 "ENCRYPTED PASSWORD",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2133 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2134 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2135 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2136 "VALID UNTIL",
"WITH");
2139 else if (Matches(
"ALTER",
"USER|ROLE", MatchAny,
"WITH"))
2141 COMPLETE_WITH(
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
"CREATEROLE",
2142 "ENCRYPTED PASSWORD",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2143 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2144 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2145 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2149 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
2150 COMPLETE_WITH(
"FOR",
"GRANT",
"IN SCHEMA",
"REVOKE");
2152 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR"))
2153 COMPLETE_WITH(
"ROLE");
2155 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN"))
2156 COMPLETE_WITH(
"SCHEMA");
2158 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2160 COMPLETE_WITH(
"GRANT",
"REVOKE",
"IN SCHEMA");
2162 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2164 COMPLETE_WITH(
"GRANT",
"REVOKE",
"FOR ROLE");
2166 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2168 COMPLETE_WITH(
"ROLE");
2171 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2172 MatchAny,
"IN",
"SCHEMA", MatchAny) ||
2173 Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2174 MatchAny,
"FOR",
"ROLE|USER", MatchAny))
2175 COMPLETE_WITH(
"GRANT",
"REVOKE");
2177 else if (Matches(
"ALTER",
"DOMAIN", MatchAny))
2178 COMPLETE_WITH(
"ADD",
"DROP",
"OWNER TO",
"RENAME",
"SET",
2179 "VALIDATE CONSTRAINT");
2181 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"DROP"))
2182 COMPLETE_WITH(
"CONSTRAINT",
"DEFAULT",
"NOT NULL");
2184 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"DROP|RENAME|VALIDATE",
"CONSTRAINT"))
2186 set_completion_reference(prev3_wd);
2187 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_type);
2190 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"RENAME"))
2191 COMPLETE_WITH(
"CONSTRAINT",
"TO");
2193 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"RENAME",
"CONSTRAINT", MatchAny))
2194 COMPLETE_WITH(
"TO");
2197 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"SET"))
2198 COMPLETE_WITH(
"DEFAULT",
"NOT NULL",
"SCHEMA");
2200 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny))
2201 COMPLETE_WITH(
"AS",
"INCREMENT",
"MINVALUE",
"MAXVALUE",
"RESTART",
2202 "START",
"NO",
"CACHE",
"CYCLE",
"SET",
"OWNED BY",
2203 "OWNER TO",
"RENAME TO");
2205 else if (TailMatches(
"ALTER",
"SEQUENCE", MatchAny,
"AS"))
2206 COMPLETE_WITH_CS(
"smallint",
"integer",
"bigint");
2208 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny,
"NO"))
2209 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
2211 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny,
"SET"))
2212 COMPLETE_WITH(
"SCHEMA",
"LOGGED",
"UNLOGGED");
2214 else if (Matches(
"ALTER",
"SERVER", MatchAny))
2215 COMPLETE_WITH(
"VERSION",
"OPTIONS",
"OWNER TO",
"RENAME TO");
2217 else if (Matches(
"ALTER",
"SERVER", MatchAny,
"VERSION", MatchAny))
2218 COMPLETE_WITH(
"OPTIONS");
2220 else if (Matches(
"ALTER",
"SYSTEM"))
2221 COMPLETE_WITH(
"SET",
"RESET");
2222 else if (Matches(
"ALTER",
"SYSTEM",
"SET|RESET"))
2223 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_alter_system_set_vars,
2225 else if (Matches(
"ALTER",
"SYSTEM",
"SET", MatchAny))
2226 COMPLETE_WITH(
"TO");
2228 else if (Matches(
"ALTER",
"VIEW", MatchAny))
2229 COMPLETE_WITH(
"ALTER COLUMN",
"OWNER TO",
"RENAME",
"RESET",
"SET");
2231 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME"))
2232 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"TO");
2233 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2234 COMPLETE_WITH_ATTR(prev3_wd);
2236 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER", MatchAny) ||
2237 Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER",
"COLUMN", MatchAny))
2238 COMPLETE_WITH(
"SET DEFAULT",
"DROP DEFAULT");
2240 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME", MatchAnyExcept(
"TO")))
2241 COMPLETE_WITH(
"TO");
2243 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME",
"COLUMN", MatchAnyExcept(
"TO")))
2244 COMPLETE_WITH(
"TO");
2246 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RESET"))
2249 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET"))
2250 COMPLETE_WITH(
"(",
"SCHEMA");
2252 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET|RESET",
"("))
2253 COMPLETE_WITH_LIST(view_optional_parameters);
2254 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET",
"(", MatchAny))
2256 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET",
"(",
"check_option",
"="))
2257 COMPLETE_WITH(
"local",
"cascaded");
2258 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET",
"(",
"security_barrier|security_invoker",
"="))
2259 COMPLETE_WITH(
"true",
"false");
2262 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny))
2263 COMPLETE_WITH(
"ALTER COLUMN",
"CLUSTER ON",
"DEPENDS ON EXTENSION",
2264 "NO DEPENDS ON EXTENSION",
"OWNER TO",
"RENAME",
2267 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME"))
2268 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"TO");
2269 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2270 COMPLETE_WITH_ATTR(prev3_wd);
2272 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME", MatchAnyExcept(
"TO")))
2273 COMPLETE_WITH(
"TO");
2275 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME",
"COLUMN", MatchAnyExcept(
"TO")))
2276 COMPLETE_WITH(
"TO");
2278 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"SET"))
2279 COMPLETE_WITH(
"(",
"ACCESS METHOD",
"SCHEMA",
"TABLESPACE",
"WITHOUT CLUSTER");
2281 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"SET",
"ACCESS",
"METHOD"))
2282 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
2285 else if (Matches(
"ALTER",
"POLICY"))
2286 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
2288 else if (Matches(
"ALTER",
"POLICY", MatchAny))
2289 COMPLETE_WITH(
"ON");
2291 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON"))
2293 set_completion_reference(prev2_wd);
2294 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
2297 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny))
2298 COMPLETE_WITH(
"RENAME TO",
"TO",
"USING (",
"WITH CHECK (");
2300 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"TO"))
2301 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
2302 Keywords_for_list_of_grant_roles);
2304 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"USING"))
2307 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"WITH",
"CHECK"))
2311 else if (Matches(
"ALTER",
"RULE", MatchAny))
2312 COMPLETE_WITH(
"ON");
2315 else if (Matches(
"ALTER",
"RULE", MatchAny,
"ON"))
2317 set_completion_reference(prev2_wd);
2318 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
2322 else if (Matches(
"ALTER",
"RULE", MatchAny,
"ON", MatchAny))
2323 COMPLETE_WITH(
"RENAME TO");
2326 else if (Matches(
"ALTER",
"STATISTICS", MatchAny))
2327 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA",
"SET STATISTICS");
2329 else if (Matches(
"ALTER",
"STATISTICS", MatchAny,
"SET"))
2330 COMPLETE_WITH(
"SCHEMA",
"STATISTICS");
2333 else if (Matches(
"ALTER",
"TRIGGER", MatchAny))
2334 COMPLETE_WITH(
"ON");
2336 else if (Matches(
"ALTER",
"TRIGGER", MatchAny,
"ON"))
2338 set_completion_reference(prev2_wd);
2339 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
2343 else if (Matches(
"ALTER",
"TRIGGER", MatchAny,
"ON", MatchAny))
2344 COMPLETE_WITH(
"RENAME TO",
"DEPENDS ON EXTENSION",
2345 "NO DEPENDS ON EXTENSION");
2350 else if (Matches(
"ALTER",
"TABLE", MatchAny))
2351 COMPLETE_WITH(
"ADD",
"ALTER",
"CLUSTER ON",
"DISABLE",
"DROP",
2352 "ENABLE",
"INHERIT",
"NO",
"RENAME",
"RESET",
2353 "OWNER TO",
"SET",
"VALIDATE CONSTRAINT",
2354 "REPLICA IDENTITY",
"ATTACH PARTITION",
2355 "DETACH PARTITION",
"FORCE ROW LEVEL SECURITY",
2356 "SPLIT PARTITION",
"MERGE PARTITIONS (",
2359 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD"))
2362 COMPLETE_WITH(
"COLUMN",
"CONSTRAINT",
"CHECK",
"UNIQUE",
"PRIMARY KEY",
2363 "EXCLUDE",
"FOREIGN KEY");
2366 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"COLUMN", MatchAny) ||
2367 (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD", MatchAny) &&
2368 !Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"COLUMN|CONSTRAINT|CHECK|UNIQUE|PRIMARY|EXCLUDE|FOREIGN")))
2369 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
2371 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny))
2372 COMPLETE_WITH(
"CHECK",
"UNIQUE",
"PRIMARY KEY",
"EXCLUDE",
"FOREIGN KEY");
2374 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"PRIMARY",
"KEY") ||
2375 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"UNIQUE") ||
2376 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
"PRIMARY",
"KEY") ||
2377 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
"UNIQUE"))
2378 COMPLETE_WITH(
"(",
"USING INDEX");
2380 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"PRIMARY",
"KEY",
"USING",
"INDEX"))
2382 set_completion_reference(prev6_wd);
2383 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2386 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"UNIQUE",
"USING",
"INDEX"))
2388 set_completion_reference(prev5_wd);
2389 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2392 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
2393 "PRIMARY",
"KEY",
"USING",
"INDEX"))
2395 set_completion_reference(prev8_wd);
2396 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2399 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
2400 "UNIQUE",
"USING",
"INDEX"))
2402 set_completion_reference(prev7_wd);
2403 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2406 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE"))
2407 COMPLETE_WITH(
"ALWAYS",
"REPLICA",
"ROW LEVEL SECURITY",
"RULE",
2409 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"REPLICA|ALWAYS"))
2410 COMPLETE_WITH(
"RULE",
"TRIGGER");
2411 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"RULE"))
2413 set_completion_reference(prev3_wd);
2414 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2416 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE", MatchAny,
"RULE"))
2418 set_completion_reference(prev4_wd);
2419 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2421 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"TRIGGER"))
2423 set_completion_reference(prev3_wd);
2424 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2426 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE", MatchAny,
"TRIGGER"))
2428 set_completion_reference(prev4_wd);
2429 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2432 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"INHERIT"))
2433 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2435 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"NO"))
2436 COMPLETE_WITH(
"FORCE ROW LEVEL SECURITY",
"INHERIT");
2438 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"NO",
"INHERIT"))
2439 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2441 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE"))
2442 COMPLETE_WITH(
"ROW LEVEL SECURITY",
"RULE",
"TRIGGER");
2443 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE",
"RULE"))
2445 set_completion_reference(prev3_wd);
2446 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2448 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE",
"TRIGGER"))
2450 set_completion_reference(prev3_wd);
2451 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2455 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER"))
2456 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"CONSTRAINT");
2459 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME"))
2460 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"CONSTRAINT",
"TO");
2461 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2462 COMPLETE_WITH_ATTR(prev3_wd);
2465 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME", MatchAnyExcept(
"CONSTRAINT|TO")))
2466 COMPLETE_WITH(
"TO");
2469 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME",
"COLUMN|CONSTRAINT", MatchAnyExcept(
"TO")))
2470 COMPLETE_WITH(
"TO");
2473 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DROP"))
2474 COMPLETE_WITH(
"COLUMN",
"CONSTRAINT");
2476 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DROP",
"COLUMN"))
2477 COMPLETE_WITH_ATTR(prev3_wd);
2479 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER|DROP|RENAME",
"CONSTRAINT"))
2481 set_completion_reference(prev3_wd);
2482 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_table);
2485 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"VALIDATE",
"CONSTRAINT"))
2487 set_completion_reference(prev3_wd);
2488 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_table_not_validated);
2491 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny) ||
2492 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny))
2493 COMPLETE_WITH(
"TYPE",
"SET",
"RESET",
"RESTART",
"ADD",
"DROP");
2495 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD") ||
2496 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD"))
2497 COMPLETE_WITH(
"GENERATED");
2499 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD",
"GENERATED") ||
2500 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD",
"GENERATED"))
2501 COMPLETE_WITH(
"ALWAYS",
"BY DEFAULT");
2503 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD",
"GENERATED",
"ALWAYS") ||
2504 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD",
"GENERATED",
"ALWAYS") ||
2505 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD",
"GENERATED",
"BY",
"DEFAULT") ||
2506 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD",
"GENERATED",
"BY",
"DEFAULT"))
2507 COMPLETE_WITH(
"AS IDENTITY");
2509 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET") ||
2510 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET"))
2511 COMPLETE_WITH(
"(",
"COMPRESSION",
"DATA TYPE",
"DEFAULT",
"EXPRESSION",
"GENERATED",
"NOT NULL",
2512 "STATISTICS",
"STORAGE",
2514 "INCREMENT",
"MINVALUE",
"MAXVALUE",
"START",
"NO",
"CACHE",
"CYCLE");
2516 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"(") ||
2517 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"("))
2518 COMPLETE_WITH(
"n_distinct",
"n_distinct_inherited");
2520 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"COMPRESSION") ||
2521 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"COMPRESSION"))
2522 COMPLETE_WITH(
"DEFAULT",
"PGLZ",
"LZ4");
2524 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"EXPRESSION") ||
2525 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"EXPRESSION"))
2526 COMPLETE_WITH(
"AS");
2528 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"EXPRESSION",
"AS") ||
2529 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"EXPRESSION",
"AS"))
2532 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"GENERATED") ||
2533 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"GENERATED"))
2534 COMPLETE_WITH(
"ALWAYS",
"BY DEFAULT");
2536 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"NO") ||
2537 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"NO"))
2538 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
2540 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STORAGE") ||
2541 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"STORAGE"))
2542 COMPLETE_WITH(
"DEFAULT",
"PLAIN",
"EXTERNAL",
"EXTENDED",
"MAIN");
2544 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STATISTICS") ||
2545 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"STATISTICS"))
2550 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"DROP") ||
2551 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"DROP"))
2552 COMPLETE_WITH(
"DEFAULT",
"EXPRESSION",
"IDENTITY",
"NOT NULL");
2553 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"CLUSTER"))
2554 COMPLETE_WITH(
"ON");
2555 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"CLUSTER",
"ON"))
2557 set_completion_reference(prev3_wd);
2558 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
2561 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET"))
2562 COMPLETE_WITH(
"(",
"ACCESS METHOD",
"LOGGED",
"SCHEMA",
2563 "TABLESPACE",
"UNLOGGED",
"WITH",
"WITHOUT");
2569 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"ACCESS",
"METHOD"))
2570 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_table_access_methods,
2577 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"TABLESPACE"))
2578 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
2580 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"WITHOUT"))
2581 COMPLETE_WITH(
"CLUSTER",
"OIDS");
2583 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RESET"))
2586 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET|RESET",
"("))
2587 COMPLETE_WITH_LIST(table_storage_parameters);
2588 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY",
"USING",
"INDEX"))
2590 set_completion_reference(prev5_wd);
2591 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
2593 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY",
"USING"))
2594 COMPLETE_WITH(
"INDEX");
2595 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY"))
2596 COMPLETE_WITH(
"FULL",
"NOTHING",
"DEFAULT",
"USING");
2597 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA"))
2598 COMPLETE_WITH(
"IDENTITY");
2604 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ATTACH",
"PARTITION"))
2605 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2607 else if (TailMatches(
"ATTACH",
"PARTITION", MatchAny))
2608 COMPLETE_WITH(
"FOR VALUES",
"DEFAULT");
2609 else if (TailMatches(
"FOR",
"VALUES"))
2610 COMPLETE_WITH(
"FROM (",
"IN (",
"WITH (");
2616 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DETACH|SPLIT",
"PARTITION"))
2618 set_completion_reference(prev3_wd);
2619 COMPLETE_WITH_SCHEMA_QUERY(Query_for_partition_of_table);
2621 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DETACH",
"PARTITION", MatchAny))
2622 COMPLETE_WITH(
"CONCURRENTLY",
"FINALIZE");
2625 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SPLIT",
"PARTITION", MatchAny))
2626 COMPLETE_WITH(
"INTO ( PARTITION");
2629 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"MERGE",
"PARTITIONS",
"("))
2631 set_completion_reference(prev4_wd);
2632 COMPLETE_WITH_SCHEMA_QUERY(Query_for_partition_of_table);
2634 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"MERGE",
"PARTITIONS",
"(*)"))
2635 COMPLETE_WITH(
"INTO");
2638 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"OF"))
2639 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_composite_datatypes);
2642 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny))
2643 COMPLETE_WITH(
"RENAME TO",
"OWNER TO",
"SET",
"RESET");
2645 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny,
"SET|RESET"))
2648 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny,
"SET|RESET",
"("))
2649 COMPLETE_WITH(
"seq_page_cost",
"random_page_cost",
2650 "effective_io_concurrency",
"maintenance_io_concurrency");
2653 else if (Matches(
"ALTER",
"TEXT",
"SEARCH"))
2654 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
2655 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"TEMPLATE|PARSER", MatchAny))
2656 COMPLETE_WITH(
"RENAME TO",
"SET SCHEMA");
2657 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"DICTIONARY", MatchAny))
2658 COMPLETE_WITH(
"(",
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
2659 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"CONFIGURATION", MatchAny))
2660 COMPLETE_WITH(
"ADD MAPPING FOR",
"ALTER MAPPING",
2662 "OWNER TO",
"RENAME TO",
"SET SCHEMA");
2665 else if (Matches(
"ALTER",
"TYPE", MatchAny))
2666 COMPLETE_WITH(
"ADD ATTRIBUTE",
"ADD VALUE",
"ALTER ATTRIBUTE",
2668 "OWNER TO",
"RENAME",
"SET SCHEMA",
"SET (");
2670 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ADD"))
2671 COMPLETE_WITH(
"ATTRIBUTE",
"VALUE");
2673 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME"))
2674 COMPLETE_WITH(
"ATTRIBUTE",
"TO",
"VALUE");
2676 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME",
"ATTRIBUTE|VALUE", MatchAny))
2677 COMPLETE_WITH(
"TO");
2683 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ALTER|DROP|RENAME",
"ATTRIBUTE"))
2684 COMPLETE_WITH_ATTR(prev3_wd);
2686 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ALTER",
"ATTRIBUTE", MatchAny))
2687 COMPLETE_WITH(
"TYPE");
2689 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME",
"VALUE"))
2690 COMPLETE_WITH_ENUM_VALUE(prev3_wd);
2692 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"SET"))
2693 COMPLETE_WITH(
"(",
"SCHEMA");
2695 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"SET",
"("))
2696 COMPLETE_WITH(
"ANALYZE",
"RECEIVE",
"SEND",
"STORAGE",
"SUBSCRIPT",
2697 "TYPMOD_IN",
"TYPMOD_OUT");
2700 else if (Matches(
"ALTER",
"GROUP", MatchAny))
2701 COMPLETE_WITH(
"ADD USER",
"DROP USER",
"RENAME TO");
2703 else if (Matches(
"ALTER",
"GROUP", MatchAny,
"ADD|DROP"))
2704 COMPLETE_WITH(
"USER");
2706 else if (Matches(
"ALTER",
"GROUP", MatchAny,
"ADD|DROP",
"USER"))
2707 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
2713 else if (Matches(
"ANALYZE"))
2714 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_analyzables,
2716 else if (HeadMatches(
"ANALYZE",
"(*") &&
2717 !HeadMatches(
"ANALYZE",
"(*)"))
2724 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
2725 COMPLETE_WITH(
"VERBOSE",
"SKIP_LOCKED",
"BUFFER_USAGE_LIMIT");
2726 else if (TailMatches(
"VERBOSE|SKIP_LOCKED"))
2727 COMPLETE_WITH(
"ON",
"OFF");
2729 else if (HeadMatches(
"ANALYZE") && TailMatches(
"("))
2731 COMPLETE_WITH_ATTR(prev2_wd);
2732 else if (HeadMatches(
"ANALYZE"))
2733 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_analyzables);
2736 else if (Matches(
"BEGIN"))
2737 COMPLETE_WITH(
"WORK",
"TRANSACTION",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
2739 else if (Matches(
"END|ABORT"))
2740 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION");
2742 else if (Matches(
"COMMIT"))
2743 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION",
"PREPARED");
2745 else if (Matches(
"RELEASE"))
2746 COMPLETE_WITH(
"SAVEPOINT");
2748 else if (Matches(
"ROLLBACK"))
2749 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION",
"TO SAVEPOINT",
"PREPARED");
2750 else if (Matches(
"ABORT|END|COMMIT|ROLLBACK",
"AND"))
2751 COMPLETE_WITH(
"CHAIN");
2753 else if (Matches(
"CALL"))
2754 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_procedures);
2755 else if (Matches(
"CALL", MatchAny))
2758 else if (Matches(
"CLOSE"))
2759 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
2762 else if (Matches(
"CLUSTER"))
2763 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_clusterables,
2765 else if (Matches(
"CLUSTER",
"VERBOSE") ||
2766 Matches(
"CLUSTER",
"(*)"))
2767 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_clusterables);
2769 else if (Matches(
"CLUSTER", MatchAnyExcept(
"VERBOSE|ON|(|(*)")))
2770 COMPLETE_WITH(
"USING");
2772 else if (Matches(
"CLUSTER",
"VERBOSE|(*)", MatchAny))
2773 COMPLETE_WITH(
"USING");
2775 else if (Matches(
"CLUSTER", MatchAny,
"USING") ||
2776 Matches(
"CLUSTER",
"VERBOSE|(*)", MatchAny,
"USING"))
2778 set_completion_reference(prev2_wd);
2779 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
2781 else if (HeadMatches(
"CLUSTER",
"(*") &&
2782 !HeadMatches(
"CLUSTER",
"(*)"))
2789 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
2790 COMPLETE_WITH(
"VERBOSE");
2794 else if (Matches(
"COMMENT"))
2795 COMPLETE_WITH(
"ON");
2796 else if (Matches(
"COMMENT",
"ON"))
2797 COMPLETE_WITH(
"ACCESS METHOD",
"AGGREGATE",
"CAST",
"COLLATION",
2798 "COLUMN",
"CONSTRAINT",
"CONVERSION",
"DATABASE",
2799 "DOMAIN",
"EXTENSION",
"EVENT TRIGGER",
2800 "FOREIGN DATA WRAPPER",
"FOREIGN TABLE",
2801 "FUNCTION",
"INDEX",
"LANGUAGE",
"LARGE OBJECT",
2802 "MATERIALIZED VIEW",
"OPERATOR",
"POLICY",
2803 "PROCEDURE",
"PROCEDURAL LANGUAGE",
"PUBLICATION",
"ROLE",
2804 "ROUTINE",
"RULE",
"SCHEMA",
"SEQUENCE",
"SERVER",
2805 "STATISTICS",
"SUBSCRIPTION",
"TABLE",
2806 "TABLESPACE",
"TEXT SEARCH",
"TRANSFORM FOR",
2807 "TRIGGER",
"TYPE",
"VIEW");
2808 else if (Matches(
"COMMENT",
"ON",
"ACCESS",
"METHOD"))
2809 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
2810 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT"))
2811 COMPLETE_WITH_QUERY(Query_for_all_table_constraints);
2812 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny))
2813 COMPLETE_WITH(
"ON");
2814 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny,
"ON"))
2816 set_completion_reference(prev2_wd);
2817 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables_for_constraint,
2820 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny,
"ON",
"DOMAIN"))
2821 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
2822 else if (Matches(
"COMMENT",
"ON",
"EVENT",
"TRIGGER"))
2823 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
2824 else if (Matches(
"COMMENT",
"ON",
"FOREIGN"))
2825 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
2826 else if (Matches(
"COMMENT",
"ON",
"FOREIGN",
"TABLE"))
2827 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
2828 else if (Matches(
"COMMENT",
"ON",
"MATERIALIZED",
"VIEW"))
2829 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
2830 else if (Matches(
"COMMENT",
"ON",
"POLICY"))
2831 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
2832 else if (Matches(
"COMMENT",
"ON",
"POLICY", MatchAny))
2833 COMPLETE_WITH(
"ON");
2834 else if (Matches(
"COMMENT",
"ON",
"POLICY", MatchAny,
"ON"))
2836 set_completion_reference(prev2_wd);
2837 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
2839 else if (Matches(
"COMMENT",
"ON",
"PROCEDURAL",
"LANGUAGE"))
2840 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
2841 else if (Matches(
"COMMENT",
"ON",
"RULE", MatchAny))
2842 COMPLETE_WITH(
"ON");
2843 else if (Matches(
"COMMENT",
"ON",
"RULE", MatchAny,
"ON"))
2845 set_completion_reference(prev2_wd);
2846 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
2848 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH"))
2849 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
2850 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"CONFIGURATION"))
2851 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_configurations);
2852 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"DICTIONARY"))
2853 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_dictionaries);
2854 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"PARSER"))
2855 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_parsers);
2856 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"TEMPLATE"))
2857 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_templates);
2858 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR"))
2859 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
2860 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR", MatchAny))
2861 COMPLETE_WITH(
"LANGUAGE");
2862 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
2864 set_completion_reference(prev2_wd);
2865 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
2867 else if (Matches(
"COMMENT",
"ON",
"TRIGGER", MatchAny))
2868 COMPLETE_WITH(
"ON");
2869 else if (Matches(
"COMMENT",
"ON",
"TRIGGER", MatchAny,
"ON"))
2871 set_completion_reference(prev2_wd);
2872 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
2874 else if (Matches(
"COMMENT",
"ON", MatchAny, MatchAnyExcept(
"IS")) ||
2875 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAnyExcept(
"IS")) ||
2876 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAny, MatchAnyExcept(
"IS")) ||
2877 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAny, MatchAny, MatchAnyExcept(
"IS")))
2878 COMPLETE_WITH(
"IS");
2886 else if (Matches(
"COPY|\\copy"))
2887 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
"(");
2889 else if (Matches(
"COPY|\\copy",
"("))
2890 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES",
"INSERT INTO",
"UPDATE",
"DELETE FROM",
"WITH");
2892 else if (Matches(
"COPY|\\copy", MatchAny))
2893 COMPLETE_WITH(
"FROM",
"TO");
2895 else if (Matches(
"COPY", MatchAny,
"FROM|TO"))
2897 completion_charp =
"";
2898 completion_force_quote =
true;
2899 matches = rl_completion_matches(
text, complete_from_files);
2901 else if (Matches(
"\\copy", MatchAny,
"FROM|TO"))
2903 completion_charp =
"";
2904 completion_force_quote =
false;
2905 matches = rl_completion_matches(
text, complete_from_files);
2909 else if (Matches(
"COPY|\\copy", MatchAny,
"TO", MatchAny))
2910 COMPLETE_WITH(
"WITH (");
2913 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM", MatchAny))
2914 COMPLETE_WITH(
"WITH (",
"WHERE");
2917 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO", MatchAny,
"WITH",
"("))
2918 COMPLETE_WITH(
"FORMAT",
"FREEZE",
"DELIMITER",
"NULL",
2919 "HEADER",
"QUOTE",
"ESCAPE",
"FORCE_QUOTE",
2920 "FORCE_NOT_NULL",
"FORCE_NULL",
"ENCODING",
"DEFAULT",
2921 "ON_ERROR",
"LOG_VERBOSITY");
2924 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO", MatchAny,
"WITH",
"(",
"FORMAT"))
2925 COMPLETE_WITH(
"binary",
"csv",
"text");
2928 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO", MatchAny,
"WITH",
"(",
"ON_ERROR"))
2929 COMPLETE_WITH(
"stop",
"ignore");
2932 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO", MatchAny,
"WITH",
"(",
"LOG_VERBOSITY"))
2933 COMPLETE_WITH(
"default",
"verbose");
2936 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM", MatchAny,
"WITH", MatchAny))
2937 COMPLETE_WITH(
"WHERE");
2941 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny))
2942 COMPLETE_WITH(
"TYPE");
2944 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny,
"TYPE"))
2945 COMPLETE_WITH(
"INDEX",
"TABLE");
2947 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny,
"TYPE", MatchAny))
2948 COMPLETE_WITH(
"HANDLER");
2951 else if (Matches(
"CREATE",
"COLLATION", MatchAny))
2952 COMPLETE_WITH(
"(",
"FROM");
2953 else if (Matches(
"CREATE",
"COLLATION", MatchAny,
"FROM"))
2954 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_collations);
2955 else if (HeadMatches(
"CREATE",
"COLLATION", MatchAny,
"(*"))
2957 if (TailMatches(
"(|*,"))
2958 COMPLETE_WITH(
"LOCALE =",
"LC_COLLATE =",
"LC_CTYPE =",
2959 "PROVIDER =",
"DETERMINISTIC =");
2960 else if (TailMatches(
"PROVIDER",
"="))
2961 COMPLETE_WITH(
"libc",
"icu");
2962 else if (TailMatches(
"DETERMINISTIC",
"="))
2963 COMPLETE_WITH(
"true",
"false");
2967 else if (Matches(
"CREATE",
"DATABASE", MatchAny))
2968 COMPLETE_WITH(
"OWNER",
"TEMPLATE",
"ENCODING",
"TABLESPACE",
2969 "IS_TEMPLATE",
"STRATEGY",
2970 "ALLOW_CONNECTIONS",
"CONNECTION LIMIT",
2971 "LC_COLLATE",
"LC_CTYPE",
"LOCALE",
"OID",
2972 "LOCALE_PROVIDER",
"ICU_LOCALE");
2974 else if (Matches(
"CREATE",
"DATABASE", MatchAny,
"TEMPLATE"))
2975 COMPLETE_WITH_QUERY(Query_for_list_of_template_databases);
2976 else if (Matches(
"CREATE",
"DATABASE", MatchAny,
"STRATEGY"))
2977 COMPLETE_WITH(
"WAL_LOG",
"FILE_COPY");
2980 else if (Matches(
"CREATE",
"DOMAIN", MatchAny))
2981 COMPLETE_WITH(
"AS");
2982 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"AS"))
2983 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
2984 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"AS", MatchAny))
2985 COMPLETE_WITH(
"COLLATE",
"DEFAULT",
"CONSTRAINT",
2986 "NOT NULL",
"NULL",
"CHECK (");
2987 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"COLLATE"))
2988 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_collations);
2992 else if (Matches(
"CREATE",
"EXTENSION"))
2993 COMPLETE_WITH_QUERY(Query_for_list_of_available_extensions);
2995 else if (Matches(
"CREATE",
"EXTENSION", MatchAny))
2996 COMPLETE_WITH(
"WITH SCHEMA",
"CASCADE",
"VERSION");
2998 else if (Matches(
"CREATE",
"EXTENSION", MatchAny,
"VERSION"))
3000 set_completion_reference(prev2_wd);
3001 COMPLETE_WITH_QUERY(Query_for_list_of_available_extension_versions);
3005 else if (Matches(
"CREATE",
"FOREIGN"))
3006 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
3009 else if (Matches(
"CREATE",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
3010 COMPLETE_WITH(
"HANDLER",
"VALIDATOR",
"OPTIONS");
3013 else if (Matches(
"CREATE",
"FOREIGN",
"TABLE", MatchAny))
3014 COMPLETE_WITH(
"(",
"PARTITION OF");
3018 else if (TailMatches(
"CREATE",
"UNIQUE"))
3019 COMPLETE_WITH(
"INDEX");
3025 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX"))
3026 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
3027 "ON",
"CONCURRENTLY");
3033 else if (TailMatches(
"INDEX|CONCURRENTLY", MatchAny,
"ON") ||
3034 TailMatches(
"INDEX|CONCURRENTLY",
"ON"))
3035 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexables);
3041 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX",
"CONCURRENTLY"))
3042 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
3045 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX", MatchAny) ||
3046 TailMatches(
"CREATE|UNIQUE",
"INDEX",
"CONCURRENTLY", MatchAny))
3047 COMPLETE_WITH(
"ON");
3053 else if (TailMatches(
"INDEX", MatchAny,
"ON", MatchAny) ||
3054 TailMatches(
"INDEX|CONCURRENTLY",
"ON", MatchAny))
3055 COMPLETE_WITH(
"(",
"USING");
3056 else if (TailMatches(
"INDEX", MatchAny,
"ON", MatchAny,
"(") ||
3057 TailMatches(
"INDEX|CONCURRENTLY",
"ON", MatchAny,
"("))
3058 COMPLETE_WITH_ATTR(prev2_wd);
3060 else if (TailMatches(
"ON", MatchAny,
"USING", MatchAny,
"("))
3061 COMPLETE_WITH_ATTR(prev4_wd);
3063 else if (TailMatches(
"INDEX", MatchAny, MatchAny,
"ON", MatchAny,
"USING") ||
3064 TailMatches(
"INDEX", MatchAny,
"ON", MatchAny,
"USING") ||
3065 TailMatches(
"INDEX",
"ON", MatchAny,
"USING"))
3066 COMPLETE_WITH_QUERY(Query_for_list_of_index_access_methods);
3067 else if (TailMatches(
"ON", MatchAny,
"USING", MatchAny) &&
3068 !TailMatches(
"POLICY", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny) &&
3069 !TailMatches(
"FOR", MatchAny, MatchAny, MatchAny))
3073 else if (Matches(
"CREATE",
"OR"))
3074 COMPLETE_WITH(
"REPLACE");
3078 else if (Matches(
"CREATE",
"POLICY", MatchAny))
3079 COMPLETE_WITH(
"ON");
3081 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON"))
3082 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3084 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny))
3085 COMPLETE_WITH(
"AS",
"FOR",
"TO",
"USING (",
"WITH CHECK (");
3087 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS"))
3088 COMPLETE_WITH(
"PERMISSIVE",
"RESTRICTIVE");
3094 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny))
3095 COMPLETE_WITH(
"FOR",
"TO",
"USING",
"WITH CHECK");
3097 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR"))
3098 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
3100 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"INSERT"))
3101 COMPLETE_WITH(
"TO",
"WITH CHECK (");
3103 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"SELECT|DELETE"))
3104 COMPLETE_WITH(
"TO",
"USING (");
3106 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"ALL|UPDATE"))
3107 COMPLETE_WITH(
"TO",
"USING (",
"WITH CHECK (");
3109 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"TO"))
3110 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3111 Keywords_for_list_of_grant_roles);
3113 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"USING"))
3120 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR"))
3121 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
3127 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"INSERT"))
3128 COMPLETE_WITH(
"TO",
"WITH CHECK (");
3134 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"SELECT|DELETE"))
3135 COMPLETE_WITH(
"TO",
"USING (");
3141 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"ALL|UPDATE"))
3142 COMPLETE_WITH(
"TO",
"USING (",
"WITH CHECK (");
3148 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"TO"))
3149 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3150 Keywords_for_list_of_grant_roles);
3156 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"USING"))
3161 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny))
3162 COMPLETE_WITH(
"FOR TABLE",
"FOR ALL TABLES",
"FOR TABLES IN SCHEMA",
"WITH (");
3163 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR"))
3164 COMPLETE_WITH(
"TABLE",
"ALL TABLES",
"TABLES IN SCHEMA");
3165 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"ALL"))
3166 COMPLETE_WITH(
"TABLES");
3167 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"ALL",
"TABLES"))
3168 COMPLETE_WITH(
"WITH (");
3169 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLES"))
3170 COMPLETE_WITH(
"IN SCHEMA");
3171 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLE", MatchAny) && !ends_with(prev_wd,
','))
3172 COMPLETE_WITH(
"WHERE (",
"WITH (");
3174 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLE"))
3175 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3181 else if (HeadMatches(
"CREATE",
"PUBLICATION", MatchAny) && TailMatches(
"WHERE"))
3183 else if (HeadMatches(
"CREATE",
"PUBLICATION", MatchAny) && TailMatches(
"WHERE",
"("))
3184 COMPLETE_WITH_ATTR(prev3_wd);
3185 else if (HeadMatches(
"CREATE",
"PUBLICATION", MatchAny) && TailMatches(
"WHERE",
"(*)"))
3186 COMPLETE_WITH(
" WITH (");
3191 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLES",
"IN",
"SCHEMA"))
3192 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
3193 " AND nspname NOT LIKE E'pg\\\\_%%'",
3195 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLES",
"IN",
"SCHEMA", MatchAny) && (!ends_with(prev_wd,
',')))
3196 COMPLETE_WITH(
"WITH (");
3198 else if (HeadMatches(
"CREATE",
"PUBLICATION") && TailMatches(
"WITH",
"("))
3199 COMPLETE_WITH(
"publish",
"publish_via_partition_root");
3203 else if (Matches(
"CREATE",
"RULE", MatchAny) ||
3204 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny))
3205 COMPLETE_WITH(
"AS ON");
3207 else if (Matches(
"CREATE",
"RULE", MatchAny,
"AS") ||
3208 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny,
"AS"))
3209 COMPLETE_WITH(
"ON");
3215 else if (Matches(
"CREATE",
"RULE", MatchAny,
"AS",
"ON") ||
3216 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny,
"AS",
"ON"))
3217 COMPLETE_WITH(
"SELECT",
"UPDATE",
"INSERT",
"DELETE");
3219 else if (TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE"))
3220 COMPLETE_WITH(
"TO");
3222 else if (TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE",
"TO"))
3223 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3226 else if (Matches(
"CREATE",
"SCHEMA"))
3227 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas,
3229 else if (Matches(
"CREATE",
"SCHEMA",
"AUTHORIZATION") ||
3230 Matches(
"CREATE",
"SCHEMA", MatchAny,
"AUTHORIZATION"))
3231 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3232 Keywords_for_list_of_owner_roles);
3233 else if (Matches(
"CREATE",
"SCHEMA",
"AUTHORIZATION", MatchAny) ||
3234 Matches(
"CREATE",
"SCHEMA", MatchAny,
"AUTHORIZATION", MatchAny))
3235 COMPLETE_WITH(
"CREATE",
"GRANT");
3236 else if (Matches(
"CREATE",
"SCHEMA", MatchAny))
3237 COMPLETE_WITH(
"AUTHORIZATION",
"CREATE",
"GRANT");
3240 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny) ||
3241 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny))
3242 COMPLETE_WITH(
"AS",
"INCREMENT BY",
"MINVALUE",
"MAXVALUE",
"NO",
3243 "CACHE",
"CYCLE",
"OWNED BY",
"START WITH");
3244 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny,
"AS") ||
3245 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny,
"AS"))
3246 COMPLETE_WITH_CS(
"smallint",
"integer",
"bigint");
3247 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny,
"NO") ||
3248 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny,
"NO"))
3249 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
3252 else if (Matches(
"CREATE",
"SERVER", MatchAny))
3253 COMPLETE_WITH(
"TYPE",
"VERSION",
"FOREIGN DATA WRAPPER");
3256 else if (Matches(
"CREATE",
"STATISTICS", MatchAny))
3257 COMPLETE_WITH(
"(",
"ON");
3258 else if (Matches(
"CREATE",
"STATISTICS", MatchAny,
"("))
3259 COMPLETE_WITH(
"ndistinct",
"dependencies",
"mcv");
3260 else if (Matches(
"CREATE",
"STATISTICS", MatchAny,
"(*)"))
3261 COMPLETE_WITH(
"ON");
3262 else if (HeadMatches(
"CREATE",
"STATISTICS", MatchAny) &&
3263 TailMatches(
"FROM"))
3264 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3268 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY"))
3269 COMPLETE_WITH(
"SEQUENCE",
"TABLE",
"VIEW");
3271 else if (TailMatches(
"CREATE",
"UNLOGGED"))
3274 if (HeadMatches(
"CREATE",
"SCHEMA"))
3275 COMPLETE_WITH(
"TABLE",
"SEQUENCE");
3277 COMPLETE_WITH(
"TABLE",
"SEQUENCE",
"MATERIALIZED VIEW");
3280 else if (TailMatches(
"PARTITION",
"BY"))
3281 COMPLETE_WITH(
"RANGE (",
"LIST (",
"HASH (");
3283 else if (TailMatches(
"PARTITION",
"OF"))
3284 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_tables);
3286 else if (TailMatches(
"PARTITION",
"OF", MatchAny))
3287 COMPLETE_WITH(
"FOR VALUES",
"DEFAULT");
3289 else if (TailMatches(
"CREATE",
"TABLE", MatchAny) ||
3290 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny))
3291 COMPLETE_WITH(
"(",
"AS",
"OF",
"PARTITION OF");
3293 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"OF") ||
3294 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"OF"))
3295 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_composite_datatypes);
3297 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"AS") ||
3298 TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)",
"AS") ||
3299 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"AS") ||
3300 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"(*)",
"AS"))
3301 COMPLETE_WITH(
"EXECUTE",
"SELECT",
"TABLE",
"VALUES",
"WITH");
3303 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)") ||
3304 TailMatches(
"CREATE",
"UNLOGGED",
"TABLE", MatchAny,
"(*)"))
3305 COMPLETE_WITH(
"AS",
"INHERITS (",
"PARTITION BY",
"USING",
"TABLESPACE",
"WITH (");
3306 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"TABLE", MatchAny,
"(*)"))
3307 COMPLETE_WITH(
"AS",
"INHERITS (",
"ON COMMIT",
"PARTITION BY",
3308 "TABLESPACE",
"WITH (");
3310 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)",
"USING") ||
3311 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"(*)",
"USING"))
3312 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
3314 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)",
"WITH",
"(") ||
3315 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"(*)",
"WITH",
"("))
3316 COMPLETE_WITH_LIST(table_storage_parameters);
3318 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"TABLE", MatchAny,
"(*)",
"ON",
"COMMIT"))
3319 COMPLETE_WITH(
"DELETE ROWS",
"DROP",
"PRESERVE ROWS");
3322 else if (Matches(
"CREATE",
"TABLESPACE", MatchAny))
3323 COMPLETE_WITH(
"OWNER",
"LOCATION");
3325 else if (Matches(
"CREATE",
"TABLESPACE", MatchAny,
"OWNER", MatchAny))
3326 COMPLETE_WITH(
"LOCATION");
3329 else if (Matches(
"CREATE",
"TEXT",
"SEARCH"))
3330 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3331 else if (Matches(
"CREATE",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE", MatchAny))
3335 else if (Matches(
"CREATE",
"TRANSFORM") ||
3336 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM"))
3337 COMPLETE_WITH(
"FOR");
3338 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR") ||
3339 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR"))
3340 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3341 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR", MatchAny) ||
3342 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR", MatchAny))
3343 COMPLETE_WITH(
"LANGUAGE");
3344 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE") ||
3345 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
3347 set_completion_reference(prev2_wd);
3348 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3352 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny))
3353 COMPLETE_WITH(
"CONNECTION");
3354 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny,
"CONNECTION", MatchAny))
3355 COMPLETE_WITH(
"PUBLICATION");
3356 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny,
"CONNECTION",
3357 MatchAny,
"PUBLICATION"))
3361 else if (HeadMatches(
"CREATE",
"SUBSCRIPTION") && TailMatches(
"PUBLICATION", MatchAny))
3362 COMPLETE_WITH(
"WITH (");
3364 else if (HeadMatches(
"CREATE",
"SUBSCRIPTION") && TailMatches(
"WITH",
"("))
3365 COMPLETE_WITH(
"binary",
"connect",
"copy_data",
"create_slot",
3366 "disable_on_error",
"enabled",
"failover",
"origin",
3367 "password_required",
"run_as_owner",
"slot_name",
3368 "streaming",
"synchronous_commit",
"two_phase");
3376 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny) ||
3377 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny))
3378 COMPLETE_WITH(
"BEFORE",
"AFTER",
"INSTEAD OF");
3384 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER") ||
3385 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER"))
3386 COMPLETE_WITH(
"INSERT",
"DELETE",
"UPDATE",
"TRUNCATE");
3388 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF") ||
3389 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF"))
3390 COMPLETE_WITH(
"INSERT",
"DELETE",
"UPDATE");
3396 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny) ||
3397 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny) ||
3398 TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny) ||
3399 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny))
3400 COMPLETE_WITH(
"ON",
"OR");
3407 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny,
"ON") ||
3408 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny,
"ON"))
3409 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3415 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny,
"ON") ||
3416 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny,
"ON"))
3417 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
3418 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3419 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3420 TailMatches(
"ON", MatchAny))
3423 COMPLETE_WITH(
"NOT DEFERRABLE",
"DEFERRABLE",
"INITIALLY",
3424 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3426 COMPLETE_WITH(
"NOT DEFERRABLE",
"DEFERRABLE",
"INITIALLY",
3427 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3429 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3430 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3431 (TailMatches(
"DEFERRABLE") || TailMatches(
"INITIALLY",
"IMMEDIATE|DEFERRED")))
3434 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3436 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3438 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3439 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3440 TailMatches(
"REFERENCING"))
3441 COMPLETE_WITH(
"OLD TABLE",
"NEW TABLE");
3442 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3443 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3444 TailMatches(
"OLD|NEW",
"TABLE"))
3445 COMPLETE_WITH(
"AS");
3446 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3447 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3448 (TailMatches(
"REFERENCING",
"OLD",
"TABLE",
"AS", MatchAny) ||
3449 TailMatches(
"REFERENCING",
"OLD",
"TABLE", MatchAny)))
3452 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3454 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3456 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3457 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3458 (TailMatches(
"REFERENCING",
"NEW",
"TABLE",
"AS", MatchAny) ||
3459 TailMatches(
"REFERENCING",
"NEW",
"TABLE", MatchAny)))
3462 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3464 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3466 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3467 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3468 (TailMatches(
"REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3469 TailMatches(
"REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3470 TailMatches(
"REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE", MatchAny) ||
3471 TailMatches(
"REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE", MatchAny)))
3474 COMPLETE_WITH(
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3476 COMPLETE_WITH(
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3478 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3479 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3481 COMPLETE_WITH(
"EACH",
"ROW",
"STATEMENT");
3482 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3483 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3484 TailMatches(
"FOR",
"EACH"))
3485 COMPLETE_WITH(
"ROW",
"STATEMENT");
3486 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3487 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3488 (TailMatches(
"FOR",
"EACH",
"ROW|STATEMENT") ||
3489 TailMatches(
"FOR",
"ROW|STATEMENT")))
3492 COMPLETE_WITH(
"WHEN (",
"EXECUTE FUNCTION");
3494 COMPLETE_WITH(
"WHEN (",
"EXECUTE PROCEDURE");
3496 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3497 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3498 TailMatches(
"WHEN",
"(*)"))
3501 COMPLETE_WITH(
"EXECUTE FUNCTION");
3503 COMPLETE_WITH(
"EXECUTE PROCEDURE");
3510 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3511 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3512 TailMatches(
"EXECUTE"))
3515 COMPLETE_WITH(
"FUNCTION");
3517 COMPLETE_WITH(
"PROCEDURE");
3519 else if ((HeadMatches(
"CREATE",
"TRIGGER") ||
3520 HeadMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER")) &&
3521 TailMatches(
"EXECUTE",
"FUNCTION|PROCEDURE"))
3522 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
3525 else if (Matches(
"CREATE",
"ROLE|GROUP|USER", MatchAny) &&
3526 !TailMatches(
"USER",
"MAPPING"))
3527 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
3528 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
3529 "LOGIN",
"NOBYPASSRLS",
3530 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
3531 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
3532 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
3533 "VALID UNTIL",
"WITH");
3536 else if (Matches(
"CREATE",
"ROLE|GROUP|USER", MatchAny,
"WITH"))
3538 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
3539 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
3540 "LOGIN",
"NOBYPASSRLS",
3541 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
3542 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
3543 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
3547 else if (Matches(
"CREATE",
"ROLE|USER|GROUP", MatchAny,
"IN"))
3548 COMPLETE_WITH(
"GROUP",
"ROLE");
3551 else if (Matches(
"CREATE",
"TYPE", MatchAny))
3552 COMPLETE_WITH(
"(",
"AS");
3553 else if (Matches(
"CREATE",
"TYPE", MatchAny,
"AS"))
3554 COMPLETE_WITH(
"ENUM",
"RANGE",
"(");
3555 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"AS",
"("))
3557 if (TailMatches(
"(|*,", MatchAny))
3558 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3559 else if (TailMatches(
"(|*,", MatchAny, MatchAnyExcept(
"*)")))
3560 COMPLETE_WITH(
"COLLATE",
",",
")");
3562 else if (Matches(
"CREATE",
"TYPE", MatchAny,
"AS",
"ENUM|RANGE"))
3564 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"("))
3566 if (TailMatches(
"(|*,"))
3567 COMPLETE_WITH(
"INPUT",
"OUTPUT",
"RECEIVE",
"SEND",
3568 "TYPMOD_IN",
"TYPMOD_OUT",
"ANALYZE",
"SUBSCRIPT",
3569 "INTERNALLENGTH",
"PASSEDBYVALUE",
"ALIGNMENT",
3570 "STORAGE",
"LIKE",
"CATEGORY",
"PREFERRED",
3571 "DEFAULT",
"ELEMENT",
"DELIMITER",
3573 else if (TailMatches(
"(*|*,", MatchAnyExcept(
"*=")))
3575 else if (TailMatches(
"=", MatchAnyExcept(
"*)")))
3576 COMPLETE_WITH(
",",
")");
3578 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"AS",
"RANGE",
"("))
3580 if (TailMatches(
"(|*,"))
3581 COMPLETE_WITH(
"SUBTYPE",
"SUBTYPE_OPCLASS",
"COLLATION",
3582 "CANONICAL",
"SUBTYPE_DIFF",
3583 "MULTIRANGE_TYPE_NAME");
3584 else if (TailMatches(
"(*|*,", MatchAnyExcept(
"*=")))
3586 else if (TailMatches(
"=", MatchAnyExcept(
"*)")))
3587 COMPLETE_WITH(
",",
")");
3592 else if (TailMatches(
"CREATE",
"VIEW", MatchAny) ||
3593 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny))
3594 COMPLETE_WITH(
"AS",
"WITH");
3596 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"AS") ||
3597 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"AS"))
3598 COMPLETE_WITH(
"SELECT");
3600 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH") ||
3601 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH"))
3603 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(") ||
3604 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"("))
3605 COMPLETE_WITH_LIST(view_optional_parameters);
3606 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option") ||
3607 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option"))
3609 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option",
"=") ||
3610 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option",
"="))
3611 COMPLETE_WITH(
"local",
"cascaded");
3613 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(*)") ||
3614 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(*)"))
3615 COMPLETE_WITH(
"AS");
3617 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(*)",
"AS") ||
3618 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(*)",
"AS"))
3619 COMPLETE_WITH(
"SELECT");
3622 else if (Matches(
"CREATE",
"MATERIALIZED"))
3623 COMPLETE_WITH(
"VIEW");
3625 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny))
3626 COMPLETE_WITH(
"AS");
3628 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny,
"AS"))
3629 COMPLETE_WITH(
"SELECT");
3632 else if (Matches(
"CREATE",
"EVENT"))
3633 COMPLETE_WITH(
"TRIGGER");
3635 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny))
3636 COMPLETE_WITH(
"ON");
3638 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny,
"ON"))
3639 COMPLETE_WITH(
"ddl_command_start",
"ddl_command_end",
"login",
3640 "sql_drop",
"table_rewrite");
3647 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny,
"ON", MatchAny))
3650 COMPLETE_WITH(
"WHEN TAG IN (",
"EXECUTE FUNCTION");
3652 COMPLETE_WITH(
"WHEN TAG IN (",
"EXECUTE PROCEDURE");
3654 else if (HeadMatches(
"CREATE",
"EVENT",
"TRIGGER") &&
3655 TailMatches(
"WHEN|AND", MatchAny,
"IN",
"(*)"))
3658 COMPLETE_WITH(
"EXECUTE FUNCTION");
3660 COMPLETE_WITH(
"EXECUTE PROCEDURE");
3662 else if (HeadMatches(
"CREATE",
"EVENT",
"TRIGGER") &&
3663 TailMatches(
"EXECUTE",
"FUNCTION|PROCEDURE"))
3664 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
3667 else if (Matches(
"DEALLOCATE"))
3668 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_prepared_statements,
3677 else if (Matches(
"DECLARE", MatchAny))
3678 COMPLETE_WITH(
"BINARY",
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
3688 else if (HeadMatches(
"DECLARE") && TailMatches(
"BINARY"))
3689 COMPLETE_WITH(
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
"CURSOR");
3690 else if (HeadMatches(
"DECLARE") && TailMatches(
"ASENSITIVE|INSENSITIVE"))
3691 COMPLETE_WITH(
"SCROLL",
"NO SCROLL",
"CURSOR");
3692 else if (HeadMatches(
"DECLARE") && TailMatches(
"SCROLL"))
3693 COMPLETE_WITH(
"CURSOR");
3695 else if (HeadMatches(
"DECLARE") && TailMatches(
"NO"))
3696 COMPLETE_WITH(
"SCROLL");
3702 else if (HeadMatches(
"DECLARE") && TailMatches(
"CURSOR"))
3703 COMPLETE_WITH(
"WITH HOLD",
"WITHOUT HOLD",
"FOR");
3705 else if (HeadMatches(
"DECLARE") && TailMatches(
"CURSOR",
"WITH|WITHOUT"))
3706 COMPLETE_WITH(
"HOLD");
3708 else if (HeadMatches(
"DECLARE") && TailMatches(
"CURSOR",
"WITH|WITHOUT",
"HOLD"))
3709 COMPLETE_WITH(
"FOR");
3713 else if (Matches(
"DELETE"))
3714 COMPLETE_WITH(
"FROM");
3716 else if (TailMatches(
"DELETE",
"FROM"))
3717 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
3719 else if (TailMatches(
"DELETE",
"FROM", MatchAny))
3720 COMPLETE_WITH(
"USING",
"WHERE");
3724 else if (Matches(
"DISCARD"))
3725 COMPLETE_WITH(
"ALL",
"PLANS",
"SEQUENCES",
"TEMP");
3728 else if (Matches(
"DO"))
3729 COMPLETE_WITH(
"LANGUAGE");
3733 else if (Matches(
"DROP",
3734 "COLLATION|CONVERSION|DOMAIN|EXTENSION|LANGUAGE|PUBLICATION|SCHEMA|SEQUENCE|SERVER|SUBSCRIPTION|STATISTICS|TABLE|TYPE|VIEW",
3736 Matches(
"DROP",
"ACCESS",
"METHOD", MatchAny) ||
3737 (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny) &&
3738 ends_with(prev_wd,
')')) ||
3739 Matches(
"DROP",
"EVENT",
"TRIGGER", MatchAny) ||
3740 Matches(
"DROP",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny) ||
3741 Matches(
"DROP",
"FOREIGN",
"TABLE", MatchAny) ||
3742 Matches(
"DROP",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE", MatchAny))
3743 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3746 else if (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny))
3748 else if (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny,
"("))
3749 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
3750 else if (Matches(
"DROP",
"FOREIGN"))
3751 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
3752 else if (Matches(
"DROP",
"DATABASE", MatchAny))
3753 COMPLETE_WITH(
"WITH (");
3754 else if (HeadMatches(
"DROP",
"DATABASE") && (ends_with(prev_wd,
'(')))
3755 COMPLETE_WITH(
"FORCE");
3758 else if (Matches(
"DROP",
"INDEX"))
3759 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
3761 else if (Matches(
"DROP",
"INDEX",
"CONCURRENTLY"))
3762 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
3763 else if (Matches(
"DROP",
"INDEX", MatchAny))
3764 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3765 else if (Matches(
"DROP",
"INDEX",
"CONCURRENTLY", MatchAny))
3766 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3769 else if (Matches(
"DROP",
"MATERIALIZED"))
3770 COMPLETE_WITH(
"VIEW");
3771 else if (Matches(
"DROP",
"MATERIALIZED",
"VIEW"))
3772 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
3773 else if (Matches(
"DROP",
"MATERIALIZED",
"VIEW", MatchAny))
3774 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3777 else if (Matches(
"DROP",
"OWNED"))
3778 COMPLETE_WITH(
"BY");
3779 else if (Matches(
"DROP",
"OWNED",
"BY"))
3780 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
3781 else if (Matches(
"DROP",
"OWNED",
"BY", MatchAny))
3782 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3785 else if (Matches(
"DROP",
"TEXT",
"SEARCH"))
3786 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3789 else if (Matches(
"DROP",
"TRIGGER", MatchAny))
3790 COMPLETE_WITH(
"ON");
3791 else if (Matches(
"DROP",
"TRIGGER", MatchAny,
"ON"))
3793 set_completion_reference(prev2_wd);
3794 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
3796 else if (Matches(
"DROP",
"TRIGGER", MatchAny,
"ON", MatchAny))
3797 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3800 else if (Matches(
"DROP",
"ACCESS"))
3801 COMPLETE_WITH(
"METHOD");
3802 else if (Matches(
"DROP",
"ACCESS",
"METHOD"))
3803 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
3806 else if (Matches(
"DROP",
"EVENT"))
3807 COMPLETE_WITH(
"TRIGGER");
3808 else if (Matches(
"DROP",
"EVENT",
"TRIGGER"))
3809 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
3812 else if (Matches(
"DROP",
"POLICY"))
3813 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
3815 else if (Matches(
"DROP",
"POLICY", MatchAny))
3816 COMPLETE_WITH(
"ON");
3818 else if (Matches(
"DROP",
"POLICY", MatchAny,
"ON"))
3820 set_completion_reference(prev2_wd);
3821 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
3823 else if (Matches(
"DROP",
"POLICY", MatchAny,
"ON", MatchAny))
3824 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3827 else if (Matches(
"DROP",
"RULE", MatchAny))
3828 COMPLETE_WITH(
"ON");
3829 else if (Matches(
"DROP",
"RULE", MatchAny,
"ON"))
3831 set_completion_reference(prev2_wd);
3832 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
3834 else if (Matches(
"DROP",
"RULE", MatchAny,
"ON", MatchAny))
3835 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3838 else if (Matches(
"DROP",
"TRANSFORM"))
3839 COMPLETE_WITH(
"FOR");
3840 else if (Matches(
"DROP",
"TRANSFORM",
"FOR"))
3841 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3842 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny))
3843 COMPLETE_WITH(
"LANGUAGE");
3844 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
3846 set_completion_reference(prev2_wd);
3847 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3849 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE", MatchAny))
3850 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3853 else if (Matches(
"EXECUTE"))
3854 COMPLETE_WITH_QUERY(Query_for_list_of_prepared_statements);
3860 else if (Matches(
"EXPLAIN"))
3861 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
3862 "MERGE INTO",
"EXECUTE",
"ANALYZE",
"VERBOSE");
3863 else if (HeadMatches(
"EXPLAIN",
"(*") &&
3864 !HeadMatches(
"EXPLAIN",
"(*)"))
3871 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
3872 COMPLETE_WITH(
"ANALYZE",
"VERBOSE",
"COSTS",
"SETTINGS",
"GENERIC_PLAN",
3873 "BUFFERS",
"SERIALIZE",
"WAL",
"TIMING",
"SUMMARY",
3874 "MEMORY",
"FORMAT");
3875 else if (TailMatches(
"ANALYZE|VERBOSE|COSTS|SETTINGS|GENERIC_PLAN|BUFFERS|WAL|TIMING|SUMMARY|MEMORY"))
3876 COMPLETE_WITH(
"ON",
"OFF");
3877 else if (TailMatches(
"SERIALIZE"))
3878 COMPLETE_WITH(
"TEXT",
"NONE",
"BINARY");
3879 else if (TailMatches(
"FORMAT"))
3880 COMPLETE_WITH(
"TEXT",
"XML",
"JSON",
"YAML");
3882 else if (Matches(
"EXPLAIN",
"ANALYZE"))
3883 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
3884 "MERGE INTO",
"EXECUTE",
"VERBOSE");
3885 else if (Matches(
"EXPLAIN",
"(*)") ||
3886 Matches(
"EXPLAIN",
"VERBOSE") ||
3887 Matches(
"EXPLAIN",
"ANALYZE",
"VERBOSE"))
3888 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
3889 "MERGE INTO",
"EXECUTE");
3897 else if (Matches(
"FETCH|MOVE"))
3898 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
3915 else if (Matches(
"FETCH|MOVE",
"BACKWARD|FORWARD"))
3916 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
3926 else if (Matches(
"FETCH|MOVE",
"ABSOLUTE|BACKWARD|FORWARD|RELATIVE",
3927 MatchAnyExcept(
"FROM|IN")) ||
3928 Matches(
"FETCH|MOVE",
"ALL|NEXT|PRIOR|FIRST|LAST"))
3929 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
3933 else if (HeadMatches(
"FETCH|MOVE") &&
3934 TailMatches(
"FROM|IN"))
3935 COMPLETE_WITH_QUERY(Query_for_list_of_cursors);
3939 else if (TailMatches(
"FOREIGN",
"DATA",
"WRAPPER") &&
3940 !TailMatches(
"CREATE", MatchAny, MatchAny, MatchAny))
3941 COMPLETE_WITH_QUERY(Query_for_list_of_fdws);
3943 else if (TailMatches(
"FOREIGN",
"DATA",
"WRAPPER", MatchAny) &&
3944 HeadMatches(
"CREATE",
"SERVER"))
3945 COMPLETE_WITH(
"OPTIONS");
3948 else if (TailMatches(
"FOREIGN",
"TABLE") &&
3949 !TailMatches(
"CREATE", MatchAny, MatchAny))
3950 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
3953 else if (TailMatches(
"FOREIGN",
"SERVER"))
3954 COMPLETE_WITH_QUERY(Query_for_list_of_servers);
3961 else if (TailMatches(
"GRANT|REVOKE") ||
3962 TailMatches(
"REVOKE",
"ADMIN|GRANT|INHERIT|SET",
"OPTION",
"FOR"))
3968 if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
3970 if (TailMatches(
"GRANT") ||
3971 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR"))
3972 COMPLETE_WITH(
"SELECT",
"INSERT",
"UPDATE",
3973 "DELETE",
"TRUNCATE",
"REFERENCES",
"TRIGGER",
3974 "CREATE",
"EXECUTE",
"USAGE",
"MAINTAIN",
"ALL");
3975 else if (TailMatches(
"REVOKE"))
3976 COMPLETE_WITH(
"SELECT",
"INSERT",
"UPDATE",
3977 "DELETE",
"TRUNCATE",
"REFERENCES",
"TRIGGER",
3978 "CREATE",
"EXECUTE",
"USAGE",
"MAINTAIN",
"ALL",
3979 "GRANT OPTION FOR");
3981 else if (TailMatches(
"GRANT"))
3982 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3983 Privilege_options_of_grant_and_revoke);
3984 else if (TailMatches(
"REVOKE"))
3985 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3986 Privilege_options_of_grant_and_revoke,
3989 "INHERIT OPTION FOR",
3991 else if (TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR"))
3992 COMPLETE_WITH(Privilege_options_of_grant_and_revoke);
3993 else if (TailMatches(
"REVOKE",
"ADMIN|INHERIT|SET",
"OPTION",
"FOR"))
3994 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
3997 else if (TailMatches(
"GRANT|REVOKE",
"ALTER") ||
3998 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER"))
3999 COMPLETE_WITH(
"SYSTEM");
4001 else if (TailMatches(
"REVOKE",
"SET"))
4002 COMPLETE_WITH(
"ON PARAMETER",
"OPTION FOR");
4003 else if (TailMatches(
"GRANT",
"SET") ||
4004 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"SET") ||
4005 TailMatches(
"GRANT|REVOKE",
"ALTER",
"SYSTEM") ||
4006 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER",
"SYSTEM"))
4007 COMPLETE_WITH(
"ON PARAMETER");
4009 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"PARAMETER") ||
4010 TailMatches(
"GRANT|REVOKE", MatchAny, MatchAny,
"ON",
"PARAMETER") ||
4011 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"PARAMETER") ||
4012 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny, MatchAny,
"ON",
"PARAMETER"))
4013 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_alter_system_set_vars);
4015 else if (TailMatches(
"GRANT", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4016 TailMatches(
"GRANT", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny))
4017 COMPLETE_WITH(
"TO");
4019 else if (TailMatches(
"REVOKE", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4020 TailMatches(
"REVOKE", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4021 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4022 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny))
4023 COMPLETE_WITH(
"FROM");
4029 else if (TailMatches(
"GRANT|REVOKE", MatchAny) ||
4030 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny))
4032 if (TailMatches(
"SELECT|INSERT|UPDATE|DELETE|TRUNCATE|REFERENCES|TRIGGER|CREATE|CONNECT|TEMPORARY|TEMP|EXECUTE|USAGE|MAINTAIN|ALL"))
4033 COMPLETE_WITH(
"ON");
4034 else if (TailMatches(
"GRANT", MatchAny))
4035 COMPLETE_WITH(
"TO");
4037 COMPLETE_WITH(
"FROM");
4047 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON") ||
4048 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON"))
4054 if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4055 COMPLETE_WITH(
"TABLES",
"SEQUENCES",
"FUNCTIONS",
"PROCEDURES",
"ROUTINES",
"TYPES",
"SCHEMAS");
4057 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_grantables,
4058 "ALL FUNCTIONS IN SCHEMA",
4059 "ALL PROCEDURES IN SCHEMA",
4060 "ALL ROUTINES IN SCHEMA",
4061 "ALL SEQUENCES IN SCHEMA",
4062 "ALL TABLES IN SCHEMA",
4065 "FOREIGN DATA WRAPPER",
4079 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"ALL") ||
4080 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"ALL"))
4081 COMPLETE_WITH(
"FUNCTIONS IN SCHEMA",
4082 "PROCEDURES IN SCHEMA",
4083 "ROUTINES IN SCHEMA",
4084 "SEQUENCES IN SCHEMA",
4085 "TABLES IN SCHEMA");
4086 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"FOREIGN") ||
4087 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"FOREIGN"))
4088 COMPLETE_WITH(
"DATA WRAPPER",
"SERVER");
4096 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON", MatchAny) ||
4097 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON", MatchAny))
4099 if (TailMatches(
"DATABASE"))
4100 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
4101 else if (TailMatches(
"DOMAIN"))
4102 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
4103 else if (TailMatches(
"FUNCTION"))
4104 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
4105 else if (TailMatches(
"LANGUAGE"))
4106 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
4107 else if (TailMatches(
"PROCEDURE"))
4108 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_procedures);
4109 else if (TailMatches(
"ROUTINE"))
4110 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
4111 else if (TailMatches(
"SCHEMA"))
4112 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
4113 else if (TailMatches(
"SEQUENCE"))
4114 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_sequences);
4115 else if (TailMatches(
"TABLE"))
4116 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_grantables);
4117 else if (TailMatches(
"TABLESPACE"))
4118 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
4119 else if (TailMatches(
"TYPE"))
4120 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4121 else if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny))
4122 COMPLETE_WITH(
"TO");
4124 COMPLETE_WITH(
"FROM");
4131 else if ((HeadMatches(
"GRANT") && TailMatches(
"TO")) ||
4132 (HeadMatches(
"REVOKE") && TailMatches(
"FROM")))
4133 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4134 Keywords_for_list_of_grant_roles);
4139 else if (HeadMatches(
"GRANT") && TailMatches(
"TO", MatchAny))
4140 COMPLETE_WITH(
"WITH ADMIN",
4143 "WITH GRANT OPTION",
4145 else if (HeadMatches(
"GRANT") && TailMatches(
"TO", MatchAny,
"WITH"))
4146 COMPLETE_WITH(
"ADMIN",
4150 else if (HeadMatches(
"GRANT") &&
4151 (TailMatches(
"TO", MatchAny,
"WITH",
"ADMIN|INHERIT|SET")))
4152 COMPLETE_WITH(
"OPTION",
"TRUE",
"FALSE");
4153 else if (HeadMatches(
"GRANT") && TailMatches(
"TO", MatchAny,
"WITH", MatchAny,
"OPTION"))
4154 COMPLETE_WITH(
"GRANTED BY");
4155 else if (HeadMatches(
"GRANT") && TailMatches(
"TO", MatchAny,
"WITH", MatchAny,
"OPTION",
"GRANTED",
"BY"))
4156 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4157 Keywords_for_list_of_grant_roles);
4159 else if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES") && TailMatches(
"TO|FROM"))
4160 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4161 Keywords_for_list_of_grant_roles);
4163 else if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES") && TailMatches(
"TO", MatchAny))
4164 COMPLETE_WITH(
"WITH GRANT OPTION");
4166 else if (HeadMatches(
"GRANT") && TailMatches(
"ON", MatchAny, MatchAny))
4167 COMPLETE_WITH(
"TO");
4168 else if (HeadMatches(
"REVOKE") && TailMatches(
"ON", MatchAny, MatchAny))
4169 COMPLETE_WITH(
"FROM");
4172 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"ALL", MatchAny,
"IN",
"SCHEMA", MatchAny) ||
4173 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"ALL", MatchAny,
"IN",
"SCHEMA", MatchAny))
4175 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4176 COMPLETE_WITH(
"TO");
4178 COMPLETE_WITH(
"FROM");
4182 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny) ||
4183 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
4185 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4186 COMPLETE_WITH(
"TO");
4188 COMPLETE_WITH(
"FROM");
4192 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"FOREIGN",
"SERVER", MatchAny) ||
4193 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"FOREIGN",
"SERVER", MatchAny))
4195 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4196 COMPLETE_WITH(
"TO");
4198 COMPLETE_WITH(
"FROM");
4202 else if (TailMatches(
"FROM", MatchAny,
"GROUP"))
4203 COMPLETE_WITH(
"BY");
4206 else if (Matches(
"IMPORT"))
4207 COMPLETE_WITH(
"FOREIGN SCHEMA");
4208 else if (Matches(
"IMPORT",
"FOREIGN"))
4209 COMPLETE_WITH(
"SCHEMA");
4210 else if (Matches(
"IMPORT",
"FOREIGN",
"SCHEMA", MatchAny))
4211 COMPLETE_WITH(
"EXCEPT (",
"FROM SERVER",
"LIMIT TO (");
4212 else if (TailMatches(
"LIMIT",
"TO",
"(*)") ||
4213 TailMatches(
"EXCEPT",
"(*)"))
4214 COMPLETE_WITH(
"FROM SERVER");
4215 else if (TailMatches(
"FROM",
"SERVER", MatchAny))
4216 COMPLETE_WITH(
"INTO");
4217 else if (TailMatches(
"FROM",
"SERVER", MatchAny,
"INTO"))
4218 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
4219 else if (TailMatches(
"FROM",
"SERVER", MatchAny,
"INTO", MatchAny))
4220 COMPLETE_WITH(
"OPTIONS (");
4224 else if (TailMatches(
"NOT",
"MATCHED",
"THEN",
"INSERT"))
4225 COMPLETE_WITH(
"VALUES",
"(");
4227 else if (TailMatches(
"INSERT"))
4228 COMPLETE_WITH(
"INTO");
4230 else if (TailMatches(
"INSERT",
"INTO"))
4231 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
4233 else if (TailMatches(
"INSERT",
"INTO", MatchAny,
"("))
4234 COMPLETE_WITH_ATTR(prev2_wd);
4240 else if (TailMatches(
"INSERT",
"INTO", MatchAny))
4241 COMPLETE_WITH(
"(",
"DEFAULT VALUES",
"SELECT",
"TABLE",
"VALUES",
"OVERRIDING");
4247 else if (TailMatches(
"INSERT",
"INTO", MatchAny, MatchAny) &&
4248 ends_with(prev_wd,
')'))
4249 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES",
"OVERRIDING");
4252 else if (TailMatches(
"OVERRIDING"))
4253 COMPLETE_WITH(
"SYSTEM VALUE",
"USER VALUE");
4256 else if (TailMatches(
"OVERRIDING", MatchAny,
"VALUE"))
4257 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES");
4260 else if (TailMatches(
"VALUES") && !TailMatches(
"DEFAULT",
"VALUES"))
4265 else if (Matches(
"LOCK"))
4266 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
4268 else if (Matches(
"LOCK",
"TABLE"))
4269 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
4271 else if (Matches(
"LOCK",
"TABLE",
"ONLY") || Matches(
"LOCK",
"ONLY"))
4272 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
4276 else if (Matches(
"LOCK", MatchAnyExcept(
"TABLE|ONLY")) ||
4277 Matches(
"LOCK",
"TABLE", MatchAnyExcept(
"ONLY")) ||
4278 Matches(
"LOCK",
"ONLY", MatchAny) ||
4279 Matches(
"LOCK",
"TABLE",
"ONLY", MatchAny))
4280 COMPLETE_WITH(
"IN",
"NOWAIT");
4283 else if (HeadMatches(
"LOCK") && TailMatches(
"IN"))
4284 COMPLETE_WITH(
"ACCESS SHARE MODE",
4285 "ROW SHARE MODE",
"ROW EXCLUSIVE MODE",
4286 "SHARE UPDATE EXCLUSIVE MODE",
"SHARE MODE",
4287 "SHARE ROW EXCLUSIVE MODE",
4288 "EXCLUSIVE MODE",
"ACCESS EXCLUSIVE MODE");
4294 else if (HeadMatches(
"LOCK") && TailMatches(
"IN",
"ACCESS|ROW"))
4295 COMPLETE_WITH(
"EXCLUSIVE MODE",
"SHARE MODE");
4298 else if (HeadMatches(
"LOCK") && TailMatches(
"IN",
"SHARE"))
4299 COMPLETE_WITH(
"MODE",
"ROW EXCLUSIVE MODE",
4300 "UPDATE EXCLUSIVE MODE");
4303 else if (HeadMatches(
"LOCK") && TailMatches(
"MODE"))
4304 COMPLETE_WITH(
"NOWAIT");
4307 else if (TailMatches(
"MERGE"))
4308 COMPLETE_WITH(
"INTO");
4309 else if (TailMatches(
"MERGE",
"INTO"))
4310 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_mergetargets);
4313 else if (TailMatches(
"MERGE",
"INTO", MatchAny))
4314 COMPLETE_WITH(
"USING",
"AS");
4315 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny) ||
4316 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAnyExcept(
"USING|AS")))
4317 COMPLETE_WITH(
"USING");
4323 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING") ||
4324 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING") ||
4325 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING"))
4326 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
4332 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING", MatchAny) ||
4333 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny) ||
4334 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING", MatchAny))
4335 COMPLETE_WITH(
"AS",
"ON");
4336 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING", MatchAny,
"AS", MatchAny) ||
4337 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny,
"AS", MatchAny) ||
4338 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING", MatchAny,
"AS", MatchAny) ||
4339 TailMatches(
"MERGE",
"INTO", MatchAny,
"USING", MatchAny, MatchAnyExcept(
"ON|AS")) ||
4340 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny, MatchAnyExcept(
"ON|AS")) ||
4341 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING", MatchAny, MatchAnyExcept(
"ON|AS")))
4342 COMPLETE_WITH(
"ON");
4345 else if (TailMatches(
"INTO", MatchAny,
"USING", MatchAny,
"ON"))
4346 COMPLETE_WITH_ATTR(prev4_wd);
4347 else if (TailMatches(
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny,
"AS", MatchAny,
"ON"))
4348 COMPLETE_WITH_ATTR(prev8_wd);
4349 else if (TailMatches(
"INTO", MatchAny, MatchAny,
"USING", MatchAny, MatchAny,
"ON"))
4350 COMPLETE_WITH_ATTR(prev6_wd);
4357 else if (TailMatches(
"USING", MatchAny,
"ON", MatchAny) ||
4358 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny) ||
4359 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny) ||
4360 TailMatches(
"USING", MatchAny,
"ON", MatchAny, MatchAnyExcept(
"WHEN"), MatchAnyExcept(
"WHEN")) ||
4361 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny, MatchAnyExcept(
"WHEN"), MatchAnyExcept(
"WHEN")) ||
4362 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny, MatchAnyExcept(
"WHEN"), MatchAnyExcept(
"WHEN")))
4363 COMPLETE_WITH(
"WHEN MATCHED",
"WHEN NOT MATCHED");
4364 else if (TailMatches(
"USING", MatchAny,
"ON", MatchAny,
"WHEN") ||
4365 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny,
"WHEN") ||
4366 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny,
"WHEN") ||
4367 TailMatches(
"USING", MatchAny,
"ON", MatchAny, MatchAny, MatchAny,
"WHEN") ||
4368 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny, MatchAny, MatchAny,
"WHEN") ||
4369 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny, MatchAny, MatchAny,
"WHEN"))
4370 COMPLETE_WITH(
"MATCHED",
"NOT MATCHED");
4376 else if (TailMatches(
"WHEN",
"MATCHED") ||
4377 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"SOURCE|TARGET"))
4378 COMPLETE_WITH(
"THEN",
"AND");
4381 else if (TailMatches(
"WHEN",
"NOT",
"MATCHED"))
4382 COMPLETE_WITH(
"BY",
"THEN",
"AND");
4385 else if (TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY"))
4386 COMPLETE_WITH(
"SOURCE",
"TARGET");
4392 else if (TailMatches(
"WHEN",
"MATCHED",
"THEN") ||
4393 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"SOURCE",
"THEN"))
4394 COMPLETE_WITH(
"UPDATE SET",
"DELETE",
"DO NOTHING");
4399 else if (TailMatches(
"WHEN",
"NOT",
"MATCHED",
"THEN") ||
4400 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"TARGET",
"THEN"))
4401 COMPLETE_WITH(
"INSERT",
"DO NOTHING");
4404 else if (TailMatches(
"NOTIFY"))
4405 COMPLETE_WITH_QUERY(Query_for_list_of_channels);
4408 else if (TailMatches(
"OPTIONS"))
4412 else if (TailMatches(
"OWNER",
"TO"))
4413 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4414 Keywords_for_list_of_owner_roles);
4417 else if (TailMatches(
"FROM", MatchAny,
"ORDER"))
4418 COMPLETE_WITH(
"BY");
4419 else if (TailMatches(
"FROM", MatchAny,
"ORDER",
"BY"))
4420 COMPLETE_WITH_ATTR(prev3_wd);
4423 else if (Matches(
"PREPARE", MatchAny,
"AS"))
4424 COMPLETE_WITH(
"SELECT",
"UPDATE",
"INSERT INTO",
"DELETE FROM");
4432 else if (Matches(
"REASSIGN"))
4433 COMPLETE_WITH(
"OWNED BY");
4434 else if (Matches(
"REASSIGN",
"OWNED"))
4435 COMPLETE_WITH(
"BY");
4436 else if (Matches(
"REASSIGN",
"OWNED",
"BY"))
4437 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4438 else if (Matches(
"REASSIGN",
"OWNED",
"BY", MatchAny))
4439 COMPLETE_WITH(
"TO");
4440 else if (Matches(
"REASSIGN",
"OWNED",
"BY", MatchAny,
"TO"))
4441 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4444 else if (Matches(
"REFRESH"))
4445 COMPLETE_WITH(
"MATERIALIZED VIEW");
4446 else if (Matches(
"REFRESH",
"MATERIALIZED"))
4447 COMPLETE_WITH(
"VIEW");
4448 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW"))
4449 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_matviews,
4451 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY"))
4452 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
4453 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny))
4454 COMPLETE_WITH(
"WITH");
4455 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny))
4456 COMPLETE_WITH(
"WITH");
4457 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny,
"WITH"))
4458 COMPLETE_WITH(
"NO DATA",
"DATA");
4459 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny,
"WITH"))
4460 COMPLETE_WITH(
"NO DATA",
"DATA");
4461 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny,
"WITH",
"NO"))
4462 COMPLETE_WITH(
"DATA");
4463 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny,
"WITH",
"NO"))
4464 COMPLETE_WITH(
"DATA");
4467 else if (Matches(
"REINDEX") ||
4468 Matches(
"REINDEX",
"(*)"))
4469 COMPLETE_WITH(
"TABLE",
"INDEX",
"SYSTEM",
"SCHEMA",
"DATABASE");
4470 else if (Matches(
"REINDEX",
"TABLE") ||
4471 Matches(
"REINDEX",
"(*)",
"TABLE"))
4472 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexables,
4474 else if (Matches(
"REINDEX",
"INDEX") ||
4475 Matches(
"REINDEX",
"(*)",
"INDEX"))
4476 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
4478 else if (Matches(
"REINDEX",
"SCHEMA") ||
4479 Matches(
"REINDEX",
"(*)",
"SCHEMA"))
4480 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas,
4482 else if (Matches(
"REINDEX",
"SYSTEM|DATABASE") ||
4483 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE"))
4484 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_databases,
4486 else if (Matches(
"REINDEX",
"TABLE",
"CONCURRENTLY") ||
4487 Matches(
"REINDEX",
"(*)",
"TABLE",
"CONCURRENTLY"))
4488 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexables);
4489 else if (Matches(
"REINDEX",
"INDEX",
"CONCURRENTLY") ||
4490 Matches(
"REINDEX",
"(*)",
"INDEX",
"CONCURRENTLY"))
4491 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
4492 else if (Matches(
"REINDEX",
"SCHEMA",
"CONCURRENTLY") ||
4493 Matches(
"REINDEX",
"(*)",
"SCHEMA",
"CONCURRENTLY"))
4494 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
4495 else if (Matches(
"REINDEX",
"SYSTEM|DATABASE",
"CONCURRENTLY") ||
4496 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE",
"CONCURRENTLY"))
4497 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
4498 else if (HeadMatches(
"REINDEX",
"(*") &&
4499 !HeadMatches(
"REINDEX",
"(*)"))
4506 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
4507 COMPLETE_WITH(
"CONCURRENTLY",
"TABLESPACE",
"VERBOSE");
4508 else if (TailMatches(
"TABLESPACE"))
4509 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
4513 else if (Matches(
"SECURITY"))
4514 COMPLETE_WITH(
"LABEL");
4515 else if (Matches(
"SECURITY",
"LABEL"))
4516 COMPLETE_WITH(
"ON",
"FOR");
4517 else if (Matches(
"SECURITY",
"LABEL",
"FOR", MatchAny))
4518 COMPLETE_WITH(
"ON");
4519 else if (Matches(
"SECURITY",
"LABEL",
"ON") ||
4520 Matches(
"SECURITY",
"LABEL",
"FOR", MatchAny,
"ON"))
4521 COMPLETE_WITH(
"TABLE",
"COLUMN",
"AGGREGATE",
"DATABASE",
"DOMAIN",
4522 "EVENT TRIGGER",
"FOREIGN TABLE",
"FUNCTION",
4523 "LARGE OBJECT",
"MATERIALIZED VIEW",
"LANGUAGE",
4524 "PUBLICATION",
"PROCEDURE",
"ROLE",
"ROUTINE",
"SCHEMA",
4525 "SEQUENCE",
"SUBSCRIPTION",
"TABLESPACE",
"TYPE",
"VIEW");
4526 else if (Matches(
"SECURITY",
"LABEL",
"ON", MatchAny, MatchAny))
4527 COMPLETE_WITH(
"IS");
4534 else if (TailMatches(
"SET|RESET") && !TailMatches(
"UPDATE", MatchAny,
"SET"))
4535 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
4542 else if (Matches(
"SHOW"))
4543 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_show_vars,
4544 "SESSION AUTHORIZATION",
4546 else if (Matches(
"SHOW",
"SESSION"))
4547 COMPLETE_WITH(
"AUTHORIZATION");
4549 else if (Matches(
"SET",
"TRANSACTION"))
4550 COMPLETE_WITH(
"SNAPSHOT",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
4551 else if (Matches(
"BEGIN|START",
"TRANSACTION") ||
4552 Matches(
"BEGIN",
"WORK") ||
4554 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION"))
4555 COMPLETE_WITH(
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
4556 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"NOT") ||
4557 Matches(
"BEGIN",
"NOT") ||
4558 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"NOT"))
4559 COMPLETE_WITH(
"DEFERRABLE");
4560 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION") ||
4561 Matches(
"BEGIN",
"ISOLATION") ||
4562 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION"))
4563 COMPLETE_WITH(
"LEVEL");
4564 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL") ||
4565 Matches(
"BEGIN",
"ISOLATION",
"LEVEL") ||
4566 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL"))
4567 COMPLETE_WITH(
"READ",
"REPEATABLE READ",
"SERIALIZABLE");
4568 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"READ") ||
4569 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"READ") ||
4570 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"READ"))
4571 COMPLETE_WITH(
"UNCOMMITTED",
"COMMITTED");
4572 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
4573 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
4574 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"REPEATABLE"))
4575 COMPLETE_WITH(
"READ");
4576 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"READ") ||
4577 Matches(
"BEGIN",
"READ") ||
4578 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"READ"))
4579 COMPLETE_WITH(
"ONLY",
"WRITE");
4581 else if (Matches(
"SET",
"CONSTRAINTS"))
4582 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_constraints_with_schema,
4585 else if (Matches(
"SET",
"CONSTRAINTS", MatchAny))
4586 COMPLETE_WITH(
"DEFERRED",
"IMMEDIATE");
4588 else if (Matches(
"SET",
"ROLE"))
4589 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4591 else if (Matches(
"SET",
"SESSION"))
4592 COMPLETE_WITH(
"AUTHORIZATION",
"CHARACTERISTICS AS TRANSACTION");
4594 else if (Matches(
"SET",
"SESSION",
"AUTHORIZATION"))
4595 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4598 else if (Matches(
"RESET",
"SESSION"))
4599 COMPLETE_WITH(
"AUTHORIZATION");
4601 else if (Matches(
"SET", MatchAny))
4602 COMPLETE_WITH(
"TO");
4608 else if (HeadMatches(
"ALTER",
"DATABASE|FUNCTION|PROCEDURE|ROLE|ROUTINE|USER") &&
4609 TailMatches(
"SET", MatchAny) &&
4610 !TailMatches(
"SCHEMA"))
4611 COMPLETE_WITH(
"FROM CURRENT",
"TO");
4617 else if (TailMatches(
"SET", MatchAny,
"TO|=") &&
4618 !TailMatches(
"UPDATE", MatchAny,
"SET", MatchAny,
"TO|="))
4621 if (TailMatches(
"DateStyle",
"TO|="))
4622 COMPLETE_WITH(
"ISO",
"SQL",
"Postgres",
"German",
4623 "YMD",
"DMY",
"MDY",
4624 "US",
"European",
"NonEuropean",
4626 else if (TailMatches(
"search_path",
"TO|="))
4629 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
4630 " AND nspname NOT LIKE E'pg\\\\_toast%%'"
4631 " AND nspname NOT LIKE E'pg\\\\_temp%%'",
4634 else if (TailMatches(
"TimeZone",
"TO|="))
4635 COMPLETE_WITH_TIMEZONE_NAME();
4639 char *guctype = get_guctype(prev2_wd);
4648 if (strcmp(guctype,
"enum") == 0)
4650 set_completion_reference_verbatim(prev2_wd);
4651 COMPLETE_WITH_QUERY_PLUS(Query_for_values_of_enum_GUC,
4654 else if (strcmp(guctype,
"bool") == 0)
4655 COMPLETE_WITH(
"on",
"off",
"true",
"false",
"yes",
"no",
4656 "1",
"0",
"DEFAULT");
4658 COMPLETE_WITH(
"DEFAULT");
4666 else if (Matches(
"START"))
4667 COMPLETE_WITH(
"TRANSACTION");
4670 else if (Matches(
"TABLE"))
4671 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
4674 else if (TailMatches(
"TABLESAMPLE"))
4675 COMPLETE_WITH_QUERY(Query_for_list_of_tablesample_methods);
4676 else if (TailMatches(
"TABLESAMPLE", MatchAny))
4680 else if (Matches(
"TRUNCATE"))
4681 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_truncatables,
4683 else if (Matches(
"TRUNCATE",
"TABLE"))
4684 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_truncatables,
4686 else if (HeadMatches(
"TRUNCATE") && TailMatches(
"ONLY"))
4687 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_truncatables);
4688 else if (Matches(
"TRUNCATE", MatchAny) ||
4689 Matches(
"TRUNCATE",
"TABLE|ONLY", MatchAny) ||
4690 Matches(
"TRUNCATE",
"TABLE",
"ONLY", MatchAny))
4691 COMPLETE_WITH(
"RESTART IDENTITY",
"CONTINUE IDENTITY",
"CASCADE",
"RESTRICT");
4692 else if (HeadMatches(
"TRUNCATE") && TailMatches(
"IDENTITY"))
4693 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4696 else if (Matches(
"UNLISTEN"))
4697 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_channels,
"*");
4701 else if (TailMatches(
"UPDATE"))
4702 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
4704 else if (TailMatches(
"UPDATE", MatchAny))
4705 COMPLETE_WITH(
"SET");
4707 else if (TailMatches(
"UPDATE", MatchAny,
"SET"))
4708 COMPLETE_WITH_ATTR(prev2_wd);
4710 else if (TailMatches(
"UPDATE", MatchAny,
"SET", MatchAnyExcept(
"*=")))
4714 else if (Matches(
"ALTER|CREATE|DROP",
"USER",
"MAPPING"))
4715 COMPLETE_WITH(
"FOR");
4716 else if (Matches(
"CREATE",
"USER",
"MAPPING",
"FOR"))
4717 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4722 else if (Matches(
"ALTER|DROP",
"USER",
"MAPPING",
"FOR"))
4723 COMPLETE_WITH_QUERY(Query_for_list_of_user_mappings);
4724 else if (Matches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING",
"FOR", MatchAny))
4725 COMPLETE_WITH(
"SERVER");
4726 else if (Matches(
"CREATE|ALTER",
"USER",
"MAPPING",
"FOR", MatchAny,
"SERVER", MatchAny))
4727 COMPLETE_WITH(
"OPTIONS");
4733 else if (Matches(
"VACUUM"))
4734 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
4739 else if (Matches(
"VACUUM",
"FULL"))
4740 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
4744 else if (Matches(
"VACUUM",
"FREEZE") ||
4745 Matches(
"VACUUM",
"FULL",
"FREEZE"))
4746 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
4749 else if (Matches(
"VACUUM",
"VERBOSE") ||
4750 Matches(
"VACUUM",
"FULL|FREEZE",
"VERBOSE") ||
4751 Matches(
"VACUUM",
"FULL",
"FREEZE",
"VERBOSE"))
4752 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
4754 else if (HeadMatches(
"VACUUM",
"(*") &&
4755 !HeadMatches(
"VACUUM",
"(*)"))
4762 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
4763 COMPLETE_WITH(
"FULL",
"FREEZE",
"ANALYZE",
"VERBOSE",
4764 "DISABLE_PAGE_SKIPPING",
"SKIP_LOCKED",
4765 "INDEX_CLEANUP",
"PROCESS_MAIN",
"PROCESS_TOAST",
4766 "TRUNCATE",
"PARALLEL",
"SKIP_DATABASE_STATS",
4767 "ONLY_DATABASE_STATS",
"BUFFER_USAGE_LIMIT");
4768 else if (TailMatches(
"FULL|FREEZE|ANALYZE|VERBOSE|DISABLE_PAGE_SKIPPING|SKIP_LOCKED|PROCESS_MAIN|PROCESS_TOAST|TRUNCATE|SKIP_DATABASE_STATS|ONLY_DATABASE_STATS"))
4769 COMPLETE_WITH(
"ON",
"OFF");
4770 else if (TailMatches(
"INDEX_CLEANUP"))
4771 COMPLETE_WITH(
"AUTO",
"ON",
"OFF");
4773 else if (HeadMatches(
"VACUUM") && TailMatches(
"("))
4775 COMPLETE_WITH_ATTR(prev2_wd);
4776 else if (HeadMatches(
"VACUUM"))
4777 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_vacuumables);
4785 else if (Matches(
"WITH"))
4786 COMPLETE_WITH(
"RECURSIVE");
4790 else if (TailMatches(MatchAny,
"WHERE"))
4791 COMPLETE_WITH_ATTR(prev2_wd);
4795 else if (TailMatches(
"FROM") && !Matches(
"COPY|\\copy", MatchAny,
"FROM"))
4796 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
4799 else if (TailMatches(
"JOIN"))
4800 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
4803 else if (TailMatches(
"AT"))
4804 COMPLETE_WITH(
"LOCAL",
"TIME ZONE");
4805 else if (TailMatches(
"AT",
"TIME",
"ZONE"))
4806 COMPLETE_WITH_TIMEZONE_NAME();
4810 else if (TailMatchesCS(
"\\?"))
4811 COMPLETE_WITH_CS(
"commands",
"options",
"variables");
4812 else if (TailMatchesCS(
"\\connect|\\c"))
4815 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
4817 else if (TailMatchesCS(
"\\connect|\\c", MatchAny))
4820 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4822 else if (TailMatchesCS(
"\\da*"))
4823 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_aggregates);
4824 else if (TailMatchesCS(
"\\dAc*", MatchAny) ||
4825 TailMatchesCS(
"\\dAf*", MatchAny))
4826 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4827 else if (TailMatchesCS(
"\\dAo*", MatchAny) ||
4828 TailMatchesCS(
"\\dAp*", MatchAny))
4829 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_operator_families);
4830 else if (TailMatchesCS(
"\\dA*"))
4831 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
4832 else if (TailMatchesCS(
"\\db*"))
4833 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
4834 else if (TailMatchesCS(
"\\dconfig*"))
4835 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_show_vars);
4836 else if (TailMatchesCS(
"\\dD*"))
4837 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
4838 else if (TailMatchesCS(
"\\des*"))
4839 COMPLETE_WITH_QUERY(Query_for_list_of_servers);
4840 else if (TailMatchesCS(
"\\deu*"))
4841 COMPLETE_WITH_QUERY(Query_for_list_of_user_mappings);
4842 else if (TailMatchesCS(
"\\dew*"))
4843 COMPLETE_WITH_QUERY(Query_for_list_of_fdws);
4844 else if (TailMatchesCS(
"\\df*"))
4845 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
4846 else if (HeadMatchesCS(
"\\df*"))
4847 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4849 else if (TailMatchesCS(
"\\dFd*"))
4850 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_dictionaries);
4851 else if (TailMatchesCS(
"\\dFp*"))
4852 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_parsers);
4853 else if (TailMatchesCS(
"\\dFt*"))
4854 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_templates);
4856 else if (TailMatchesCS(
"\\dF*"))
4857 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_configurations);
4859 else if (TailMatchesCS(
"\\di*"))
4860 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
4861 else if (TailMatchesCS(
"\\dL*"))
4862 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
4863 else if (TailMatchesCS(
"\\dn*"))
4864 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
4866 else if (HeadMatchesCS(
"\\do*", MatchAny))
4867 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4868 else if (TailMatchesCS(
"\\dp") || TailMatchesCS(
"\\z"))
4869 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_grantables);
4870 else if (TailMatchesCS(
"\\dPi*"))
4871 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_indexes);
4872 else if (TailMatchesCS(
"\\dPt*"))
4873 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_tables);
4874 else if (TailMatchesCS(
"\\dP*"))
4875 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_relations);
4876 else if (TailMatchesCS(
"\\dRp*"))
4877 COMPLETE_WITH_VERSIONED_QUERY(Query_for_list_of_publications);
4878 else if (TailMatchesCS(
"\\dRs*"))
4879 COMPLETE_WITH_VERSIONED_QUERY(Query_for_list_of_subscriptions);
4880 else if (TailMatchesCS(
"\\ds*"))
4881 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_sequences);
4882 else if (TailMatchesCS(
"\\dt*"))
4883 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
4884 else if (TailMatchesCS(
"\\dT*"))
4885 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4886 else if (TailMatchesCS(
"\\du*") ||
4887 TailMatchesCS(
"\\dg*") ||
4888 TailMatchesCS(
"\\drg*"))
4889 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4890 else if (TailMatchesCS(
"\\dv*"))
4891 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
4892 else if (TailMatchesCS(
"\\dx*"))
4893 COMPLETE_WITH_QUERY(Query_for_list_of_extensions);
4894 else if (TailMatchesCS(
"\\dX*"))
4895 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_statistics);
4896 else if (TailMatchesCS(
"\\dm*"))
4897 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
4898 else if (TailMatchesCS(
"\\dE*"))
4899 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
4900 else if (TailMatchesCS(
"\\dy*"))
4901 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
4904 else if (TailMatchesCS(
"\\d*"))
4905 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_relations);
4907 else if (TailMatchesCS(
"\\ef"))
4908 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
4909 else if (TailMatchesCS(
"\\ev"))
4910 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
4912 else if (TailMatchesCS(
"\\encoding"))
4913 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_encodings);
4914 else if (TailMatchesCS(
"\\h|\\help"))
4915 COMPLETE_WITH_LIST(sql_commands);
4916 else if (TailMatchesCS(
"\\h|\\help", MatchAny))
4918 if (TailMatches(
"DROP"))
4919 matches = rl_completion_matches(
text, drop_command_generator);
4920 else if (TailMatches(
"ALTER"))
4921 matches = rl_completion_matches(
text, alter_command_generator);
4928 else if (TailMatchesCS(
"\\h|\\help", MatchAny, MatchAny))
4930 if (TailMatches(
"CREATE|DROP",
"ACCESS"))
4931 COMPLETE_WITH(
"METHOD");
4932 else if (TailMatches(
"ALTER",
"DEFAULT"))
4933 COMPLETE_WITH(
"PRIVILEGES");
4934 else if (TailMatches(
"CREATE|ALTER|DROP",
"EVENT"))
4935 COMPLETE_WITH(
"TRIGGER");
4936 else if (TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN"))
4937 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
4938 else if (TailMatches(
"ALTER",
"LARGE"))
4939 COMPLETE_WITH(
"OBJECT");
4940 else if (TailMatches(
"CREATE|ALTER|DROP",
"MATERIALIZED"))
4941 COMPLETE_WITH(
"VIEW");
4942 else if (TailMatches(
"CREATE|ALTER|DROP",
"TEXT"))
4943 COMPLETE_WITH(
"SEARCH");
4944 else if (TailMatches(
"CREATE|ALTER|DROP",
"USER"))
4945 COMPLETE_WITH(
"MAPPING FOR");
4947 else if (TailMatchesCS(
"\\h|\\help", MatchAny, MatchAny, MatchAny))
4949 if (TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN",
"DATA"))
4950 COMPLETE_WITH(
"WRAPPER");
4951 else if (TailMatches(
"CREATE|ALTER|DROP",
"TEXT",
"SEARCH"))
4952 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
4953 else if (TailMatches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING"))
4954 COMPLETE_WITH(
"FOR");
4956 else if (TailMatchesCS(
"\\l*") && !TailMatchesCS(
"\\lo*"))
4957 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
4958 else if (TailMatchesCS(
"\\password"))
4959 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4960 else if (TailMatchesCS(
"\\pset"))
4961 COMPLETE_WITH_CS(
"border",
"columns",
"csv_fieldsep",
"expanded",
4962 "fieldsep",
"fieldsep_zero",
"footer",
"format",
4963 "linestyle",
"null",
"numericlocale",
4964 "pager",
"pager_min_lines",
4965 "recordsep",
"recordsep_zero",
4966 "tableattr",
"title",
"tuples_only",
4967 "unicode_border_linestyle",
4968 "unicode_column_linestyle",
4969 "unicode_header_linestyle",
4971 else if (TailMatchesCS(
"\\pset", MatchAny))
4973 if (TailMatchesCS(
"format"))
4974 COMPLETE_WITH_CS(
"aligned",
"asciidoc",
"csv",
"html",
"latex",
4975 "latex-longtable",
"troff-ms",
"unaligned",
4977 else if (TailMatchesCS(
"xheader_width"))
4978 COMPLETE_WITH_CS(
"full",
"column",
"page");
4979 else if (TailMatchesCS(
"linestyle"))
4980 COMPLETE_WITH_CS(
"ascii",
"old-ascii",
"unicode");
4981 else if (TailMatchesCS(
"pager"))
4982 COMPLETE_WITH_CS(
"on",
"off",
"always");
4983 else if (TailMatchesCS(
"unicode_border_linestyle|"
4984 "unicode_column_linestyle|"
4985 "unicode_header_linestyle"))
4986 COMPLETE_WITH_CS(
"single",
"double");
4988 else if (TailMatchesCS(
"\\unset"))
4989 matches = complete_from_variables(
text,
"",
"",
true);
4990 else if (TailMatchesCS(
"\\set"))
4991 matches = complete_from_variables(
text,
"",
"",
false);
4992 else if (TailMatchesCS(
"\\set", MatchAny))
4994 if (TailMatchesCS(
"AUTOCOMMIT|ON_ERROR_STOP|QUIET|SHOW_ALL_RESULTS|"
4995 "SINGLELINE|SINGLESTEP"))
4996 COMPLETE_WITH_CS(
"on",
"off");
4997 else if (TailMatchesCS(
"COMP_KEYWORD_CASE"))
4998 COMPLETE_WITH_CS(
"lower",
"upper",
4999 "preserve-lower",
"preserve-upper");
5000 else if (TailMatchesCS(
"ECHO"))
5001 COMPLETE_WITH_CS(
"errors",
"queries",
"all",
"none");
5002 else if (TailMatchesCS(
"ECHO_HIDDEN"))
5003 COMPLETE_WITH_CS(
"noexec",
"off",
"on");
5004 else if (TailMatchesCS(
"HISTCONTROL"))
5005 COMPLETE_WITH_CS(
"ignorespace",
"ignoredups",
5006 "ignoreboth",
"none");
5007 else if (TailMatchesCS(
"ON_ERROR_ROLLBACK"))
5008 COMPLETE_WITH_CS(
"on",
"off",
"interactive");
5009 else if (TailMatchesCS(
"SHOW_CONTEXT"))
5010 COMPLETE_WITH_CS(
"never",
"errors",
"always");
5011 else if (TailMatchesCS(
"VERBOSITY"))
5012 COMPLETE_WITH_CS(
"default",
"verbose",
"terse",
"sqlstate");
5014 else if (TailMatchesCS(
"\\sf*"))
5015 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
5016 else if (TailMatchesCS(
"\\sv*"))
5017 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
5018 else if (TailMatchesCS(
"\\cd|\\e|\\edit|\\g|\\gx|\\i|\\include|"
5019 "\\ir|\\include_relative|\\o|\\out|"
5020 "\\s|\\w|\\write|\\lo_import"))
5022 completion_charp =
"\\";
5023 completion_force_quote =
false;
5024 matches = rl_completion_matches(
text, complete_from_files);
5034 const pgsql_thing_t *wac;
5036 for (wac = words_after_create; wac->name != NULL; wac++)
5041 COMPLETE_WITH_QUERY_LIST(wac->query,
5043 else if (wac->vquery)
5044 COMPLETE_WITH_VERSIONED_QUERY_LIST(wac->vquery,
5046 else if (wac->squery)
5047 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_LIST(wac->squery,
5059 if (matches == NULL)
5061 COMPLETE_WITH_CONST(
true,
"");
5063 rl_completion_append_character =
'\0';
5064 #ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
5065 rl_completion_suppress_quote = 1;
5070 free(previous_words);
5073 free(completion_ref_object);
5074 completion_ref_object = NULL;
5075 free(completion_ref_schema);
5076 completion_ref_schema = NULL;
5102 create_or_drop_command_generator(
const char *
text,
int state,
bits32 excluded)
5104 static int list_index,
5112 string_length = strlen(
text);
5116 while ((
name = words_after_create[list_index++].
name))
5119 !(words_after_create[list_index - 1].flags & excluded))
5120 return pg_strdup_keyword_case(
name,
text);
5131 create_command_generator(
const char *
text,
int state)
5133 return create_or_drop_command_generator(
text,
state, THING_NO_CREATE);
5140 drop_command_generator(
const char *
text,
int state)
5142 return create_or_drop_command_generator(
text,
state, THING_NO_DROP);
5149 alter_command_generator(
const char *
text,
int state)
5151 return create_or_drop_command_generator(
text,
state, THING_NO_ALTER);
5160 complete_from_query(
const char *
text,
int state)
5163 return _complete_from_query(completion_charp, NULL, completion_charpp,
5168 complete_from_versioned_query(
const char *
text,
int state)
5170 const VersionedQuery *vquery = completion_vquery;
5176 if (vquery->query == NULL)
5179 return _complete_from_query(vquery->query, NULL, completion_charpp,
5184 complete_from_schema_query(
const char *
text,
int state)
5187 return _complete_from_query(NULL, completion_squery, completion_charpp,
5192 complete_from_versioned_schema_query(
const char *
text,
int state)
5194 const SchemaQuery *squery = completion_squery;
5200 if (squery->catname == NULL)
5203 return _complete_from_query(NULL, squery, completion_charpp,
5250 _complete_from_query(
const char *simple_query,
5251 const SchemaQuery *schema_query,
5252 const char *
const *keywords,
5256 static int list_index,
5261 static bool non_empty_object;
5262 static bool schemaquoted;
5263 static bool objectquoted;
5274 char *e_object_like;
5281 num_schema_only = 0;
5282 num_query_other = 0;
5295 parse_identifier(
text,
5296 &schemaname, &objectname,
5297 &schemaquoted, &objectquoted);
5301 non_empty_object = (*objectname !=
'\0');
5307 e_object_like = make_like_pattern(objectname);
5310 e_schemaname = escape_string(schemaname);
5312 e_schemaname = NULL;
5314 if (completion_ref_object)
5315 e_ref_object = escape_string(completion_ref_object);
5317 e_ref_object = NULL;
5319 if (completion_ref_schema)
5320 e_ref_schema = escape_string(completion_ref_schema);
5322 e_ref_schema = NULL;
5328 Assert(simple_query == NULL);
5335 if (schemaname == NULL || schema_query->namespace == NULL)
5339 if (schema_query->use_distinct)
5342 "%s, NULL::pg_catalog.text FROM %s",
5343 schema_query->result,
5344 schema_query->catname);
5345 if (schema_query->refnamespace && completion_ref_schema)
5347 ", pg_catalog.pg_namespace nr");
5349 if (schema_query->selcondition)
5351 schema_query->selcondition);
5353 schema_query->result,
5355 if (schema_query->viscondition)
5357 schema_query->viscondition);
5358 if (schema_query->refname)
5360 Assert(completion_ref_object);
5362 schema_query->refname, e_ref_object);
5363 if (schema_query->refnamespace && completion_ref_schema)
5365 " AND %s = nr.oid AND nr.nspname = '%s'",
5366 schema_query->refnamespace,
5368 else if (schema_query->refviscondition)
5371 schema_query->refviscondition);
5381 if (strcmp(schema_query->catname,
5382 "pg_catalog.pg_class c") == 0 &&
5383 strncmp(objectname,
"pg_", 3) != 0)
5386 " AND c.relnamespace <> (SELECT oid FROM"
5387 " pg_catalog.pg_namespace WHERE nspname = 'pg_catalog')");
5394 if (schema_query->namespace)
5397 "SELECT NULL::pg_catalog.text, n.nspname "
5398 "FROM pg_catalog.pg_namespace n "
5399 "WHERE n.nspname LIKE '%s'",
5406 if (strncmp(objectname,
"pg_", 3) != 0)
5408 " AND n.nspname NOT LIKE E'pg\\\\_%'");
5415 schemaquoted = objectquoted;
5422 if (schema_query->use_distinct)
5425 "FROM %s, pg_catalog.pg_namespace n",
5426 schema_query->result,
5427 schema_query->catname);
5428 if (schema_query->refnamespace && completion_ref_schema)
5430 ", pg_catalog.pg_namespace nr");
5432 schema_query->namespace);
5433 if (schema_query->selcondition)
5435 schema_query->selcondition);
5437 schema_query->result,
5441 if (schema_query->refname)
5443 Assert(completion_ref_object);
5445 schema_query->refname, e_ref_object);
5446 if (schema_query->refnamespace && completion_ref_schema)
5448 " AND %s = nr.oid AND nr.nspname = '%s'",
5449 schema_query->refnamespace,
5451 else if (schema_query->refviscondition)
5454 schema_query->refviscondition);
5464 e_ref_object, e_ref_schema);
5469 completion_max_records);
5472 result = exec_query(query_buffer.
data);
5478 free(e_object_like);
5491 const char *item = NULL;
5492 const char *nsp = NULL;
5515 if (non_empty_object)
5517 if (item && !objectquoted && identifier_needs_quotes(item))
5519 if (nsp && !schemaquoted && identifier_needs_quotes(nsp))
5524 if (item == NULL && nsp != NULL)
5529 return requote_identifier(nsp, item, schemaquoted, objectquoted);
5538 if (schema_query && schema_query->keywords)
5540 const char *
const *itemp = schema_query->keywords;
5544 const char *item = *itemp++;
5552 return pg_strdup_keyword_case(item,
text);
5558 const char *
const *itemp = keywords;
5562 const char *item = *itemp++;
5570 return pg_strdup_keyword_case(item,
text);
5581 if (num_schema_only > 0 && num_query_other == 0 && num_keywords == 0)
5582 rl_completion_append_character =
'\0';
5597 set_completion_reference(
const char *
word)
5602 parse_identifier(
word,
5603 &completion_ref_schema, &completion_ref_object,
5604 &schemaquoted, &objectquoted);
5612 set_completion_reference_verbatim(
const char *
word)
5614 completion_ref_schema = NULL;
5625 complete_from_list(
const char *
text,
int state)
5627 static int string_length,
5630 static bool casesensitive;
5634 Assert(completion_charpp != NULL);
5640 string_length = strlen(
text);
5641 casesensitive = completion_case_sensitive;
5645 while ((item = completion_charpp[list_index++]))
5648 if (casesensitive && strncmp(
text, item, string_length) == 0)
5657 if (completion_case_sensitive)
5665 return pg_strdup_keyword_case(item,
text);
5673 if (casesensitive && matches == 0)
5675 casesensitive =
false;
5705 complete_from_const(
const char *
text,
int state)
5707 Assert(completion_charp != NULL);
5710 if (completion_case_sensitive)
5718 return pg_strdup_keyword_case(completion_charp,
text);
5730 append_variable_names(
char ***varnames,
int *nvars,
5731 int *maxvars,
const char *varname,
5732 const char *prefix,
const char *suffix)
5734 if (*nvars >= *maxvars)
5738 ((*maxvars) + 1) *
sizeof(
char *));
5741 (*varnames)[(*nvars)++] =
psprintf(
"%s%s%s", prefix, varname, suffix);
5753 complete_from_variables(
const char *
text,
const char *prefix,
const char *suffix,
5763 varnames = (
char **)
pg_malloc((maxvars + 1) *
sizeof(
char *));
5767 if (need_value && !(ptr->
value))
5769 append_variable_names(&varnames, &nvars, &maxvars, ptr->
name,
5773 varnames[nvars] = NULL;
5774 COMPLETE_WITH_LIST_CS((
const char *
const *) varnames);
5776 for (
i = 0;
i < nvars;
i++)
5798 complete_from_files(
const char *
text,
int state)
5800 #ifdef USE_FILENAME_QUOTING_FUNCTIONS
5817 #ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
5818 rl_completion_suppress_quote = 1;
5823 completion_force_quote =
true;
5825 return rl_filename_completion_function(
text,
state);
5831 static const char *unquoted_text;
5832 char *unquoted_match;
5837 completion_force_quote =
true;
5842 unquoted_text =
strtokx(
text,
"", NULL,
"'", *completion_charp,
5848 unquoted_text =
text;
5852 unquoted_match = rl_filename_completion_function(unquoted_text,
state);
5855 struct stat statbuf;
5856 bool is_dir = (
stat(unquoted_match, &statbuf) == 0 &&
5857 S_ISDIR(statbuf.st_mode) != 0);
5861 '\'', *completion_charp,
5862 completion_force_quote,
5865 free(unquoted_match);
5867 ret = unquoted_match;
5874 if (*ret ==
'\'' && is_dir)
5876 char *retend = ret + strlen(ret) - 1;
5881 rl_completion_append_character =
'\0';
5898 pg_strdup_keyword_case(
const char *s,
const char *ref)
5902 unsigned char first = ref[0];
5911 for (p = ret; *p; p++)
5916 for (p = ret; *p; p++)
5930 escape_string(
const char *
text)
5953 make_like_pattern(
const char *
word)
5957 char *bptr = buffer;
5980 result = escape_string(buffer);
5999 parse_identifier(
const char *
ident,
6000 char **schemaname,
char **objectname,
6001 bool *schemaquoted,
bool *objectquoted)
6003 size_t buflen = strlen(
ident) + 1;
6013 *schemaquoted = *objectquoted =
false;
6019 unsigned char ch = (
unsigned char) *
ident++;
6023 if (inquotes && *
ident ==
'"')
6031 inquotes = !inquotes;
6032 *objectquoted =
true;
6035 else if (ch ==
'.' && !inquotes)
6043 *schemaquoted = *objectquoted;
6044 *objectquoted =
false;
6056 *optr++ = (char) ch;
6071 if (ch >=
'A' && ch <=
'Z')
6073 else if (enc_is_single_byte &&
IS_HIGHBIT_SET(ch) && isupper(ch))
6076 *optr++ = (char) ch;
6081 *schemaname = sname;
6082 *objectname = oname;
6098 requote_identifier(
const char *schemaname,
const char *objectname,
6099 bool quote_schema,
bool quote_object)
6111 buflen += strlen(schemaname) + 1;
6113 quote_schema = identifier_needs_quotes(schemaname);
6117 for (
const char *p = schemaname; *p; p++)
6126 buflen += strlen(objectname);
6128 quote_object = identifier_needs_quotes(objectname);
6132 for (
const char *p = objectname; *p; p++)
6145 for (
const char *p = schemaname; *p; p++)
6159 for (
const char *p = objectname; *p; p++)
6180 identifier_needs_quotes(
const char *
ident)
6187 if (strspn(
ident,
"abcdefghijklmnopqrstuvwxyz0123456789_$") != strlen(
ident))
6213 exec_query(
const char *query)
6230 pg_log_error(
"tab completion query failed: %s\nQuery was:\n%s",
6253 get_previous_words(
int point,
char **buffer,
int *nwords)
6255 char **previous_words;
6258 int words_found = 0;
6272 memcpy(
buf +
i, rl_line_buffer, point);
6279 buf = rl_line_buffer;
6288 previous_words = (
char **)
pg_malloc(point *
sizeof(
char *));
6289 *buffer = outptr = (
char *)
pg_malloc(point * 2);
6296 for (
i = point - 1;
i >= 0;
i--)
6298 if (strchr(WORD_BREAKS,
buf[
i]))
6312 bool inquotes =
false;
6313 int parentheses = 0;
6317 for (
i = point;
i >= 0;
i--)
6319 if (!isspace((
unsigned char)
buf[
i]))
6338 inquotes = !inquotes;
6345 if (--parentheses <= 0)
6348 else if (parentheses == 0 &&
6349 strchr(WORD_BREAKS,
buf[
start - 1]))
6355 previous_words[words_found++] = outptr;
6366 if (
buf != rl_line_buffer)
6369 *nwords = words_found;
6370 return previous_words;
6380 get_guctype(
const char *varname)
6385 char *guctype = NULL;
6387 e_varname = escape_string(varname);
6391 "SELECT vartype FROM pg_catalog.pg_settings "
6392 "WHERE pg_catalog.lower(name) = pg_catalog.lower('%s')",
6395 result = exec_query(query_buffer.
data);
6407 #ifdef USE_FILENAME_QUOTING_FUNCTIONS
6416 quote_file_name(
char *fname,
int match_type,
char *quote_pointer)
6419 struct stat statbuf;
6423 '\'', *completion_charp,
6424 completion_force_quote,
6439 completion_last_char !=
'\'' &&
6440 (match_type != SINGLE_MATCH ||
6441 (quote_pointer && *quote_pointer ==
'\'') ||
6442 stat(fname, &statbuf) != 0 ||
6445 char *
send = s + strlen(s) - 1;
6456 #ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
6457 rl_completion_suppress_quote = 0;
6465 if (quote_pointer && *quote_pointer !=
'\'')
6466 *quote_pointer =
'\0';
6477 dequote_file_name(
char *fname,
int quote_char)
6479 char *unquoted_fname;
6486 if (quote_char ==
'\'')
6488 char *workspace = (
char *)
pg_malloc(strlen(fname) + 2);
6490 workspace[0] = quote_char;
6491 strcpy(workspace + 1, fname);
6492 unquoted_fname =
strtokx(workspace,
"", NULL,
"'", *completion_charp,
6497 unquoted_fname =
strtokx(fname,
"", NULL,
"'", *completion_charp,
6501 if (!unquoted_fname)
6504 unquoted_fname = fname;
bool recognized_connection_string(const char *connstr)
#define IS_HIGHBIT_SET(ch)
#define Assert(condition)
const uint8 ScanKeywordCategories[SCANKEYWORDS_NUM_KEYWORDS]
char * PQerrorMessage(const PGconn *conn)
ConnStatusType PQstatus(const PGconn *conn)
size_t PQescapeStringConn(PGconn *conn, char *to, const char *from, size_t length, int *error)
ExecStatusType PQresultStatus(const PGresult *res)
int PQntuples(const PGresult *res)
PGresult * PQexec(PGconn *conn, const char *query)
char * PQgetvalue(const PGresult *res, int tup_num, int field_num)
int PQgetisnull(const PGresult *res, int tup_num, int field_num)
int PQnfields(const PGresult *res)
int PQmblenBounded(const char *s, int encoding)
void * pg_realloc(void *ptr, size_t size)
char * pg_strdup(const char *in)
void * pg_malloc(size_t size)
PGDLLIMPORT const ScanKeywordList ScanKeywords
#define UNRESERVED_KEYWORD
int ScanKeywordLookup(const char *str, const ScanKeywordList *keywords)
#define pg_log_error(...)
char * pnstrdup(const char *in, Size len)
int pg_strcasecmp(const char *s1, const char *s2)
unsigned char pg_toupper(unsigned char ch)
unsigned char pg_tolower(unsigned char ch)
int pg_strncasecmp(const char *s1, const char *s2, size_t n)
void initPQExpBuffer(PQExpBuffer str)
void appendPQExpBuffer(PQExpBuffer str, const char *fmt,...)
void appendPQExpBufferStr(PQExpBuffer str, const char *data)
void termPQExpBuffer(PQExpBuffer str)
char * psprintf(const char *fmt,...)
static void word(struct vars *v, int dir, struct state *lp, struct state *rp)
@ PSQL_COMP_CASE_PRESERVE_LOWER
@ PSQL_COMP_CASE_PRESERVE_UPPER
char * quote_if_needed(const char *source, const char *entails_quote, char quote, char escape, bool force_quote, int encoding)
char * strtokx(const char *s, const char *whitespace, const char *delim, const char *quote, char escape, bool e_strings, bool del_quotes, int encoding)
void initialize_readline(void)
PQExpBuffer tab_completion_query_buf
static int32 text_length(Datum str)
int pg_encoding_max_length(int encoding)
#define send(s, buf, len, flags)