53#include "catalog/pg_am_d.h"
54#include "catalog/pg_class_d.h"
68#ifndef HAVE_RL_FILENAME_COMPLETION_FUNCTION
69#define rl_filename_completion_function filename_completion_function
72#ifndef HAVE_RL_COMPLETION_MATCHES
73#define rl_completion_matches completion_matches
81#ifdef HAVE_RL_FILENAME_QUOTING_FUNCTION
82#define USE_FILENAME_QUOTING_FUNCTIONS 1
86#define WORD_BREAKS "\t\n@><=;|&() "
167 const char *
namespace;
256#define COMPLETE_WITH_QUERY(query) \
257 COMPLETE_WITH_QUERY_LIST(query, NULL)
259#define COMPLETE_WITH_QUERY_LIST(query, list) \
261 completion_charp = query; \
262 completion_charpp = list; \
263 completion_verbatim = false; \
264 matches = rl_completion_matches(text, complete_from_query); \
267#define COMPLETE_WITH_QUERY_PLUS(query, ...) \
269 static const char *const list[] = { __VA_ARGS__, NULL }; \
270 COMPLETE_WITH_QUERY_LIST(query, list); \
273#define COMPLETE_WITH_QUERY_VERBATIM(query) \
274 COMPLETE_WITH_QUERY_VERBATIM_LIST(query, NULL)
276#define COMPLETE_WITH_QUERY_VERBATIM_LIST(query, list) \
278 completion_charp = query; \
279 completion_charpp = list; \
280 completion_verbatim = true; \
281 matches = rl_completion_matches(text, complete_from_query); \
284#define COMPLETE_WITH_QUERY_VERBATIM_PLUS(query, ...) \
286 static const char *const list[] = { __VA_ARGS__, NULL }; \
287 COMPLETE_WITH_QUERY_VERBATIM_LIST(query, list); \
290#define COMPLETE_WITH_VERSIONED_QUERY(query) \
291 COMPLETE_WITH_VERSIONED_QUERY_LIST(query, NULL)
293#define COMPLETE_WITH_VERSIONED_QUERY_LIST(query, list) \
295 completion_vquery = query; \
296 completion_charpp = list; \
297 completion_verbatim = false; \
298 matches = rl_completion_matches(text, complete_from_versioned_query); \
301#define COMPLETE_WITH_VERSIONED_QUERY_PLUS(query, ...) \
303 static const char *const list[] = { __VA_ARGS__, NULL }; \
304 COMPLETE_WITH_VERSIONED_QUERY_LIST(query, list); \
307#define COMPLETE_WITH_SCHEMA_QUERY(query) \
308 COMPLETE_WITH_SCHEMA_QUERY_LIST(query, NULL)
310#define COMPLETE_WITH_SCHEMA_QUERY_LIST(query, list) \
312 completion_squery = &(query); \
313 completion_charpp = list; \
314 completion_verbatim = false; \
315 matches = rl_completion_matches(text, complete_from_schema_query); \
318#define COMPLETE_WITH_SCHEMA_QUERY_PLUS(query, ...) \
320 static const char *const list[] = { __VA_ARGS__, NULL }; \
321 COMPLETE_WITH_SCHEMA_QUERY_LIST(query, list); \
324#define COMPLETE_WITH_SCHEMA_QUERY_VERBATIM(query) \
326 completion_squery = &(query); \
327 completion_charpp = NULL; \
328 completion_verbatim = true; \
329 matches = rl_completion_matches(text, complete_from_schema_query); \
332#define COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(query) \
333 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_LIST(query, NULL)
335#define COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_LIST(query, list) \
337 completion_squery = query; \
338 completion_charpp = list; \
339 completion_verbatim = false; \
340 matches = rl_completion_matches(text, complete_from_versioned_schema_query); \
343#define COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_PLUS(query, ...) \
345 static const char *const list[] = { __VA_ARGS__, NULL }; \
346 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_LIST(query, list); \
353#define COMPLETE_WITH_CONST(cs, con) \
355 completion_case_sensitive = (cs); \
356 completion_charp = (con); \
357 matches = rl_completion_matches(text, complete_from_const); \
360#define COMPLETE_WITH_LIST_INT(cs, list) \
362 completion_case_sensitive = (cs); \
363 completion_charpp = (list); \
364 matches = rl_completion_matches(text, complete_from_list); \
367#define COMPLETE_WITH_LIST(list) COMPLETE_WITH_LIST_INT(false, list)
368#define COMPLETE_WITH_LIST_CS(list) COMPLETE_WITH_LIST_INT(true, list)
370#define COMPLETE_WITH(...) \
372 static const char *const list[] = { __VA_ARGS__, NULL }; \
373 COMPLETE_WITH_LIST(list); \
376#define COMPLETE_WITH_CS(...) \
378 static const char *const list[] = { __VA_ARGS__, NULL }; \
379 COMPLETE_WITH_LIST_CS(list); \
382#define COMPLETE_WITH_ATTR(relation) \
383 COMPLETE_WITH_ATTR_LIST(relation, NULL)
385#define COMPLETE_WITH_ATTR_LIST(relation, list) \
387 set_completion_reference(relation); \
388 completion_squery = &(Query_for_list_of_attributes); \
389 completion_charpp = list; \
390 completion_verbatim = false; \
391 matches = rl_completion_matches(text, complete_from_schema_query); \
394#define COMPLETE_WITH_ATTR_PLUS(relation, ...) \
396 static const char *const list[] = { __VA_ARGS__, NULL }; \
397 COMPLETE_WITH_ATTR_LIST(relation, list); \
406#define COMPLETE_WITH_ENUM_VALUE(type) \
408 set_completion_reference(type); \
409 if (text[0] == '\'' || \
410 start == 0 || rl_line_buffer[start - 1] != '\'') \
411 completion_squery = &(Query_for_list_of_enum_values_quoted); \
413 completion_squery = &(Query_for_list_of_enum_values_unquoted); \
414 completion_charpp = NULL; \
415 completion_verbatim = true; \
416 matches = rl_completion_matches(text, complete_from_schema_query); \
423#define COMPLETE_WITH_TIMEZONE_NAME() \
425 static const char *const list[] = { "DEFAULT", NULL }; \
426 if (text[0] == '\'') \
427 completion_charp = Query_for_list_of_timezone_names_quoted_in; \
428 else if (start == 0 || rl_line_buffer[start - 1] != '\'') \
429 completion_charp = Query_for_list_of_timezone_names_quoted_out; \
431 completion_charp = Query_for_list_of_timezone_names_unquoted; \
432 completion_charpp = list; \
433 completion_verbatim = true; \
434 matches = rl_completion_matches(text, complete_from_query); \
437#define COMPLETE_WITH_FUNCTION_ARG(function) \
439 set_completion_reference(function); \
440 completion_squery = &(Query_for_list_of_arguments); \
441 completion_charpp = NULL; \
442 completion_verbatim = true; \
443 matches = rl_completion_matches(text, complete_from_schema_query); \
446#define COMPLETE_WITH_FILES_LIST(escape, force_quote, list) \
448 completion_charp = escape; \
449 completion_charpp = list; \
450 completion_force_quote = force_quote; \
451 matches = rl_completion_matches(text, complete_from_files); \
454#define COMPLETE_WITH_FILES(escape, force_quote) \
455 COMPLETE_WITH_FILES_LIST(escape, force_quote, NULL)
457#define COMPLETE_WITH_FILES_PLUS(escape, force_quote, ...) \
459 static const char *const list[] = { __VA_ARGS__, NULL }; \
460 COMPLETE_WITH_FILES_LIST(escape, force_quote, list); \
463#define COMPLETE_WITH_GENERATOR(generator) \
464 matches = rl_completion_matches(text, generator)
474 .catname =
"pg_catalog.pg_constraint con, pg_catalog.pg_class c1",
475 .selcondition =
"con.conrelid=c1.oid",
476 .result =
"con.conname",
477 .refname =
"c1.relname",
478 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
479 .refnamespace =
"c1.relnamespace",
483 .catname =
"pg_catalog.pg_constraint con, pg_catalog.pg_class c1",
484 .selcondition =
"con.conrelid=c1.oid and not con.convalidated",
485 .result =
"con.conname",
486 .refname =
"c1.relname",
487 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
488 .refnamespace =
"c1.relnamespace",
492 .catname =
"pg_catalog.pg_constraint con, pg_catalog.pg_type t",
493 .selcondition =
"con.contypid=t.oid",
494 .result =
"con.conname",
495 .refname =
"t.typname",
496 .refviscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
497 .refnamespace =
"t.typnamespace",
501 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_index i",
502 .selcondition =
"c1.oid=i.indrelid and i.indexrelid=c2.oid",
503 .result =
"c2.relname",
504 .refname =
"c1.relname",
505 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
506 .refnamespace =
"c1.relnamespace",
510 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_index i",
511 .selcondition =
"c1.oid=i.indrelid and i.indexrelid=c2.oid and i.indisunique",
512 .result =
"c2.relname",
513 .refname =
"c1.relname",
514 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
515 .refnamespace =
"c1.relnamespace",
520 .min_server_version = 110000,
521 .catname =
"pg_catalog.pg_proc p",
522 .selcondition =
"p.prokind = 'a'",
523 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
524 .namespace =
"p.pronamespace",
525 .result =
"p.proname",
528 .catname =
"pg_catalog.pg_proc p",
529 .selcondition =
"p.proisagg",
530 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
531 .namespace =
"p.pronamespace",
532 .result =
"p.proname",
537 .catname =
"pg_catalog.pg_proc p",
538 .result =
"pg_catalog.oidvectortypes(p.proargtypes)||')'",
539 .refname =
"p.proname",
540 .refviscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
541 .refnamespace =
"p.pronamespace",
545 .catname =
"pg_catalog.pg_attribute a, pg_catalog.pg_class c",
546 .selcondition =
"c.oid = a.attrelid and a.attnum > 0 and not a.attisdropped",
547 .result =
"a.attname",
548 .refname =
"c.relname",
549 .refviscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
550 .refnamespace =
"c.relnamespace",
554 .catname =
"pg_catalog.pg_attribute a, pg_catalog.pg_class c",
555 .selcondition =
"c.oid = a.attrelid and a.attnum > 0 and not a.attisdropped",
556 .result =
"a.attnum::pg_catalog.text",
557 .refname =
"c.relname",
558 .refviscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
559 .refnamespace =
"c.relnamespace",
582 "time with time zone",
583 "time without time zone",
584 "timestamp with time zone",
585 "timestamp without time zone",
591 .catname =
"pg_catalog.pg_type t",
593 .selcondition =
"(t.typrelid = 0 "
595 " FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)) "
596 "AND t.typname !~ '^_'",
597 .viscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
598 .namespace =
"t.typnamespace",
599 .result =
"t.typname",
604 .catname =
"pg_catalog.pg_type t",
607 " FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid) "
608 "AND t.typname !~ '^_'",
609 .viscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
610 .namespace =
"t.typnamespace",
611 .result =
"t.typname",
615 .catname =
"pg_catalog.pg_type t",
616 .selcondition =
"t.typtype = 'd'",
617 .viscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
618 .namespace =
"t.typnamespace",
619 .result =
"t.typname",
623 .catname =
"pg_catalog.pg_enum e, pg_catalog.pg_type t",
624 .selcondition =
"t.oid = e.enumtypid",
625 .result =
"pg_catalog.quote_literal(enumlabel)",
626 .refname =
"t.typname",
627 .refviscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
628 .refnamespace =
"t.typnamespace",
632 .catname =
"pg_catalog.pg_enum e, pg_catalog.pg_type t",
633 .selcondition =
"t.oid = e.enumtypid",
634 .result =
"e.enumlabel",
635 .refname =
"t.typname",
636 .refviscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
637 .refnamespace =
"t.typnamespace",
643 .min_server_version = 110000,
644 .catname =
"pg_catalog.pg_proc p",
645 .selcondition =
"p.prokind != 'p'",
646 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
647 .namespace =
"p.pronamespace",
648 .result =
"p.proname",
651 .catname =
"pg_catalog.pg_proc p",
652 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
653 .namespace =
"p.pronamespace",
654 .result =
"p.proname",
660 .min_server_version = 110000,
661 .catname =
"pg_catalog.pg_proc p",
662 .selcondition =
"p.prokind = 'p'",
663 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
664 .namespace =
"p.pronamespace",
665 .result =
"p.proname",
674 .catname =
"pg_catalog.pg_proc p",
675 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
676 .namespace =
"p.pronamespace",
677 .result =
"p.proname",
681 .catname =
"pg_catalog.pg_class c",
683 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
684 .namespace =
"c.relnamespace",
685 .result =
"c.relname",
689 .catname =
"pg_catalog.pg_class c",
691 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
692 .namespace =
"c.relnamespace",
693 .result =
"c.relname",
697 .catname =
"pg_catalog.pg_class c",
701 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
702 .namespace =
"c.relnamespace",
703 .result =
"c.relname",
707 .catname =
"pg_catalog.pg_class c",
709 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
710 .namespace =
"c.relnamespace",
711 .result =
"c.relname",
715 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_constraint con",
716 .selcondition =
"c.oid=con.conrelid and c.relkind IN ("
719 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
720 .namespace =
"c.relnamespace",
721 .result =
"c.relname",
722 .use_distinct =
true,
723 .refname =
"con.conname",
727 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_policy p",
728 .selcondition =
"c.oid=p.polrelid",
729 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
730 .namespace =
"c.relnamespace",
731 .result =
"c.relname",
732 .use_distinct =
true,
733 .refname =
"p.polname",
737 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_rewrite r",
738 .selcondition =
"c.oid=r.ev_class",
739 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
740 .namespace =
"c.relnamespace",
741 .result =
"c.relname",
742 .use_distinct =
true,
743 .refname =
"r.rulename",
747 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_trigger t",
748 .selcondition =
"c.oid=t.tgrelid",
749 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
750 .namespace =
"c.relnamespace",
751 .result =
"c.relname",
752 .use_distinct =
true,
753 .refname =
"t.tgname",
757 .catname =
"pg_catalog.pg_ts_config c",
758 .viscondition =
"pg_catalog.pg_ts_config_is_visible(c.oid)",
759 .namespace =
"c.cfgnamespace",
760 .result =
"c.cfgname",
764 .catname =
"pg_catalog.pg_ts_dict d",
765 .viscondition =
"pg_catalog.pg_ts_dict_is_visible(d.oid)",
766 .namespace =
"d.dictnamespace",
767 .result =
"d.dictname",
771 .catname =
"pg_catalog.pg_ts_parser p",
772 .viscondition =
"pg_catalog.pg_ts_parser_is_visible(p.oid)",
773 .namespace =
"p.prsnamespace",
774 .result =
"p.prsname",
778 .catname =
"pg_catalog.pg_ts_template t",
779 .viscondition =
"pg_catalog.pg_ts_template_is_visible(t.oid)",
780 .namespace =
"t.tmplnamespace",
781 .result =
"t.tmplname",
785 .catname =
"pg_catalog.pg_class c",
787 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
788 .namespace =
"c.relnamespace",
789 .result =
"c.relname",
793 .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 .catname =
"pg_catalog.pg_class c",
805 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
806 .namespace =
"c.relnamespace",
807 .result =
"c.relname",
811 .catname =
"pg_catalog.pg_class c",
813 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
814 .namespace =
"c.relnamespace",
815 .result =
"c.relname",
821 .catname =
"pg_catalog.pg_class c",
822 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
823 .namespace =
"c.relnamespace",
824 .result =
"c.relname",
829 .catname =
"pg_catalog.pg_class c",
832 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
833 .namespace =
"c.relnamespace",
834 .result =
"c.relname",
838 .catname =
"pg_catalog.pg_opfamily c",
839 .viscondition =
"pg_catalog.pg_opfamily_is_visible(c.oid)",
840 .namespace =
"c.opfnamespace",
841 .result =
"c.opfname",
846 .catname =
"pg_catalog.pg_class c",
852 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
853 .namespace =
"c.relnamespace",
854 .result =
"c.relname",
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",
871 .catname =
"pg_catalog.pg_class c",
879 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
880 .namespace =
"c.relnamespace",
881 .result =
"c.relname",
886 .catname =
"pg_catalog.pg_class c",
891 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
892 .namespace =
"c.relnamespace",
893 .result =
"c.relname",
897#define Query_for_list_of_grantables Query_for_list_of_selectables
901 .catname =
"pg_catalog.pg_class c",
907 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
908 .namespace =
"c.relnamespace",
909 .result =
"c.relname",
918#define Query_for_list_of_tables_for_copy Query_for_list_of_analyzables
922 .catname =
"pg_catalog.pg_class c",
927 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
928 .namespace =
"c.relnamespace",
929 .result =
"c.relname",
936#define Query_for_list_of_vacuumables Query_for_list_of_indexables
940 .catname =
"pg_catalog.pg_class c",
945 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
946 .namespace =
"c.relnamespace",
947 .result =
"c.relname",
951 .catname =
"pg_catalog.pg_constraint c",
952 .selcondition =
"c.conrelid <> 0",
953 .namespace =
"c.connamespace",
954 .result =
"c.conname",
958 .catname =
"pg_catalog.pg_statistic_ext s",
959 .viscondition =
"pg_catalog.pg_statistics_obj_is_visible(s.oid)",
960 .namespace =
"s.stxnamespace",
961 .result =
"s.stxname",
965 .catname =
"pg_catalog.pg_collation c",
966 .selcondition =
"c.collencoding IN (-1, pg_catalog.pg_char_to_encoding(pg_catalog.getdatabaseencoding()))",
967 .viscondition =
"pg_catalog.pg_collation_is_visible(c.oid)",
968 .namespace =
"c.collnamespace",
969 .result =
"c.collname",
973 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_inherits i",
974 .selcondition =
"c1.oid=i.inhparent and i.inhrelid=c2.oid and c2.relispartition",
975 .viscondition =
"pg_catalog.pg_table_is_visible(c2.oid)",
976 .namespace =
"c2.relnamespace",
977 .result =
"c2.relname",
978 .refname =
"c1.relname",
979 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
980 .refnamespace =
"c1.relnamespace",
984 .catname =
"pg_catalog.pg_rewrite r, pg_catalog.pg_class c1",
985 .selcondition =
"r.ev_class=c1.oid",
986 .result =
"r.rulename",
987 .refname =
"c1.relname",
988 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
989 .refnamespace =
"c1.relnamespace",
993 .catname =
"pg_catalog.pg_trigger t, pg_catalog.pg_class c1",
994 .selcondition =
"t.tgrelid=c1.oid and not t.tgisinternal",
995 .result =
"t.tgname",
996 .refname =
"c1.relname",
997 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
998 .refnamespace =
"c1.relnamespace",
1021#define Query_for_list_of_template_databases \
1023" FROM pg_catalog.pg_database d "\
1024" WHERE d.datname LIKE '%s' "\
1025" AND (d.datistemplate OR pg_catalog.pg_has_role(d.datdba, 'USAGE'))"
1027#define Query_for_list_of_databases \
1028"SELECT datname FROM pg_catalog.pg_database "\
1029" WHERE datname LIKE '%s'"
1031#define Query_for_list_of_database_vars \
1032"SELECT conf FROM ("\
1033" SELECT setdatabase, pg_catalog.split_part(pg_catalog.unnest(setconfig),'=',1) conf"\
1034" FROM pg_db_role_setting "\
1035" ) s, pg_database d "\
1036" WHERE s.setdatabase = d.oid "\
1037" AND conf LIKE '%s'"\
1038" AND d.datname LIKE '%s'"
1040#define Query_for_list_of_tablespaces \
1041"SELECT spcname FROM pg_catalog.pg_tablespace "\
1042" WHERE spcname LIKE '%s'"
1044#define Query_for_list_of_encodings \
1045" SELECT DISTINCT pg_catalog.pg_encoding_to_char(conforencoding) "\
1046" FROM pg_catalog.pg_conversion "\
1047" WHERE pg_catalog.pg_encoding_to_char(conforencoding) LIKE pg_catalog.upper('%s')"
1049#define Query_for_list_of_languages \
1051" FROM pg_catalog.pg_language "\
1052" WHERE lanname != 'internal' "\
1053" AND lanname LIKE '%s'"
1055#define Query_for_list_of_schemas \
1056"SELECT nspname FROM pg_catalog.pg_namespace "\
1057" WHERE nspname LIKE '%s'"
1060#define Query_for_list_of_alter_system_set_vars \
1061"SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1062" WHERE context != 'internal' "\
1063" AND pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1065#define Query_for_list_of_set_vars \
1066"SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1067" WHERE context IN ('user', 'superuser') "\
1068" AND pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1070#define Query_for_list_of_show_vars \
1071"SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1072" WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1074#define Query_for_list_of_roles \
1076" FROM pg_catalog.pg_roles "\
1077" WHERE rolname LIKE '%s'"
1080#define Keywords_for_list_of_owner_roles \
1081"CURRENT_ROLE", "CURRENT_USER", "SESSION_USER"
1084#define Keywords_for_list_of_grant_roles \
1085Keywords_for_list_of_owner_roles, "PUBLIC"
1087#define Query_for_all_table_constraints \
1089" FROM pg_catalog.pg_constraint c "\
1090" WHERE c.conrelid <> 0 "\
1091" and conname LIKE '%s'"
1093#define Query_for_list_of_fdws \
1095" FROM pg_catalog.pg_foreign_data_wrapper "\
1096" WHERE fdwname LIKE '%s'"
1098#define Query_for_list_of_servers \
1100" FROM pg_catalog.pg_foreign_server "\
1101" WHERE srvname LIKE '%s'"
1103#define Query_for_list_of_user_mappings \
1105" FROM pg_catalog.pg_user_mappings "\
1106" WHERE usename LIKE '%s'"
1108#define Query_for_list_of_user_vars \
1109"SELECT conf FROM ("\
1110" SELECT rolname, pg_catalog.split_part(pg_catalog.unnest(rolconfig),'=',1) conf"\
1111" FROM pg_catalog.pg_roles"\
1113" WHERE s.conf like '%s' "\
1114" AND s.rolname LIKE '%s'"
1116#define Query_for_list_of_access_methods \
1118" FROM pg_catalog.pg_am "\
1119" WHERE amname LIKE '%s'"
1121#define Query_for_list_of_index_access_methods \
1123" FROM pg_catalog.pg_am "\
1124" WHERE amname LIKE '%s' AND "\
1125" amtype=" CppAsString2(AMTYPE_INDEX)
1127#define Query_for_list_of_table_access_methods \
1129" FROM pg_catalog.pg_am "\
1130" WHERE amname LIKE '%s' AND "\
1131" amtype=" CppAsString2(AMTYPE_TABLE)
1133#define Query_for_list_of_extensions \
1135" FROM pg_catalog.pg_extension "\
1136" WHERE extname LIKE '%s'"
1138#define Query_for_list_of_available_extensions \
1140" FROM pg_catalog.pg_available_extensions "\
1141" WHERE name LIKE '%s' AND installed_version IS NULL"
1143#define Query_for_list_of_available_extension_versions \
1145" FROM pg_catalog.pg_available_extension_versions "\
1146" WHERE version LIKE '%s' AND name='%s'"
1148#define Query_for_list_of_prepared_statements \
1150" FROM pg_catalog.pg_prepared_statements "\
1151" WHERE name LIKE '%s'"
1153#define Query_for_list_of_event_triggers \
1155" FROM pg_catalog.pg_event_trigger "\
1156" WHERE evtname LIKE '%s'"
1158#define Query_for_list_of_tablesample_methods \
1160" FROM pg_catalog.pg_proc "\
1161" WHERE prorettype = 'pg_catalog.tsm_handler'::pg_catalog.regtype AND "\
1162" proargtypes[0] = 'pg_catalog.internal'::pg_catalog.regtype AND "\
1165#define Query_for_list_of_policies \
1167" FROM pg_catalog.pg_policy "\
1168" WHERE polname LIKE '%s'"
1170#define Query_for_values_of_enum_GUC \
1171" SELECT val FROM ( "\
1172" SELECT name, pg_catalog.unnest(enumvals) AS val "\
1173" FROM pg_catalog.pg_settings "\
1175" WHERE val LIKE '%s'"\
1176" and pg_catalog.lower(name)=pg_catalog.lower('%s')"
1178#define Query_for_list_of_channels \
1180" FROM pg_catalog.pg_listening_channels() AS channel "\
1181" WHERE channel LIKE '%s'"
1183#define Query_for_list_of_cursors \
1185" FROM pg_catalog.pg_cursors "\
1186" WHERE name LIKE '%s'"
1188#define Query_for_list_of_timezone_names_unquoted \
1190" FROM pg_catalog.pg_timezone_names() "\
1191" WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1193#define Query_for_list_of_timezone_names_quoted_out \
1194"SELECT pg_catalog.quote_literal(name) AS name "\
1195" FROM pg_catalog.pg_timezone_names() "\
1196" WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1198#define Query_for_list_of_timezone_names_quoted_in \
1199"SELECT pg_catalog.quote_literal(name) AS name "\
1200" FROM pg_catalog.pg_timezone_names() "\
1201" WHERE pg_catalog.quote_literal(pg_catalog.lower(name)) LIKE pg_catalog.lower('%s')"
1204#define Privilege_options_of_grant_and_revoke \
1205"SELECT", "INSERT", "UPDATE", "DELETE", "TRUNCATE", "REFERENCES", "TRIGGER", \
1206"CREATE", "CONNECT", "TEMPORARY", "EXECUTE", "USAGE", "SET", "ALTER SYSTEM", \
1210#define Alter_procedure_options \
1211"DEPENDS ON EXTENSION", "EXTERNAL SECURITY", "NO DEPENDS ON EXTENSION", \
1212"OWNER TO", "RENAME TO", "RESET", "SECURITY", "SET"
1215#define Alter_routine_options \
1216Alter_procedure_options, "COST", "IMMUTABLE", "LEAKPROOF", "NOT LEAKPROOF", \
1217"PARALLEL", "ROWS", "STABLE", "VOLATILE"
1220#define Alter_function_options \
1221Alter_routine_options, "CALLED ON NULL INPUT", "RETURNS NULL ON NULL INPUT", \
1225#define Copy_common_options \
1226"DELIMITER", "ENCODING", "ESCAPE", "FORMAT", "HEADER", "NULL", "QUOTE"
1229#define Copy_from_options \
1230Copy_common_options, "DEFAULT", "FORCE_NOT_NULL", "FORCE_NULL", "FREEZE", \
1231"LOG_VERBOSITY", "ON_ERROR", "REJECT_LIMIT"
1234#define Copy_to_options \
1235Copy_common_options, "FORCE_QUOTE"
1246 " FROM pg_catalog.pg_publication "
1247 " WHERE pubname LIKE '%s'"
1254 " SELECT s.subname "
1255 " FROM pg_catalog.pg_subscription s, pg_catalog.pg_database d "
1256 " WHERE s.subname LIKE '%s' "
1257 " AND d.datname = pg_catalog.current_database() "
1258 " AND s.subdbid = d.oid"
1265 "ABORT",
"ALTER",
"ANALYZE",
"BEGIN",
"CALL",
"CHECKPOINT",
"CLOSE",
"CLUSTER",
1266 "COMMENT",
"COMMIT",
"COPY",
"CREATE",
"DEALLOCATE",
"DECLARE",
1267 "DELETE FROM",
"DISCARD",
"DO",
"DROP",
"END",
"EXECUTE",
"EXPLAIN",
1268 "FETCH",
"GRANT",
"IMPORT FOREIGN SCHEMA",
"INSERT INTO",
"LISTEN",
"LOAD",
"LOCK",
1269 "MERGE INTO",
"MOVE",
"NOTIFY",
"PREPARE",
1270 "REASSIGN",
"REFRESH MATERIALIZED VIEW",
"REINDEX",
"RELEASE",
1271 "RESET",
"REVOKE",
"ROLLBACK",
1272 "SAVEPOINT",
"SECURITY LABEL",
"SELECT",
"SET",
"SHOW",
"START",
1273 "TABLE",
"TRUNCATE",
"UNLISTEN",
"UPDATE",
"VACUUM",
"VALUES",
1294#define THING_NO_CREATE (1 << 0)
1295#define THING_NO_DROP (1 << 1)
1296#define THING_NO_ALTER (1 << 2)
1297#define THING_NO_SHOW (THING_NO_CREATE | THING_NO_DROP | THING_NO_ALTER)
1317 {
"CONVERSION",
"SELECT conname FROM pg_catalog.pg_conversion WHERE conname LIKE '%s'"},
1342 {
"RULE",
"SELECT rulename FROM pg_catalog.pg_rules WHERE rulename LIKE '%s'"},
1358 {
"TRIGGER",
"SELECT tgname FROM pg_catalog.pg_trigger WHERE tgname LIKE '%s' AND NOT tgisinternal"},
1388#define MatchAny NULL
1389#define MatchAnyExcept(pattern) ("!" pattern)
1398 const char *
const *words;
1402#define TCPAT(id, kind, ...) \
1403 { (id), (kind), VA_ARGS_NARGS(__VA_ARGS__), \
1404 (const char * const []) { __VA_ARGS__ } }
1406#ifdef SWITCH_CONVERSION_APPLIED
1417 "autovacuum_analyze_scale_factor",
1418 "autovacuum_analyze_threshold",
1419 "autovacuum_enabled",
1420 "autovacuum_freeze_max_age",
1421 "autovacuum_freeze_min_age",
1422 "autovacuum_freeze_table_age",
1423 "autovacuum_multixact_freeze_max_age",
1424 "autovacuum_multixact_freeze_min_age",
1425 "autovacuum_multixact_freeze_table_age",
1426 "autovacuum_vacuum_cost_delay",
1427 "autovacuum_vacuum_cost_limit",
1428 "autovacuum_vacuum_insert_scale_factor",
1429 "autovacuum_vacuum_insert_threshold",
1430 "autovacuum_vacuum_max_threshold",
1431 "autovacuum_vacuum_scale_factor",
1432 "autovacuum_vacuum_threshold",
1434 "log_autovacuum_min_duration",
1435 "log_autoanalyze_min_duration",
1437 "toast.autovacuum_enabled",
1438 "toast.autovacuum_freeze_max_age",
1439 "toast.autovacuum_freeze_min_age",
1440 "toast.autovacuum_freeze_table_age",
1441 "toast.autovacuum_multixact_freeze_max_age",
1442 "toast.autovacuum_multixact_freeze_min_age",
1443 "toast.autovacuum_multixact_freeze_table_age",
1444 "toast.autovacuum_vacuum_cost_delay",
1445 "toast.autovacuum_vacuum_cost_limit",
1446 "toast.autovacuum_vacuum_insert_scale_factor",
1447 "toast.autovacuum_vacuum_insert_threshold",
1448 "toast.autovacuum_vacuum_max_threshold",
1449 "toast.autovacuum_vacuum_scale_factor",
1450 "toast.autovacuum_vacuum_threshold",
1451 "toast.log_autovacuum_min_duration",
1452 "toast.vacuum_index_cleanup",
1453 "toast.vacuum_max_eager_freeze_failure_rate",
1454 "toast.vacuum_truncate",
1455 "toast_tuple_target",
1456 "user_catalog_table",
1457 "vacuum_index_cleanup",
1458 "vacuum_max_eager_freeze_failure_rate",
1494 int *
maxvars,
const char *varname,
1495 const char *prefix,
const char *suffix);
1497 const char *prefix,
const char *suffix,
bool need_value);
1516#ifdef USE_FILENAME_QUOTING_FUNCTIONS
1531#ifdef USE_FILENAME_QUOTING_FUNCTIONS
1553#ifdef HAVE_RL_FILENAME_QUOTE_CHARACTERS
1557 for (
int i = 0;
i < 255;
i++)
1558 fqc[
i] = (
unsigned char) (
i + 1);
1590 bool case_sensitive)
1594#define cimatch(s1, s2, n) \
1595 (case_sensitive ? strncmp(s1, s2, n) == 0 : pg_strncasecmp(s1, s2, n) == 0)
1598 if (pattern ==
NULL)
1602 if (*pattern ==
'!')
1614 while (*
c !=
'\0' && *
c !=
'|')
1635 if (wordlen == (
c - pattern) &&
1659 int narg,
const char *
const *args)
1709 int narg,
const char *
const *args)
1762 int narg,
const char *
const *args)
1846 size_t length =
strlen(s);
1848 return (length > 0 && s[length - 1] ==
c);
1881#define prev_wd (previous_words[0])
1882#define prev2_wd (previous_words[1])
1883#define prev3_wd (previous_words[2])
1884#define prev4_wd (previous_words[3])
1885#define prev5_wd (previous_words[4])
1886#define prev6_wd (previous_words[5])
1887#define prev7_wd (previous_words[6])
1888#define prev8_wd (previous_words[7])
1889#define prev9_wd (previous_words[8])
1892#define TailMatches(...) \
1893 TailMatchesImpl(false, previous_words_count, previous_words, \
1894 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1897#define TailMatchesCS(...) \
1898 TailMatchesImpl(true, previous_words_count, previous_words, \
1899 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1902#define Matches(...) \
1903 MatchesImpl(false, previous_words_count, previous_words, \
1904 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1907#define MatchesCS(...) \
1908 MatchesImpl(true, previous_words_count, previous_words, \
1909 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1912#define HeadMatches(...) \
1913 HeadMatchesImpl(false, previous_words_count, previous_words, \
1914 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1917#define HeadMatchesCS(...) \
1918 HeadMatchesImpl(true, previous_words_count, previous_words, \
1919 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1924 "\\bind",
"\\bind_named",
1925 "\\connect",
"\\conninfo",
"\\C",
"\\cd",
"\\close_prepared",
"\\copy",
1926 "\\copyright",
"\\crosstabview",
1927 "\\d",
"\\da",
"\\dA",
"\\dAc",
"\\dAf",
"\\dAo",
"\\dAp",
1928 "\\db",
"\\dc",
"\\dconfig",
"\\dC",
"\\dd",
"\\ddp",
"\\dD",
1929 "\\des",
"\\det",
"\\deu",
"\\dew",
"\\dE",
"\\df",
1930 "\\dF",
"\\dFd",
"\\dFp",
"\\dFt",
"\\dg",
"\\di",
"\\dl",
"\\dL",
1931 "\\dm",
"\\dn",
"\\do",
"\\dO",
"\\dp",
"\\dP",
"\\dPi",
"\\dPt",
1932 "\\drds",
"\\drg",
"\\dRs",
"\\dRp",
"\\ds",
1933 "\\dt",
"\\dT",
"\\dv",
"\\du",
"\\dx",
"\\dX",
"\\dy",
1934 "\\echo",
"\\edit",
"\\ef",
"\\elif",
"\\else",
"\\encoding",
1935 "\\endif",
"\\endpipeline",
"\\errverbose",
"\\ev",
1936 "\\f",
"\\flush",
"\\flushrequest",
1937 "\\g",
"\\gdesc",
"\\getenv",
"\\getresults",
"\\gexec",
"\\gset",
"\\gx",
1939 "\\if",
"\\include",
"\\include_relative",
"\\ir",
1940 "\\list",
"\\lo_import",
"\\lo_export",
"\\lo_list",
"\\lo_unlink",
1942 "\\parse",
"\\password",
"\\print",
"\\prompt",
"\\pset",
1943 "\\qecho",
"\\quit",
1944 "\\reset",
"\\restrict",
1945 "\\s",
"\\sendpipeline",
"\\set",
"\\setenv",
"\\sf",
1946 "\\startpipeline",
"\\sv",
"\\syncpipeline",
1947 "\\t",
"\\T",
"\\timing",
1948 "\\unrestrict",
"\\unset",
1950 "\\warn",
"\\watch",
"\\write",
1988 if (
text[0] ==
'\\')
1992 else if (
text[0] ==
':' &&
text[1] !=
':')
1994 if (
text[1] ==
'\'')
1996 else if (
text[1] ==
'"')
1998 else if (
text[1] ==
'{' &&
text[2] ==
'?')
2011#ifdef SWITCH_CONVERSION_APPLIED
2029 switch (
tcpat->kind)
2104 else if (
wac->vquery)
2107 else if (
wac->squery)
2125#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
2204 COMPLETE_WITH(
"TABLE",
"VIEW",
"INDEX",
"SEQUENCE",
"TRIGGER",
2206 "UNIQUE",
"UNLOGGED");
2212 COMPLETE_WITH(
"FUNCTION",
"PROCEDURE",
"LANGUAGE",
"RULE",
"VIEW",
2213 "AGGREGATE",
"TRANSFORM",
"TRIGGER");
2223 else if (
Matches(
"ALTER",
"TABLE"))
2225 "ALL IN TABLESPACE");
2240 else if (
Matches(
"ALTER",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE",
MatchAny))
2292 COMPLETE_WITH(
"ADD",
"DROP",
"OWNER TO",
"RENAME TO",
"SET");
2296 else if (
Matches(
"ALTER",
"PUBLICATION",
MatchAny,
"ADD|SET",
"TABLE"))
2324 else if (
Matches(
"ALTER",
"PUBLICATION",
MatchAny,
"ADD|DROP|SET",
"TABLES",
"IN",
"SCHEMA"))
2326 " AND nspname NOT LIKE E'pg\\\\_%%'",
2330 COMPLETE_WITH(
"publish",
"publish_generated_columns",
"publish_via_partition_root");
2333 COMPLETE_WITH(
"CONNECTION",
"ENABLE",
"DISABLE",
"OWNER TO",
2334 "RENAME TO",
"REFRESH PUBLICATION",
"REFRESH SEQUENCES",
2335 "SET",
"SKIP (",
"ADD PUBLICATION",
"DROP PUBLICATION");
2348 "max_retention_duration",
"origin",
2349 "password_required",
"retain_dead_tuples",
2350 "run_as_owner",
"slot_name",
"streaming",
2351 "synchronous_commit",
"two_phase");
2362 "ADD|DROP|SET",
"PUBLICATION",
MatchAny))
2366 "ADD|DROP|SET",
"PUBLICATION",
MatchAny,
"WITH",
"("))
2375 COMPLETE_WITH(
"OWNER TO",
"REFRESH VERSION",
"RENAME TO",
"SET SCHEMA");
2383 COMPLETE_WITH(
"RESET",
"SET",
"OWNER TO",
"REFRESH COLLATION VERSION",
"RENAME TO",
2384 "IS_TEMPLATE",
"ALLOW_CONNECTIONS",
2385 "CONNECTION LIMIT");
2399 else if (
Matches(
"ALTER",
"EVENT",
"TRIGGER"))
2404 COMPLETE_WITH(
"DISABLE",
"ENABLE",
"OWNER TO",
"RENAME TO");
2416 COMPLETE_WITH(
"ACCESS METHOD",
"AGGREGATE",
"CAST",
"COLLATION",
2417 "CONVERSION",
"DOMAIN",
"EVENT TRIGGER",
"FOREIGN",
2418 "FUNCTION",
"MATERIALIZED VIEW",
"OPERATOR",
2419 "LANGUAGE",
"PROCEDURE",
"ROUTINE",
"SCHEMA",
2420 "SEQUENCE",
"SERVER",
"TABLE",
"TEXT SEARCH",
2421 "TRANSFORM FOR",
"TYPE",
"VIEW");
2424 else if (
Matches(
"ALTER",
"EXTENSION",
MatchAny,
"ADD|DROP",
"FOREIGN"))
2428 else if (
Matches(
"ALTER",
"EXTENSION",
MatchAny,
"ADD|DROP",
"OPERATOR"))
2432 else if (
Matches(
"ALTER",
"EXTENSION",
MatchAny,
"ADD|DROP",
"TEXT",
"SEARCH"))
2433 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
2447 else if (
Matches(
"ALTER",
"FOREIGN"))
2453 "OPTIONS",
"OWNER TO",
"RENAME TO");
2454 else if (
Matches(
"ALTER",
"FOREIGN",
"DATA",
"WRAPPER",
MatchAny,
"NO"))
2459 COMPLETE_WITH(
"ADD",
"ALTER",
"DISABLE TRIGGER",
"DROP",
"ENABLE",
2460 "INHERIT",
"NO INHERIT",
"OPTIONS",
"OWNER TO",
2461 "RENAME",
"SET",
"VALIDATE CONSTRAINT");
2464 else if (
Matches(
"ALTER",
"INDEX"))
2466 "ALL IN TABLESPACE");
2469 COMPLETE_WITH(
"ALTER COLUMN",
"OWNER TO",
"RENAME TO",
"SET",
2470 "RESET",
"ATTACH PARTITION",
2471 "DEPENDS ON EXTENSION",
"NO DEPENDS ON EXTENSION");
2505 "deduplicate_items",
2506 "fastupdate",
"gin_pending_list_limit",
2508 "pages_per_range",
"autosummarize"
2512 "deduplicate_items =",
2513 "fastupdate =",
"gin_pending_list_limit =",
2515 "pages_per_range =",
"autosummarize ="
2531 else if (
Matches(
"ALTER",
"MATERIALIZED",
"VIEW"))
2533 "ALL IN TABLESPACE");
2538 COMPLETE_WITH(
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
"CREATEROLE",
2539 "ENCRYPTED PASSWORD",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2540 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2541 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2542 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2543 "VALID UNTIL",
"WITH");
2555 COMPLETE_WITH(
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
"CREATEROLE",
2556 "ENCRYPTED PASSWORD",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2557 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2558 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2559 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2563 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
2566 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR"))
2569 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN"))
2572 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2576 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2580 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2585 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2587 Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2593 "VALIDATE CONSTRAINT");
2604 else if (
Matches(
"ALTER",
"DOMAIN",
MatchAny,
"DROP|RENAME|VALIDATE",
"CONSTRAINT"))
2621 COMPLETE_WITH(
"AS",
"INCREMENT",
"MINVALUE",
"MAXVALUE",
"RESTART",
2622 "START",
"NO",
"CACHE",
"CYCLE",
"SET",
"OWNED BY",
2623 "OWNER TO",
"RENAME TO");
2635 COMPLETE_WITH(
"VERSION",
"OPTIONS",
"OWNER TO",
"RENAME TO");
2640 else if (
Matches(
"ALTER",
"SYSTEM"))
2642 else if (
Matches(
"ALTER",
"SYSTEM",
"SET|RESET"))
2649 COMPLETE_WITH(
"ALTER COLUMN",
"OWNER TO",
"RENAME",
"RESET",
"SET");
2653 else if (
Matches(
"ALTER",
"VIEW",
MatchAny,
"ALTER|RENAME",
"COLUMN"))
2676 else if (
Matches(
"ALTER",
"VIEW",
MatchAny,
"SET",
"(",
"check_option",
"="))
2678 else if (
Matches(
"ALTER",
"VIEW",
MatchAny,
"SET",
"(",
"security_barrier|security_invoker",
"="))
2683 COMPLETE_WITH(
"ALTER COLUMN",
"CLUSTER ON",
"DEPENDS ON EXTENSION",
2684 "NO DEPENDS ON EXTENSION",
"OWNER TO",
"RENAME",
2687 else if (
Matches(
"ALTER",
"MATERIALIZED",
"VIEW",
MatchAny,
"RENAME"))
2689 else if (
Matches(
"ALTER",
"MATERIALIZED",
"VIEW",
MatchAny,
"ALTER|RENAME",
"COLUMN"))
2699 COMPLETE_WITH(
"(",
"ACCESS METHOD",
"SCHEMA",
"TABLESPACE",
"WITHOUT CLUSTER");
2701 else if (
Matches(
"ALTER",
"MATERIALIZED",
"VIEW",
MatchAny,
"SET",
"ACCESS",
"METHOD"))
2705 else if (
Matches(
"ALTER",
"POLICY"))
2718 COMPLETE_WITH(
"RENAME TO",
"TO",
"USING (",
"WITH CHECK (");
2747 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA",
"SET STATISTICS");
2765 "NO DEPENDS ON EXTENSION");
2771 COMPLETE_WITH(
"ADD",
"ALTER",
"CLUSTER ON",
"DISABLE",
"DROP",
2772 "ENABLE",
"INHERIT",
"NO",
"RENAME",
"RESET",
2773 "OWNER TO",
"SET",
"VALIDATE CONSTRAINT",
2774 "REPLICA IDENTITY",
"ATTACH PARTITION",
2775 "DETACH PARTITION",
"FORCE ROW LEVEL SECURITY",
2776 "SPLIT PARTITION",
"MERGE PARTITIONS (",
2784 COMPLETE_WITH(
"COLUMN",
"CONSTRAINT",
"CHECK (",
"NOT NULL",
"UNIQUE",
2785 "PRIMARY KEY",
"EXCLUDE",
"FOREIGN KEY");
2793 COMPLETE_WITH(
"CHECK (",
"NOT NULL",
"UNIQUE",
"PRIMARY KEY",
"EXCLUDE",
"FOREIGN KEY");
2800 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"ADD",
"PRIMARY",
"KEY") ||
2806 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"ADD",
"PRIMARY",
"KEY",
"USING",
"INDEX"))
2812 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"ADD",
"UNIQUE",
"USING",
"INDEX"))
2819 "PRIMARY",
"KEY",
"USING",
"INDEX"))
2826 "UNIQUE",
"USING",
"INDEX"))
2833 COMPLETE_WITH(
"ALWAYS",
"REPLICA",
"ROW LEVEL SECURITY",
"RULE",
2835 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"ENABLE",
"REPLICA|ALWAYS"))
2887 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"ALTER|RENAME",
"COLUMN"))
2905 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"ALTER|DROP|RENAME",
"CONSTRAINT"))
2911 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"VALIDATE",
"CONSTRAINT"))
2919 COMPLETE_WITH(
"TYPE",
"SET",
"RESET",
"RESTART",
"ADD",
"DROP");
2937 COMPLETE_WITH(
"(",
"COMPRESSION",
"DATA TYPE",
"DEFAULT",
"EXPRESSION",
"GENERATED",
"NOT NULL",
2938 "STATISTICS",
"STORAGE",
2940 "INCREMENT",
"MINVALUE",
"MAXVALUE",
"START",
"NO",
"CACHE",
"CYCLE");
2968 COMPLETE_WITH(
"DEFAULT",
"PLAIN",
"EXTERNAL",
"EXTENDED",
"MAIN");
2978 COMPLETE_WITH(
"DEFAULT",
"EXPRESSION",
"IDENTITY",
"NOT NULL");
2989 "TABLESPACE",
"UNLOGGED",
"WITH",
"WITHOUT");
2995 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"SET",
"ACCESS",
"METHOD"))
3014 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"REPLICA",
"IDENTITY",
"USING",
"INDEX"))
3019 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"REPLICA",
"IDENTITY",
"USING"))
3042 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"DETACH|SPLIT",
"PARTITION"))
3055 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"MERGE",
"PARTITIONS",
"("))
3060 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"MERGE",
"PARTITIONS",
"(*)"))
3076 "effective_io_concurrency",
"maintenance_io_concurrency");
3079 else if (
Matches(
"ALTER",
"TEXT",
"SEARCH"))
3080 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3081 else if (
Matches(
"ALTER",
"TEXT",
"SEARCH",
"TEMPLATE|PARSER",
MatchAny))
3085 else if (
Matches(
"ALTER",
"TEXT",
"SEARCH",
"CONFIGURATION",
MatchAny))
3088 "OWNER TO",
"RENAME TO",
"SET SCHEMA");
3092 COMPLETE_WITH(
"ADD ATTRIBUTE",
"ADD VALUE",
"ALTER ATTRIBUTE",
3094 "OWNER TO",
"RENAME",
"SET SCHEMA",
"SET (");
3112 else if (
Matches(
"ALTER",
"TYPE",
MatchAny,
"ALTER|DROP|RENAME",
"ATTRIBUTE"))
3137 COMPLETE_WITH(
"ANALYZE",
"RECEIVE",
"SEND",
"STORAGE",
"SUBSCRIPT",
3138 "TYPMOD_IN",
"TYPMOD_OUT");
3156 "(",
"VERBOSE",
"ONLY");
3157 else if (
Matches(
"ANALYZE",
"VERBOSE"))
3169 COMPLETE_WITH(
"VERBOSE",
"SKIP_LOCKED",
"BUFFER_USAGE_LIMIT");
3173 else if (
Matches(
"ANALYZE",
"(*)"))
3184 COMPLETE_WITH(
"WORK",
"TRANSACTION",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
3186 else if (
Matches(
"END|ABORT"))
3196 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION",
"TO SAVEPOINT",
"PREPARED");
3197 else if (
Matches(
"ABORT|END|COMMIT|ROLLBACK",
"AND"))
3205 else if (
Matches(
"CHECKPOINT"))
3228 else if (
Matches(
"CLUSTER",
"VERBOSE") ||
3259 else if (
Matches(
"COMMENT",
"ON"))
3260 COMPLETE_WITH(
"ACCESS METHOD",
"AGGREGATE",
"CAST",
"COLLATION",
3261 "COLUMN",
"CONSTRAINT",
"CONVERSION",
"DATABASE",
3262 "DOMAIN",
"EXTENSION",
"EVENT TRIGGER",
3263 "FOREIGN DATA WRAPPER",
"FOREIGN TABLE",
3264 "FUNCTION",
"INDEX",
"LANGUAGE",
"LARGE OBJECT",
3265 "MATERIALIZED VIEW",
"OPERATOR",
"POLICY",
3266 "PROCEDURE",
"PROCEDURAL LANGUAGE",
"PUBLICATION",
"ROLE",
3267 "ROUTINE",
"RULE",
"SCHEMA",
"SEQUENCE",
"SERVER",
3268 "STATISTICS",
"SUBSCRIPTION",
"TABLE",
3269 "TABLESPACE",
"TEXT SEARCH",
"TRANSFORM FOR",
3270 "TRIGGER",
"TYPE",
"VIEW");
3271 else if (
Matches(
"COMMENT",
"ON",
"ACCESS",
"METHOD"))
3273 else if (
Matches(
"COMMENT",
"ON",
"CONSTRAINT"))
3283 else if (
Matches(
"COMMENT",
"ON",
"CONSTRAINT",
MatchAny,
"ON",
"DOMAIN"))
3285 else if (
Matches(
"COMMENT",
"ON",
"EVENT",
"TRIGGER"))
3287 else if (
Matches(
"COMMENT",
"ON",
"FOREIGN"))
3289 else if (
Matches(
"COMMENT",
"ON",
"FOREIGN",
"TABLE"))
3291 else if (
Matches(
"COMMENT",
"ON",
"MATERIALIZED",
"VIEW"))
3293 else if (
Matches(
"COMMENT",
"ON",
"POLICY"))
3302 else if (
Matches(
"COMMENT",
"ON",
"PROCEDURAL",
"LANGUAGE"))
3311 else if (
Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH"))
3312 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3313 else if (
Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"CONFIGURATION"))
3315 else if (
Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"DICTIONARY"))
3317 else if (
Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"PARSER"))
3319 else if (
Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"TEMPLATE"))
3321 else if (
Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR"))
3325 else if (
Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR",
MatchAny,
"LANGUAGE"))
3349 else if (
Matches(
"COPY|\\copy"))
3352 else if (
Matches(
"COPY|\\copy",
"("))
3353 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES",
"INSERT INTO",
"UPDATE",
"DELETE FROM",
"MERGE INTO",
"WITH");
3463 "PROVIDER =",
"DETERMINISTIC =");
3472 COMPLETE_WITH(
"OWNER",
"TEMPLATE",
"ENCODING",
"TABLESPACE",
3473 "IS_TEMPLATE",
"STRATEGY",
3474 "ALLOW_CONNECTIONS",
"CONNECTION LIMIT",
3475 "LC_COLLATE",
"LC_CTYPE",
"LOCALE",
"OID",
3476 "LOCALE_PROVIDER",
"ICU_LOCALE");
3490 "NOT NULL",
"NULL",
"CHECK (");
3496 else if (
Matches(
"CREATE",
"EXTENSION"))
3509 else if (
Matches(
"CREATE",
"FOREIGN"))
3531 "ON",
"CONCURRENTLY");
3545 else if (
TailMatches(
"CREATE|UNIQUE",
"INDEX",
"CONCURRENTLY"))
3577 else if (
Matches(
"CREATE",
"OR"))
3589 COMPLETE_WITH(
"AS",
"FOR",
"TO",
"USING (",
"WITH CHECK (");
3602 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
3625 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
3666 COMPLETE_WITH(
"FOR TABLE",
"FOR TABLES IN SCHEMA",
"FOR ALL TABLES",
"FOR ALL SEQUENCES",
"WITH (");
3668 COMPLETE_WITH(
"TABLE",
"TABLES IN SCHEMA",
"ALL TABLES",
"ALL SEQUENCES");
3671 else if (
Matches(
"CREATE",
"PUBLICATION",
MatchAny,
"FOR",
"ALL",
"TABLES"))
3695 else if (
Matches(
"CREATE",
"PUBLICATION",
MatchAny,
"FOR",
"TABLES",
"IN",
"SCHEMA"))
3697 " AND nspname NOT LIKE E'pg\\\\_%%'",
3703 COMPLETE_WITH(
"publish",
"publish_generated_columns",
"publish_via_partition_root");
3723 else if (
TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE"))
3726 else if (
TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE",
"TO"))
3730 else if (
Matches(
"CREATE",
"SCHEMA"))
3733 else if (
Matches(
"CREATE",
"SCHEMA",
"AUTHORIZATION") ||
3746 COMPLETE_WITH(
"AS",
"INCREMENT BY",
"MINVALUE",
"MAXVALUE",
"NO",
3747 "CACHE",
"CYCLE",
"OWNED BY",
"START WITH");
3798 COMPLETE_WITH(
"EXECUTE",
"SELECT",
"TABLE",
"VALUES",
"WITH");
3801 COMPLETE_WITH(
"AS",
"INHERITS (",
"PARTITION BY",
"USING",
"TABLESPACE",
"WITH (");
3803 COMPLETE_WITH(
"AS",
"INHERITS (",
"USING",
"TABLESPACE",
"WITH (");
3805 COMPLETE_WITH(
"AS",
"INHERITS (",
"ON COMMIT",
"PARTITION BY",
"USING",
3806 "TABLESPACE",
"WITH (");
3816 else if (
TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"TABLE",
MatchAny,
"(*)",
"ON",
"COMMIT"))
3827 else if (
Matches(
"CREATE",
"TEXT",
"SEARCH"))
3828 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3829 else if (
Matches(
"CREATE",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE",
MatchAny))
3833 else if (
Matches(
"CREATE",
"TRANSFORM") ||
3834 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM"))
3836 else if (
Matches(
"CREATE",
"TRANSFORM",
"FOR") ||
3837 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR"))
3842 else if (
Matches(
"CREATE",
"TRANSFORM",
"FOR",
MatchAny,
"LANGUAGE") ||
3843 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR",
MatchAny,
"LANGUAGE"))
3863 COMPLETE_WITH(
"binary",
"connect",
"copy_data",
"create_slot",
3864 "disable_on_error",
"enabled",
"failover",
3865 "max_retention_duration",
"origin",
3866 "password_required",
"retain_dead_tuples",
3867 "run_as_owner",
"slot_name",
"streaming",
3868 "synchronous_commit",
"two_phase");
3925 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3928 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3935 "INITIALLY",
"IMMEDIATE|DEFERRED") ||
3937 "INITIALLY",
"IMMEDIATE|DEFERRED"))
3940 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3942 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3950 "OLD|NEW",
"TABLE") ||
3952 "OLD|NEW",
"TABLE"))
3955 "REFERENCING",
"OLD",
"TABLE",
"AS",
MatchAny) ||
3957 "REFERENCING",
"OLD",
"TABLE",
"AS",
MatchAny) ||
3959 "REFERENCING",
"OLD",
"TABLE",
MatchAny) ||
3961 "REFERENCING",
"OLD",
"TABLE",
MatchAny))
3964 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3966 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3969 "REFERENCING",
"NEW",
"TABLE",
"AS",
MatchAny) ||
3971 "REFERENCING",
"NEW",
"TABLE",
"AS",
MatchAny) ||
3973 "REFERENCING",
"NEW",
"TABLE",
MatchAny) ||
3975 "REFERENCING",
"NEW",
"TABLE",
MatchAny))
3978 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3980 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3983 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS",
MatchAny,
"OLD|NEW",
"TABLE",
"AS",
MatchAny) ||
3985 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS",
MatchAny,
"OLD|NEW",
"TABLE",
"AS",
MatchAny) ||
3987 "REFERENCING",
"OLD|NEW",
"TABLE",
MatchAny,
"OLD|NEW",
"TABLE",
"AS",
MatchAny) ||
3989 "REFERENCING",
"OLD|NEW",
"TABLE",
MatchAny,
"OLD|NEW",
"TABLE",
"AS",
MatchAny) ||
3991 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS",
MatchAny,
"OLD|NEW",
"TABLE",
MatchAny) ||
3993 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS",
MatchAny,
"OLD|NEW",
"TABLE",
MatchAny) ||
3995 "REFERENCING",
"OLD|NEW",
"TABLE",
MatchAny,
"OLD|NEW",
"TABLE",
MatchAny) ||
3997 "REFERENCING",
"OLD|NEW",
"TABLE",
MatchAny,
"OLD|NEW",
"TABLE",
MatchAny))
4015 "FOR",
"EACH",
"ROW|STATEMENT") ||
4017 "FOR",
"EACH",
"ROW|STATEMENT") ||
4019 "FOR",
"ROW|STATEMENT") ||
4021 "FOR",
"ROW|STATEMENT"))
4054 "EXECUTE",
"FUNCTION|PROCEDURE") ||
4056 "EXECUTE",
"FUNCTION|PROCEDURE"))
4062 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
4063 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
4064 "LOGIN",
"NOBYPASSRLS",
4065 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
4066 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
4067 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
4068 "VALID UNTIL",
"WITH");
4073 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
4074 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
4075 "LOGIN",
"NOBYPASSRLS",
4076 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
4077 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
4078 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
4103 "TYPMOD_IN",
"TYPMOD_OUT",
"ANALYZE",
"SUBSCRIPT",
4104 "INTERNALLENGTH",
"PASSEDBYVALUE",
"ALIGNMENT",
4105 "STORAGE",
"LIKE",
"CATEGORY",
"PREFERRED",
4106 "DEFAULT",
"ELEMENT",
"DELIMITER",
4117 "CANONICAL",
"SUBTYPE_DIFF",
4118 "MULTIRANGE_TYPE_NAME");
4145 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW",
MatchAny,
"WITH",
"(",
"check_option",
"="))
4157 else if (
Matches(
"CREATE",
"MATERIALIZED"))
4167 else if (
Matches(
"CREATE",
"MATERIALIZED",
"VIEW",
MatchAny,
"USING"))
4182 else if (
Matches(
"CREATE",
"EVENT"))
4189 COMPLETE_WITH(
"ddl_command_start",
"ddl_command_end",
"login",
4190 "sql_drop",
"table_rewrite");
4211 else if (
Matches(
"CREATE",
"EVENT",
"TRIGGER",
MatchAnyN,
"EXECUTE",
"FUNCTION|PROCEDURE"))
4215 else if (
Matches(
"DEALLOCATE"))
4226 COMPLETE_WITH(
"BINARY",
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
4237 COMPLETE_WITH(
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
"CURSOR");
4282 "COLLATION|CONVERSION|DOMAIN|EXTENSION|LANGUAGE|PUBLICATION|SCHEMA|SEQUENCE|SERVER|SUBSCRIPTION|STATISTICS|TABLE|TYPE|VIEW",
4288 Matches(
"DROP",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE",
MatchAny))
4295 else if (
Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE",
MatchAny))
4297 else if (
Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE",
MatchAny,
"("))
4299 else if (
Matches(
"DROP",
"FOREIGN"))
4307 else if (
Matches(
"DROP",
"INDEX"))
4310 else if (
Matches(
"DROP",
"INDEX",
"CONCURRENTLY"))
4318 else if (
Matches(
"DROP",
"MATERIALIZED"))
4320 else if (
Matches(
"DROP",
"MATERIALIZED",
"VIEW"))
4326 else if (
Matches(
"DROP",
"OWNED"))
4328 else if (
Matches(
"DROP",
"OWNED",
"BY"))
4334 else if (
Matches(
"DROP",
"TEXT",
"SEARCH"))
4335 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
4349 else if (
Matches(
"DROP",
"ACCESS"))
4351 else if (
Matches(
"DROP",
"ACCESS",
"METHOD"))
4355 else if (
Matches(
"DROP",
"EVENT"))
4357 else if (
Matches(
"DROP",
"EVENT",
"TRIGGER"))
4361 else if (
Matches(
"DROP",
"POLICY"))
4387 else if (
Matches(
"DROP",
"TRANSFORM"))
4389 else if (
Matches(
"DROP",
"TRANSFORM",
"FOR"))
4410 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4411 "MERGE INTO",
"EXECUTE",
"ANALYZE",
"VERBOSE");
4421 COMPLETE_WITH(
"ANALYZE",
"VERBOSE",
"COSTS",
"SETTINGS",
"GENERIC_PLAN",
4422 "BUFFERS",
"SERIALIZE",
"WAL",
"TIMING",
"SUMMARY",
4423 "MEMORY",
"FORMAT");
4424 else if (
TailMatches(
"ANALYZE|VERBOSE|COSTS|SETTINGS|GENERIC_PLAN|BUFFERS|WAL|TIMING|SUMMARY|MEMORY"))
4431 else if (
Matches(
"EXPLAIN",
"ANALYZE"))
4432 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4433 "MERGE INTO",
"EXECUTE",
"VERBOSE");
4434 else if (
Matches(
"EXPLAIN",
"(*)") ||
4435 Matches(
"EXPLAIN",
"VERBOSE") ||
4436 Matches(
"EXPLAIN",
"ANALYZE",
"VERBOSE"))
4437 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4438 "MERGE INTO",
"EXECUTE");
4446 else if (
Matches(
"FETCH|MOVE"))
4464 else if (
Matches(
"FETCH|MOVE",
"BACKWARD|FORWARD"))
4475 else if (
Matches(
"FETCH|MOVE",
"ABSOLUTE|BACKWARD|FORWARD|RELATIVE",
4477 Matches(
"FETCH|MOVE",
"ALL|NEXT|PRIOR|FIRST|LAST"))
4487 else if (
TailMatches(
"FOREIGN",
"DATA",
"WRAPPER") &&
4509 TailMatches(
"REVOKE",
"ADMIN|GRANT|INHERIT|SET",
"OPTION",
"FOR"))
4515 if (
HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4520 "DELETE",
"TRUNCATE",
"REFERENCES",
"TRIGGER",
4521 "CREATE",
"EXECUTE",
"USAGE",
"MAINTAIN",
"ALL");
4524 "DELETE",
"TRUNCATE",
"REFERENCES",
"TRIGGER",
4525 "CREATE",
"EXECUTE",
"USAGE",
"MAINTAIN",
"ALL",
4526 "GRANT OPTION FOR");
4536 "INHERIT OPTION FOR",
4538 else if (
TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR"))
4540 else if (
TailMatches(
"REVOKE",
"ADMIN|INHERIT|SET",
"OPTION",
"FOR"))
4545 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER"))
4551 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"SET") ||
4553 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER",
"SYSTEM"))
4579 if (
TailMatches(
"SELECT|INSERT|UPDATE|DELETE|TRUNCATE|REFERENCES|TRIGGER|CREATE|CONNECT|TEMPORARY|TEMP|EXECUTE|USAGE|MAINTAIN|ALL"))
4601 if (
HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4602 COMPLETE_WITH(
"TABLES",
"SEQUENCES",
"FUNCTIONS",
"PROCEDURES",
"ROUTINES",
"TYPES",
"SCHEMAS",
"LARGE OBJECTS");
4605 "ALL FUNCTIONS IN SCHEMA",
4606 "ALL PROCEDURES IN SCHEMA",
4607 "ALL ROUTINES IN SCHEMA",
4608 "ALL SEQUENCES IN SCHEMA",
4609 "ALL TABLES IN SCHEMA",
4612 "FOREIGN DATA WRAPPER",
4629 "PROCEDURES IN SCHEMA",
4630 "ROUTINES IN SCHEMA",
4631 "SEQUENCES IN SCHEMA",
4632 "TABLES IN SCHEMA");
4655 if (
HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4696 "WITH GRANT OPTION",
4729 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
MatchAny,
"ON",
"ALL",
MatchAny,
"IN",
"SCHEMA",
MatchAny))
4784 else if (
Matches(
"IMPORT",
"FOREIGN"))
4800 else if (
TailMatches(
"NOT",
"MATCHED",
"THEN",
"INSERT"))
4817 COMPLETE_WITH(
"(",
"DEFAULT VALUES",
"SELECT",
"TABLE",
"VALUES",
"OVERRIDING");
4844 else if (
Matches(
"LOCK",
"TABLE"))
4847 else if (
Matches(
"LOCK",
"TABLE",
"ONLY") ||
Matches(
"LOCK",
"ONLY"))
4861 "ROW SHARE MODE",
"ROW EXCLUSIVE MODE",
4862 "SHARE UPDATE EXCLUSIVE MODE",
"SHARE MODE",
4863 "SHARE ROW EXCLUSIVE MODE",
4864 "EXCLUSIVE MODE",
"ACCESS EXCLUSIVE MODE");
4876 "UPDATE EXCLUSIVE MODE");
4953 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"SOURCE|TARGET"))
4961 else if (
TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY"))
4968 else if (
TailMatches(
"WHEN",
"MATCHED",
"THEN") ||
4969 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"SOURCE",
"THEN"))
4975 else if (
TailMatches(
"WHEN",
"NOT",
"MATCHED",
"THEN") ||
4976 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"TARGET",
"THEN"))
5000 COMPLETE_WITH(
"SELECT",
"UPDATE",
"INSERT INTO",
"DELETE FROM",
5001 "MERGE INTO",
"VALUES",
"WITH",
"TABLE");
5011 else if (
Matches(
"REASSIGN",
"OWNED"))
5013 else if (
Matches(
"REASSIGN",
"OWNED",
"BY"))
5023 else if (
Matches(
"REFRESH",
"MATERIALIZED"))
5025 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW"))
5028 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY"))
5032 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY",
MatchAny))
5034 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
MatchAny,
"WITH"))
5036 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY",
MatchAny,
"WITH"))
5038 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
MatchAny,
"WITH",
"NO"))
5040 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY",
MatchAny,
"WITH",
"NO"))
5044 else if (
Matches(
"REINDEX") ||
5046 COMPLETE_WITH(
"TABLE",
"INDEX",
"SYSTEM",
"SCHEMA",
"DATABASE");
5047 else if (
Matches(
"REINDEX",
"TABLE") ||
5048 Matches(
"REINDEX",
"(*)",
"TABLE"))
5051 else if (
Matches(
"REINDEX",
"INDEX") ||
5052 Matches(
"REINDEX",
"(*)",
"INDEX"))
5055 else if (
Matches(
"REINDEX",
"SCHEMA") ||
5056 Matches(
"REINDEX",
"(*)",
"SCHEMA"))
5059 else if (
Matches(
"REINDEX",
"SYSTEM|DATABASE") ||
5060 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE"))
5063 else if (
Matches(
"REINDEX",
"TABLE",
"CONCURRENTLY") ||
5064 Matches(
"REINDEX",
"(*)",
"TABLE",
"CONCURRENTLY"))
5066 else if (
Matches(
"REINDEX",
"INDEX",
"CONCURRENTLY") ||
5067 Matches(
"REINDEX",
"(*)",
"INDEX",
"CONCURRENTLY"))
5069 else if (
Matches(
"REINDEX",
"SCHEMA",
"CONCURRENTLY") ||
5070 Matches(
"REINDEX",
"(*)",
"SCHEMA",
"CONCURRENTLY"))
5072 else if (
Matches(
"REINDEX",
"SYSTEM|DATABASE",
"CONCURRENTLY") ||
5073 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE",
"CONCURRENTLY"))
5092 else if (
Matches(
"SECURITY",
"LABEL"))
5096 else if (
Matches(
"SECURITY",
"LABEL",
"ON") ||
5098 COMPLETE_WITH(
"TABLE",
"COLUMN",
"AGGREGATE",
"DATABASE",
"DOMAIN",
5099 "EVENT TRIGGER",
"FOREIGN TABLE",
"FUNCTION",
5100 "LARGE OBJECT",
"MATERIALIZED VIEW",
"LANGUAGE",
5101 "PUBLICATION",
"PROCEDURE",
"ROLE",
"ROUTINE",
"SCHEMA",
5102 "SEQUENCE",
"SUBSCRIPTION",
"TABLESPACE",
"TYPE",
"VIEW");
5123 "SESSION AUTHORIZATION",
5125 else if (
Matches(
"SHOW",
"SESSION"))
5128 else if (
Matches(
"SET",
"TRANSACTION"))
5129 COMPLETE_WITH(
"SNAPSHOT",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
5130 else if (
Matches(
"BEGIN|START",
"TRANSACTION") ||
5133 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION"))
5134 COMPLETE_WITH(
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
5135 else if (
Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"NOT") ||
5137 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"NOT"))
5139 else if (
Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION") ||
5140 Matches(
"BEGIN",
"ISOLATION") ||
5141 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION"))
5143 else if (
Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL") ||
5144 Matches(
"BEGIN",
"ISOLATION",
"LEVEL") ||
5145 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL"))
5147 else if (
Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"READ") ||
5148 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"READ") ||
5149 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"READ"))
5151 else if (
Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
5152 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
5153 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"REPEATABLE"))
5155 else if (
Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"READ") ||
5157 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"READ"))
5160 else if (
Matches(
"SET",
"CONSTRAINTS"))
5167 else if (
Matches(
"SET",
"ROLE"))
5170 else if (
Matches(
"SET",
"SESSION"))
5171 COMPLETE_WITH(
"AUTHORIZATION",
"CHARACTERISTICS AS TRANSACTION");
5173 else if (
Matches(
"SET",
"SESSION",
"AUTHORIZATION"))
5177 else if (
Matches(
"RESET",
"SESSION"))
5200 "YMD",
"DMY",
"MDY",
5201 "US",
"European",
"NonEuropean",
5207 " AND nspname NOT LIKE E'pg\\\\_toast%%'"
5208 " AND nspname NOT LIKE E'pg\\\\_temp%%'",
5233 "1",
"0",
"DEFAULT");
5260 else if (
Matches(
"TRUNCATE",
"TABLE"))
5268 COMPLETE_WITH(
"RESTART IDENTITY",
"CONTINUE IDENTITY",
"CASCADE",
"RESTRICT");
5291 else if (
Matches(
"ALTER|CREATE|DROP",
"USER",
"MAPPING"))
5293 else if (
Matches(
"CREATE",
"USER",
"MAPPING",
"FOR"))
5299 else if (
Matches(
"ALTER|DROP",
"USER",
"MAPPING",
"FOR"))
5301 else if (
Matches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING",
"FOR",
MatchAny))
5328 "DISABLE_PAGE_SKIPPING",
"SKIP_LOCKED",
5329 "INDEX_CLEANUP",
"PROCESS_MAIN",
"PROCESS_TOAST",
5330 "TRUNCATE",
"PARALLEL",
"SKIP_DATABASE_STATS",
5331 "ONLY_DATABASE_STATS",
"BUFFER_USAGE_LIMIT");
5332 else if (
TailMatches(
"FULL|FREEZE|ANALYZE|VERBOSE|DISABLE_PAGE_SKIPPING|SKIP_LOCKED|PROCESS_MAIN|PROCESS_TOAST|TRUNCATE|SKIP_DATABASE_STATS|ONLY_DATABASE_STATS"))
5337 else if (
Matches(
"VACUUM",
"(*)"))
5340 else if (
Matches(
"VACUUM",
"FULL"))
5375 else if (
Matches(
"WAIT",
"FOR"))
5377 else if (
Matches(
"WAIT",
"FOR",
"LSN"))
5401 COMPLETE_WITH(
"'standby_replay'",
"'standby_write'",
"'standby_flush'",
"'primary_flush'");
5575 else if (
TailMatches(
"CREATE|ALTER|DROP",
"EVENT"))
5577 else if (
TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN"))
5581 else if (
TailMatches(
"CREATE|ALTER|DROP",
"MATERIALIZED"))
5583 else if (
TailMatches(
"CREATE|ALTER|DROP",
"TEXT"))
5585 else if (
TailMatches(
"CREATE|ALTER|DROP",
"USER"))
5590 if (
TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN",
"DATA"))
5592 else if (
TailMatches(
"CREATE|ALTER|DROP",
"TEXT",
"SEARCH"))
5593 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
5594 else if (
TailMatches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING"))
5603 "display_false",
"display_true",
"expanded",
5604 "fieldsep",
"fieldsep_zero",
"footer",
"format",
5605 "linestyle",
"null",
"numericlocale",
5606 "pager",
"pager_min_lines",
5607 "recordsep",
"recordsep_zero",
5608 "tableattr",
"title",
"tuples_only",
5609 "unicode_border_linestyle",
5610 "unicode_column_linestyle",
5611 "unicode_header_linestyle",
5617 "latex-longtable",
"troff-ms",
"unaligned",
5626 "unicode_column_linestyle|"
5627 "unicode_header_linestyle"))
5636 if (
TailMatchesCS(
"AUTOCOMMIT|ON_ERROR_STOP|QUIET|SHOW_ALL_RESULTS|"
5637 "SINGLELINE|SINGLESTEP"))
5641 "preserve-lower",
"preserve-upper");
5648 "ignoreboth",
"none");
5660 else if (
TailMatchesCS(
"\\cd|\\e|\\edit|\\g|\\gx|\\i|\\include|"
5661 "\\ir|\\include_relative|\\o|\\out|"
5662 "\\s|\\w|\\write|\\lo_import") ||
5694 static int list_index,
5846 static int list_index,
5932 "%s, NULL::pg_catalog.text FROM %s",
5937 ", pg_catalog.pg_namespace nr");
5955 " AND %s = nr.oid AND nr.nspname = '%s'",
5972 "pg_catalog.pg_class c") == 0 &&
5976 " AND c.relnamespace <> (SELECT oid FROM"
5977 " pg_catalog.pg_namespace WHERE nspname = 'pg_catalog')");
5987 "SELECT NULL::pg_catalog.text, n.nspname "
5988 "FROM pg_catalog.pg_namespace n "
5989 "WHERE n.nspname LIKE '%s'",
5998 " AND n.nspname NOT LIKE E'pg\\\\_%'");
6015 "FROM %s, pg_catalog.pg_namespace n",
6020 ", pg_catalog.pg_namespace nr");
6038 " AND %s = nr.oid AND nr.nspname = '%s'",
6081 const char *item =
NULL;
6134 const char *item = *
itemp++;
6152 const char *item = *
itemp++;
6217 static int string_length,
6321 int *
maxvars,
const char *varname,
6322 const char *prefix,
const char *suffix)
6328 ((*
maxvars) + 1) *
sizeof(
char *));
6331 (*varnames)[(*nvars)++] =
psprintf(
"%s%s%s", prefix, varname, suffix);
6363 varnames[nvars] =
NULL;
6366 for (
i = 0;
i < nvars;
i++)
6385 static int list_index;
6443#ifdef USE_FILENAME_QUOTING_FUNCTIONS
6460#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
6517 if (*ret ==
'\'' &&
is_dir)
6545 unsigned char first =
ref[0];
6554 for (p = ret; *p; p++)
6559 for (p = ret; *p; p++)
6600 char *
bptr = buffer;
6714 if (
ch >=
'A' &&
ch <=
'Z')
6724 *schemaname =
sname;
6754 buflen +=
strlen(schemaname) + 1;
6760 for (
const char *p = schemaname; *p; p++)
6788 for (
const char *p = schemaname; *p; p++)
6873 pg_log_error(
"tab completion query failed: %s\nQuery was:\n%s",
7034 "SELECT vartype FROM pg_catalog.pg_settings "
7035 "WHERE pg_catalog.lower(name) = pg_catalog.lower('%s')",
7050#ifdef USE_FILENAME_QUOTING_FUNCTIONS
7099#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
7134 strcpy(workspace + 1, fname);
bool recognized_connection_string(const char *connstr)
#define IS_HIGHBIT_SET(ch)
#define Assert(condition)
const uint8 ScanKeywordCategories[SCANKEYWORDS_NUM_KEYWORDS]
ConnStatusType PQstatus(const PGconn *conn)
char * PQerrorMessage(const PGconn *conn)
size_t PQescapeStringConn(PGconn *conn, char *to, const char *from, size_t length, int *error)
PGresult * PQexec(PGconn *conn, const char *query)
int PQmblenBounded(const char *s, int encoding)
void * pg_malloc(size_t size)
char * pg_strdup(const char *in)
void * pg_realloc(void *ptr, size_t size)
static const JsonPathKeyword keywords[]
PGDLLIMPORT const ScanKeywordList ScanKeywords
#define UNRESERVED_KEYWORD
int ScanKeywordLookup(const char *str, const ScanKeywordList *keywords)
#define pg_log_error(...)
char * pnstrdup(const char *in, Size len)
static char buf[DEFAULT_XLOG_SEG_SIZE]
int pg_strcasecmp(const char *s1, const char *s2)
unsigned char pg_toupper(unsigned char ch)
unsigned char pg_tolower(unsigned char ch)
int pg_strncasecmp(const char *s1, const char *s2, size_t n)
void initPQExpBuffer(PQExpBuffer str)
void appendPQExpBuffer(PQExpBuffer str, const char *fmt,...)
void appendPQExpBufferStr(PQExpBuffer str, const char *data)
void termPQExpBuffer(PQExpBuffer str)
char * psprintf(const char *fmt,...)
static void word(struct vars *v, int dir, struct state *lp, struct state *rp)
@ PSQL_COMP_CASE_PRESERVE_LOWER
@ PSQL_COMP_CASE_PRESERVE_UPPER
char * strtokx(const char *s, const char *whitespace, const char *delim, const char *quote, char escape, bool e_strings, bool del_quotes, int encoding)
char * quote_if_needed(const char *source, const char *entails_quote, char quote, char escape, bool force_quote, int encoding)
void initialize_readline(void)
PQExpBuffer tab_completion_query_buf
static bool escape_string(PGconn *conn, PQExpBuffer target, const char *unescaped, size_t unescaped_len, PQExpBuffer escape_err)
static int32 text_length(Datum str)
int pg_encoding_max_length(int encoding)
#define send(s, buf, len, flags)