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 "SERVER",
"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",
"IN",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2540 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2541 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2542 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2543 "VALID UNTIL",
"WITH");
2567 COMPLETE_WITH(
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
"CREATEROLE",
2568 "ENCRYPTED PASSWORD",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2569 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2570 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2571 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2575 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
2578 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR"))
2581 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN"))
2584 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2588 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2592 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2597 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2599 Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2605 "VALIDATE CONSTRAINT");
2616 else if (
Matches(
"ALTER",
"DOMAIN",
MatchAny,
"DROP|RENAME|VALIDATE",
"CONSTRAINT"))
2633 COMPLETE_WITH(
"AS",
"INCREMENT",
"MINVALUE",
"MAXVALUE",
"RESTART",
2634 "START",
"NO",
"CACHE",
"CYCLE",
"SET",
"OWNED BY",
2635 "OWNER TO",
"RENAME TO");
2647 COMPLETE_WITH(
"VERSION",
"OPTIONS",
"OWNER TO",
"RENAME TO");
2652 else if (
Matches(
"ALTER",
"SYSTEM"))
2654 else if (
Matches(
"ALTER",
"SYSTEM",
"SET|RESET"))
2661 COMPLETE_WITH(
"ALTER COLUMN",
"OWNER TO",
"RENAME",
"RESET",
"SET");
2665 else if (
Matches(
"ALTER",
"VIEW",
MatchAny,
"ALTER|RENAME",
"COLUMN"))
2688 else if (
Matches(
"ALTER",
"VIEW",
MatchAny,
"SET",
"(",
"check_option",
"="))
2690 else if (
Matches(
"ALTER",
"VIEW",
MatchAny,
"SET",
"(",
"security_barrier|security_invoker",
"="))
2695 COMPLETE_WITH(
"ALTER COLUMN",
"CLUSTER ON",
"DEPENDS ON EXTENSION",
2696 "NO DEPENDS ON EXTENSION",
"OWNER TO",
"RENAME",
2699 else if (
Matches(
"ALTER",
"MATERIALIZED",
"VIEW",
MatchAny,
"RENAME"))
2701 else if (
Matches(
"ALTER",
"MATERIALIZED",
"VIEW",
MatchAny,
"ALTER|RENAME",
"COLUMN"))
2711 COMPLETE_WITH(
"(",
"ACCESS METHOD",
"SCHEMA",
"TABLESPACE",
"WITHOUT CLUSTER");
2713 else if (
Matches(
"ALTER",
"MATERIALIZED",
"VIEW",
MatchAny,
"SET",
"ACCESS",
"METHOD"))
2717 else if (
Matches(
"ALTER",
"POLICY"))
2730 COMPLETE_WITH(
"RENAME TO",
"TO",
"USING (",
"WITH CHECK (");
2759 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA",
"SET STATISTICS");
2777 "NO DEPENDS ON EXTENSION");
2783 COMPLETE_WITH(
"ADD",
"ALTER",
"CLUSTER ON",
"DISABLE",
"DROP",
2784 "ENABLE",
"INHERIT",
"NO",
"RENAME",
"RESET",
2785 "OWNER TO",
"SET",
"VALIDATE CONSTRAINT",
2786 "REPLICA IDENTITY",
"ATTACH PARTITION",
2787 "DETACH PARTITION",
"FORCE ROW LEVEL SECURITY",
2788 "SPLIT PARTITION",
"MERGE PARTITIONS (",
2796 COMPLETE_WITH(
"COLUMN",
"CONSTRAINT",
"CHECK (",
"NOT NULL",
"UNIQUE",
2797 "PRIMARY KEY",
"EXCLUDE",
"FOREIGN KEY");
2805 COMPLETE_WITH(
"CHECK (",
"NOT NULL",
"UNIQUE",
"PRIMARY KEY",
"EXCLUDE",
"FOREIGN KEY");
2812 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"ADD",
"PRIMARY",
"KEY") ||
2818 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"ADD",
"PRIMARY",
"KEY",
"USING",
"INDEX"))
2824 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"ADD",
"UNIQUE",
"USING",
"INDEX"))
2831 "PRIMARY",
"KEY",
"USING",
"INDEX"))
2838 "UNIQUE",
"USING",
"INDEX"))
2845 COMPLETE_WITH(
"ALWAYS",
"REPLICA",
"ROW LEVEL SECURITY",
"RULE",
2847 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"ENABLE",
"REPLICA|ALWAYS"))
2899 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"ALTER|RENAME",
"COLUMN"))
2917 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"ALTER|DROP|RENAME",
"CONSTRAINT"))
2923 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"VALIDATE",
"CONSTRAINT"))
2931 COMPLETE_WITH(
"TYPE",
"SET",
"RESET",
"RESTART",
"ADD",
"DROP");
2949 COMPLETE_WITH(
"(",
"COMPRESSION",
"DATA TYPE",
"DEFAULT",
"EXPRESSION",
"GENERATED",
"NOT NULL",
2950 "STATISTICS",
"STORAGE",
2952 "INCREMENT",
"MINVALUE",
"MAXVALUE",
"START",
"NO",
"CACHE",
"CYCLE");
2980 COMPLETE_WITH(
"DEFAULT",
"PLAIN",
"EXTERNAL",
"EXTENDED",
"MAIN");
2990 COMPLETE_WITH(
"DEFAULT",
"EXPRESSION",
"IDENTITY",
"NOT NULL");
3001 "TABLESPACE",
"UNLOGGED",
"WITH",
"WITHOUT");
3007 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"SET",
"ACCESS",
"METHOD"))
3026 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"REPLICA",
"IDENTITY",
"USING",
"INDEX"))
3031 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"REPLICA",
"IDENTITY",
"USING"))
3054 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"DETACH|SPLIT",
"PARTITION"))
3067 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"MERGE",
"PARTITIONS",
"("))
3072 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"MERGE",
"PARTITIONS",
"(*)"))
3088 "effective_io_concurrency",
"maintenance_io_concurrency");
3091 else if (
Matches(
"ALTER",
"TEXT",
"SEARCH"))
3092 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3093 else if (
Matches(
"ALTER",
"TEXT",
"SEARCH",
"TEMPLATE|PARSER",
MatchAny))
3097 else if (
Matches(
"ALTER",
"TEXT",
"SEARCH",
"CONFIGURATION",
MatchAny))
3100 "OWNER TO",
"RENAME TO",
"SET SCHEMA");
3104 COMPLETE_WITH(
"ADD ATTRIBUTE",
"ADD VALUE",
"ALTER ATTRIBUTE",
3106 "OWNER TO",
"RENAME",
"SET SCHEMA",
"SET (");
3124 else if (
Matches(
"ALTER",
"TYPE",
MatchAny,
"ALTER|DROP|RENAME",
"ATTRIBUTE"))
3149 COMPLETE_WITH(
"ANALYZE",
"RECEIVE",
"SEND",
"STORAGE",
"SUBSCRIPT",
3150 "TYPMOD_IN",
"TYPMOD_OUT");
3168 "(",
"VERBOSE",
"ONLY");
3169 else if (
Matches(
"ANALYZE",
"VERBOSE"))
3181 COMPLETE_WITH(
"VERBOSE",
"SKIP_LOCKED",
"BUFFER_USAGE_LIMIT");
3185 else if (
Matches(
"ANALYZE",
"(*)"))
3196 COMPLETE_WITH(
"WORK",
"TRANSACTION",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
3198 else if (
Matches(
"END|ABORT"))
3208 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION",
"TO SAVEPOINT",
"PREPARED");
3209 else if (
Matches(
"ABORT|END|COMMIT|ROLLBACK",
"AND"))
3217 else if (
Matches(
"CHECKPOINT"))
3240 else if (
Matches(
"CLUSTER",
"VERBOSE") ||
3271 else if (
Matches(
"COMMENT",
"ON"))
3272 COMPLETE_WITH(
"ACCESS METHOD",
"AGGREGATE",
"CAST",
"COLLATION",
3273 "COLUMN",
"CONSTRAINT",
"CONVERSION",
"DATABASE",
3274 "DOMAIN",
"EXTENSION",
"EVENT TRIGGER",
3275 "FOREIGN DATA WRAPPER",
"FOREIGN TABLE",
3276 "FUNCTION",
"INDEX",
"LANGUAGE",
"LARGE OBJECT",
3277 "MATERIALIZED VIEW",
"OPERATOR",
"POLICY",
3278 "PROCEDURE",
"PROCEDURAL LANGUAGE",
"PUBLICATION",
"ROLE",
3279 "ROUTINE",
"RULE",
"SCHEMA",
"SEQUENCE",
"SERVER",
3280 "STATISTICS",
"SUBSCRIPTION",
"TABLE",
3281 "TABLESPACE",
"TEXT SEARCH",
"TRANSFORM FOR",
3282 "TRIGGER",
"TYPE",
"VIEW");
3283 else if (
Matches(
"COMMENT",
"ON",
"ACCESS",
"METHOD"))
3285 else if (
Matches(
"COMMENT",
"ON",
"CONSTRAINT"))
3295 else if (
Matches(
"COMMENT",
"ON",
"CONSTRAINT",
MatchAny,
"ON",
"DOMAIN"))
3297 else if (
Matches(
"COMMENT",
"ON",
"EVENT",
"TRIGGER"))
3299 else if (
Matches(
"COMMENT",
"ON",
"FOREIGN"))
3301 else if (
Matches(
"COMMENT",
"ON",
"FOREIGN",
"TABLE"))
3303 else if (
Matches(
"COMMENT",
"ON",
"MATERIALIZED",
"VIEW"))
3305 else if (
Matches(
"COMMENT",
"ON",
"POLICY"))
3314 else if (
Matches(
"COMMENT",
"ON",
"PROCEDURAL",
"LANGUAGE"))
3323 else if (
Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH"))
3324 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3325 else if (
Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"CONFIGURATION"))
3327 else if (
Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"DICTIONARY"))
3329 else if (
Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"PARSER"))
3331 else if (
Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"TEMPLATE"))
3333 else if (
Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR"))
3337 else if (
Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR",
MatchAny,
"LANGUAGE"))
3361 else if (
Matches(
"COPY|\\copy"))
3364 else if (
Matches(
"COPY|\\copy",
"("))
3365 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES",
"INSERT INTO",
"UPDATE",
"DELETE FROM",
"MERGE INTO",
"WITH");
3475 "PROVIDER =",
"DETERMINISTIC =");
3484 COMPLETE_WITH(
"OWNER",
"TEMPLATE",
"ENCODING",
"TABLESPACE",
3485 "IS_TEMPLATE",
"STRATEGY",
3486 "ALLOW_CONNECTIONS",
"CONNECTION LIMIT",
3487 "LC_COLLATE",
"LC_CTYPE",
"LOCALE",
"OID",
3488 "LOCALE_PROVIDER",
"ICU_LOCALE");
3502 "NOT NULL",
"NULL",
"CHECK (");
3508 else if (
Matches(
"CREATE",
"EXTENSION"))
3521 else if (
Matches(
"CREATE",
"FOREIGN"))
3543 "ON",
"CONCURRENTLY");
3557 else if (
TailMatches(
"CREATE|UNIQUE",
"INDEX",
"CONCURRENTLY"))
3589 else if (
Matches(
"CREATE",
"OR"))
3601 COMPLETE_WITH(
"AS",
"FOR",
"TO",
"USING (",
"WITH CHECK (");
3614 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
3637 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
3678 COMPLETE_WITH(
"FOR TABLE",
"FOR TABLES IN SCHEMA",
"FOR ALL TABLES",
"FOR ALL SEQUENCES",
"WITH (");
3680 COMPLETE_WITH(
"TABLE",
"TABLES IN SCHEMA",
"ALL TABLES",
"ALL SEQUENCES");
3683 else if (
Matches(
"CREATE",
"PUBLICATION",
MatchAny,
"FOR",
"ALL",
"TABLES"))
3685 else if (
Matches(
"CREATE",
"PUBLICATION",
MatchAny,
"FOR",
"ALL",
"TABLES",
"EXCEPT"))
3687 else if (
Matches(
"CREATE",
"PUBLICATION",
MatchAny,
"FOR",
"ALL",
"TABLES",
"EXCEPT",
"TABLE"))
3689 else if (
Matches(
"CREATE",
"PUBLICATION",
MatchAny,
"FOR",
"ALL",
"TABLES",
"EXCEPT",
"TABLE",
"("))
3691 else if (
Matches(
"CREATE",
"PUBLICATION",
MatchAny,
"FOR",
"ALL",
"TABLES",
"EXCEPT",
"TABLE",
"(",
MatchAnyN) &&
ends_with(
prev_wd,
','))
3693 else if (
Matches(
"CREATE",
"PUBLICATION",
MatchAny,
"FOR",
"ALL",
"TABLES",
"EXCEPT",
"TABLE",
"(",
MatchAnyN) && !
ends_with(
prev_wd,
','))
3717 else if (
Matches(
"CREATE",
"PUBLICATION",
MatchAny,
"FOR",
"TABLES",
"IN",
"SCHEMA"))
3719 " AND nspname NOT LIKE E'pg\\\\_%%'",
3725 COMPLETE_WITH(
"publish",
"publish_generated_columns",
"publish_via_partition_root");
3745 else if (
TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE"))
3748 else if (
TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE",
"TO"))
3752 else if (
Matches(
"CREATE",
"SCHEMA"))
3755 else if (
Matches(
"CREATE",
"SCHEMA",
"AUTHORIZATION") ||
3768 COMPLETE_WITH(
"AS",
"INCREMENT BY",
"MINVALUE",
"MAXVALUE",
"NO",
3769 "CACHE",
"CYCLE",
"OWNED BY",
"START WITH");
3820 COMPLETE_WITH(
"EXECUTE",
"SELECT",
"TABLE",
"VALUES",
"WITH");
3823 COMPLETE_WITH(
"AS",
"INHERITS (",
"PARTITION BY",
"USING",
"TABLESPACE",
"WITH (");
3825 COMPLETE_WITH(
"AS",
"INHERITS (",
"USING",
"TABLESPACE",
"WITH (");
3827 COMPLETE_WITH(
"AS",
"INHERITS (",
"ON COMMIT",
"PARTITION BY",
"USING",
3828 "TABLESPACE",
"WITH (");
3838 else if (
TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"TABLE",
MatchAny,
"(*)",
"ON",
"COMMIT"))
3849 else if (
Matches(
"CREATE",
"TEXT",
"SEARCH"))
3850 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3851 else if (
Matches(
"CREATE",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE",
MatchAny))
3855 else if (
Matches(
"CREATE",
"TRANSFORM") ||
3856 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM"))
3858 else if (
Matches(
"CREATE",
"TRANSFORM",
"FOR") ||
3859 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR"))
3864 else if (
Matches(
"CREATE",
"TRANSFORM",
"FOR",
MatchAny,
"LANGUAGE") ||
3865 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR",
MatchAny,
"LANGUAGE"))
3892 COMPLETE_WITH(
"binary",
"connect",
"copy_data",
"create_slot",
3893 "disable_on_error",
"enabled",
"failover",
3894 "max_retention_duration",
"origin",
3895 "password_required",
"retain_dead_tuples",
3896 "run_as_owner",
"slot_name",
"streaming",
3897 "synchronous_commit",
"two_phase");
3954 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3957 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3964 "INITIALLY",
"IMMEDIATE|DEFERRED") ||
3966 "INITIALLY",
"IMMEDIATE|DEFERRED"))
3969 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3971 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3979 "OLD|NEW",
"TABLE") ||
3981 "OLD|NEW",
"TABLE"))
3984 "REFERENCING",
"OLD",
"TABLE",
"AS",
MatchAny) ||
3986 "REFERENCING",
"OLD",
"TABLE",
"AS",
MatchAny) ||
3988 "REFERENCING",
"OLD",
"TABLE",
MatchAny) ||
3990 "REFERENCING",
"OLD",
"TABLE",
MatchAny))
3993 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3995 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3998 "REFERENCING",
"NEW",
"TABLE",
"AS",
MatchAny) ||
4000 "REFERENCING",
"NEW",
"TABLE",
"AS",
MatchAny) ||
4002 "REFERENCING",
"NEW",
"TABLE",
MatchAny) ||
4004 "REFERENCING",
"NEW",
"TABLE",
MatchAny))
4007 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
4009 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
4012 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS",
MatchAny,
"OLD|NEW",
"TABLE",
"AS",
MatchAny) ||
4014 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS",
MatchAny,
"OLD|NEW",
"TABLE",
"AS",
MatchAny) ||
4016 "REFERENCING",
"OLD|NEW",
"TABLE",
MatchAny,
"OLD|NEW",
"TABLE",
"AS",
MatchAny) ||
4018 "REFERENCING",
"OLD|NEW",
"TABLE",
MatchAny,
"OLD|NEW",
"TABLE",
"AS",
MatchAny) ||
4020 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS",
MatchAny,
"OLD|NEW",
"TABLE",
MatchAny) ||
4022 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS",
MatchAny,
"OLD|NEW",
"TABLE",
MatchAny) ||
4024 "REFERENCING",
"OLD|NEW",
"TABLE",
MatchAny,
"OLD|NEW",
"TABLE",
MatchAny) ||
4026 "REFERENCING",
"OLD|NEW",
"TABLE",
MatchAny,
"OLD|NEW",
"TABLE",
MatchAny))
4044 "FOR",
"EACH",
"ROW|STATEMENT") ||
4046 "FOR",
"EACH",
"ROW|STATEMENT") ||
4048 "FOR",
"ROW|STATEMENT") ||
4050 "FOR",
"ROW|STATEMENT"))
4083 "EXECUTE",
"FUNCTION|PROCEDURE") ||
4085 "EXECUTE",
"FUNCTION|PROCEDURE"))
4091 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
4092 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
4093 "LOGIN",
"NOBYPASSRLS",
4094 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
4095 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
4096 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
4097 "VALID UNTIL",
"WITH");
4102 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
4103 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
4104 "LOGIN",
"NOBYPASSRLS",
4105 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
4106 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
4107 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
4132 "TYPMOD_IN",
"TYPMOD_OUT",
"ANALYZE",
"SUBSCRIPT",
4133 "INTERNALLENGTH",
"PASSEDBYVALUE",
"ALIGNMENT",
4134 "STORAGE",
"LIKE",
"CATEGORY",
"PREFERRED",
4135 "DEFAULT",
"ELEMENT",
"DELIMITER",
4146 "CANONICAL",
"SUBTYPE_DIFF",
4147 "MULTIRANGE_TYPE_NAME");
4174 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW",
MatchAny,
"WITH",
"(",
"check_option",
"="))
4186 else if (
Matches(
"CREATE",
"MATERIALIZED"))
4196 else if (
Matches(
"CREATE",
"MATERIALIZED",
"VIEW",
MatchAny,
"USING"))
4211 else if (
Matches(
"CREATE",
"EVENT"))
4218 COMPLETE_WITH(
"ddl_command_start",
"ddl_command_end",
"login",
4219 "sql_drop",
"table_rewrite");
4240 else if (
Matches(
"CREATE",
"EVENT",
"TRIGGER",
MatchAnyN,
"EXECUTE",
"FUNCTION|PROCEDURE"))
4244 else if (
Matches(
"DEALLOCATE"))
4255 COMPLETE_WITH(
"BINARY",
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
4266 COMPLETE_WITH(
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
"CURSOR");
4313 "COLLATION|CONVERSION|DOMAIN|EXTENSION|LANGUAGE|PUBLICATION|SCHEMA|SEQUENCE|SERVER|SUBSCRIPTION|STATISTICS|TABLE|TYPE|VIEW",
4319 Matches(
"DROP",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE",
MatchAny))
4326 else if (
Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE",
MatchAny))
4328 else if (
Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE",
MatchAny,
"("))
4330 else if (
Matches(
"DROP",
"FOREIGN"))
4338 else if (
Matches(
"DROP",
"INDEX"))
4341 else if (
Matches(
"DROP",
"INDEX",
"CONCURRENTLY"))
4349 else if (
Matches(
"DROP",
"MATERIALIZED"))
4351 else if (
Matches(
"DROP",
"MATERIALIZED",
"VIEW"))
4357 else if (
Matches(
"DROP",
"OWNED"))
4359 else if (
Matches(
"DROP",
"OWNED",
"BY"))
4365 else if (
Matches(
"DROP",
"TEXT",
"SEARCH"))
4366 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
4380 else if (
Matches(
"DROP",
"ACCESS"))
4382 else if (
Matches(
"DROP",
"ACCESS",
"METHOD"))
4386 else if (
Matches(
"DROP",
"EVENT"))
4388 else if (
Matches(
"DROP",
"EVENT",
"TRIGGER"))
4392 else if (
Matches(
"DROP",
"POLICY"))
4418 else if (
Matches(
"DROP",
"TRANSFORM"))
4420 else if (
Matches(
"DROP",
"TRANSFORM",
"FOR"))
4441 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4442 "MERGE INTO",
"EXECUTE",
"ANALYZE",
"VERBOSE");
4452 COMPLETE_WITH(
"ANALYZE",
"VERBOSE",
"COSTS",
"SETTINGS",
"GENERIC_PLAN",
4453 "BUFFERS",
"SERIALIZE",
"WAL",
"TIMING",
"SUMMARY",
4454 "MEMORY",
"FORMAT");
4455 else if (
TailMatches(
"ANALYZE|VERBOSE|COSTS|SETTINGS|GENERIC_PLAN|BUFFERS|WAL|TIMING|SUMMARY|MEMORY"))
4462 else if (
Matches(
"EXPLAIN",
"ANALYZE"))
4463 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4464 "MERGE INTO",
"EXECUTE",
"VERBOSE");
4465 else if (
Matches(
"EXPLAIN",
"(*)") ||
4466 Matches(
"EXPLAIN",
"VERBOSE") ||
4467 Matches(
"EXPLAIN",
"ANALYZE",
"VERBOSE"))
4468 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4469 "MERGE INTO",
"EXECUTE");
4477 else if (
Matches(
"FETCH|MOVE"))
4495 else if (
Matches(
"FETCH|MOVE",
"BACKWARD|FORWARD"))
4506 else if (
Matches(
"FETCH|MOVE",
"ABSOLUTE|BACKWARD|FORWARD|RELATIVE",
4508 Matches(
"FETCH|MOVE",
"ALL|NEXT|PRIOR|FIRST|LAST"))
4518 else if (
TailMatches(
"FOREIGN",
"DATA",
"WRAPPER") &&
4540 TailMatches(
"REVOKE",
"ADMIN|GRANT|INHERIT|SET",
"OPTION",
"FOR"))
4546 if (
HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4551 "DELETE",
"TRUNCATE",
"REFERENCES",
"TRIGGER",
4552 "CREATE",
"EXECUTE",
"USAGE",
"MAINTAIN",
"ALL");
4555 "DELETE",
"TRUNCATE",
"REFERENCES",
"TRIGGER",
4556 "CREATE",
"EXECUTE",
"USAGE",
"MAINTAIN",
"ALL",
4557 "GRANT OPTION FOR");
4567 "INHERIT OPTION FOR",
4569 else if (
TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR"))
4571 else if (
TailMatches(
"REVOKE",
"ADMIN|INHERIT|SET",
"OPTION",
"FOR"))
4576 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER"))
4582 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"SET") ||
4584 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER",
"SYSTEM"))
4610 if (
TailMatches(
"SELECT|INSERT|UPDATE|DELETE|TRUNCATE|REFERENCES|TRIGGER|CREATE|CONNECT|TEMPORARY|TEMP|EXECUTE|USAGE|MAINTAIN|ALL"))
4632 if (
HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4633 COMPLETE_WITH(
"TABLES",
"SEQUENCES",
"FUNCTIONS",
"PROCEDURES",
"ROUTINES",
"TYPES",
"SCHEMAS",
"LARGE OBJECTS");
4636 "ALL FUNCTIONS IN SCHEMA",
4637 "ALL PROCEDURES IN SCHEMA",
4638 "ALL ROUTINES IN SCHEMA",
4639 "ALL SEQUENCES IN SCHEMA",
4640 "ALL TABLES IN SCHEMA",
4643 "FOREIGN DATA WRAPPER",
4660 "PROCEDURES IN SCHEMA",
4661 "ROUTINES IN SCHEMA",
4662 "SEQUENCES IN SCHEMA",
4663 "TABLES IN SCHEMA");
4686 if (
HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4727 "WITH GRANT OPTION",
4760 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
MatchAny,
"ON",
"ALL",
MatchAny,
"IN",
"SCHEMA",
MatchAny))
4815 else if (
Matches(
"IMPORT",
"FOREIGN"))
4831 else if (
TailMatches(
"NOT",
"MATCHED",
"THEN",
"INSERT"))
4848 COMPLETE_WITH(
"(",
"DEFAULT VALUES",
"SELECT",
"TABLE",
"VALUES",
"OVERRIDING");
4875 else if (
Matches(
"LOCK",
"TABLE"))
4878 else if (
Matches(
"LOCK",
"TABLE",
"ONLY") ||
Matches(
"LOCK",
"ONLY"))
4892 "ROW SHARE MODE",
"ROW EXCLUSIVE MODE",
4893 "SHARE UPDATE EXCLUSIVE MODE",
"SHARE MODE",
4894 "SHARE ROW EXCLUSIVE MODE",
4895 "EXCLUSIVE MODE",
"ACCESS EXCLUSIVE MODE");
4907 "UPDATE EXCLUSIVE MODE");
4984 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"SOURCE|TARGET"))
4992 else if (
TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY"))
4999 else if (
TailMatches(
"WHEN",
"MATCHED",
"THEN") ||
5000 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"SOURCE",
"THEN"))
5006 else if (
TailMatches(
"WHEN",
"NOT",
"MATCHED",
"THEN") ||
5007 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"TARGET",
"THEN"))
5031 COMPLETE_WITH(
"SELECT",
"UPDATE",
"INSERT INTO",
"DELETE FROM",
5032 "MERGE INTO",
"VALUES",
"WITH",
"TABLE");
5042 else if (
Matches(
"REASSIGN",
"OWNED"))
5044 else if (
Matches(
"REASSIGN",
"OWNED",
"BY"))
5054 else if (
Matches(
"REFRESH",
"MATERIALIZED"))
5056 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW"))
5059 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY"))
5063 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY",
MatchAny))
5065 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
MatchAny,
"WITH"))
5067 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY",
MatchAny,
"WITH"))
5069 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
MatchAny,
"WITH",
"NO"))
5071 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY",
MatchAny,
"WITH",
"NO"))
5075 else if (
Matches(
"REINDEX") ||
5077 COMPLETE_WITH(
"TABLE",
"INDEX",
"SYSTEM",
"SCHEMA",
"DATABASE");
5078 else if (
Matches(
"REINDEX",
"TABLE") ||
5079 Matches(
"REINDEX",
"(*)",
"TABLE"))
5082 else if (
Matches(
"REINDEX",
"INDEX") ||
5083 Matches(
"REINDEX",
"(*)",
"INDEX"))
5086 else if (
Matches(
"REINDEX",
"SCHEMA") ||
5087 Matches(
"REINDEX",
"(*)",
"SCHEMA"))
5090 else if (
Matches(
"REINDEX",
"SYSTEM|DATABASE") ||
5091 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE"))
5094 else if (
Matches(
"REINDEX",
"TABLE",
"CONCURRENTLY") ||
5095 Matches(
"REINDEX",
"(*)",
"TABLE",
"CONCURRENTLY"))
5097 else if (
Matches(
"REINDEX",
"INDEX",
"CONCURRENTLY") ||
5098 Matches(
"REINDEX",
"(*)",
"INDEX",
"CONCURRENTLY"))
5100 else if (
Matches(
"REINDEX",
"SCHEMA",
"CONCURRENTLY") ||
5101 Matches(
"REINDEX",
"(*)",
"SCHEMA",
"CONCURRENTLY"))
5103 else if (
Matches(
"REINDEX",
"SYSTEM|DATABASE",
"CONCURRENTLY") ||
5104 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE",
"CONCURRENTLY"))
5123 else if (
Matches(
"SECURITY",
"LABEL"))
5127 else if (
Matches(
"SECURITY",
"LABEL",
"ON") ||
5129 COMPLETE_WITH(
"TABLE",
"COLUMN",
"AGGREGATE",
"DATABASE",
"DOMAIN",
5130 "EVENT TRIGGER",
"FOREIGN TABLE",
"FUNCTION",
5131 "LARGE OBJECT",
"MATERIALIZED VIEW",
"LANGUAGE",
5132 "PUBLICATION",
"PROCEDURE",
"ROLE",
"ROUTINE",
"SCHEMA",
5133 "SEQUENCE",
"SUBSCRIPTION",
"TABLESPACE",
"TYPE",
"VIEW");
5154 "SESSION AUTHORIZATION",
5156 else if (
Matches(
"SHOW",
"SESSION"))
5159 else if (
Matches(
"SET",
"TRANSACTION"))
5160 COMPLETE_WITH(
"SNAPSHOT",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
5161 else if (
Matches(
"BEGIN|START",
"TRANSACTION") ||
5164 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION"))
5165 COMPLETE_WITH(
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
5166 else if (
Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"NOT") ||
5168 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"NOT"))
5170 else if (
Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION") ||
5171 Matches(
"BEGIN",
"ISOLATION") ||
5172 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION"))
5174 else if (
Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL") ||
5175 Matches(
"BEGIN",
"ISOLATION",
"LEVEL") ||
5176 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL"))
5178 else if (
Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"READ") ||
5179 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"READ") ||
5180 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"READ"))
5182 else if (
Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
5183 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
5184 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"REPEATABLE"))
5186 else if (
Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"READ") ||
5188 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"READ"))
5191 else if (
Matches(
"SET",
"CONSTRAINTS"))
5198 else if (
Matches(
"SET",
"ROLE"))
5201 else if (
Matches(
"SET",
"SESSION"))
5202 COMPLETE_WITH(
"AUTHORIZATION",
"CHARACTERISTICS AS TRANSACTION");
5204 else if (
Matches(
"SET",
"SESSION",
"AUTHORIZATION"))
5208 else if (
Matches(
"RESET",
"SESSION"))
5231 "YMD",
"DMY",
"MDY",
5232 "US",
"European",
"NonEuropean",
5238 " AND nspname NOT LIKE E'pg\\\\_toast%%'"
5239 " AND nspname NOT LIKE E'pg\\\\_temp%%'",
5264 "1",
"0",
"DEFAULT");
5291 else if (
Matches(
"TRUNCATE",
"TABLE"))
5299 COMPLETE_WITH(
"RESTART IDENTITY",
"CONTINUE IDENTITY",
"CASCADE",
"RESTRICT");
5322 else if (
Matches(
"ALTER|CREATE|DROP",
"USER",
"MAPPING"))
5324 else if (
Matches(
"CREATE",
"USER",
"MAPPING",
"FOR"))
5330 else if (
Matches(
"ALTER|DROP",
"USER",
"MAPPING",
"FOR"))
5332 else if (
Matches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING",
"FOR",
MatchAny))
5359 "DISABLE_PAGE_SKIPPING",
"SKIP_LOCKED",
5360 "INDEX_CLEANUP",
"PROCESS_MAIN",
"PROCESS_TOAST",
5361 "TRUNCATE",
"PARALLEL",
"SKIP_DATABASE_STATS",
5362 "ONLY_DATABASE_STATS",
"BUFFER_USAGE_LIMIT");
5363 else if (
TailMatches(
"FULL|FREEZE|ANALYZE|VERBOSE|DISABLE_PAGE_SKIPPING|SKIP_LOCKED|PROCESS_MAIN|PROCESS_TOAST|TRUNCATE|SKIP_DATABASE_STATS|ONLY_DATABASE_STATS"))
5368 else if (
Matches(
"VACUUM",
"(*)"))
5371 else if (
Matches(
"VACUUM",
"FULL"))
5406 else if (
Matches(
"WAIT",
"FOR"))
5408 else if (
Matches(
"WAIT",
"FOR",
"LSN"))
5432 COMPLETE_WITH(
"'standby_replay'",
"'standby_write'",
"'standby_flush'",
"'primary_flush'");
5606 else if (
TailMatches(
"CREATE|ALTER|DROP",
"EVENT"))
5608 else if (
TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN"))
5612 else if (
TailMatches(
"CREATE|ALTER|DROP",
"MATERIALIZED"))
5614 else if (
TailMatches(
"CREATE|ALTER|DROP",
"TEXT"))
5616 else if (
TailMatches(
"CREATE|ALTER|DROP",
"USER"))
5621 if (
TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN",
"DATA"))
5623 else if (
TailMatches(
"CREATE|ALTER|DROP",
"TEXT",
"SEARCH"))
5624 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
5625 else if (
TailMatches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING"))
5634 "display_false",
"display_true",
"expanded",
5635 "fieldsep",
"fieldsep_zero",
"footer",
"format",
5636 "linestyle",
"null",
"numericlocale",
5637 "pager",
"pager_min_lines",
5638 "recordsep",
"recordsep_zero",
5639 "tableattr",
"title",
"tuples_only",
5640 "unicode_border_linestyle",
5641 "unicode_column_linestyle",
5642 "unicode_header_linestyle",
5648 "latex-longtable",
"troff-ms",
"unaligned",
5657 "unicode_column_linestyle|"
5658 "unicode_header_linestyle"))
5667 if (
TailMatchesCS(
"AUTOCOMMIT|ON_ERROR_STOP|QUIET|SHOW_ALL_RESULTS|"
5668 "SINGLELINE|SINGLESTEP"))
5672 "preserve-lower",
"preserve-upper");
5679 "ignoreboth",
"none");
5691 else if (
TailMatchesCS(
"\\cd|\\e|\\edit|\\g|\\gx|\\i|\\include|"
5692 "\\ir|\\include_relative|\\o|\\out|"
5693 "\\s|\\w|\\write|\\lo_import") ||
5725 static int list_index,
5877 static int list_index,
5963 "%s, NULL::pg_catalog.text FROM %s",
5968 ", pg_catalog.pg_namespace nr");
5986 " AND %s = nr.oid AND nr.nspname = '%s'",
6003 "pg_catalog.pg_class c") == 0 &&
6007 " AND c.relnamespace <> (SELECT oid FROM"
6008 " pg_catalog.pg_namespace WHERE nspname = 'pg_catalog')");
6018 "SELECT NULL::pg_catalog.text, n.nspname "
6019 "FROM pg_catalog.pg_namespace n "
6020 "WHERE n.nspname LIKE '%s'",
6029 " AND n.nspname NOT LIKE E'pg\\\\_%'");
6046 "FROM %s, pg_catalog.pg_namespace n",
6051 ", pg_catalog.pg_namespace nr");
6069 " AND %s = nr.oid AND nr.nspname = '%s'",
6112 const char *item =
NULL;
6165 const char *item = *
itemp++;
6183 const char *item = *
itemp++;
6248 static int string_length,
6352 int *
maxvars,
const char *varname,
6353 const char *prefix,
const char *suffix)
6361 (*varnames)[(*nvars)++] =
psprintf(
"%s%s%s", prefix, varname, suffix);
6393 varnames[nvars] =
NULL;
6396 for (
i = 0;
i < nvars;
i++)
6415 static int list_index;
6473#ifdef USE_FILENAME_QUOTING_FUNCTIONS
6490#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
6547 if (*ret ==
'\'' &&
is_dir)
6575 unsigned char first =
ref[0];
6584 for (p = ret; *p; p++)
6589 for (p = ret; *p; p++)
6630 char *
bptr = buffer;
6744 if (
ch >=
'A' &&
ch <=
'Z')
6754 *schemaname =
sname;
6784 buflen +=
strlen(schemaname) + 1;
6790 for (
const char *p = schemaname; *p; p++)
6818 for (
const char *p = schemaname; *p; p++)
6903 pg_log_error(
"tab completion query failed: %s\nQuery was:\n%s",
7064 "SELECT vartype FROM pg_catalog.pg_settings "
7065 "WHERE pg_catalog.lower(name) = pg_catalog.lower('%s')",
7080#ifdef USE_FILENAME_QUOTING_FUNCTIONS
7129#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
7164 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)
#define pg_realloc_array(pointer, type, count)
#define pg_malloc_array(type, count)
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)