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",
819 .catname =
"pg_catalog.pg_class c",
821 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
822 .namespace =
"c.relnamespace",
823 .result =
"pg_catalog.quote_ident(c.relname)",
829 .catname =
"pg_catalog.pg_class c",
830 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
831 .namespace =
"c.relnamespace",
832 .result =
"c.relname",
837 .catname =
"pg_catalog.pg_class c",
840 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
841 .namespace =
"c.relnamespace",
842 .result =
"c.relname",
846 .catname =
"pg_catalog.pg_opfamily c",
847 .viscondition =
"pg_catalog.pg_opfamily_is_visible(c.oid)",
848 .namespace =
"c.opfnamespace",
849 .result =
"c.opfname",
854 .catname =
"pg_catalog.pg_class c",
860 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
861 .namespace =
"c.relnamespace",
862 .result =
"c.relname",
867 .catname =
"pg_catalog.pg_class c",
872 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
873 .namespace =
"c.relnamespace",
874 .result =
"c.relname",
879 .catname =
"pg_catalog.pg_class c",
887 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
888 .namespace =
"c.relnamespace",
889 .result =
"c.relname",
894 .catname =
"pg_catalog.pg_class c",
899 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
900 .namespace =
"c.relnamespace",
901 .result =
"c.relname",
905#define Query_for_list_of_grantables Query_for_list_of_selectables
909 .catname =
"pg_catalog.pg_class c",
915 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
916 .namespace =
"c.relnamespace",
917 .result =
"c.relname",
926#define Query_for_list_of_tables_for_copy Query_for_list_of_analyzables
930 .catname =
"pg_catalog.pg_class c",
935 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
936 .namespace =
"c.relnamespace",
937 .result =
"c.relname",
944#define Query_for_list_of_vacuumables Query_for_list_of_indexables
948 .catname =
"pg_catalog.pg_class c",
953 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
954 .namespace =
"c.relnamespace",
955 .result =
"c.relname",
959 .catname =
"pg_catalog.pg_constraint c",
960 .selcondition =
"c.conrelid <> 0",
961 .namespace =
"c.connamespace",
962 .result =
"c.conname",
966 .catname =
"pg_catalog.pg_statistic_ext s",
967 .viscondition =
"pg_catalog.pg_statistics_obj_is_visible(s.oid)",
968 .namespace =
"s.stxnamespace",
969 .result =
"s.stxname",
973 .catname =
"pg_catalog.pg_collation c",
974 .selcondition =
"c.collencoding IN (-1, pg_catalog.pg_char_to_encoding(pg_catalog.getdatabaseencoding()))",
975 .viscondition =
"pg_catalog.pg_collation_is_visible(c.oid)",
976 .namespace =
"c.collnamespace",
977 .result =
"c.collname",
981 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_inherits i",
982 .selcondition =
"c1.oid=i.inhparent and i.inhrelid=c2.oid and c2.relispartition",
983 .viscondition =
"pg_catalog.pg_table_is_visible(c2.oid)",
984 .namespace =
"c2.relnamespace",
985 .result =
"c2.relname",
986 .refname =
"c1.relname",
987 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
988 .refnamespace =
"c1.relnamespace",
992 .catname =
"pg_catalog.pg_rewrite r, pg_catalog.pg_class c1",
993 .selcondition =
"r.ev_class=c1.oid",
994 .result =
"r.rulename",
995 .refname =
"c1.relname",
996 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
997 .refnamespace =
"c1.relnamespace",
1001 .catname =
"pg_catalog.pg_trigger t, pg_catalog.pg_class c1",
1002 .selcondition =
"t.tgrelid=c1.oid and not t.tgisinternal",
1003 .result =
"t.tgname",
1004 .refname =
"c1.relname",
1005 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
1006 .refnamespace =
"c1.relnamespace",
1029#define Query_for_list_of_template_databases \
1031" FROM pg_catalog.pg_database d "\
1032" WHERE d.datname LIKE '%s' "\
1033" AND (d.datistemplate OR pg_catalog.pg_has_role(d.datdba, 'USAGE'))"
1035#define Query_for_list_of_databases \
1036"SELECT datname FROM pg_catalog.pg_database "\
1037" WHERE datname LIKE '%s'"
1039#define Query_for_list_of_database_vars \
1040"SELECT conf FROM ("\
1041" SELECT setdatabase, pg_catalog.split_part(pg_catalog.unnest(setconfig),'=',1) conf"\
1042" FROM pg_db_role_setting "\
1043" ) s, pg_database d "\
1044" WHERE s.setdatabase = d.oid "\
1045" AND conf LIKE '%s'"\
1046" AND d.datname LIKE '%s'"
1048#define Query_for_list_of_tablespaces \
1049"SELECT spcname FROM pg_catalog.pg_tablespace "\
1050" WHERE spcname LIKE '%s'"
1052#define Query_for_list_of_encodings \
1053" SELECT DISTINCT pg_catalog.pg_encoding_to_char(conforencoding) "\
1054" FROM pg_catalog.pg_conversion "\
1055" WHERE pg_catalog.pg_encoding_to_char(conforencoding) LIKE pg_catalog.upper('%s')"
1057#define Query_for_list_of_languages \
1059" FROM pg_catalog.pg_language "\
1060" WHERE lanname != 'internal' "\
1061" AND lanname LIKE '%s'"
1063#define Query_for_list_of_schemas \
1064"SELECT nspname FROM pg_catalog.pg_namespace "\
1065" WHERE nspname LIKE '%s'"
1068#define Query_for_list_of_alter_system_set_vars \
1069"SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1070" WHERE context != 'internal' "\
1071" AND pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1073#define Query_for_list_of_set_vars \
1074"SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1075" WHERE context IN ('user', 'superuser') "\
1076" AND pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1078#define Query_for_list_of_show_vars \
1079"SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1080" WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1082#define Query_for_list_of_roles \
1084" FROM pg_catalog.pg_roles "\
1085" WHERE rolname LIKE '%s'"
1088#define Keywords_for_list_of_owner_roles \
1089"CURRENT_ROLE", "CURRENT_USER", "SESSION_USER"
1092#define Keywords_for_list_of_grant_roles \
1093Keywords_for_list_of_owner_roles, "PUBLIC"
1095#define Query_for_all_table_constraints \
1097" FROM pg_catalog.pg_constraint c "\
1098" WHERE c.conrelid <> 0 "\
1099" and conname LIKE '%s'"
1101#define Query_for_list_of_fdws \
1103" FROM pg_catalog.pg_foreign_data_wrapper "\
1104" WHERE fdwname LIKE '%s'"
1106#define Query_for_list_of_servers \
1108" FROM pg_catalog.pg_foreign_server "\
1109" WHERE srvname LIKE '%s'"
1111#define Query_for_list_of_user_mappings \
1113" FROM pg_catalog.pg_user_mappings "\
1114" WHERE usename LIKE '%s'"
1116#define Query_for_list_of_user_vars \
1117"SELECT conf FROM ("\
1118" SELECT rolname, pg_catalog.split_part(pg_catalog.unnest(rolconfig),'=',1) conf"\
1119" FROM pg_catalog.pg_roles"\
1121" WHERE s.conf like '%s' "\
1122" AND s.rolname LIKE '%s'"
1124#define Query_for_list_of_access_methods \
1126" FROM pg_catalog.pg_am "\
1127" WHERE amname LIKE '%s'"
1129#define Query_for_list_of_index_access_methods \
1131" FROM pg_catalog.pg_am "\
1132" WHERE amname LIKE '%s' AND "\
1133" amtype=" CppAsString2(AMTYPE_INDEX)
1135#define Query_for_list_of_table_access_methods \
1137" FROM pg_catalog.pg_am "\
1138" WHERE amname LIKE '%s' AND "\
1139" amtype=" CppAsString2(AMTYPE_TABLE)
1141#define Query_for_list_of_extensions \
1143" FROM pg_catalog.pg_extension "\
1144" WHERE extname LIKE '%s'"
1146#define Query_for_list_of_available_extensions \
1148" FROM pg_catalog.pg_available_extensions "\
1149" WHERE name LIKE '%s' AND installed_version IS NULL"
1151#define Query_for_list_of_available_extension_versions \
1153" FROM pg_catalog.pg_available_extension_versions "\
1154" WHERE version LIKE '%s' AND name='%s'"
1156#define Query_for_list_of_prepared_statements \
1158" FROM pg_catalog.pg_prepared_statements "\
1159" WHERE name LIKE '%s'"
1161#define Query_for_list_of_event_triggers \
1163" FROM pg_catalog.pg_event_trigger "\
1164" WHERE evtname LIKE '%s'"
1166#define Query_for_list_of_tablesample_methods \
1168" FROM pg_catalog.pg_proc "\
1169" WHERE prorettype = 'pg_catalog.tsm_handler'::pg_catalog.regtype AND "\
1170" proargtypes[0] = 'pg_catalog.internal'::pg_catalog.regtype AND "\
1173#define Query_for_list_of_policies \
1175" FROM pg_catalog.pg_policy "\
1176" WHERE polname LIKE '%s'"
1178#define Query_for_values_of_enum_GUC \
1179" SELECT val FROM ( "\
1180" SELECT name, pg_catalog.unnest(enumvals) AS val "\
1181" FROM pg_catalog.pg_settings "\
1183" WHERE val LIKE '%s'"\
1184" and pg_catalog.lower(name)=pg_catalog.lower('%s')"
1186#define Query_for_list_of_channels \
1188" FROM pg_catalog.pg_listening_channels() AS channel "\
1189" WHERE channel LIKE '%s'"
1191#define Query_for_list_of_cursors \
1193" FROM pg_catalog.pg_cursors "\
1194" WHERE name LIKE '%s'"
1196#define Query_for_list_of_timezone_names_unquoted \
1198" FROM pg_catalog.pg_timezone_names() "\
1199" WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1201#define Query_for_list_of_timezone_names_quoted_out \
1202"SELECT pg_catalog.quote_literal(name) AS name "\
1203" FROM pg_catalog.pg_timezone_names() "\
1204" WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1206#define Query_for_list_of_timezone_names_quoted_in \
1207"SELECT pg_catalog.quote_literal(name) AS name "\
1208" FROM pg_catalog.pg_timezone_names() "\
1209" WHERE pg_catalog.quote_literal(pg_catalog.lower(name)) LIKE pg_catalog.lower('%s')"
1212#define Privilege_options_of_grant_and_revoke \
1213"SELECT", "INSERT", "UPDATE", "DELETE", "TRUNCATE", "REFERENCES", "TRIGGER", \
1214"CREATE", "CONNECT", "TEMPORARY", "EXECUTE", "USAGE", "SET", "ALTER SYSTEM", \
1218#define Alter_procedure_options \
1219"DEPENDS ON EXTENSION", "EXTERNAL SECURITY", "NO DEPENDS ON EXTENSION", \
1220"OWNER TO", "RENAME TO", "RESET", "SECURITY", "SET"
1223#define Alter_routine_options \
1224Alter_procedure_options, "COST", "IMMUTABLE", "LEAKPROOF", "NOT LEAKPROOF", \
1225"PARALLEL", "ROWS", "STABLE", "VOLATILE"
1228#define Alter_function_options \
1229Alter_routine_options, "CALLED ON NULL INPUT", "RETURNS NULL ON NULL INPUT", \
1233#define Copy_common_options \
1234"DELIMITER", "ENCODING", "ESCAPE", "FORMAT", "HEADER", "NULL", "QUOTE"
1237#define Copy_from_options \
1238Copy_common_options, "DEFAULT", "FORCE_NOT_NULL", "FORCE_NULL", "FREEZE", \
1239"LOG_VERBOSITY", "ON_ERROR", "REJECT_LIMIT"
1242#define Copy_to_options \
1243Copy_common_options, "FORCE_QUOTE", "FORCE_ARRAY"
1254 " FROM pg_catalog.pg_publication "
1255 " WHERE pubname LIKE '%s'"
1262 " SELECT s.subname "
1263 " FROM pg_catalog.pg_subscription s, pg_catalog.pg_database d "
1264 " WHERE s.subname LIKE '%s' "
1265 " AND d.datname = pg_catalog.current_database() "
1266 " AND s.subdbid = d.oid"
1273 "ABORT",
"ALTER",
"ANALYZE",
"BEGIN",
"CALL",
"CHECKPOINT",
"CLOSE",
"CLUSTER",
1274 "COMMENT",
"COMMIT",
"COPY",
"CREATE",
"DEALLOCATE",
"DECLARE",
1275 "DELETE FROM",
"DISCARD",
"DO",
"DROP",
"END",
"EXECUTE",
"EXPLAIN",
1276 "FETCH",
"GRANT",
"IMPORT FOREIGN SCHEMA",
"INSERT INTO",
"LISTEN",
"LOAD",
"LOCK",
1277 "MERGE INTO",
"MOVE",
"NOTIFY",
"PREPARE",
1278 "REASSIGN",
"REFRESH MATERIALIZED VIEW",
"REINDEX",
"RELEASE",
"REPACK",
1279 "RESET",
"REVOKE",
"ROLLBACK",
1280 "SAVEPOINT",
"SECURITY LABEL",
"SELECT",
"SET",
"SHOW",
"START",
1281 "TABLE",
"TRUNCATE",
"UNLISTEN",
"UPDATE",
"VACUUM",
"VALUES",
1302#define THING_NO_CREATE (1 << 0)
1303#define THING_NO_DROP (1 << 1)
1304#define THING_NO_ALTER (1 << 2)
1305#define THING_NO_SHOW (THING_NO_CREATE | THING_NO_DROP | THING_NO_ALTER)
1325 {
"CONVERSION",
"SELECT conname FROM pg_catalog.pg_conversion WHERE conname LIKE '%s'"},
1351 {
"RULE",
"SELECT rulename FROM pg_catalog.pg_rules WHERE rulename LIKE '%s'"},
1367 {
"TRIGGER",
"SELECT tgname FROM pg_catalog.pg_trigger WHERE tgname LIKE '%s' AND NOT tgisinternal"},
1397#define MatchAny NULL
1398#define MatchAnyExcept(pattern) ("!" pattern)
1407 const char *
const *words;
1411#define TCPAT(id, kind, ...) \
1412 { (id), (kind), VA_ARGS_NARGS(__VA_ARGS__), \
1413 (const char * const []) { __VA_ARGS__ } }
1415#ifdef SWITCH_CONVERSION_APPLIED
1426 "autovacuum_analyze_scale_factor",
1427 "autovacuum_analyze_threshold",
1428 "autovacuum_enabled",
1429 "autovacuum_freeze_max_age",
1430 "autovacuum_freeze_min_age",
1431 "autovacuum_freeze_table_age",
1432 "autovacuum_multixact_freeze_max_age",
1433 "autovacuum_multixact_freeze_min_age",
1434 "autovacuum_multixact_freeze_table_age",
1435 "autovacuum_vacuum_cost_delay",
1436 "autovacuum_vacuum_cost_limit",
1437 "autovacuum_vacuum_insert_scale_factor",
1438 "autovacuum_vacuum_insert_threshold",
1439 "autovacuum_vacuum_max_threshold",
1440 "autovacuum_vacuum_scale_factor",
1441 "autovacuum_vacuum_threshold",
1443 "log_autovacuum_min_duration",
1444 "log_autoanalyze_min_duration",
1446 "toast.autovacuum_enabled",
1447 "toast.autovacuum_freeze_max_age",
1448 "toast.autovacuum_freeze_min_age",
1449 "toast.autovacuum_freeze_table_age",
1450 "toast.autovacuum_multixact_freeze_max_age",
1451 "toast.autovacuum_multixact_freeze_min_age",
1452 "toast.autovacuum_multixact_freeze_table_age",
1453 "toast.autovacuum_vacuum_cost_delay",
1454 "toast.autovacuum_vacuum_cost_limit",
1455 "toast.autovacuum_vacuum_insert_scale_factor",
1456 "toast.autovacuum_vacuum_insert_threshold",
1457 "toast.autovacuum_vacuum_max_threshold",
1458 "toast.autovacuum_vacuum_scale_factor",
1459 "toast.autovacuum_vacuum_threshold",
1460 "toast.log_autovacuum_min_duration",
1461 "toast.vacuum_index_cleanup",
1462 "toast.vacuum_max_eager_freeze_failure_rate",
1463 "toast.vacuum_truncate",
1464 "toast_tuple_target",
1465 "user_catalog_table",
1466 "vacuum_index_cleanup",
1467 "vacuum_max_eager_freeze_failure_rate",
1503 int *
maxvars,
const char *varname,
1504 const char *prefix,
const char *suffix);
1506 const char *prefix,
const char *suffix,
bool need_value);
1525#ifdef USE_FILENAME_QUOTING_FUNCTIONS
1540#ifdef USE_FILENAME_QUOTING_FUNCTIONS
1562#ifdef HAVE_RL_FILENAME_QUOTE_CHARACTERS
1566 for (
int i = 0;
i < 255;
i++)
1567 fqc[
i] = (
unsigned char) (
i + 1);
1599 bool case_sensitive)
1603#define cimatch(s1, s2, n) \
1604 (case_sensitive ? strncmp(s1, s2, n) == 0 : pg_strncasecmp(s1, s2, n) == 0)
1607 if (pattern ==
NULL)
1611 if (*pattern ==
'!')
1623 while (*
c !=
'\0' && *
c !=
'|')
1644 if (wordlen == (
c - pattern) &&
1668 int narg,
const char *
const *args)
1718 int narg,
const char *
const *args)
1771 int narg,
const char *
const *args)
1855 size_t length =
strlen(s);
1857 return (length > 0 && s[length - 1] ==
c);
1890#define prev_wd (previous_words[0])
1891#define prev2_wd (previous_words[1])
1892#define prev3_wd (previous_words[2])
1893#define prev4_wd (previous_words[3])
1894#define prev5_wd (previous_words[4])
1895#define prev6_wd (previous_words[5])
1896#define prev7_wd (previous_words[6])
1897#define prev8_wd (previous_words[7])
1898#define prev9_wd (previous_words[8])
1901#define TailMatches(...) \
1902 TailMatchesImpl(false, previous_words_count, previous_words, \
1903 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1906#define TailMatchesCS(...) \
1907 TailMatchesImpl(true, previous_words_count, previous_words, \
1908 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1911#define Matches(...) \
1912 MatchesImpl(false, previous_words_count, previous_words, \
1913 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1916#define MatchesCS(...) \
1917 MatchesImpl(true, previous_words_count, previous_words, \
1918 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1921#define HeadMatches(...) \
1922 HeadMatchesImpl(false, previous_words_count, previous_words, \
1923 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1926#define HeadMatchesCS(...) \
1927 HeadMatchesImpl(true, previous_words_count, previous_words, \
1928 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1933 "\\bind",
"\\bind_named",
1934 "\\connect",
"\\conninfo",
"\\C",
"\\cd",
"\\close_prepared",
"\\copy",
1935 "\\copyright",
"\\crosstabview",
1936 "\\d",
"\\da",
"\\dA",
"\\dAc",
"\\dAf",
"\\dAo",
"\\dAp",
1937 "\\db",
"\\dc",
"\\dconfig",
"\\dC",
"\\dd",
"\\ddp",
"\\dD",
1938 "\\des",
"\\det",
"\\deu",
"\\dew",
"\\dE",
"\\df",
1939 "\\dF",
"\\dFd",
"\\dFp",
"\\dFt",
"\\dg",
"\\di",
"\\dl",
"\\dL",
1940 "\\dm",
"\\dn",
"\\do",
"\\dO",
"\\dp",
"\\dP",
"\\dPi",
"\\dPt",
1941 "\\drds",
"\\drg",
"\\dRs",
"\\dRp",
"\\ds",
1942 "\\dt",
"\\dT",
"\\dv",
"\\du",
"\\dx",
"\\dX",
"\\dy",
1943 "\\echo",
"\\edit",
"\\ef",
"\\elif",
"\\else",
"\\encoding",
1944 "\\endif",
"\\endpipeline",
"\\errverbose",
"\\ev",
1945 "\\f",
"\\flush",
"\\flushrequest",
1946 "\\g",
"\\gdesc",
"\\getenv",
"\\getresults",
"\\gexec",
"\\gset",
"\\gx",
1948 "\\if",
"\\include",
"\\include_relative",
"\\ir",
1949 "\\list",
"\\lo_import",
"\\lo_export",
"\\lo_list",
"\\lo_unlink",
1951 "\\parse",
"\\password",
"\\print",
"\\prompt",
"\\pset",
1952 "\\qecho",
"\\quit",
1953 "\\reset",
"\\restrict",
1954 "\\s",
"\\sendpipeline",
"\\set",
"\\setenv",
"\\sf",
1955 "\\startpipeline",
"\\sv",
"\\syncpipeline",
1956 "\\t",
"\\T",
"\\timing",
1957 "\\unrestrict",
"\\unset",
1959 "\\warn",
"\\watch",
"\\write",
1997 if (
text[0] ==
'\\')
2001 else if (
text[0] ==
':' &&
text[1] !=
':')
2003 if (
text[1] ==
'\'')
2005 else if (
text[1] ==
'"')
2007 else if (
text[1] ==
'{' &&
text[2] ==
'?')
2020#ifdef SWITCH_CONVERSION_APPLIED
2038 switch (
tcpat->kind)
2113 else if (
wac->vquery)
2116 else if (
wac->squery)
2134#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
2213 COMPLETE_WITH(
"TABLE",
"VIEW",
"INDEX",
"SEQUENCE",
"TRIGGER",
2215 "UNIQUE",
"UNLOGGED");
2221 COMPLETE_WITH(
"FUNCTION",
"PROCEDURE",
"LANGUAGE",
"RULE",
"VIEW",
2222 "AGGREGATE",
"TRANSFORM",
"TRIGGER");
2232 else if (
Matches(
"ALTER",
"TABLE"))
2234 "ALL IN TABLESPACE");
2249 else if (
Matches(
"ALTER",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE",
MatchAny))
2301 COMPLETE_WITH(
"ADD",
"DROP",
"OWNER TO",
"RENAME TO",
"SET");
2305 else if (
Matches(
"ALTER",
"PUBLICATION",
MatchAny,
"ADD|SET",
"TABLE"))
2332 COMPLETE_WITH(
"(",
"ALL SEQUENCES",
"ALL TABLES",
"TABLES IN SCHEMA",
"TABLE");
2335 else if (
Matches(
"ALTER",
"PUBLICATION",
MatchAny,
"SET",
"ALL",
"TABLES"))
2337 else if (
Matches(
"ALTER",
"PUBLICATION",
MatchAny,
"SET",
"ALL",
"TABLES",
"EXCEPT"))
2339 else if (
Matches(
"ALTER",
"PUBLICATION",
MatchAny,
"SET",
"ALL",
"TABLES",
"EXCEPT",
"("))
2342 else if (
Matches(
"ALTER",
"PUBLICATION",
MatchAny,
"SET",
"ALL",
"TABLES",
"EXCEPT",
"(",
"TABLE"))
2344 else if (
Matches(
"ALTER",
"PUBLICATION",
MatchAny,
"SET",
"ALL",
"TABLES",
"EXCEPT",
"(",
"TABLE",
MatchAnyN) &&
ends_with(
prev_wd,
','))
2346 else if (
Matches(
"ALTER",
"PUBLICATION",
MatchAny,
"SET",
"ALL",
"TABLES",
"EXCEPT",
"(",
"TABLE",
MatchAnyN) && !
ends_with(
prev_wd,
','))
2348 else if (
Matches(
"ALTER",
"PUBLICATION",
MatchAny,
"ADD|DROP|SET",
"TABLES",
"IN",
"SCHEMA"))
2350 " AND nspname NOT LIKE E'pg\\\\_%%'",
2354 COMPLETE_WITH(
"publish",
"publish_generated_columns",
"publish_via_partition_root");
2357 COMPLETE_WITH(
"CONNECTION",
"ENABLE",
"DISABLE",
"OWNER TO",
2358 "RENAME TO",
"REFRESH PUBLICATION",
"REFRESH SEQUENCES",
2359 "SERVER",
"SET",
"SKIP (",
"ADD PUBLICATION",
"DROP PUBLICATION");
2374 "max_retention_duration",
"origin",
2375 "password_required",
"retain_dead_tuples",
2376 "run_as_owner",
"slot_name",
"streaming",
2377 "synchronous_commit",
"two_phase");
2388 "ADD|DROP|SET",
"PUBLICATION",
MatchAny))
2392 "ADD|DROP|SET",
"PUBLICATION",
MatchAny,
"WITH",
"("))
2401 COMPLETE_WITH(
"OWNER TO",
"REFRESH VERSION",
"RENAME TO",
"SET SCHEMA");
2409 COMPLETE_WITH(
"RESET",
"SET",
"OWNER TO",
"REFRESH COLLATION VERSION",
"RENAME TO",
2410 "IS_TEMPLATE",
"ALLOW_CONNECTIONS",
2411 "CONNECTION LIMIT");
2425 else if (
Matches(
"ALTER",
"EVENT",
"TRIGGER"))
2430 COMPLETE_WITH(
"DISABLE",
"ENABLE",
"OWNER TO",
"RENAME TO");
2442 COMPLETE_WITH(
"ACCESS METHOD",
"AGGREGATE",
"CAST",
"COLLATION",
2443 "CONVERSION",
"DOMAIN",
"EVENT TRIGGER",
"FOREIGN",
2444 "FUNCTION",
"MATERIALIZED VIEW",
"OPERATOR",
2445 "LANGUAGE",
"PROCEDURE",
"ROUTINE",
"SCHEMA",
2446 "SEQUENCE",
"SERVER",
"TABLE",
"TEXT SEARCH",
2447 "TRANSFORM FOR",
"TYPE",
"VIEW");
2450 else if (
Matches(
"ALTER",
"EXTENSION",
MatchAny,
"ADD|DROP",
"FOREIGN"))
2454 else if (
Matches(
"ALTER",
"EXTENSION",
MatchAny,
"ADD|DROP",
"OPERATOR"))
2458 else if (
Matches(
"ALTER",
"EXTENSION",
MatchAny,
"ADD|DROP",
"TEXT",
"SEARCH"))
2459 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
2473 else if (
Matches(
"ALTER",
"FOREIGN"))
2479 "OPTIONS",
"OWNER TO",
"RENAME TO",
"VALIDATOR");
2480 else if (
Matches(
"ALTER",
"FOREIGN",
"DATA",
"WRAPPER",
MatchAny,
"NO"))
2485 COMPLETE_WITH(
"ADD",
"ALTER",
"DISABLE TRIGGER",
"DROP",
"ENABLE",
2486 "INHERIT",
"NO INHERIT",
"OPTIONS",
"OWNER TO",
2487 "RENAME",
"SET",
"VALIDATE CONSTRAINT");
2490 else if (
Matches(
"ALTER",
"INDEX"))
2492 "ALL IN TABLESPACE");
2495 COMPLETE_WITH(
"ALTER COLUMN",
"OWNER TO",
"RENAME TO",
"SET",
2496 "RESET",
"ATTACH PARTITION",
2497 "DEPENDS ON EXTENSION",
"NO DEPENDS ON EXTENSION");
2531 "deduplicate_items",
2532 "fastupdate",
"gin_pending_list_limit",
2534 "pages_per_range",
"autosummarize"
2538 "deduplicate_items =",
2539 "fastupdate =",
"gin_pending_list_limit =",
2541 "pages_per_range =",
"autosummarize ="
2557 else if (
Matches(
"ALTER",
"MATERIALIZED",
"VIEW"))
2559 "ALL IN TABLESPACE");
2564 COMPLETE_WITH(
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
"CREATEROLE",
2565 "ENCRYPTED PASSWORD",
"IN",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2566 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2567 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2568 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2569 "VALID UNTIL",
"WITH");
2593 COMPLETE_WITH(
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
"CREATEROLE",
2594 "ENCRYPTED PASSWORD",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2595 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2596 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2597 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2601 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
2604 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR"))
2607 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN"))
2610 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2614 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2618 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2623 else if (
Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2625 Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2631 "VALIDATE CONSTRAINT");
2642 else if (
Matches(
"ALTER",
"DOMAIN",
MatchAny,
"DROP|RENAME|VALIDATE",
"CONSTRAINT"))
2659 COMPLETE_WITH(
"AS",
"INCREMENT",
"MINVALUE",
"MAXVALUE",
"RESTART",
2660 "START",
"NO",
"CACHE",
"CYCLE",
"SET",
"OWNED BY",
2661 "OWNER TO",
"RENAME TO");
2673 COMPLETE_WITH(
"VERSION",
"OPTIONS",
"OWNER TO",
"RENAME TO");
2678 else if (
Matches(
"ALTER",
"SYSTEM"))
2680 else if (
Matches(
"ALTER",
"SYSTEM",
"SET|RESET"))
2687 COMPLETE_WITH(
"ALTER COLUMN",
"OWNER TO",
"RENAME",
"RESET",
"SET");
2691 else if (
Matches(
"ALTER",
"VIEW",
MatchAny,
"ALTER|RENAME",
"COLUMN"))
2714 else if (
Matches(
"ALTER",
"VIEW",
MatchAny,
"SET",
"(",
"check_option",
"="))
2716 else if (
Matches(
"ALTER",
"VIEW",
MatchAny,
"SET",
"(",
"security_barrier|security_invoker",
"="))
2721 COMPLETE_WITH(
"ALTER COLUMN",
"CLUSTER ON",
"DEPENDS ON EXTENSION",
2722 "NO DEPENDS ON EXTENSION",
"OWNER TO",
"RENAME",
2725 else if (
Matches(
"ALTER",
"MATERIALIZED",
"VIEW",
MatchAny,
"RENAME"))
2727 else if (
Matches(
"ALTER",
"MATERIALIZED",
"VIEW",
MatchAny,
"ALTER|RENAME",
"COLUMN"))
2737 COMPLETE_WITH(
"(",
"ACCESS METHOD",
"SCHEMA",
"TABLESPACE",
"WITHOUT CLUSTER");
2739 else if (
Matches(
"ALTER",
"MATERIALIZED",
"VIEW",
MatchAny,
"SET",
"ACCESS",
"METHOD"))
2743 else if (
Matches(
"ALTER",
"POLICY"))
2756 COMPLETE_WITH(
"RENAME TO",
"TO",
"USING (",
"WITH CHECK (");
2769 else if (
Matches(
"ALTER",
"PROPERTY",
"GRAPH"))
2772 COMPLETE_WITH(
"ADD",
"ALTER",
"DROP",
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
2773 else if (
Matches(
"ALTER",
"PROPERTY",
"GRAPH",
MatchAny,
"ADD|ALTER|DROP"))
2775 else if (
Matches(
"ALTER",
"PROPERTY",
"GRAPH",
MatchAny,
"ADD|DROP",
"VERTEX|EDGE"))
2779 else if (
Matches(
"ALTER",
"PROPERTY",
"GRAPH",
MatchAny,
"ALTER",
"VERTEX|EDGE"))
2799 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA",
"SET STATISTICS");
2817 "NO DEPENDS ON EXTENSION");
2823 COMPLETE_WITH(
"ADD",
"ALTER",
"CLUSTER ON",
"DISABLE",
"DROP",
2824 "ENABLE",
"INHERIT",
"NO",
"RENAME",
"RESET",
2825 "OWNER TO",
"SET",
"VALIDATE CONSTRAINT",
2826 "REPLICA IDENTITY",
"ATTACH PARTITION",
2827 "DETACH PARTITION",
"FORCE ROW LEVEL SECURITY",
2828 "SPLIT PARTITION",
"MERGE PARTITIONS (",
2836 COMPLETE_WITH(
"COLUMN",
"CONSTRAINT",
"CHECK (",
"NOT NULL",
"UNIQUE",
2837 "PRIMARY KEY",
"EXCLUDE",
"FOREIGN KEY");
2845 COMPLETE_WITH(
"CHECK (",
"NOT NULL",
"UNIQUE",
"PRIMARY KEY",
"EXCLUDE",
"FOREIGN KEY");
2852 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"ADD",
"PRIMARY",
"KEY") ||
2858 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"ADD",
"PRIMARY",
"KEY",
"USING",
"INDEX"))
2864 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"ADD",
"UNIQUE",
"USING",
"INDEX"))
2871 "PRIMARY",
"KEY",
"USING",
"INDEX"))
2878 "UNIQUE",
"USING",
"INDEX"))
2885 COMPLETE_WITH(
"ALWAYS",
"REPLICA",
"ROW LEVEL SECURITY",
"RULE",
2887 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"ENABLE",
"REPLICA|ALWAYS"))
2939 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"ALTER|RENAME",
"COLUMN"))
2957 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"ALTER|DROP|RENAME",
"CONSTRAINT"))
2963 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"VALIDATE",
"CONSTRAINT"))
2971 COMPLETE_WITH(
"TYPE",
"SET",
"RESET",
"RESTART",
"ADD",
"DROP");
2989 COMPLETE_WITH(
"(",
"COMPRESSION",
"DATA TYPE",
"DEFAULT",
"EXPRESSION",
"GENERATED",
"NOT NULL",
2990 "STATISTICS",
"STORAGE",
2992 "INCREMENT",
"MINVALUE",
"MAXVALUE",
"START",
"NO",
"CACHE",
"CYCLE");
3020 COMPLETE_WITH(
"DEFAULT",
"PLAIN",
"EXTERNAL",
"EXTENDED",
"MAIN");
3030 COMPLETE_WITH(
"DEFAULT",
"EXPRESSION",
"IDENTITY",
"NOT NULL");
3041 "TABLESPACE",
"UNLOGGED",
"WITH",
"WITHOUT");
3047 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"SET",
"ACCESS",
"METHOD"))
3066 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"REPLICA",
"IDENTITY",
"USING",
"INDEX"))
3071 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"REPLICA",
"IDENTITY",
"USING"))
3094 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"DETACH|SPLIT",
"PARTITION"))
3107 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"MERGE",
"PARTITIONS",
"("))
3112 else if (
Matches(
"ALTER",
"TABLE",
MatchAny,
"MERGE",
"PARTITIONS",
"(*)"))
3128 "effective_io_concurrency",
"maintenance_io_concurrency");
3131 else if (
Matches(
"ALTER",
"TEXT",
"SEARCH"))
3132 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3133 else if (
Matches(
"ALTER",
"TEXT",
"SEARCH",
"TEMPLATE|PARSER",
MatchAny))
3137 else if (
Matches(
"ALTER",
"TEXT",
"SEARCH",
"CONFIGURATION",
MatchAny))
3140 "OWNER TO",
"RENAME TO",
"SET SCHEMA");
3144 COMPLETE_WITH(
"ADD ATTRIBUTE",
"ADD VALUE",
"ALTER ATTRIBUTE",
3146 "OWNER TO",
"RENAME",
"SET SCHEMA",
"SET (");
3164 else if (
Matches(
"ALTER",
"TYPE",
MatchAny,
"ALTER|DROP|RENAME",
"ATTRIBUTE"))
3189 COMPLETE_WITH(
"ANALYZE",
"RECEIVE",
"SEND",
"STORAGE",
"SUBSCRIPT",
3190 "TYPMOD_IN",
"TYPMOD_OUT");
3208 "(",
"VERBOSE",
"ONLY");
3209 else if (
Matches(
"ANALYZE",
"VERBOSE"))
3221 COMPLETE_WITH(
"VERBOSE",
"SKIP_LOCKED",
"BUFFER_USAGE_LIMIT");
3225 else if (
Matches(
"ANALYZE",
"(*)"))
3236 COMPLETE_WITH(
"WORK",
"TRANSACTION",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
3238 else if (
Matches(
"END|ABORT"))
3248 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION",
"TO SAVEPOINT",
"PREPARED");
3249 else if (
Matches(
"ABORT|END|COMMIT|ROLLBACK",
"AND"))
3257 else if (
Matches(
"CHECKPOINT"))
3280 else if (
Matches(
"CLUSTER",
"VERBOSE") ||
3311 else if (
Matches(
"COMMENT",
"ON"))
3312 COMPLETE_WITH(
"ACCESS METHOD",
"AGGREGATE",
"CAST",
"COLLATION",
3313 "COLUMN",
"CONSTRAINT",
"CONVERSION",
"DATABASE",
3314 "DOMAIN",
"EXTENSION",
"EVENT TRIGGER",
3315 "FOREIGN DATA WRAPPER",
"FOREIGN TABLE",
3316 "FUNCTION",
"INDEX",
"LANGUAGE",
"LARGE OBJECT",
3317 "MATERIALIZED VIEW",
"OPERATOR",
"POLICY",
3318 "PROCEDURE",
"PROCEDURAL LANGUAGE",
"PROPERTY GRAPH",
"PUBLICATION",
"ROLE",
3319 "ROUTINE",
"RULE",
"SCHEMA",
"SEQUENCE",
"SERVER",
3320 "STATISTICS",
"SUBSCRIPTION",
"TABLE",
3321 "TABLESPACE",
"TEXT SEARCH",
"TRANSFORM FOR",
3322 "TRIGGER",
"TYPE",
"VIEW");
3323 else if (
Matches(
"COMMENT",
"ON",
"ACCESS",
"METHOD"))
3325 else if (
Matches(
"COMMENT",
"ON",
"CONSTRAINT"))
3335 else if (
Matches(
"COMMENT",
"ON",
"CONSTRAINT",
MatchAny,
"ON",
"DOMAIN"))
3337 else if (
Matches(
"COMMENT",
"ON",
"EVENT",
"TRIGGER"))
3339 else if (
Matches(
"COMMENT",
"ON",
"FOREIGN"))
3341 else if (
Matches(
"COMMENT",
"ON",
"FOREIGN",
"TABLE"))
3343 else if (
Matches(
"COMMENT",
"ON",
"MATERIALIZED",
"VIEW"))
3345 else if (
Matches(
"COMMENT",
"ON",
"POLICY"))
3354 else if (
Matches(
"COMMENT",
"ON",
"PROCEDURAL",
"LANGUAGE"))
3356 else if (
Matches(
"COMMENT",
"ON",
"PROPERTY",
"GRAPH"))
3365 else if (
Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH"))
3366 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3367 else if (
Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"CONFIGURATION"))
3369 else if (
Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"DICTIONARY"))
3371 else if (
Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"PARSER"))
3373 else if (
Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"TEMPLATE"))
3375 else if (
Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR"))
3379 else if (
Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR",
MatchAny,
"LANGUAGE"))
3403 else if (
Matches(
"COPY|\\copy"))
3406 else if (
Matches(
"COPY|\\copy",
"("))
3407 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES",
"INSERT INTO",
"UPDATE",
"DELETE FROM",
"MERGE INTO",
"WITH");
3517 "PROVIDER =",
"DETERMINISTIC =");
3526 COMPLETE_WITH(
"OWNER",
"TEMPLATE",
"ENCODING",
"TABLESPACE",
3527 "IS_TEMPLATE",
"STRATEGY",
3528 "ALLOW_CONNECTIONS",
"CONNECTION LIMIT",
3529 "LC_COLLATE",
"LC_CTYPE",
"LOCALE",
"OID",
3530 "LOCALE_PROVIDER",
"ICU_LOCALE");
3544 "NOT NULL",
"NULL",
"CHECK (");
3550 else if (
Matches(
"CREATE",
"EXTENSION"))
3563 else if (
Matches(
"CREATE",
"FOREIGN"))
3568 COMPLETE_WITH(
"CONNECTION",
"HANDLER",
"OPTIONS",
"VALIDATOR");
3585 "ON",
"CONCURRENTLY");
3599 else if (
TailMatches(
"CREATE|UNIQUE",
"INDEX",
"CONCURRENTLY"))
3631 else if (
Matches(
"CREATE",
"OR"))
3643 COMPLETE_WITH(
"AS",
"FOR",
"TO",
"USING (",
"WITH CHECK (");
3656 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
3679 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
3718 else if (
Matches(
"CREATE",
"PROPERTY"))
3722 else if (
Matches(
"CREATE",
"PROPERTY",
"GRAPH",
MatchAny,
"VERTEX|NODE"))
3724 else if (
Matches(
"CREATE",
"PROPERTY",
"GRAPH",
MatchAny,
"VERTEX|NODE",
"TABLES"))
3726 else if (
Matches(
"CREATE",
"PROPERTY",
"GRAPH",
MatchAny,
"VERTEX|NODE",
"TABLES",
"("))
3728 else if (
Matches(
"CREATE",
"PROPERTY",
"GRAPH",
MatchAny,
"VERTEX|NODE",
"TABLES",
"(*)"))
3739 COMPLETE_WITH(
"FOR TABLE",
"FOR TABLES IN SCHEMA",
"FOR ALL TABLES",
"FOR ALL SEQUENCES",
"WITH (");
3741 COMPLETE_WITH(
"TABLE",
"TABLES IN SCHEMA",
"ALL TABLES",
"ALL SEQUENCES");
3744 else if (
Matches(
"CREATE",
"PUBLICATION",
MatchAny,
"FOR",
"ALL",
"TABLES"))
3746 else if (
Matches(
"CREATE",
"PUBLICATION",
MatchAny,
"FOR",
"ALL",
"TABLES",
"EXCEPT"))
3748 else if (
Matches(
"CREATE",
"PUBLICATION",
MatchAny,
"FOR",
"ALL",
"TABLES",
"EXCEPT",
"("))
3750 else if (
Matches(
"CREATE",
"PUBLICATION",
MatchAny,
"FOR",
"ALL",
"TABLES",
"EXCEPT",
"(",
"TABLE"))
3752 else if (
Matches(
"CREATE",
"PUBLICATION",
MatchAny,
"FOR",
"ALL",
"TABLES",
"EXCEPT",
"(",
"TABLE",
MatchAnyN) &&
ends_with(
prev_wd,
','))
3754 else if (
Matches(
"CREATE",
"PUBLICATION",
MatchAny,
"FOR",
"ALL",
"TABLES",
"EXCEPT",
"(",
"TABLE",
MatchAnyN) && !
ends_with(
prev_wd,
','))
3778 else if (
Matches(
"CREATE",
"PUBLICATION",
MatchAny,
"FOR",
"TABLES",
"IN",
"SCHEMA"))
3780 " AND nspname NOT LIKE E'pg\\\\_%%'",
3786 COMPLETE_WITH(
"publish",
"publish_generated_columns",
"publish_via_partition_root");
3806 else if (
TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE"))
3809 else if (
TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE",
"TO"))
3813 else if (
Matches(
"CREATE",
"SCHEMA"))
3816 else if (
Matches(
"CREATE",
"SCHEMA",
"AUTHORIZATION") ||
3829 COMPLETE_WITH(
"AS",
"INCREMENT BY",
"MINVALUE",
"MAXVALUE",
"NO",
3830 "CACHE",
"CYCLE",
"OWNED BY",
"START WITH");
3881 COMPLETE_WITH(
"EXECUTE",
"SELECT",
"TABLE",
"VALUES",
"WITH");
3884 COMPLETE_WITH(
"AS",
"INHERITS (",
"PARTITION BY",
"USING",
"TABLESPACE",
"WITH (");
3886 COMPLETE_WITH(
"AS",
"INHERITS (",
"USING",
"TABLESPACE",
"WITH (");
3888 COMPLETE_WITH(
"AS",
"INHERITS (",
"ON COMMIT",
"PARTITION BY",
"USING",
3889 "TABLESPACE",
"WITH (");
3899 else if (
TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"TABLE",
MatchAny,
"(*)",
"ON",
"COMMIT"))
3910 else if (
Matches(
"CREATE",
"TEXT",
"SEARCH"))
3911 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3912 else if (
Matches(
"CREATE",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE",
MatchAny))
3916 else if (
Matches(
"CREATE",
"TRANSFORM") ||
3917 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM"))
3919 else if (
Matches(
"CREATE",
"TRANSFORM",
"FOR") ||
3920 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR"))
3925 else if (
Matches(
"CREATE",
"TRANSFORM",
"FOR",
MatchAny,
"LANGUAGE") ||
3926 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR",
MatchAny,
"LANGUAGE"))
3955 COMPLETE_WITH(
"binary",
"connect",
"copy_data",
"create_slot",
3956 "disable_on_error",
"enabled",
"failover",
3957 "max_retention_duration",
"origin",
3958 "password_required",
"retain_dead_tuples",
3959 "run_as_owner",
"slot_name",
"streaming",
3960 "synchronous_commit",
"two_phase");
4017 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
4020 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
4027 "INITIALLY",
"IMMEDIATE|DEFERRED") ||
4029 "INITIALLY",
"IMMEDIATE|DEFERRED"))
4032 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
4034 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
4042 "OLD|NEW",
"TABLE") ||
4044 "OLD|NEW",
"TABLE"))
4047 "REFERENCING",
"OLD",
"TABLE",
"AS",
MatchAny) ||
4049 "REFERENCING",
"OLD",
"TABLE",
"AS",
MatchAny) ||
4051 "REFERENCING",
"OLD",
"TABLE",
MatchAny) ||
4053 "REFERENCING",
"OLD",
"TABLE",
MatchAny))
4056 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
4058 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
4061 "REFERENCING",
"NEW",
"TABLE",
"AS",
MatchAny) ||
4063 "REFERENCING",
"NEW",
"TABLE",
"AS",
MatchAny) ||
4065 "REFERENCING",
"NEW",
"TABLE",
MatchAny) ||
4067 "REFERENCING",
"NEW",
"TABLE",
MatchAny))
4070 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
4072 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
4075 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS",
MatchAny,
"OLD|NEW",
"TABLE",
"AS",
MatchAny) ||
4077 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS",
MatchAny,
"OLD|NEW",
"TABLE",
"AS",
MatchAny) ||
4079 "REFERENCING",
"OLD|NEW",
"TABLE",
MatchAny,
"OLD|NEW",
"TABLE",
"AS",
MatchAny) ||
4081 "REFERENCING",
"OLD|NEW",
"TABLE",
MatchAny,
"OLD|NEW",
"TABLE",
"AS",
MatchAny) ||
4083 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS",
MatchAny,
"OLD|NEW",
"TABLE",
MatchAny) ||
4085 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS",
MatchAny,
"OLD|NEW",
"TABLE",
MatchAny) ||
4087 "REFERENCING",
"OLD|NEW",
"TABLE",
MatchAny,
"OLD|NEW",
"TABLE",
MatchAny) ||
4089 "REFERENCING",
"OLD|NEW",
"TABLE",
MatchAny,
"OLD|NEW",
"TABLE",
MatchAny))
4107 "FOR",
"EACH",
"ROW|STATEMENT") ||
4109 "FOR",
"EACH",
"ROW|STATEMENT") ||
4111 "FOR",
"ROW|STATEMENT") ||
4113 "FOR",
"ROW|STATEMENT"))
4146 "EXECUTE",
"FUNCTION|PROCEDURE") ||
4148 "EXECUTE",
"FUNCTION|PROCEDURE"))
4154 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
4155 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
4156 "LOGIN",
"NOBYPASSRLS",
4157 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
4158 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
4159 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
4160 "VALID UNTIL",
"WITH");
4165 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
4166 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
4167 "LOGIN",
"NOBYPASSRLS",
4168 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
4169 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
4170 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
4195 "TYPMOD_IN",
"TYPMOD_OUT",
"ANALYZE",
"SUBSCRIPT",
4196 "INTERNALLENGTH",
"PASSEDBYVALUE",
"ALIGNMENT",
4197 "STORAGE",
"LIKE",
"CATEGORY",
"PREFERRED",
4198 "DEFAULT",
"ELEMENT",
"DELIMITER",
4209 "CANONICAL",
"SUBTYPE_DIFF",
4210 "MULTIRANGE_TYPE_NAME");
4237 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW",
MatchAny,
"WITH",
"(",
"check_option",
"="))
4249 else if (
Matches(
"CREATE",
"MATERIALIZED"))
4259 else if (
Matches(
"CREATE",
"MATERIALIZED",
"VIEW",
MatchAny,
"USING"))
4274 else if (
Matches(
"CREATE",
"EVENT"))
4281 COMPLETE_WITH(
"ddl_command_start",
"ddl_command_end",
"login",
4282 "sql_drop",
"table_rewrite");
4303 else if (
Matches(
"CREATE",
"EVENT",
"TRIGGER",
MatchAnyN,
"EXECUTE",
"FUNCTION|PROCEDURE"))
4307 else if (
Matches(
"DEALLOCATE"))
4318 COMPLETE_WITH(
"BINARY",
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
4329 COMPLETE_WITH(
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
"CURSOR");
4376 "COLLATION|CONVERSION|DOMAIN|EXTENSION|LANGUAGE|PUBLICATION|SCHEMA|SEQUENCE|SERVER|SUBSCRIPTION|STATISTICS|TABLE|TYPE|VIEW",
4382 Matches(
"DROP",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE",
MatchAny))
4389 else if (
Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE",
MatchAny))
4391 else if (
Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE",
MatchAny,
"("))
4393 else if (
Matches(
"DROP",
"FOREIGN"))
4401 else if (
Matches(
"DROP",
"INDEX"))
4404 else if (
Matches(
"DROP",
"INDEX",
"CONCURRENTLY"))
4412 else if (
Matches(
"DROP",
"MATERIALIZED"))
4414 else if (
Matches(
"DROP",
"MATERIALIZED",
"VIEW"))
4420 else if (
Matches(
"DROP",
"OWNED"))
4422 else if (
Matches(
"DROP",
"OWNED",
"BY"))
4428 else if (
Matches(
"DROP",
"TEXT",
"SEARCH"))
4429 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
4443 else if (
Matches(
"DROP",
"ACCESS"))
4445 else if (
Matches(
"DROP",
"ACCESS",
"METHOD"))
4449 else if (
Matches(
"DROP",
"EVENT"))
4451 else if (
Matches(
"DROP",
"EVENT",
"TRIGGER"))
4455 else if (
Matches(
"DROP",
"POLICY"))
4470 else if (
Matches(
"DROP",
"PROPERTY"))
4472 else if (
Matches(
"DROP",
"PROPERTY",
"GRAPH"))
4487 else if (
Matches(
"DROP",
"TRANSFORM"))
4489 else if (
Matches(
"DROP",
"TRANSFORM",
"FOR"))
4510 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4511 "MERGE INTO",
"EXECUTE",
"ANALYZE",
"VERBOSE");
4521 COMPLETE_WITH(
"ANALYZE",
"VERBOSE",
"COSTS",
"SETTINGS",
"GENERIC_PLAN",
4522 "BUFFERS",
"SERIALIZE",
"WAL",
"TIMING",
"SUMMARY",
4523 "MEMORY",
"FORMAT");
4524 else if (
TailMatches(
"ANALYZE|VERBOSE|COSTS|SETTINGS|GENERIC_PLAN|BUFFERS|WAL|TIMING|SUMMARY|MEMORY"))
4531 else if (
Matches(
"EXPLAIN",
"ANALYZE"))
4532 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4533 "MERGE INTO",
"EXECUTE",
"VERBOSE");
4534 else if (
Matches(
"EXPLAIN",
"(*)") ||
4535 Matches(
"EXPLAIN",
"VERBOSE") ||
4536 Matches(
"EXPLAIN",
"ANALYZE",
"VERBOSE"))
4537 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4538 "MERGE INTO",
"EXECUTE");
4546 else if (
Matches(
"FETCH|MOVE"))
4564 else if (
Matches(
"FETCH|MOVE",
"BACKWARD|FORWARD"))
4575 else if (
Matches(
"FETCH|MOVE",
"ABSOLUTE|BACKWARD|FORWARD|RELATIVE",
4577 Matches(
"FETCH|MOVE",
"ALL|NEXT|PRIOR|FIRST|LAST"))
4587 else if (
TailMatches(
"FOREIGN",
"DATA",
"WRAPPER") &&
4609 TailMatches(
"REVOKE",
"ADMIN|GRANT|INHERIT|SET",
"OPTION",
"FOR"))
4615 if (
HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4620 "DELETE",
"TRUNCATE",
"REFERENCES",
"TRIGGER",
4621 "CREATE",
"EXECUTE",
"USAGE",
"MAINTAIN",
"ALL");
4624 "DELETE",
"TRUNCATE",
"REFERENCES",
"TRIGGER",
4625 "CREATE",
"EXECUTE",
"USAGE",
"MAINTAIN",
"ALL",
4626 "GRANT OPTION FOR");
4636 "INHERIT OPTION FOR",
4638 else if (
TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR"))
4640 else if (
TailMatches(
"REVOKE",
"ADMIN|INHERIT|SET",
"OPTION",
"FOR"))
4645 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER"))
4651 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"SET") ||
4653 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER",
"SYSTEM"))
4679 if (
TailMatches(
"SELECT|INSERT|UPDATE|DELETE|TRUNCATE|REFERENCES|TRIGGER|CREATE|CONNECT|TEMPORARY|TEMP|EXECUTE|USAGE|MAINTAIN|ALL"))
4701 if (
HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4702 COMPLETE_WITH(
"TABLES",
"SEQUENCES",
"FUNCTIONS",
"PROCEDURES",
"ROUTINES",
"TYPES",
"SCHEMAS",
"LARGE OBJECTS");
4705 "ALL FUNCTIONS IN SCHEMA",
4706 "ALL PROCEDURES IN SCHEMA",
4707 "ALL ROUTINES IN SCHEMA",
4708 "ALL SEQUENCES IN SCHEMA",
4709 "ALL TABLES IN SCHEMA",
4712 "FOREIGN DATA WRAPPER",
4730 "PROCEDURES IN SCHEMA",
4731 "ROUTINES IN SCHEMA",
4732 "SEQUENCES IN SCHEMA",
4733 "TABLES IN SCHEMA");
4756 if (
HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4797 "WITH GRANT OPTION",
4830 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
MatchAny,
"ON",
"ALL",
MatchAny,
"IN",
"SCHEMA",
MatchAny))
4893 else if (
Matches(
"IMPORT",
"FOREIGN"))
4909 else if (
TailMatches(
"NOT",
"MATCHED",
"THEN",
"INSERT"))
4926 COMPLETE_WITH(
"(",
"DEFAULT VALUES",
"SELECT",
"TABLE",
"VALUES",
"OVERRIDING");
4953 else if (
Matches(
"LOCK",
"TABLE"))
4956 else if (
Matches(
"LOCK",
"TABLE",
"ONLY") ||
Matches(
"LOCK",
"ONLY"))
4970 "ROW SHARE MODE",
"ROW EXCLUSIVE MODE",
4971 "SHARE UPDATE EXCLUSIVE MODE",
"SHARE MODE",
4972 "SHARE ROW EXCLUSIVE MODE",
4973 "EXCLUSIVE MODE",
"ACCESS EXCLUSIVE MODE");
4985 "UPDATE EXCLUSIVE MODE");
5062 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"SOURCE|TARGET"))
5070 else if (
TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY"))
5077 else if (
TailMatches(
"WHEN",
"MATCHED",
"THEN") ||
5078 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"SOURCE",
"THEN"))
5084 else if (
TailMatches(
"WHEN",
"NOT",
"MATCHED",
"THEN") ||
5085 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"TARGET",
"THEN"))
5109 COMPLETE_WITH(
"SELECT",
"UPDATE",
"INSERT INTO",
"DELETE FROM",
5110 "MERGE INTO",
"VALUES",
"WITH",
"TABLE");
5120 else if (
Matches(
"REASSIGN",
"OWNED"))
5122 else if (
Matches(
"REASSIGN",
"OWNED",
"BY"))
5132 else if (
Matches(
"REFRESH",
"MATERIALIZED"))
5134 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW"))
5137 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY"))
5141 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY",
MatchAny))
5143 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
MatchAny,
"WITH"))
5145 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY",
MatchAny,
"WITH"))
5147 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
MatchAny,
"WITH",
"NO"))
5149 else if (
Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY",
MatchAny,
"WITH",
"NO"))
5153 else if (
Matches(
"REINDEX") ||
5155 COMPLETE_WITH(
"TABLE",
"INDEX",
"SYSTEM",
"SCHEMA",
"DATABASE");
5156 else if (
Matches(
"REINDEX",
"TABLE") ||
5157 Matches(
"REINDEX",
"(*)",
"TABLE"))
5160 else if (
Matches(
"REINDEX",
"INDEX") ||
5161 Matches(
"REINDEX",
"(*)",
"INDEX"))
5164 else if (
Matches(
"REINDEX",
"SCHEMA") ||
5165 Matches(
"REINDEX",
"(*)",
"SCHEMA"))
5168 else if (
Matches(
"REINDEX",
"SYSTEM|DATABASE") ||
5169 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE"))
5172 else if (
Matches(
"REINDEX",
"TABLE",
"CONCURRENTLY") ||
5173 Matches(
"REINDEX",
"(*)",
"TABLE",
"CONCURRENTLY"))
5175 else if (
Matches(
"REINDEX",
"INDEX",
"CONCURRENTLY") ||
5176 Matches(
"REINDEX",
"(*)",
"INDEX",
"CONCURRENTLY"))
5178 else if (
Matches(
"REINDEX",
"SCHEMA",
"CONCURRENTLY") ||
5179 Matches(
"REINDEX",
"(*)",
"SCHEMA",
"CONCURRENTLY"))
5181 else if (
Matches(
"REINDEX",
"SYSTEM|DATABASE",
"CONCURRENTLY") ||
5182 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE",
"CONCURRENTLY"))
5201 "(",
"USING INDEX");
5202 else if (
Matches(
"REPACK",
"(*)"))
5242 else if (
Matches(
"SECURITY",
"LABEL"))
5246 else if (
Matches(
"SECURITY",
"LABEL",
"ON") ||
5248 COMPLETE_WITH(
"TABLE",
"COLUMN",
"AGGREGATE",
"DATABASE",
"DOMAIN",
5249 "EVENT TRIGGER",
"FOREIGN TABLE",
"FUNCTION",
5250 "LARGE OBJECT",
"MATERIALIZED VIEW",
"LANGUAGE",
5251 "PROPERTY GRAPH",
"PUBLICATION",
"PROCEDURE",
"ROLE",
"ROUTINE",
"SCHEMA",
5252 "SEQUENCE",
"SUBSCRIPTION",
"TABLESPACE",
"TYPE",
"VIEW");
5253 else if (
Matches(
"SECURITY",
"LABEL",
"ON",
"PROPERTY",
"GRAPH"))
5275 "SESSION AUTHORIZATION",
5277 else if (
Matches(
"SHOW",
"SESSION"))
5280 else if (
Matches(
"SET",
"TRANSACTION"))
5281 COMPLETE_WITH(
"SNAPSHOT",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
5282 else if (
Matches(
"BEGIN|START",
"TRANSACTION") ||
5285 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION"))
5286 COMPLETE_WITH(
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
5287 else if (
Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"NOT") ||
5289 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"NOT"))
5291 else if (
Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION") ||
5292 Matches(
"BEGIN",
"ISOLATION") ||
5293 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION"))
5295 else if (
Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL") ||
5296 Matches(
"BEGIN",
"ISOLATION",
"LEVEL") ||
5297 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL"))
5299 else if (
Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"READ") ||
5300 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"READ") ||
5301 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"READ"))
5303 else if (
Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
5304 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
5305 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"REPEATABLE"))
5307 else if (
Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"READ") ||
5309 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"READ"))
5312 else if (
Matches(
"SET",
"CONSTRAINTS"))
5319 else if (
Matches(
"SET",
"ROLE"))
5322 else if (
Matches(
"SET",
"SESSION"))
5323 COMPLETE_WITH(
"AUTHORIZATION",
"CHARACTERISTICS AS TRANSACTION");
5325 else if (
Matches(
"SET",
"SESSION",
"AUTHORIZATION"))
5329 else if (
Matches(
"RESET",
"SESSION"))
5352 "YMD",
"DMY",
"MDY",
5353 "US",
"European",
"NonEuropean",
5359 " AND nspname NOT LIKE E'pg\\\\_toast%%'"
5360 " AND nspname NOT LIKE E'pg\\\\_temp%%'",
5385 "1",
"0",
"DEFAULT");
5412 else if (
Matches(
"TRUNCATE",
"TABLE"))
5420 COMPLETE_WITH(
"RESTART IDENTITY",
"CONTINUE IDENTITY",
"CASCADE",
"RESTRICT");
5443 else if (
Matches(
"ALTER|CREATE|DROP",
"USER",
"MAPPING"))
5445 else if (
Matches(
"CREATE",
"USER",
"MAPPING",
"FOR"))
5451 else if (
Matches(
"ALTER|DROP",
"USER",
"MAPPING",
"FOR"))
5453 else if (
Matches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING",
"FOR",
MatchAny))
5480 "DISABLE_PAGE_SKIPPING",
"SKIP_LOCKED",
5481 "INDEX_CLEANUP",
"PROCESS_MAIN",
"PROCESS_TOAST",
5482 "TRUNCATE",
"PARALLEL",
"SKIP_DATABASE_STATS",
5483 "ONLY_DATABASE_STATS",
"BUFFER_USAGE_LIMIT");
5484 else if (
TailMatches(
"FULL|FREEZE|ANALYZE|VERBOSE|DISABLE_PAGE_SKIPPING|SKIP_LOCKED|PROCESS_MAIN|PROCESS_TOAST|TRUNCATE|SKIP_DATABASE_STATS|ONLY_DATABASE_STATS"))
5489 else if (
Matches(
"VACUUM",
"(*)"))
5492 else if (
Matches(
"VACUUM",
"FULL"))
5527 else if (
Matches(
"WAIT",
"FOR"))
5529 else if (
Matches(
"WAIT",
"FOR",
"LSN"))
5553 COMPLETE_WITH(
"'standby_replay'",
"'standby_write'",
"'standby_flush'",
"'primary_flush'");
5727 else if (
TailMatches(
"CREATE|ALTER|DROP",
"EVENT"))
5729 else if (
TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN"))
5733 else if (
TailMatches(
"CREATE|ALTER|DROP",
"MATERIALIZED"))
5735 else if (
TailMatches(
"CREATE|ALTER|DROP",
"PROPERTY"))
5737 else if (
TailMatches(
"CREATE|ALTER|DROP",
"TEXT"))
5739 else if (
TailMatches(
"CREATE|ALTER|DROP",
"USER"))
5744 if (
TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN",
"DATA"))
5746 else if (
TailMatches(
"CREATE|ALTER|DROP",
"TEXT",
"SEARCH"))
5747 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
5748 else if (
TailMatches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING"))
5757 "display_false",
"display_true",
"expanded",
5758 "fieldsep",
"fieldsep_zero",
"footer",
"format",
5759 "linestyle",
"null",
"numericlocale",
5760 "pager",
"pager_min_lines",
5761 "recordsep",
"recordsep_zero",
5762 "tableattr",
"title",
"tuples_only",
5763 "unicode_border_linestyle",
5764 "unicode_column_linestyle",
5765 "unicode_header_linestyle",
5771 "latex-longtable",
"troff-ms",
"unaligned",
5780 "unicode_column_linestyle|"
5781 "unicode_header_linestyle"))
5790 if (
TailMatchesCS(
"AUTOCOMMIT|ON_ERROR_STOP|QUIET|SHOW_ALL_RESULTS|"
5791 "SINGLELINE|SINGLESTEP"))
5795 "preserve-lower",
"preserve-upper");
5802 "ignoreboth",
"none");
5814 else if (
TailMatchesCS(
"\\cd|\\e|\\edit|\\g|\\gx|\\i|\\include|"
5815 "\\ir|\\include_relative|\\o|\\out|"
5816 "\\s|\\w|\\write|\\lo_import") ||
5848 static int list_index,
6000 static int list_index,
6086 "%s, NULL::pg_catalog.text FROM %s",
6091 ", pg_catalog.pg_namespace nr");
6109 " AND %s = nr.oid AND nr.nspname = '%s'",
6126 "pg_catalog.pg_class c") == 0 &&
6130 " AND c.relnamespace <> (SELECT oid FROM"
6131 " pg_catalog.pg_namespace WHERE nspname = 'pg_catalog')");
6141 "SELECT NULL::pg_catalog.text, n.nspname "
6142 "FROM pg_catalog.pg_namespace n "
6143 "WHERE n.nspname LIKE '%s'",
6152 " AND n.nspname NOT LIKE E'pg\\\\_%'");
6169 "FROM %s, pg_catalog.pg_namespace n",
6174 ", pg_catalog.pg_namespace nr");
6192 " AND %s = nr.oid AND nr.nspname = '%s'",
6235 const char *item =
NULL;
6288 const char *item = *
itemp++;
6306 const char *item = *
itemp++;
6371 static int string_length,
6475 int *
maxvars,
const char *varname,
6476 const char *prefix,
const char *suffix)
6484 (*varnames)[(*nvars)++] =
psprintf(
"%s%s%s", prefix, varname, suffix);
6516 varnames[nvars] =
NULL;
6519 for (
i = 0;
i < nvars;
i++)
6538 static int list_index;
6596#ifdef USE_FILENAME_QUOTING_FUNCTIONS
6613#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
6670 if (*ret ==
'\'' &&
is_dir)
6698 unsigned char first =
ref[0];
6707 for (p = ret; *p; p++)
6712 for (p = ret; *p; p++)
6753 char *
bptr = buffer;
6867 if (
ch >=
'A' &&
ch <=
'Z')
6877 *schemaname =
sname;
6907 buflen +=
strlen(schemaname) + 1;
6913 for (
const char *p = schemaname; *p; p++)
6941 for (
const char *p = schemaname; *p; p++)
7026 pg_log_error(
"tab completion query failed: %s\nQuery was:\n%s",
7187 "SELECT vartype FROM pg_catalog.pg_settings "
7188 "WHERE pg_catalog.lower(name) = pg_catalog.lower('%s')",
7203#ifdef USE_FILENAME_QUOTING_FUNCTIONS
7252#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
7287 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)