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@><=;|&() "
107typedef struct VersionedQuery
109 int min_server_version;
129typedef struct SchemaQuery
136 int min_server_version;
152 const char *selcondition;
159 const char *viscondition;
167 const char *
namespace;
203 const char *refviscondition;
210 const char *refnamespace;
217static int completion_max_records;
224static char completion_last_char;
225static const char *completion_charp;
226static const char *
const *completion_charpp;
227static const VersionedQuery *completion_vquery;
228static const SchemaQuery *completion_squery;
229static char *completion_ref_object;
230static char *completion_ref_schema;
231static bool completion_case_sensitive;
232static bool completion_verbatim;
233static bool completion_force_quote;
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); \
453static const SchemaQuery Query_for_constraint_of_table = {
454 .catname =
"pg_catalog.pg_constraint con, pg_catalog.pg_class c1",
455 .selcondition =
"con.conrelid=c1.oid",
456 .result =
"con.conname",
457 .refname =
"c1.relname",
458 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
459 .refnamespace =
"c1.relnamespace",
462static const SchemaQuery Query_for_constraint_of_table_not_validated = {
463 .catname =
"pg_catalog.pg_constraint con, pg_catalog.pg_class c1",
464 .selcondition =
"con.conrelid=c1.oid and not con.convalidated",
465 .result =
"con.conname",
466 .refname =
"c1.relname",
467 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
468 .refnamespace =
"c1.relnamespace",
471static const SchemaQuery Query_for_constraint_of_type = {
472 .catname =
"pg_catalog.pg_constraint con, pg_catalog.pg_type t",
473 .selcondition =
"con.contypid=t.oid",
474 .result =
"con.conname",
475 .refname =
"t.typname",
476 .refviscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
477 .refnamespace =
"t.typnamespace",
480static const SchemaQuery Query_for_index_of_table = {
481 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_index i",
482 .selcondition =
"c1.oid=i.indrelid and i.indexrelid=c2.oid",
483 .result =
"c2.relname",
484 .refname =
"c1.relname",
485 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
486 .refnamespace =
"c1.relnamespace",
489static const SchemaQuery Query_for_unique_index_of_table = {
490 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_index i",
491 .selcondition =
"c1.oid=i.indrelid and i.indexrelid=c2.oid and i.indisunique",
492 .result =
"c2.relname",
493 .refname =
"c1.relname",
494 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
495 .refnamespace =
"c1.relnamespace",
498static const SchemaQuery Query_for_list_of_aggregates[] = {
500 .min_server_version = 110000,
501 .catname =
"pg_catalog.pg_proc p",
502 .selcondition =
"p.prokind = 'a'",
503 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
504 .namespace =
"p.pronamespace",
505 .result =
"p.proname",
508 .catname =
"pg_catalog.pg_proc p",
509 .selcondition =
"p.proisagg",
510 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
511 .namespace =
"p.pronamespace",
512 .result =
"p.proname",
516static const SchemaQuery Query_for_list_of_arguments = {
517 .catname =
"pg_catalog.pg_proc p",
518 .result =
"pg_catalog.oidvectortypes(p.proargtypes)||')'",
519 .refname =
"p.proname",
520 .refviscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
521 .refnamespace =
"p.pronamespace",
524static const SchemaQuery Query_for_list_of_attributes = {
525 .catname =
"pg_catalog.pg_attribute a, pg_catalog.pg_class c",
526 .selcondition =
"c.oid = a.attrelid and a.attnum > 0 and not a.attisdropped",
527 .result =
"a.attname",
528 .refname =
"c.relname",
529 .refviscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
530 .refnamespace =
"c.relnamespace",
533static const SchemaQuery Query_for_list_of_attribute_numbers = {
534 .catname =
"pg_catalog.pg_attribute a, pg_catalog.pg_class c",
535 .selcondition =
"c.oid = a.attrelid and a.attnum > 0 and not a.attisdropped",
536 .result =
"a.attnum::pg_catalog.text",
537 .refname =
"c.relname",
538 .refviscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
539 .refnamespace =
"c.relnamespace",
542static const char *
const Keywords_for_list_of_datatypes[] = {
562 "time with time zone",
563 "time without time zone",
564 "timestamp with time zone",
565 "timestamp without time zone",
570static const SchemaQuery Query_for_list_of_datatypes = {
571 .catname =
"pg_catalog.pg_type t",
573 .selcondition =
"(t.typrelid = 0 "
574 " OR (SELECT c.relkind = " CppAsString2(RELKIND_COMPOSITE_TYPE)
575 " FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)) "
576 "AND t.typname !~ '^_'",
577 .viscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
578 .namespace =
"t.typnamespace",
579 .result =
"t.typname",
580 .keywords = Keywords_for_list_of_datatypes,
583static const SchemaQuery Query_for_list_of_composite_datatypes = {
584 .catname =
"pg_catalog.pg_type t",
586 .selcondition =
"(SELECT c.relkind = " CppAsString2(RELKIND_COMPOSITE_TYPE)
587 " FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid) "
588 "AND t.typname !~ '^_'",
589 .viscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
590 .namespace =
"t.typnamespace",
591 .result =
"t.typname",
594static const SchemaQuery Query_for_list_of_domains = {
595 .catname =
"pg_catalog.pg_type t",
596 .selcondition =
"t.typtype = 'd'",
597 .viscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
598 .namespace =
"t.typnamespace",
599 .result =
"t.typname",
602static const SchemaQuery Query_for_list_of_enum_values_quoted = {
603 .catname =
"pg_catalog.pg_enum e, pg_catalog.pg_type t",
604 .selcondition =
"t.oid = e.enumtypid",
605 .result =
"pg_catalog.quote_literal(enumlabel)",
606 .refname =
"t.typname",
607 .refviscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
608 .refnamespace =
"t.typnamespace",
611static const SchemaQuery Query_for_list_of_enum_values_unquoted = {
612 .catname =
"pg_catalog.pg_enum e, pg_catalog.pg_type t",
613 .selcondition =
"t.oid = e.enumtypid",
614 .result =
"e.enumlabel",
615 .refname =
"t.typname",
616 .refviscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
617 .refnamespace =
"t.typnamespace",
621static const SchemaQuery Query_for_list_of_functions[] = {
623 .min_server_version = 110000,
624 .catname =
"pg_catalog.pg_proc p",
625 .selcondition =
"p.prokind != 'p'",
626 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
627 .namespace =
"p.pronamespace",
628 .result =
"p.proname",
631 .catname =
"pg_catalog.pg_proc p",
632 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
633 .namespace =
"p.pronamespace",
634 .result =
"p.proname",
638static const SchemaQuery Query_for_list_of_procedures[] = {
640 .min_server_version = 110000,
641 .catname =
"pg_catalog.pg_proc p",
642 .selcondition =
"p.prokind = 'p'",
643 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
644 .namespace =
"p.pronamespace",
645 .result =
"p.proname",
653static const SchemaQuery Query_for_list_of_routines = {
654 .catname =
"pg_catalog.pg_proc p",
655 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
656 .namespace =
"p.pronamespace",
657 .result =
"p.proname",
660static const SchemaQuery Query_for_list_of_sequences = {
661 .catname =
"pg_catalog.pg_class c",
662 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_SEQUENCE)
")",
663 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
664 .namespace =
"c.relnamespace",
665 .result =
"c.relname",
668static const SchemaQuery Query_for_list_of_foreign_tables = {
669 .catname =
"pg_catalog.pg_class c",
670 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_FOREIGN_TABLE)
")",
671 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
672 .namespace =
"c.relnamespace",
673 .result =
"c.relname",
676static const SchemaQuery Query_for_list_of_tables = {
677 .catname =
"pg_catalog.pg_class c",
681 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
682 .namespace =
"c.relnamespace",
683 .result =
"c.relname",
686static const SchemaQuery Query_for_list_of_partitioned_tables = {
687 .catname =
"pg_catalog.pg_class c",
688 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_PARTITIONED_TABLE)
")",
689 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
690 .namespace =
"c.relnamespace",
691 .result =
"c.relname",
694static const SchemaQuery Query_for_list_of_tables_for_constraint = {
695 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_constraint con",
696 .selcondition =
"c.oid=con.conrelid and c.relkind IN ("
699 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
700 .namespace =
"c.relnamespace",
701 .result =
"c.relname",
702 .use_distinct =
true,
703 .refname =
"con.conname",
706static const SchemaQuery Query_for_list_of_tables_for_policy = {
707 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_policy p",
708 .selcondition =
"c.oid=p.polrelid",
709 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
710 .namespace =
"c.relnamespace",
711 .result =
"c.relname",
712 .use_distinct =
true,
713 .refname =
"p.polname",
716static const SchemaQuery Query_for_list_of_tables_for_rule = {
717 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_rewrite r",
718 .selcondition =
"c.oid=r.ev_class",
719 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
720 .namespace =
"c.relnamespace",
721 .result =
"c.relname",
722 .use_distinct =
true,
723 .refname =
"r.rulename",
726static const SchemaQuery Query_for_list_of_tables_for_trigger = {
727 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_trigger t",
728 .selcondition =
"c.oid=t.tgrelid",
729 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
730 .namespace =
"c.relnamespace",
731 .result =
"c.relname",
732 .use_distinct =
true,
733 .refname =
"t.tgname",
736static const SchemaQuery Query_for_list_of_ts_configurations = {
737 .catname =
"pg_catalog.pg_ts_config c",
738 .viscondition =
"pg_catalog.pg_ts_config_is_visible(c.oid)",
739 .namespace =
"c.cfgnamespace",
740 .result =
"c.cfgname",
743static const SchemaQuery Query_for_list_of_ts_dictionaries = {
744 .catname =
"pg_catalog.pg_ts_dict d",
745 .viscondition =
"pg_catalog.pg_ts_dict_is_visible(d.oid)",
746 .namespace =
"d.dictnamespace",
747 .result =
"d.dictname",
750static const SchemaQuery Query_for_list_of_ts_parsers = {
751 .catname =
"pg_catalog.pg_ts_parser p",
752 .viscondition =
"pg_catalog.pg_ts_parser_is_visible(p.oid)",
753 .namespace =
"p.prsnamespace",
754 .result =
"p.prsname",
757static const SchemaQuery Query_for_list_of_ts_templates = {
758 .catname =
"pg_catalog.pg_ts_template t",
759 .viscondition =
"pg_catalog.pg_ts_template_is_visible(t.oid)",
760 .namespace =
"t.tmplnamespace",
761 .result =
"t.tmplname",
764static const SchemaQuery Query_for_list_of_views = {
765 .catname =
"pg_catalog.pg_class c",
766 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_VIEW)
")",
767 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
768 .namespace =
"c.relnamespace",
769 .result =
"c.relname",
772static const SchemaQuery Query_for_list_of_matviews = {
773 .catname =
"pg_catalog.pg_class c",
774 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_MATVIEW)
")",
775 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
776 .namespace =
"c.relnamespace",
777 .result =
"c.relname",
780static const SchemaQuery Query_for_list_of_indexes = {
781 .catname =
"pg_catalog.pg_class c",
785 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
786 .namespace =
"c.relnamespace",
787 .result =
"c.relname",
790static const SchemaQuery Query_for_list_of_partitioned_indexes = {
791 .catname =
"pg_catalog.pg_class c",
792 .selcondition =
"c.relkind = " CppAsString2(RELKIND_PARTITIONED_INDEX),
793 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
794 .namespace =
"c.relnamespace",
795 .result =
"c.relname",
800static const SchemaQuery Query_for_list_of_relations = {
801 .catname =
"pg_catalog.pg_class c",
802 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
803 .namespace =
"c.relnamespace",
804 .result =
"c.relname",
808static const SchemaQuery Query_for_list_of_partitioned_relations = {
809 .catname =
"pg_catalog.pg_class c",
810 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_PARTITIONED_TABLE)
812 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
813 .namespace =
"c.relnamespace",
814 .result =
"c.relname",
817static const SchemaQuery Query_for_list_of_operator_families = {
818 .catname =
"pg_catalog.pg_opfamily c",
819 .viscondition =
"pg_catalog.pg_opfamily_is_visible(c.oid)",
820 .namespace =
"c.opfnamespace",
821 .result =
"c.opfname",
825static const SchemaQuery Query_for_list_of_updatables = {
826 .catname =
"pg_catalog.pg_class c",
832 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
833 .namespace =
"c.relnamespace",
834 .result =
"c.relname",
838static const SchemaQuery Query_for_list_of_mergetargets = {
839 .catname =
"pg_catalog.pg_class c",
844 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
845 .namespace =
"c.relnamespace",
846 .result =
"c.relname",
850static const SchemaQuery Query_for_list_of_selectables = {
851 .catname =
"pg_catalog.pg_class c",
859 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
860 .namespace =
"c.relnamespace",
861 .result =
"c.relname",
865static const SchemaQuery Query_for_list_of_truncatables = {
866 .catname =
"pg_catalog.pg_class c",
871 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
872 .namespace =
"c.relnamespace",
873 .result =
"c.relname",
877#define Query_for_list_of_grantables Query_for_list_of_selectables
880static const SchemaQuery Query_for_list_of_analyzables = {
881 .catname =
"pg_catalog.pg_class c",
887 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
888 .namespace =
"c.relnamespace",
889 .result =
"c.relname",
893static const SchemaQuery Query_for_list_of_indexables = {
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",
908#define Query_for_list_of_vacuumables Query_for_list_of_indexables
911static const SchemaQuery Query_for_list_of_clusterables = {
912 .catname =
"pg_catalog.pg_class c",
917 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
918 .namespace =
"c.relnamespace",
919 .result =
"c.relname",
922static const SchemaQuery Query_for_list_of_constraints_with_schema = {
923 .catname =
"pg_catalog.pg_constraint c",
924 .selcondition =
"c.conrelid <> 0",
925 .namespace =
"c.connamespace",
926 .result =
"c.conname",
929static const SchemaQuery Query_for_list_of_statistics = {
930 .catname =
"pg_catalog.pg_statistic_ext s",
931 .viscondition =
"pg_catalog.pg_statistics_obj_is_visible(s.oid)",
932 .namespace =
"s.stxnamespace",
933 .result =
"s.stxname",
936static const SchemaQuery Query_for_list_of_collations = {
937 .catname =
"pg_catalog.pg_collation c",
938 .selcondition =
"c.collencoding IN (-1, pg_catalog.pg_char_to_encoding(pg_catalog.getdatabaseencoding()))",
939 .viscondition =
"pg_catalog.pg_collation_is_visible(c.oid)",
940 .namespace =
"c.collnamespace",
941 .result =
"c.collname",
944static const SchemaQuery Query_for_partition_of_table = {
945 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_inherits i",
946 .selcondition =
"c1.oid=i.inhparent and i.inhrelid=c2.oid and c2.relispartition",
947 .viscondition =
"pg_catalog.pg_table_is_visible(c2.oid)",
948 .namespace =
"c2.relnamespace",
949 .result =
"c2.relname",
950 .refname =
"c1.relname",
951 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
952 .refnamespace =
"c1.relnamespace",
955static const SchemaQuery Query_for_rule_of_table = {
956 .catname =
"pg_catalog.pg_rewrite r, pg_catalog.pg_class c1",
957 .selcondition =
"r.ev_class=c1.oid",
958 .result =
"r.rulename",
959 .refname =
"c1.relname",
960 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
961 .refnamespace =
"c1.relnamespace",
964static const SchemaQuery Query_for_trigger_of_table = {
965 .catname =
"pg_catalog.pg_trigger t, pg_catalog.pg_class c1",
966 .selcondition =
"t.tgrelid=c1.oid and not t.tgisinternal",
967 .result =
"t.tgname",
968 .refname =
"c1.relname",
969 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
970 .refnamespace =
"c1.relnamespace",
993#define Query_for_list_of_template_databases \
995" FROM pg_catalog.pg_database d "\
996" WHERE d.datname LIKE '%s' "\
997" AND (d.datistemplate OR pg_catalog.pg_has_role(d.datdba, 'USAGE'))"
999#define Query_for_list_of_databases \
1000"SELECT datname FROM pg_catalog.pg_database "\
1001" WHERE datname LIKE '%s'"
1003#define Query_for_list_of_database_vars \
1004"SELECT conf FROM ("\
1005" SELECT setdatabase, pg_catalog.split_part(unnest(setconfig),'=',1) conf"\
1006" FROM pg_db_role_setting "\
1007" ) s, pg_database d "\
1008" WHERE s.setdatabase = d.oid "\
1009" AND conf LIKE '%s'"\
1010" AND d.datname LIKE '%s'"
1012#define Query_for_list_of_tablespaces \
1013"SELECT spcname FROM pg_catalog.pg_tablespace "\
1014" WHERE spcname LIKE '%s'"
1016#define Query_for_list_of_encodings \
1017" SELECT DISTINCT pg_catalog.pg_encoding_to_char(conforencoding) "\
1018" FROM pg_catalog.pg_conversion "\
1019" WHERE pg_catalog.pg_encoding_to_char(conforencoding) LIKE pg_catalog.upper('%s')"
1021#define Query_for_list_of_languages \
1023" FROM pg_catalog.pg_language "\
1024" WHERE lanname != 'internal' "\
1025" AND lanname LIKE '%s'"
1027#define Query_for_list_of_schemas \
1028"SELECT nspname FROM pg_catalog.pg_namespace "\
1029" WHERE nspname LIKE '%s'"
1032#define Query_for_list_of_alter_system_set_vars \
1033"SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1034" WHERE context != 'internal' "\
1035" AND pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1037#define Query_for_list_of_set_vars \
1038"SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1039" WHERE context IN ('user', 'superuser') "\
1040" AND pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1042#define Query_for_list_of_show_vars \
1043"SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1044" WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1046#define Query_for_list_of_roles \
1048" FROM pg_catalog.pg_roles "\
1049" WHERE rolname LIKE '%s'"
1052#define Keywords_for_list_of_owner_roles \
1053"CURRENT_ROLE", "CURRENT_USER", "SESSION_USER"
1056#define Keywords_for_list_of_grant_roles \
1057Keywords_for_list_of_owner_roles, "PUBLIC"
1059#define Query_for_all_table_constraints \
1061" FROM pg_catalog.pg_constraint c "\
1062" WHERE c.conrelid <> 0 "\
1063" and conname LIKE '%s'"
1065#define Query_for_list_of_fdws \
1067" FROM pg_catalog.pg_foreign_data_wrapper "\
1068" WHERE fdwname LIKE '%s'"
1070#define Query_for_list_of_servers \
1072" FROM pg_catalog.pg_foreign_server "\
1073" WHERE srvname LIKE '%s'"
1075#define Query_for_list_of_user_mappings \
1077" FROM pg_catalog.pg_user_mappings "\
1078" WHERE usename LIKE '%s'"
1080#define Query_for_list_of_user_vars \
1081" SELECT pg_catalog.split_part(pg_catalog.unnest(rolconfig),'=',1) "\
1082" FROM pg_catalog.pg_roles "\
1083" WHERE rolname LIKE '%s'"
1085#define Query_for_list_of_access_methods \
1087" FROM pg_catalog.pg_am "\
1088" WHERE amname LIKE '%s'"
1090#define Query_for_list_of_index_access_methods \
1092" FROM pg_catalog.pg_am "\
1093" WHERE amname LIKE '%s' AND "\
1094" amtype=" CppAsString2(AMTYPE_INDEX)
1096#define Query_for_list_of_table_access_methods \
1098" FROM pg_catalog.pg_am "\
1099" WHERE amname LIKE '%s' AND "\
1100" amtype=" CppAsString2(AMTYPE_TABLE)
1102#define Query_for_list_of_extensions \
1104" FROM pg_catalog.pg_extension "\
1105" WHERE extname LIKE '%s'"
1107#define Query_for_list_of_available_extensions \
1109" FROM pg_catalog.pg_available_extensions "\
1110" WHERE name LIKE '%s' AND installed_version IS NULL"
1112#define Query_for_list_of_available_extension_versions \
1114" FROM pg_catalog.pg_available_extension_versions "\
1115" WHERE version LIKE '%s' AND name='%s'"
1117#define Query_for_list_of_prepared_statements \
1119" FROM pg_catalog.pg_prepared_statements "\
1120" WHERE name LIKE '%s'"
1122#define Query_for_list_of_event_triggers \
1124" FROM pg_catalog.pg_event_trigger "\
1125" WHERE evtname LIKE '%s'"
1127#define Query_for_list_of_tablesample_methods \
1129" FROM pg_catalog.pg_proc "\
1130" WHERE prorettype = 'pg_catalog.tsm_handler'::pg_catalog.regtype AND "\
1131" proargtypes[0] = 'pg_catalog.internal'::pg_catalog.regtype AND "\
1134#define Query_for_list_of_policies \
1136" FROM pg_catalog.pg_policy "\
1137" WHERE polname LIKE '%s'"
1139#define Query_for_values_of_enum_GUC \
1140" SELECT val FROM ( "\
1141" SELECT name, pg_catalog.unnest(enumvals) AS val "\
1142" FROM pg_catalog.pg_settings "\
1144" WHERE val LIKE '%s'"\
1145" and pg_catalog.lower(name)=pg_catalog.lower('%s')"
1147#define Query_for_list_of_channels \
1149" FROM pg_catalog.pg_listening_channels() AS channel "\
1150" WHERE channel LIKE '%s'"
1152#define Query_for_list_of_cursors \
1154" FROM pg_catalog.pg_cursors "\
1155" WHERE name LIKE '%s'"
1157#define Query_for_list_of_timezone_names_unquoted \
1159" FROM pg_catalog.pg_timezone_names() "\
1160" WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1162#define Query_for_list_of_timezone_names_quoted_out \
1163"SELECT pg_catalog.quote_literal(name) AS name "\
1164" FROM pg_catalog.pg_timezone_names() "\
1165" WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1167#define Query_for_list_of_timezone_names_quoted_in \
1168"SELECT pg_catalog.quote_literal(name) AS name "\
1169" FROM pg_catalog.pg_timezone_names() "\
1170" WHERE pg_catalog.quote_literal(pg_catalog.lower(name)) LIKE pg_catalog.lower('%s')"
1173#define Privilege_options_of_grant_and_revoke \
1174"SELECT", "INSERT", "UPDATE", "DELETE", "TRUNCATE", "REFERENCES", "TRIGGER", \
1175"CREATE", "CONNECT", "TEMPORARY", "EXECUTE", "USAGE", "SET", "ALTER SYSTEM", \
1179#define Alter_procedure_options \
1180"DEPENDS ON EXTENSION", "EXTERNAL SECURITY", "NO DEPENDS ON EXTENSION", \
1181"OWNER TO", "RENAME TO", "RESET", "SECURITY", "SET"
1184#define Alter_routine_options \
1185Alter_procedure_options, "COST", "IMMUTABLE", "LEAKPROOF", "NOT LEAKPROOF", \
1186"PARALLEL", "ROWS", "STABLE", "VOLATILE"
1189#define Alter_function_options \
1190Alter_routine_options, "CALLED ON NULL INPUT", "RETURNS NULL ON NULL INPUT", \
1199static const VersionedQuery Query_for_list_of_publications[] = {
1202 " FROM pg_catalog.pg_publication "
1203 " WHERE pubname LIKE '%s'"
1208static const VersionedQuery Query_for_list_of_subscriptions[] = {
1210 " SELECT s.subname "
1211 " FROM pg_catalog.pg_subscription s, pg_catalog.pg_database d "
1212 " WHERE s.subname LIKE '%s' "
1213 " AND d.datname = pg_catalog.current_database() "
1214 " AND s.subdbid = d.oid"
1220static const char *
const sql_commands[] = {
1221 "ABORT",
"ALTER",
"ANALYZE",
"BEGIN",
"CALL",
"CHECKPOINT",
"CLOSE",
"CLUSTER",
1222 "COMMENT",
"COMMIT",
"COPY",
"CREATE",
"DEALLOCATE",
"DECLARE",
1223 "DELETE FROM",
"DISCARD",
"DO",
"DROP",
"END",
"EXECUTE",
"EXPLAIN",
1224 "FETCH",
"GRANT",
"IMPORT FOREIGN SCHEMA",
"INSERT INTO",
"LISTEN",
"LOAD",
"LOCK",
1225 "MERGE INTO",
"MOVE",
"NOTIFY",
"PREPARE",
1226 "REASSIGN",
"REFRESH MATERIALIZED VIEW",
"REINDEX",
"RELEASE",
1227 "RESET",
"REVOKE",
"ROLLBACK",
1228 "SAVEPOINT",
"SECURITY LABEL",
"SELECT",
"SET",
"SHOW",
"START",
1229 "TABLE",
"TRUNCATE",
"UNLISTEN",
"UPDATE",
"VACUUM",
"VALUES",
"WITH",
1243 const VersionedQuery *vquery;
1244 const SchemaQuery *squery;
1249#define THING_NO_CREATE (1 << 0)
1250#define THING_NO_DROP (1 << 1)
1251#define THING_NO_ALTER (1 << 2)
1252#define THING_NO_SHOW (THING_NO_CREATE | THING_NO_DROP | THING_NO_ALTER)
1255static const char *
const Keywords_for_user_thing[] = {
1260static const pgsql_thing_t words_after_create[] = {
1261 {
"ACCESS METHOD", NULL, NULL, NULL, NULL, THING_NO_ALTER},
1262 {
"AGGREGATE", NULL, NULL, Query_for_list_of_aggregates},
1263 {
"CAST", NULL, NULL, NULL},
1265 {
"COLLATION", NULL, NULL, &Query_for_list_of_collations},
1271 {
"CONFIGURATION", NULL, NULL, &Query_for_list_of_ts_configurations, NULL, THING_NO_SHOW},
1272 {
"CONVERSION",
"SELECT conname FROM pg_catalog.pg_conversion WHERE conname LIKE '%s'"},
1273 {
"DATABASE", Query_for_list_of_databases},
1274 {
"DEFAULT PRIVILEGES", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1275 {
"DICTIONARY", NULL, NULL, &Query_for_list_of_ts_dictionaries, NULL, THING_NO_SHOW},
1276 {
"DOMAIN", NULL, NULL, &Query_for_list_of_domains},
1277 {
"EVENT TRIGGER", NULL, NULL, NULL},
1278 {
"EXTENSION", Query_for_list_of_extensions},
1279 {
"FOREIGN DATA WRAPPER", NULL, NULL, NULL},
1280 {
"FOREIGN TABLE", NULL, NULL, NULL},
1281 {
"FUNCTION", NULL, NULL, Query_for_list_of_functions},
1282 {
"GROUP", Query_for_list_of_roles},
1283 {
"INDEX", NULL, NULL, &Query_for_list_of_indexes},
1284 {
"LANGUAGE", Query_for_list_of_languages},
1285 {
"LARGE OBJECT", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1286 {
"MATERIALIZED VIEW", NULL, NULL, &Query_for_list_of_matviews},
1287 {
"OPERATOR", NULL, NULL, NULL},
1289 {
"OR REPLACE", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1290 {
"OWNED", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_ALTER},
1291 {
"PARSER", NULL, NULL, &Query_for_list_of_ts_parsers, NULL, THING_NO_SHOW},
1292 {
"POLICY", NULL, NULL, NULL},
1293 {
"PROCEDURE", NULL, NULL, Query_for_list_of_procedures},
1294 {
"PUBLICATION", NULL, Query_for_list_of_publications},
1295 {
"ROLE", Query_for_list_of_roles},
1296 {
"ROUTINE", NULL, NULL, &Query_for_list_of_routines, NULL, THING_NO_CREATE},
1297 {
"RULE",
"SELECT rulename FROM pg_catalog.pg_rules WHERE rulename LIKE '%s'"},
1298 {
"SCHEMA", Query_for_list_of_schemas},
1299 {
"SEQUENCE", NULL, NULL, &Query_for_list_of_sequences},
1300 {
"SERVER", Query_for_list_of_servers},
1301 {
"STATISTICS", NULL, NULL, &Query_for_list_of_statistics},
1302 {
"SUBSCRIPTION", NULL, Query_for_list_of_subscriptions},
1303 {
"SYSTEM", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1304 {
"TABLE", NULL, NULL, &Query_for_list_of_tables},
1305 {
"TABLESPACE", Query_for_list_of_tablespaces},
1306 {
"TEMP", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1308 {
"TEMPLATE", NULL, NULL, &Query_for_list_of_ts_templates, NULL, THING_NO_SHOW},
1309 {
"TEMPORARY", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1311 {
"TEXT SEARCH", NULL, NULL, NULL},
1312 {
"TRANSFORM", NULL, NULL, NULL, NULL, THING_NO_ALTER},
1313 {
"TRIGGER",
"SELECT tgname FROM pg_catalog.pg_trigger WHERE tgname LIKE '%s' AND NOT tgisinternal"},
1314 {
"TYPE", NULL, NULL, &Query_for_list_of_datatypes},
1315 {
"UNIQUE", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1317 {
"UNLOGGED", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1319 {
"USER", Query_for_list_of_roles, NULL, NULL, Keywords_for_user_thing},
1320 {
"USER MAPPING FOR", NULL, NULL, NULL},
1321 {
"VIEW", NULL, NULL, &Query_for_list_of_views},
1343#define MatchAny NULL
1344#define MatchAnyExcept(pattern) ("!" pattern)
1351 enum TCPatternKind kind;
1353 const char *
const *words;
1357#define TCPAT(id, kind, ...) \
1358 { (id), (kind), VA_ARGS_NARGS(__VA_ARGS__), \
1359 (const char * const []) { __VA_ARGS__ } }
1361#ifdef SWITCH_CONVERSION_APPLIED
1363static const TCPattern tcpatterns[] =
1371static const char *
const table_storage_parameters[] = {
1372 "autovacuum_analyze_scale_factor",
1373 "autovacuum_analyze_threshold",
1374 "autovacuum_enabled",
1375 "autovacuum_freeze_max_age",
1376 "autovacuum_freeze_min_age",
1377 "autovacuum_freeze_table_age",
1378 "autovacuum_multixact_freeze_max_age",
1379 "autovacuum_multixact_freeze_min_age",
1380 "autovacuum_multixact_freeze_table_age",
1381 "autovacuum_vacuum_cost_delay",
1382 "autovacuum_vacuum_cost_limit",
1383 "autovacuum_vacuum_insert_scale_factor",
1384 "autovacuum_vacuum_insert_threshold",
1385 "autovacuum_vacuum_max_threshold",
1386 "autovacuum_vacuum_scale_factor",
1387 "autovacuum_vacuum_threshold",
1389 "log_autovacuum_min_duration",
1391 "toast.autovacuum_enabled",
1392 "toast.autovacuum_freeze_max_age",
1393 "toast.autovacuum_freeze_min_age",
1394 "toast.autovacuum_freeze_table_age",
1395 "toast.autovacuum_multixact_freeze_max_age",
1396 "toast.autovacuum_multixact_freeze_min_age",
1397 "toast.autovacuum_multixact_freeze_table_age",
1398 "toast.autovacuum_vacuum_cost_delay",
1399 "toast.autovacuum_vacuum_cost_limit",
1400 "toast.autovacuum_vacuum_insert_scale_factor",
1401 "toast.autovacuum_vacuum_insert_threshold",
1402 "toast.autovacuum_vacuum_max_threshold",
1403 "toast.autovacuum_vacuum_scale_factor",
1404 "toast.autovacuum_vacuum_threshold",
1405 "toast.log_autovacuum_min_duration",
1406 "toast.vacuum_index_cleanup",
1407 "toast.vacuum_max_eager_freeze_failure_rate",
1408 "toast.vacuum_truncate",
1409 "toast_tuple_target",
1410 "user_catalog_table",
1411 "vacuum_index_cleanup",
1412 "vacuum_max_eager_freeze_failure_rate",
1418static const char *
const view_optional_parameters[] = {
1426static char **psql_completion(
const char *
text,
int start,
int end);
1427static char **match_previous_words(
int pattern_id,
1429 char **previous_words,
1430 int previous_words_count);
1431static char *create_command_generator(
const char *
text,
int state);
1432static char *drop_command_generator(
const char *
text,
int state);
1433static char *alter_command_generator(
const char *
text,
int state);
1434static char *complete_from_query(
const char *
text,
int state);
1435static char *complete_from_versioned_query(
const char *
text,
int state);
1436static char *complete_from_schema_query(
const char *
text,
int state);
1437static char *complete_from_versioned_schema_query(
const char *
text,
int state);
1438static char *_complete_from_query(
const char *simple_query,
1439 const SchemaQuery *schema_query,
1443static void set_completion_reference(
const char *
word);
1444static void set_completion_reference_verbatim(
const char *
word);
1445static char *complete_from_list(
const char *
text,
int state);
1446static char *complete_from_const(
const char *
text,
int state);
1447static void append_variable_names(
char ***varnames,
int *nvars,
1448 int *maxvars,
const char *varname,
1449 const char *prefix,
const char *suffix);
1450static char **complete_from_variables(
const char *
text,
1451 const char *prefix,
const char *suffix,
bool need_value);
1452static char *complete_from_files(
const char *
text,
int state);
1454static char *pg_strdup_keyword_case(
const char *s,
const char *ref);
1456static char *make_like_pattern(
const char *
word);
1457static void parse_identifier(
const char *
ident,
1458 char **schemaname,
char **objectname,
1459 bool *schemaquoted,
bool *objectquoted);
1460static char *requote_identifier(
const char *schemaname,
const char *objectname,
1461 bool quote_schema,
bool quote_object);
1462static bool identifier_needs_quotes(
const char *
ident);
1463static PGresult *exec_query(
const char *query);
1465static char **get_previous_words(
int point,
char **buffer,
int *nwords);
1467static char *get_guctype(
const char *varname);
1469#ifdef USE_FILENAME_QUOTING_FUNCTIONS
1470static char *quote_file_name(
char *fname,
int match_type,
char *quote_pointer);
1471static char *dequote_file_name(
char *fname,
int quote_char);
1482 rl_attempted_completion_function = psql_completion;
1484#ifdef USE_FILENAME_QUOTING_FUNCTIONS
1485 rl_filename_quoting_function = quote_file_name;
1486 rl_filename_dequoting_function = dequote_file_name;
1489 rl_basic_word_break_characters = WORD_BREAKS;
1498 rl_completer_quote_characters =
"'";
1506#ifdef HAVE_RL_FILENAME_QUOTE_CHARACTERS
1508 unsigned char *fqc = (
unsigned char *)
pg_malloc(256);
1510 for (
int i = 0;
i < 255;
i++)
1511 fqc[
i] = (
unsigned char) (
i + 1);
1513 rl_filename_quote_characters = (
const char *) fqc;
1517 completion_max_records = 1000;
1541word_matches(
const char *pattern,
1543 bool case_sensitive)
1547#define cimatch(s1, s2, n) \
1548 (case_sensitive ? strncmp(s1, s2, n) == 0 : pg_strncasecmp(s1, s2, n) == 0)
1551 if (pattern == NULL)
1555 if (*pattern ==
'!')
1556 return !word_matches(pattern + 1,
word, case_sensitive);
1559 wordlen = strlen(
word);
1562 const char *star = NULL;
1567 while (*
c !=
'\0' && *
c !=
'|')
1577 size_t beforelen = star - pattern,
1578 afterlen =
c - star - 1;
1580 if (wordlen >= (beforelen + afterlen) &&
1581 cimatch(
word, pattern, beforelen) &&
1582 cimatch(
word + wordlen - afterlen, star + 1, afterlen))
1588 if (wordlen == (
c - pattern) &&
1589 cimatch(
word, pattern, wordlen))
1610TailMatchesArray(
bool case_sensitive,
1611 int previous_words_count,
char **previous_words,
1612 int narg,
const char *
const *
args)
1614 if (previous_words_count < narg)
1617 for (
int argno = 0; argno < narg; argno++)
1619 const char *
arg =
args[argno];
1621 if (!word_matches(
arg, previous_words[narg - argno - 1],
1633TailMatchesImpl(
bool case_sensitive,
1634 int previous_words_count,
char **previous_words,
1637 const char *argarray[64];
1642 if (previous_words_count < narg)
1646 for (
int argno = 0; argno < narg; argno++)
1647 argarray[argno] = va_arg(
args,
const char *);
1650 return TailMatchesArray(case_sensitive,
1651 previous_words_count, previous_words,
1660HeadMatchesArray(
bool case_sensitive,
1661 int previous_words_count,
char **previous_words,
1662 int narg,
const char *
const *
args)
1664 if (previous_words_count < narg)
1667 for (
int argno = 0; argno < narg; argno++)
1669 const char *
arg =
args[argno];
1671 if (!word_matches(
arg, previous_words[previous_words_count - argno - 1],
1683HeadMatchesImpl(
bool case_sensitive,
1684 int previous_words_count,
char **previous_words,
1687 const char *argarray[64];
1692 if (previous_words_count < narg)
1696 for (
int argno = 0; argno < narg; argno++)
1697 argarray[argno] = va_arg(
args,
const char *);
1700 return HeadMatchesArray(case_sensitive,
1701 previous_words_count, previous_words,
1713MatchesArray(
bool case_sensitive,
1714 int previous_words_count,
char **previous_words,
1715 int narg,
const char *
const *
args)
1717 int match_any_pos = -1;
1720 if (previous_words_count < narg - 1)
1724 for (
int argno = 0; argno < narg; argno++)
1726 const char *
arg =
args[argno];
1728 if (
arg != NULL &&
arg[0] ==
'\0')
1730 match_any_pos = argno;
1735 if (match_any_pos < 0)
1738 if (previous_words_count != narg)
1742 if (!HeadMatchesArray(case_sensitive,
1743 previous_words_count, previous_words,
1750 if (!HeadMatchesArray(case_sensitive,
1751 previous_words_count, previous_words,
1752 match_any_pos,
args))
1756 if (!TailMatchesArray(case_sensitive,
1757 previous_words_count, previous_words,
1758 narg - match_any_pos - 1,
1759 args + match_any_pos + 1))
1770MatchesImpl(
bool case_sensitive,
1771 int previous_words_count,
char **previous_words,
1774 const char *argarray[64];
1780 if (previous_words_count < narg - 1)
1784 for (
int argno = 0; argno < narg; argno++)
1785 argarray[argno] = va_arg(
args,
const char *);
1788 return MatchesArray(case_sensitive,
1789 previous_words_count, previous_words,
1797ends_with(
const char *s,
char c)
1799 size_t length = strlen(s);
1801 return (length > 0 && s[length - 1] ==
c);
1813psql_completion(
const char *
text,
int start,
int end)
1816 char **matches = NULL;
1822 char **previous_words;
1825 int previous_words_count;
1834#define prev_wd (previous_words[0])
1835#define prev2_wd (previous_words[1])
1836#define prev3_wd (previous_words[2])
1837#define prev4_wd (previous_words[3])
1838#define prev5_wd (previous_words[4])
1839#define prev6_wd (previous_words[5])
1840#define prev7_wd (previous_words[6])
1841#define prev8_wd (previous_words[7])
1842#define prev9_wd (previous_words[8])
1845#define TailMatches(...) \
1846 TailMatchesImpl(false, previous_words_count, previous_words, \
1847 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1850#define TailMatchesCS(...) \
1851 TailMatchesImpl(true, previous_words_count, previous_words, \
1852 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1855#define Matches(...) \
1856 MatchesImpl(false, previous_words_count, previous_words, \
1857 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1860#define MatchesCS(...) \
1861 MatchesImpl(true, previous_words_count, previous_words, \
1862 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1865#define HeadMatches(...) \
1866 HeadMatchesImpl(false, previous_words_count, previous_words, \
1867 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1870#define HeadMatchesCS(...) \
1871 HeadMatchesImpl(true, previous_words_count, previous_words, \
1872 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1875 static const char *
const backslash_commands[] = {
1877 "\\bind",
"\\bind_named",
1878 "\\connect",
"\\conninfo",
"\\C",
"\\cd",
"\\close",
"\\copy",
1879 "\\copyright",
"\\crosstabview",
1880 "\\d",
"\\da",
"\\dA",
"\\dAc",
"\\dAf",
"\\dAo",
"\\dAp",
1881 "\\db",
"\\dc",
"\\dconfig",
"\\dC",
"\\dd",
"\\ddp",
"\\dD",
1882 "\\des",
"\\det",
"\\deu",
"\\dew",
"\\dE",
"\\df",
1883 "\\dF",
"\\dFd",
"\\dFp",
"\\dFt",
"\\dg",
"\\di",
"\\dl",
"\\dL",
1884 "\\dm",
"\\dn",
"\\do",
"\\dO",
"\\dp",
"\\dP",
"\\dPi",
"\\dPt",
1885 "\\drds",
"\\drg",
"\\dRs",
"\\dRp",
"\\ds",
1886 "\\dt",
"\\dT",
"\\dv",
"\\du",
"\\dx",
"\\dX",
"\\dy",
1887 "\\echo",
"\\edit",
"\\ef",
"\\elif",
"\\else",
"\\encoding",
1888 "\\endif",
"\\errverbose",
"\\ev",
1890 "\\g",
"\\gdesc",
"\\getenv",
"\\gexec",
"\\gset",
"\\gx",
1892 "\\if",
"\\include",
"\\include_relative",
"\\ir",
1893 "\\list",
"\\lo_import",
"\\lo_export",
"\\lo_list",
"\\lo_unlink",
1895 "\\parse",
"\\password",
"\\print",
"\\prompt",
"\\pset",
1896 "\\qecho",
"\\quit",
1898 "\\s",
"\\set",
"\\setenv",
"\\sf",
"\\sv",
1899 "\\t",
"\\T",
"\\timing",
1902 "\\warn",
"\\watch",
"\\write",
1917 completion_last_char = (end >
start) ?
text[end -
start - 1] :
'\0';
1920 rl_completion_append_character =
' ';
1923 completion_charp = NULL;
1924 completion_charpp = NULL;
1925 completion_vquery = NULL;
1926 completion_squery = NULL;
1927 completion_ref_object = NULL;
1928 completion_ref_schema = NULL;
1935 previous_words = get_previous_words(
start,
1937 &previous_words_count);
1940 if (
text[0] ==
'\\')
1941 COMPLETE_WITH_LIST_CS(backslash_commands);
1944 else if (
text[0] ==
':' &&
text[1] !=
':')
1946 if (
text[1] ==
'\'')
1947 matches = complete_from_variables(
text,
":'",
"'",
true);
1948 else if (
text[1] ==
'"')
1949 matches = complete_from_variables(
text,
":\"",
"\"",
true);
1950 else if (
text[1] ==
'{' &&
text[2] ==
'?')
1951 matches = complete_from_variables(
text,
":{?",
"}",
true);
1953 matches = complete_from_variables(
text,
":",
"",
true);
1957 else if (previous_words_count == 0)
1958 COMPLETE_WITH_LIST(sql_commands);
1963#ifdef SWITCH_CONVERSION_APPLIED
1976 for (
int tindx = 0; tindx <
lengthof(tcpatterns); tindx++)
1978 const TCPattern *tcpat = tcpatterns + tindx;
1981 switch (tcpat->kind)
1984 match = MatchesArray(
false,
1985 previous_words_count,
1987 tcpat->nwords, tcpat->words);
1990 match = MatchesArray(
true,
1991 previous_words_count,
1993 tcpat->nwords, tcpat->words);
1996 match = HeadMatchesArray(
false,
1997 previous_words_count,
1999 tcpat->nwords, tcpat->words);
2002 match = HeadMatchesArray(
true,
2003 previous_words_count,
2005 tcpat->nwords, tcpat->words);
2008 match = TailMatchesArray(
false,
2009 previous_words_count,
2011 tcpat->nwords, tcpat->words);
2014 match = TailMatchesArray(
true,
2015 previous_words_count,
2017 tcpat->nwords, tcpat->words);
2022 matches = match_previous_words(tcpat->id,
text,
start, end,
2024 previous_words_count);
2025 if (matches != NULL)
2034 matches = match_previous_words(0,
text,
start, end,
2036 previous_words_count);
2045 if (matches == NULL && previous_words_count > 0)
2047 const pgsql_thing_t *wac;
2049 for (wac = words_after_create; wac->name != NULL; wac++)
2054 COMPLETE_WITH_QUERY_LIST(wac->query,
2056 else if (wac->vquery)
2057 COMPLETE_WITH_VERSIONED_QUERY_LIST(wac->vquery,
2059 else if (wac->squery)
2060 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_LIST(wac->squery,
2072 if (matches == NULL)
2074 COMPLETE_WITH_CONST(
true,
"");
2076 rl_completion_append_character =
'\0';
2077#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
2078 rl_completion_suppress_quote = 1;
2083 free(previous_words);
2086 free(completion_ref_object);
2087 completion_ref_object = NULL;
2088 free(completion_ref_schema);
2089 completion_ref_schema = NULL;
2134match_previous_words(
int pattern_id,
2136 char **previous_words,
int previous_words_count)
2139 char **matches = NULL;
2152 else if (TailMatches(
"CREATE"))
2155 if (HeadMatches(
"CREATE",
"SCHEMA"))
2156 COMPLETE_WITH(
"TABLE",
"VIEW",
"INDEX",
"SEQUENCE",
"TRIGGER",
2158 "UNIQUE",
"UNLOGGED");
2160 matches = rl_completion_matches(
text, create_command_generator);
2163 else if (TailMatches(
"CREATE",
"OR",
"REPLACE"))
2164 COMPLETE_WITH(
"FUNCTION",
"PROCEDURE",
"LANGUAGE",
"RULE",
"VIEW",
2165 "AGGREGATE",
"TRANSFORM",
"TRIGGER");
2169 else if (Matches(
"DROP"))
2170 matches = rl_completion_matches(
text, drop_command_generator);
2175 else if (Matches(
"ALTER",
"TABLE"))
2176 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
2177 "ALL IN TABLESPACE");
2180 else if (Matches(
"ALTER"))
2181 matches = rl_completion_matches(
text, alter_command_generator);
2183 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny))
2184 COMPLETE_WITH(
"SET TABLESPACE",
"OWNED BY");
2186 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny,
"OWNED",
"BY"))
2187 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
2189 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny,
"OWNED",
"BY", MatchAny))
2190 COMPLETE_WITH(
"SET TABLESPACE");
2192 else if (Matches(
"ALTER",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny))
2195 else if (Matches(
"ALTER",
"AGGREGATE", MatchAny, MatchAny))
2197 if (ends_with(prev_wd,
')'))
2198 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
2200 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
2203 else if (Matches(
"ALTER",
"FUNCTION", MatchAny, MatchAny))
2205 if (ends_with(prev_wd,
')'))
2206 COMPLETE_WITH(Alter_function_options);
2208 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
2211 else if (Matches(
"ALTER",
"PROCEDURE", MatchAny, MatchAny))
2213 if (ends_with(prev_wd,
')'))
2214 COMPLETE_WITH(Alter_procedure_options);
2216 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
2219 else if (Matches(
"ALTER",
"ROUTINE", MatchAny, MatchAny))
2221 if (ends_with(prev_wd,
')'))
2222 COMPLETE_WITH(Alter_routine_options);
2224 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
2227 else if (Matches(
"ALTER",
"FUNCTION|ROUTINE", MatchAny, MatchAny,
"PARALLEL"))
2228 COMPLETE_WITH(
"RESTRICTED",
"SAFE",
"UNSAFE");
2230 else if (Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"SECURITY") ||
2231 Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"EXTERNAL",
"SECURITY"))
2232 COMPLETE_WITH(
"DEFINER",
"INVOKER");
2234 else if (Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"RESET"))
2235 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
2238 else if (Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"SET"))
2239 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
2243 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny))
2244 COMPLETE_WITH(
"ADD",
"DROP",
"OWNER TO",
"RENAME TO",
"SET");
2246 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD"))
2247 COMPLETE_WITH(
"TABLES IN SCHEMA",
"TABLE");
2248 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE"))
2249 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2250 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE") &&
2251 ends_with(prev_wd,
','))
2252 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2261 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE"))
2263 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE",
"("))
2264 COMPLETE_WITH_ATTR(prev3_wd);
2265 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE") &&
2266 !TailMatches(
"WHERE",
"(*)"))
2267 COMPLETE_WITH(
",",
"WHERE (");
2268 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE"))
2271 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"DROP"))
2272 COMPLETE_WITH(
"TABLES IN SCHEMA",
"TABLE");
2274 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"SET"))
2275 COMPLETE_WITH(
"(",
"TABLES IN SCHEMA",
"TABLE");
2276 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|DROP|SET",
"TABLES",
"IN",
"SCHEMA"))
2277 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
2278 " AND nspname NOT LIKE E'pg\\\\_%%'",
2281 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny, MatchAnyN,
"SET",
"("))
2282 COMPLETE_WITH(
"publish",
"publish_generated_columns",
"publish_via_partition_root");
2284 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny))
2285 COMPLETE_WITH(
"CONNECTION",
"ENABLE",
"DISABLE",
"OWNER TO",
2286 "RENAME TO",
"REFRESH PUBLICATION",
"SET",
"SKIP (",
2287 "ADD PUBLICATION",
"DROP PUBLICATION");
2289 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"REFRESH",
"PUBLICATION"))
2290 COMPLETE_WITH(
"WITH (");
2292 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"REFRESH",
"PUBLICATION",
"WITH",
"("))
2293 COMPLETE_WITH(
"copy_data");
2295 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny,
"SET"))
2296 COMPLETE_WITH(
"(",
"PUBLICATION");
2298 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"SET",
"("))
2299 COMPLETE_WITH(
"binary",
"disable_on_error",
"failover",
"origin",
2300 "password_required",
"run_as_owner",
"slot_name",
2301 "streaming",
"synchronous_commit",
"two_phase");
2303 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"SKIP",
"("))
2304 COMPLETE_WITH(
"lsn");
2306 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"SET",
"PUBLICATION"))
2311 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
2312 "ADD|DROP|SET",
"PUBLICATION", MatchAny))
2313 COMPLETE_WITH(
"WITH (");
2315 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
2316 "ADD|DROP|SET",
"PUBLICATION", MatchAny,
"WITH",
"("))
2317 COMPLETE_WITH(
"copy_data",
"refresh");
2320 else if (Matches(
"ALTER",
"SCHEMA", MatchAny))
2321 COMPLETE_WITH(
"OWNER TO",
"RENAME TO");
2324 else if (Matches(
"ALTER",
"COLLATION", MatchAny))
2325 COMPLETE_WITH(
"OWNER TO",
"REFRESH VERSION",
"RENAME TO",
"SET SCHEMA");
2328 else if (Matches(
"ALTER",
"CONVERSION", MatchAny))
2329 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
2332 else if (Matches(
"ALTER",
"DATABASE", MatchAny))
2333 COMPLETE_WITH(
"RESET",
"SET",
"OWNER TO",
"REFRESH COLLATION VERSION",
"RENAME TO",
2334 "IS_TEMPLATE",
"ALLOW_CONNECTIONS",
2335 "CONNECTION LIMIT");
2338 else if (Matches(
"ALTER",
"DATABASE", MatchAny,
"RESET"))
2340 set_completion_reference(prev2_wd);
2341 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_database_vars,
"ALL");
2345 else if (Matches(
"ALTER",
"DATABASE", MatchAny,
"SET",
"TABLESPACE"))
2346 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
2349 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER"))
2350 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
2353 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER", MatchAny))
2354 COMPLETE_WITH(
"DISABLE",
"ENABLE",
"OWNER TO",
"RENAME TO");
2357 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER", MatchAny,
"ENABLE"))
2358 COMPLETE_WITH(
"REPLICA",
"ALWAYS");
2361 else if (Matches(
"ALTER",
"EXTENSION", MatchAny))
2362 COMPLETE_WITH(
"ADD",
"DROP",
"UPDATE",
"SET SCHEMA");
2365 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP"))
2366 COMPLETE_WITH(
"ACCESS METHOD",
"AGGREGATE",
"CAST",
"COLLATION",
2367 "CONVERSION",
"DOMAIN",
"EVENT TRIGGER",
"FOREIGN",
2368 "FUNCTION",
"MATERIALIZED VIEW",
"OPERATOR",
2369 "LANGUAGE",
"PROCEDURE",
"ROUTINE",
"SCHEMA",
2370 "SEQUENCE",
"SERVER",
"TABLE",
"TEXT SEARCH",
2371 "TRANSFORM FOR",
"TYPE",
"VIEW");
2374 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP",
"FOREIGN"))
2375 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
2378 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP",
"OPERATOR"))
2379 COMPLETE_WITH(
"CLASS",
"FAMILY");
2382 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP",
"TEXT",
"SEARCH"))
2383 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
2386 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"UPDATE"))
2387 COMPLETE_WITH(
"TO");
2390 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"UPDATE",
"TO"))
2392 set_completion_reference(prev3_wd);
2393 COMPLETE_WITH_QUERY(Query_for_list_of_available_extension_versions);
2397 else if (Matches(
"ALTER",
"FOREIGN"))
2398 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
2401 else if (Matches(
"ALTER",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
2402 COMPLETE_WITH(
"HANDLER",
"VALIDATOR",
"NO",
2403 "OPTIONS",
"OWNER TO",
"RENAME TO");
2404 else if (Matches(
"ALTER",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny,
"NO"))
2405 COMPLETE_WITH(
"HANDLER",
"VALIDATOR");
2408 else if (Matches(
"ALTER",
"FOREIGN",
"TABLE", MatchAny))
2409 COMPLETE_WITH(
"ADD",
"ALTER",
"DISABLE TRIGGER",
"DROP",
"ENABLE",
2410 "INHERIT",
"NO INHERIT",
"OPTIONS",
"OWNER TO",
2411 "RENAME",
"SET",
"VALIDATE CONSTRAINT");
2414 else if (Matches(
"ALTER",
"INDEX"))
2415 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
2416 "ALL IN TABLESPACE");
2418 else if (Matches(
"ALTER",
"INDEX", MatchAny))
2419 COMPLETE_WITH(
"ALTER COLUMN",
"OWNER TO",
"RENAME TO",
"SET",
2420 "RESET",
"ATTACH PARTITION",
2421 "DEPENDS ON EXTENSION",
"NO DEPENDS ON EXTENSION");
2422 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ATTACH"))
2423 COMPLETE_WITH(
"PARTITION");
2424 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ATTACH",
"PARTITION"))
2425 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
2427 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER"))
2428 COMPLETE_WITH(
"COLUMN");
2430 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN"))
2432 set_completion_reference(prev3_wd);
2433 COMPLETE_WITH_SCHEMA_QUERY_VERBATIM(Query_for_list_of_attribute_numbers);
2436 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny))
2437 COMPLETE_WITH(
"SET STATISTICS");
2439 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET"))
2440 COMPLETE_WITH(
"STATISTICS");
2442 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STATISTICS"))
2447 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"SET"))
2448 COMPLETE_WITH(
"(",
"TABLESPACE");
2450 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"RESET"))
2453 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"RESET",
"("))
2454 COMPLETE_WITH(
"fillfactor",
2455 "deduplicate_items",
2456 "fastupdate",
"gin_pending_list_limit",
2458 "pages_per_range",
"autosummarize"
2460 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"SET",
"("))
2461 COMPLETE_WITH(
"fillfactor =",
2462 "deduplicate_items =",
2463 "fastupdate =",
"gin_pending_list_limit =",
2465 "pages_per_range =",
"autosummarize ="
2467 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"NO",
"DEPENDS"))
2468 COMPLETE_WITH(
"ON EXTENSION");
2469 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"DEPENDS"))
2470 COMPLETE_WITH(
"ON EXTENSION");
2473 else if (Matches(
"ALTER",
"LANGUAGE", MatchAny))
2474 COMPLETE_WITH(
"OWNER TO",
"RENAME TO");
2477 else if (Matches(
"ALTER",
"LARGE",
"OBJECT", MatchAny))
2478 COMPLETE_WITH(
"OWNER TO");
2481 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW"))
2482 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_matviews,
2483 "ALL IN TABLESPACE");
2486 else if (Matches(
"ALTER",
"USER|ROLE", MatchAny) &&
2487 !TailMatches(
"USER",
"MAPPING"))
2488 COMPLETE_WITH(
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
"CREATEROLE",
2489 "ENCRYPTED PASSWORD",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2490 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2491 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2492 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2493 "VALID UNTIL",
"WITH");
2496 else if (Matches(
"ALTER",
"USER|ROLE", MatchAny,
"RESET"))
2497 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_user_vars,
"ALL");
2500 else if (Matches(
"ALTER",
"USER|ROLE", MatchAny,
"WITH"))
2502 COMPLETE_WITH(
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
"CREATEROLE",
2503 "ENCRYPTED PASSWORD",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2504 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2505 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2506 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2510 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
2511 COMPLETE_WITH(
"FOR",
"GRANT",
"IN SCHEMA",
"REVOKE");
2513 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR"))
2514 COMPLETE_WITH(
"ROLE");
2516 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN"))
2517 COMPLETE_WITH(
"SCHEMA");
2519 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2521 COMPLETE_WITH(
"GRANT",
"REVOKE",
"IN SCHEMA");
2523 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2525 COMPLETE_WITH(
"GRANT",
"REVOKE",
"FOR ROLE");
2527 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2529 COMPLETE_WITH(
"ROLE");
2532 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2533 MatchAny,
"IN",
"SCHEMA", MatchAny) ||
2534 Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2535 MatchAny,
"FOR",
"ROLE|USER", MatchAny))
2536 COMPLETE_WITH(
"GRANT",
"REVOKE");
2538 else if (Matches(
"ALTER",
"DOMAIN", MatchAny))
2539 COMPLETE_WITH(
"ADD",
"DROP",
"OWNER TO",
"RENAME",
"SET",
2540 "VALIDATE CONSTRAINT");
2542 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"DROP"))
2543 COMPLETE_WITH(
"CONSTRAINT",
"DEFAULT",
"NOT NULL");
2545 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"DROP|RENAME|VALIDATE",
"CONSTRAINT"))
2547 set_completion_reference(prev3_wd);
2548 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_type);
2551 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"RENAME"))
2552 COMPLETE_WITH(
"CONSTRAINT",
"TO");
2554 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"RENAME",
"CONSTRAINT", MatchAny))
2555 COMPLETE_WITH(
"TO");
2558 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"SET"))
2559 COMPLETE_WITH(
"DEFAULT",
"NOT NULL",
"SCHEMA");
2561 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny))
2562 COMPLETE_WITH(
"AS",
"INCREMENT",
"MINVALUE",
"MAXVALUE",
"RESTART",
2563 "START",
"NO",
"CACHE",
"CYCLE",
"SET",
"OWNED BY",
2564 "OWNER TO",
"RENAME TO");
2566 else if (TailMatches(
"ALTER",
"SEQUENCE", MatchAny,
"AS"))
2567 COMPLETE_WITH_CS(
"smallint",
"integer",
"bigint");
2569 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny,
"NO"))
2570 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
2572 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny,
"SET"))
2573 COMPLETE_WITH(
"SCHEMA",
"LOGGED",
"UNLOGGED");
2575 else if (Matches(
"ALTER",
"SERVER", MatchAny))
2576 COMPLETE_WITH(
"VERSION",
"OPTIONS",
"OWNER TO",
"RENAME TO");
2578 else if (Matches(
"ALTER",
"SERVER", MatchAny,
"VERSION", MatchAny))
2579 COMPLETE_WITH(
"OPTIONS");
2581 else if (Matches(
"ALTER",
"SYSTEM"))
2582 COMPLETE_WITH(
"SET",
"RESET");
2583 else if (Matches(
"ALTER",
"SYSTEM",
"SET|RESET"))
2584 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_alter_system_set_vars,
2586 else if (Matches(
"ALTER",
"SYSTEM",
"SET", MatchAny))
2587 COMPLETE_WITH(
"TO");
2589 else if (Matches(
"ALTER",
"VIEW", MatchAny))
2590 COMPLETE_WITH(
"ALTER COLUMN",
"OWNER TO",
"RENAME",
"RESET",
"SET");
2592 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME"))
2593 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"TO");
2594 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2595 COMPLETE_WITH_ATTR(prev3_wd);
2597 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER", MatchAny) ||
2598 Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER",
"COLUMN", MatchAny))
2599 COMPLETE_WITH(
"SET DEFAULT",
"DROP DEFAULT");
2601 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME", MatchAnyExcept(
"TO")))
2602 COMPLETE_WITH(
"TO");
2604 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME",
"COLUMN", MatchAnyExcept(
"TO")))
2605 COMPLETE_WITH(
"TO");
2607 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RESET"))
2610 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET"))
2611 COMPLETE_WITH(
"(",
"SCHEMA");
2613 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET|RESET",
"("))
2614 COMPLETE_WITH_LIST(view_optional_parameters);
2615 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET",
"(", MatchAny))
2617 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET",
"(",
"check_option",
"="))
2618 COMPLETE_WITH(
"local",
"cascaded");
2619 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET",
"(",
"security_barrier|security_invoker",
"="))
2620 COMPLETE_WITH(
"true",
"false");
2623 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny))
2624 COMPLETE_WITH(
"ALTER COLUMN",
"CLUSTER ON",
"DEPENDS ON EXTENSION",
2625 "NO DEPENDS ON EXTENSION",
"OWNER TO",
"RENAME",
2628 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME"))
2629 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"TO");
2630 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2631 COMPLETE_WITH_ATTR(prev3_wd);
2633 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME", MatchAnyExcept(
"TO")))
2634 COMPLETE_WITH(
"TO");
2636 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME",
"COLUMN", MatchAnyExcept(
"TO")))
2637 COMPLETE_WITH(
"TO");
2639 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"SET"))
2640 COMPLETE_WITH(
"(",
"ACCESS METHOD",
"SCHEMA",
"TABLESPACE",
"WITHOUT CLUSTER");
2642 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"SET",
"ACCESS",
"METHOD"))
2643 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
2646 else if (Matches(
"ALTER",
"POLICY"))
2647 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
2649 else if (Matches(
"ALTER",
"POLICY", MatchAny))
2650 COMPLETE_WITH(
"ON");
2652 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON"))
2654 set_completion_reference(prev2_wd);
2655 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
2658 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny))
2659 COMPLETE_WITH(
"RENAME TO",
"TO",
"USING (",
"WITH CHECK (");
2661 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"TO"))
2662 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
2663 Keywords_for_list_of_grant_roles);
2665 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"USING"))
2668 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"WITH",
"CHECK"))
2672 else if (Matches(
"ALTER",
"RULE", MatchAny))
2673 COMPLETE_WITH(
"ON");
2676 else if (Matches(
"ALTER",
"RULE", MatchAny,
"ON"))
2678 set_completion_reference(prev2_wd);
2679 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
2683 else if (Matches(
"ALTER",
"RULE", MatchAny,
"ON", MatchAny))
2684 COMPLETE_WITH(
"RENAME TO");
2687 else if (Matches(
"ALTER",
"STATISTICS", MatchAny))
2688 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA",
"SET STATISTICS");
2690 else if (Matches(
"ALTER",
"STATISTICS", MatchAny,
"SET"))
2691 COMPLETE_WITH(
"SCHEMA",
"STATISTICS");
2694 else if (Matches(
"ALTER",
"TRIGGER", MatchAny))
2695 COMPLETE_WITH(
"ON");
2697 else if (Matches(
"ALTER",
"TRIGGER", MatchAny,
"ON"))
2699 set_completion_reference(prev2_wd);
2700 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
2704 else if (Matches(
"ALTER",
"TRIGGER", MatchAny,
"ON", MatchAny))
2705 COMPLETE_WITH(
"RENAME TO",
"DEPENDS ON EXTENSION",
2706 "NO DEPENDS ON EXTENSION");
2711 else if (Matches(
"ALTER",
"TABLE", MatchAny))
2712 COMPLETE_WITH(
"ADD",
"ALTER",
"CLUSTER ON",
"DISABLE",
"DROP",
2713 "ENABLE",
"INHERIT",
"NO",
"RENAME",
"RESET",
2714 "OWNER TO",
"SET",
"VALIDATE CONSTRAINT",
2715 "REPLICA IDENTITY",
"ATTACH PARTITION",
2716 "DETACH PARTITION",
"FORCE ROW LEVEL SECURITY",
2719 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD"))
2722 COMPLETE_WITH(
"COLUMN",
"CONSTRAINT",
"CHECK",
"UNIQUE",
"PRIMARY KEY",
2723 "EXCLUDE",
"FOREIGN KEY");
2726 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"COLUMN", MatchAny) ||
2727 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD", MatchAnyExcept(
"COLUMN|CONSTRAINT|CHECK|UNIQUE|PRIMARY|EXCLUDE|FOREIGN")))
2728 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
2730 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny))
2731 COMPLETE_WITH(
"CHECK",
"UNIQUE",
"PRIMARY KEY",
"EXCLUDE",
"FOREIGN KEY");
2733 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"PRIMARY",
"KEY") ||
2734 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"UNIQUE") ||
2735 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
"PRIMARY",
"KEY") ||
2736 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
"UNIQUE"))
2737 COMPLETE_WITH(
"(",
"USING INDEX");
2739 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"PRIMARY",
"KEY",
"USING",
"INDEX"))
2741 set_completion_reference(prev6_wd);
2742 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2745 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"UNIQUE",
"USING",
"INDEX"))
2747 set_completion_reference(prev5_wd);
2748 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2751 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
2752 "PRIMARY",
"KEY",
"USING",
"INDEX"))
2754 set_completion_reference(prev8_wd);
2755 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2758 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
2759 "UNIQUE",
"USING",
"INDEX"))
2761 set_completion_reference(prev7_wd);
2762 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2765 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE"))
2766 COMPLETE_WITH(
"ALWAYS",
"REPLICA",
"ROW LEVEL SECURITY",
"RULE",
2768 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"REPLICA|ALWAYS"))
2769 COMPLETE_WITH(
"RULE",
"TRIGGER");
2770 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"RULE"))
2772 set_completion_reference(prev3_wd);
2773 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2775 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE", MatchAny,
"RULE"))
2777 set_completion_reference(prev4_wd);
2778 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2780 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"TRIGGER"))
2782 set_completion_reference(prev3_wd);
2783 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2785 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE", MatchAny,
"TRIGGER"))
2787 set_completion_reference(prev4_wd);
2788 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2791 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"INHERIT"))
2792 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2794 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"NO"))
2795 COMPLETE_WITH(
"FORCE ROW LEVEL SECURITY",
"INHERIT");
2797 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"NO",
"INHERIT"))
2798 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2800 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE"))
2801 COMPLETE_WITH(
"ROW LEVEL SECURITY",
"RULE",
"TRIGGER");
2802 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE",
"RULE"))
2804 set_completion_reference(prev3_wd);
2805 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2807 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE",
"TRIGGER"))
2809 set_completion_reference(prev3_wd);
2810 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2814 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER"))
2815 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"CONSTRAINT");
2818 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME"))
2819 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"CONSTRAINT",
"TO");
2820 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2821 COMPLETE_WITH_ATTR(prev3_wd);
2824 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME", MatchAnyExcept(
"CONSTRAINT|TO")))
2825 COMPLETE_WITH(
"TO");
2828 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME",
"COLUMN|CONSTRAINT", MatchAnyExcept(
"TO")))
2829 COMPLETE_WITH(
"TO");
2832 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DROP"))
2833 COMPLETE_WITH(
"COLUMN",
"CONSTRAINT");
2835 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DROP",
"COLUMN"))
2836 COMPLETE_WITH_ATTR(prev3_wd);
2838 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER|DROP|RENAME",
"CONSTRAINT"))
2840 set_completion_reference(prev3_wd);
2841 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_table);
2844 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"VALIDATE",
"CONSTRAINT"))
2846 set_completion_reference(prev3_wd);
2847 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_table_not_validated);
2850 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny) ||
2851 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny))
2852 COMPLETE_WITH(
"TYPE",
"SET",
"RESET",
"RESTART",
"ADD",
"DROP");
2854 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD") ||
2855 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD"))
2856 COMPLETE_WITH(
"GENERATED");
2858 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD",
"GENERATED") ||
2859 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD",
"GENERATED"))
2860 COMPLETE_WITH(
"ALWAYS",
"BY DEFAULT");
2862 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD",
"GENERATED",
"ALWAYS") ||
2863 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD",
"GENERATED",
"ALWAYS") ||
2864 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD",
"GENERATED",
"BY",
"DEFAULT") ||
2865 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD",
"GENERATED",
"BY",
"DEFAULT"))
2866 COMPLETE_WITH(
"AS IDENTITY");
2868 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET") ||
2869 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET"))
2870 COMPLETE_WITH(
"(",
"COMPRESSION",
"DATA TYPE",
"DEFAULT",
"EXPRESSION",
"GENERATED",
"NOT NULL",
2871 "STATISTICS",
"STORAGE",
2873 "INCREMENT",
"MINVALUE",
"MAXVALUE",
"START",
"NO",
"CACHE",
"CYCLE");
2875 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"(") ||
2876 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"("))
2877 COMPLETE_WITH(
"n_distinct",
"n_distinct_inherited");
2879 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"COMPRESSION") ||
2880 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"COMPRESSION"))
2881 COMPLETE_WITH(
"DEFAULT",
"PGLZ",
"LZ4");
2883 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"EXPRESSION") ||
2884 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"EXPRESSION"))
2885 COMPLETE_WITH(
"AS");
2887 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"EXPRESSION",
"AS") ||
2888 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"EXPRESSION",
"AS"))
2891 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"GENERATED") ||
2892 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"GENERATED"))
2893 COMPLETE_WITH(
"ALWAYS",
"BY DEFAULT");
2895 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"NO") ||
2896 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"NO"))
2897 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
2899 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STORAGE") ||
2900 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"STORAGE"))
2901 COMPLETE_WITH(
"DEFAULT",
"PLAIN",
"EXTERNAL",
"EXTENDED",
"MAIN");
2903 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STATISTICS") ||
2904 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"STATISTICS"))
2909 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"DROP") ||
2910 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"DROP"))
2911 COMPLETE_WITH(
"DEFAULT",
"EXPRESSION",
"IDENTITY",
"NOT NULL");
2912 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"CLUSTER"))
2913 COMPLETE_WITH(
"ON");
2914 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"CLUSTER",
"ON"))
2916 set_completion_reference(prev3_wd);
2917 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
2920 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET"))
2921 COMPLETE_WITH(
"(",
"ACCESS METHOD",
"LOGGED",
"SCHEMA",
2922 "TABLESPACE",
"UNLOGGED",
"WITH",
"WITHOUT");
2928 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"ACCESS",
"METHOD"))
2929 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_table_access_methods,
2936 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"TABLESPACE"))
2937 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
2939 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"WITHOUT"))
2940 COMPLETE_WITH(
"CLUSTER",
"OIDS");
2942 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RESET"))
2945 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET|RESET",
"("))
2946 COMPLETE_WITH_LIST(table_storage_parameters);
2947 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY",
"USING",
"INDEX"))
2949 set_completion_reference(prev5_wd);
2950 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
2952 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY",
"USING"))
2953 COMPLETE_WITH(
"INDEX");
2954 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY"))
2955 COMPLETE_WITH(
"FULL",
"NOTHING",
"DEFAULT",
"USING");
2956 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA"))
2957 COMPLETE_WITH(
"IDENTITY");
2963 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ATTACH",
"PARTITION"))
2964 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2966 else if (TailMatches(
"ATTACH",
"PARTITION", MatchAny))
2967 COMPLETE_WITH(
"FOR VALUES",
"DEFAULT");
2968 else if (TailMatches(
"FOR",
"VALUES"))
2969 COMPLETE_WITH(
"FROM (",
"IN (",
"WITH (");
2975 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DETACH",
"PARTITION"))
2977 set_completion_reference(prev3_wd);
2978 COMPLETE_WITH_SCHEMA_QUERY(Query_for_partition_of_table);
2980 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DETACH",
"PARTITION", MatchAny))
2981 COMPLETE_WITH(
"CONCURRENTLY",
"FINALIZE");
2984 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"OF"))
2985 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_composite_datatypes);
2988 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny))
2989 COMPLETE_WITH(
"RENAME TO",
"OWNER TO",
"SET",
"RESET");
2991 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny,
"SET|RESET"))
2994 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny,
"SET|RESET",
"("))
2995 COMPLETE_WITH(
"seq_page_cost",
"random_page_cost",
2996 "effective_io_concurrency",
"maintenance_io_concurrency");
2999 else if (Matches(
"ALTER",
"TEXT",
"SEARCH"))
3000 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3001 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"TEMPLATE|PARSER", MatchAny))
3002 COMPLETE_WITH(
"RENAME TO",
"SET SCHEMA");
3003 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"DICTIONARY", MatchAny))
3004 COMPLETE_WITH(
"(",
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
3005 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"CONFIGURATION", MatchAny))
3006 COMPLETE_WITH(
"ADD MAPPING FOR",
"ALTER MAPPING",
3008 "OWNER TO",
"RENAME TO",
"SET SCHEMA");
3011 else if (Matches(
"ALTER",
"TYPE", MatchAny))
3012 COMPLETE_WITH(
"ADD ATTRIBUTE",
"ADD VALUE",
"ALTER ATTRIBUTE",
3014 "OWNER TO",
"RENAME",
"SET SCHEMA",
"SET (");
3016 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ADD"))
3017 COMPLETE_WITH(
"ATTRIBUTE",
"VALUE");
3019 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME"))
3020 COMPLETE_WITH(
"ATTRIBUTE",
"TO",
"VALUE");
3022 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME",
"ATTRIBUTE|VALUE", MatchAny))
3023 COMPLETE_WITH(
"TO");
3025 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME",
"ATTRIBUTE", MatchAny,
"TO", MatchAny))
3026 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3032 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ALTER|DROP|RENAME",
"ATTRIBUTE"))
3033 COMPLETE_WITH_ATTR(prev3_wd);
3035 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ADD",
"ATTRIBUTE", MatchAny))
3036 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3038 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ADD",
"ATTRIBUTE", MatchAny, MatchAny))
3039 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3041 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"DROP",
"ATTRIBUTE", MatchAny))
3042 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3044 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ALTER",
"ATTRIBUTE", MatchAny))
3045 COMPLETE_WITH(
"TYPE");
3047 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ALTER",
"ATTRIBUTE", MatchAny,
"TYPE", MatchAny))
3048 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3050 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME",
"VALUE"))
3051 COMPLETE_WITH_ENUM_VALUE(prev3_wd);
3053 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"SET"))
3054 COMPLETE_WITH(
"(",
"SCHEMA");
3056 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"SET",
"("))
3057 COMPLETE_WITH(
"ANALYZE",
"RECEIVE",
"SEND",
"STORAGE",
"SUBSCRIPT",
3058 "TYPMOD_IN",
"TYPMOD_OUT");
3061 else if (Matches(
"ALTER",
"GROUP", MatchAny))
3062 COMPLETE_WITH(
"ADD USER",
"DROP USER",
"RENAME TO");
3064 else if (Matches(
"ALTER",
"GROUP", MatchAny,
"ADD|DROP"))
3065 COMPLETE_WITH(
"USER");
3067 else if (Matches(
"ALTER",
"GROUP", MatchAny,
"ADD|DROP",
"USER"))
3068 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
3074 else if (Matches(
"ANALYZE"))
3075 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_analyzables,
3077 else if (HeadMatches(
"ANALYZE",
"(*") &&
3078 !HeadMatches(
"ANALYZE",
"(*)"))
3085 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
3086 COMPLETE_WITH(
"VERBOSE",
"SKIP_LOCKED",
"BUFFER_USAGE_LIMIT");
3087 else if (TailMatches(
"VERBOSE|SKIP_LOCKED"))
3088 COMPLETE_WITH(
"ON",
"OFF");
3090 else if (Matches(
"ANALYZE", MatchAnyN,
"("))
3092 COMPLETE_WITH_ATTR(prev2_wd);
3093 else if (HeadMatches(
"ANALYZE"))
3094 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_analyzables);
3097 else if (Matches(
"BEGIN"))
3098 COMPLETE_WITH(
"WORK",
"TRANSACTION",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
3100 else if (Matches(
"END|ABORT"))
3101 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION");
3103 else if (Matches(
"COMMIT"))
3104 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION",
"PREPARED");
3106 else if (Matches(
"RELEASE"))
3107 COMPLETE_WITH(
"SAVEPOINT");
3109 else if (Matches(
"ROLLBACK"))
3110 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION",
"TO SAVEPOINT",
"PREPARED");
3111 else if (Matches(
"ABORT|END|COMMIT|ROLLBACK",
"AND"))
3112 COMPLETE_WITH(
"CHAIN");
3114 else if (Matches(
"CALL"))
3115 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_procedures);
3116 else if (Matches(
"CALL", MatchAny))
3119 else if (Matches(
"CLOSE"))
3120 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
3123 else if (Matches(
"CLUSTER"))
3124 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_clusterables,
3126 else if (Matches(
"CLUSTER",
"VERBOSE") ||
3127 Matches(
"CLUSTER",
"(*)"))
3128 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_clusterables);
3130 else if (Matches(
"CLUSTER", MatchAnyExcept(
"VERBOSE|ON|(|(*)")))
3131 COMPLETE_WITH(
"USING");
3133 else if (Matches(
"CLUSTER",
"VERBOSE|(*)", MatchAny))
3134 COMPLETE_WITH(
"USING");
3136 else if (Matches(
"CLUSTER", MatchAny,
"USING") ||
3137 Matches(
"CLUSTER",
"VERBOSE|(*)", MatchAny,
"USING"))
3139 set_completion_reference(prev2_wd);
3140 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
3142 else if (HeadMatches(
"CLUSTER",
"(*") &&
3143 !HeadMatches(
"CLUSTER",
"(*)"))
3150 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
3151 COMPLETE_WITH(
"VERBOSE");
3155 else if (Matches(
"COMMENT"))
3156 COMPLETE_WITH(
"ON");
3157 else if (Matches(
"COMMENT",
"ON"))
3158 COMPLETE_WITH(
"ACCESS METHOD",
"AGGREGATE",
"CAST",
"COLLATION",
3159 "COLUMN",
"CONSTRAINT",
"CONVERSION",
"DATABASE",
3160 "DOMAIN",
"EXTENSION",
"EVENT TRIGGER",
3161 "FOREIGN DATA WRAPPER",
"FOREIGN TABLE",
3162 "FUNCTION",
"INDEX",
"LANGUAGE",
"LARGE OBJECT",
3163 "MATERIALIZED VIEW",
"OPERATOR",
"POLICY",
3164 "PROCEDURE",
"PROCEDURAL LANGUAGE",
"PUBLICATION",
"ROLE",
3165 "ROUTINE",
"RULE",
"SCHEMA",
"SEQUENCE",
"SERVER",
3166 "STATISTICS",
"SUBSCRIPTION",
"TABLE",
3167 "TABLESPACE",
"TEXT SEARCH",
"TRANSFORM FOR",
3168 "TRIGGER",
"TYPE",
"VIEW");
3169 else if (Matches(
"COMMENT",
"ON",
"ACCESS",
"METHOD"))
3170 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
3171 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT"))
3172 COMPLETE_WITH_QUERY(Query_for_all_table_constraints);
3173 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny))
3174 COMPLETE_WITH(
"ON");
3175 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny,
"ON"))
3177 set_completion_reference(prev2_wd);
3178 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables_for_constraint,
3181 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny,
"ON",
"DOMAIN"))
3182 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
3183 else if (Matches(
"COMMENT",
"ON",
"EVENT",
"TRIGGER"))
3184 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
3185 else if (Matches(
"COMMENT",
"ON",
"FOREIGN"))
3186 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
3187 else if (Matches(
"COMMENT",
"ON",
"FOREIGN",
"TABLE"))
3188 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
3189 else if (Matches(
"COMMENT",
"ON",
"MATERIALIZED",
"VIEW"))
3190 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
3191 else if (Matches(
"COMMENT",
"ON",
"POLICY"))
3192 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
3193 else if (Matches(
"COMMENT",
"ON",
"POLICY", MatchAny))
3194 COMPLETE_WITH(
"ON");
3195 else if (Matches(
"COMMENT",
"ON",
"POLICY", MatchAny,
"ON"))
3197 set_completion_reference(prev2_wd);
3198 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
3200 else if (Matches(
"COMMENT",
"ON",
"PROCEDURAL",
"LANGUAGE"))
3201 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3202 else if (Matches(
"COMMENT",
"ON",
"RULE", MatchAny))
3203 COMPLETE_WITH(
"ON");
3204 else if (Matches(
"COMMENT",
"ON",
"RULE", MatchAny,
"ON"))
3206 set_completion_reference(prev2_wd);
3207 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
3209 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH"))
3210 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3211 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"CONFIGURATION"))
3212 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_configurations);
3213 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"DICTIONARY"))
3214 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_dictionaries);
3215 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"PARSER"))
3216 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_parsers);
3217 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"TEMPLATE"))
3218 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_templates);
3219 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR"))
3220 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3221 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR", MatchAny))
3222 COMPLETE_WITH(
"LANGUAGE");
3223 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
3225 set_completion_reference(prev2_wd);
3226 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3228 else if (Matches(
"COMMENT",
"ON",
"TRIGGER", MatchAny))
3229 COMPLETE_WITH(
"ON");
3230 else if (Matches(
"COMMENT",
"ON",
"TRIGGER", MatchAny,
"ON"))
3232 set_completion_reference(prev2_wd);
3233 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
3235 else if (Matches(
"COMMENT",
"ON", MatchAny, MatchAnyExcept(
"IS")) ||
3236 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAnyExcept(
"IS")) ||
3237 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAny, MatchAnyExcept(
"IS")) ||
3238 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAny, MatchAny, MatchAnyExcept(
"IS")))
3239 COMPLETE_WITH(
"IS");
3247 else if (Matches(
"COPY|\\copy"))
3248 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
"(");
3250 else if (Matches(
"COPY|\\copy",
"("))
3251 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES",
"INSERT INTO",
"UPDATE",
"DELETE FROM",
"MERGE INTO",
"WITH");
3253 else if (Matches(
"COPY|\\copy", MatchAny))
3254 COMPLETE_WITH(
"FROM",
"TO");
3256 else if (Matches(
"COPY", MatchAny,
"FROM|TO"))
3258 completion_charp =
"";
3259 completion_force_quote =
true;
3260 matches = rl_completion_matches(
text, complete_from_files);
3262 else if (Matches(
"\\copy", MatchAny,
"FROM|TO"))
3264 completion_charp =
"";
3265 completion_force_quote =
false;
3266 matches = rl_completion_matches(
text, complete_from_files);
3270 else if (Matches(
"COPY|\\copy", MatchAny,
"TO", MatchAny))
3271 COMPLETE_WITH(
"WITH (");
3274 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM", MatchAny))
3275 COMPLETE_WITH(
"WITH (",
"WHERE");
3278 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO", MatchAny,
"WITH",
"("))
3279 COMPLETE_WITH(
"FORMAT",
"FREEZE",
"DELIMITER",
"NULL",
3280 "HEADER",
"QUOTE",
"ESCAPE",
"FORCE_QUOTE",
3281 "FORCE_NOT_NULL",
"FORCE_NULL",
"ENCODING",
"DEFAULT",
3282 "ON_ERROR",
"LOG_VERBOSITY");
3285 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO", MatchAny,
"WITH",
"(",
"FORMAT"))
3286 COMPLETE_WITH(
"binary",
"csv",
"text");
3289 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO", MatchAny,
"WITH",
"(",
"ON_ERROR"))
3290 COMPLETE_WITH(
"stop",
"ignore");
3293 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO", MatchAny,
"WITH",
"(",
"LOG_VERBOSITY"))
3294 COMPLETE_WITH(
"silent",
"default",
"verbose");
3297 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM", MatchAny,
"WITH", MatchAny))
3298 COMPLETE_WITH(
"WHERE");
3302 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny))
3303 COMPLETE_WITH(
"TYPE");
3305 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny,
"TYPE"))
3306 COMPLETE_WITH(
"INDEX",
"TABLE");
3308 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny,
"TYPE", MatchAny))
3309 COMPLETE_WITH(
"HANDLER");
3312 else if (Matches(
"CREATE",
"COLLATION", MatchAny))
3313 COMPLETE_WITH(
"(",
"FROM");
3314 else if (Matches(
"CREATE",
"COLLATION", MatchAny,
"FROM"))
3315 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_collations);
3316 else if (HeadMatches(
"CREATE",
"COLLATION", MatchAny,
"(*"))
3318 if (TailMatches(
"(|*,"))
3319 COMPLETE_WITH(
"LOCALE =",
"LC_COLLATE =",
"LC_CTYPE =",
3320 "PROVIDER =",
"DETERMINISTIC =");
3321 else if (TailMatches(
"PROVIDER",
"="))
3322 COMPLETE_WITH(
"libc",
"icu");
3323 else if (TailMatches(
"DETERMINISTIC",
"="))
3324 COMPLETE_WITH(
"true",
"false");
3328 else if (Matches(
"CREATE",
"DATABASE", MatchAny))
3329 COMPLETE_WITH(
"OWNER",
"TEMPLATE",
"ENCODING",
"TABLESPACE",
3330 "IS_TEMPLATE",
"STRATEGY",
3331 "ALLOW_CONNECTIONS",
"CONNECTION LIMIT",
3332 "LC_COLLATE",
"LC_CTYPE",
"LOCALE",
"OID",
3333 "LOCALE_PROVIDER",
"ICU_LOCALE");
3335 else if (Matches(
"CREATE",
"DATABASE", MatchAny,
"TEMPLATE"))
3336 COMPLETE_WITH_QUERY(Query_for_list_of_template_databases);
3337 else if (Matches(
"CREATE",
"DATABASE", MatchAny,
"STRATEGY"))
3338 COMPLETE_WITH(
"WAL_LOG",
"FILE_COPY");
3341 else if (Matches(
"CREATE",
"DOMAIN", MatchAny))
3342 COMPLETE_WITH(
"AS");
3343 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"AS"))
3344 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3345 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"AS", MatchAny))
3346 COMPLETE_WITH(
"COLLATE",
"DEFAULT",
"CONSTRAINT",
3347 "NOT NULL",
"NULL",
"CHECK (");
3348 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"COLLATE"))
3349 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_collations);
3353 else if (Matches(
"CREATE",
"EXTENSION"))
3354 COMPLETE_WITH_QUERY(Query_for_list_of_available_extensions);
3356 else if (Matches(
"CREATE",
"EXTENSION", MatchAny))
3357 COMPLETE_WITH(
"WITH SCHEMA",
"CASCADE",
"VERSION");
3359 else if (Matches(
"CREATE",
"EXTENSION", MatchAny,
"VERSION"))
3361 set_completion_reference(prev2_wd);
3362 COMPLETE_WITH_QUERY(Query_for_list_of_available_extension_versions);
3366 else if (Matches(
"CREATE",
"FOREIGN"))
3367 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
3370 else if (Matches(
"CREATE",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
3371 COMPLETE_WITH(
"HANDLER",
"VALIDATOR",
"OPTIONS");
3374 else if (Matches(
"CREATE",
"FOREIGN",
"TABLE", MatchAny))
3375 COMPLETE_WITH(
"(",
"PARTITION OF");
3379 else if (TailMatches(
"CREATE",
"UNIQUE"))
3380 COMPLETE_WITH(
"INDEX");
3386 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX"))
3387 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
3388 "ON",
"CONCURRENTLY");
3394 else if (TailMatches(
"INDEX|CONCURRENTLY", MatchAny,
"ON") ||
3395 TailMatches(
"INDEX|CONCURRENTLY",
"ON"))
3396 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexables);
3402 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX",
"CONCURRENTLY"))
3403 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
3406 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX", MatchAny) ||
3407 TailMatches(
"CREATE|UNIQUE",
"INDEX",
"CONCURRENTLY", MatchAny))
3408 COMPLETE_WITH(
"ON");
3414 else if (TailMatches(
"INDEX", MatchAny,
"ON", MatchAny) ||
3415 TailMatches(
"INDEX|CONCURRENTLY",
"ON", MatchAny))
3416 COMPLETE_WITH(
"(",
"USING");
3417 else if (TailMatches(
"INDEX", MatchAny,
"ON", MatchAny,
"(") ||
3418 TailMatches(
"INDEX|CONCURRENTLY",
"ON", MatchAny,
"("))
3419 COMPLETE_WITH_ATTR(prev2_wd);
3421 else if (TailMatches(
"ON", MatchAny,
"USING", MatchAny,
"("))
3422 COMPLETE_WITH_ATTR(prev4_wd);
3424 else if (TailMatches(
"INDEX", MatchAny, MatchAny,
"ON", MatchAny,
"USING") ||
3425 TailMatches(
"INDEX", MatchAny,
"ON", MatchAny,
"USING") ||
3426 TailMatches(
"INDEX",
"ON", MatchAny,
"USING"))
3427 COMPLETE_WITH_QUERY(Query_for_list_of_index_access_methods);
3428 else if (TailMatches(
"ON", MatchAny,
"USING", MatchAny) &&
3429 !TailMatches(
"POLICY", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny) &&
3430 !TailMatches(
"FOR", MatchAny, MatchAny, MatchAny))
3434 else if (Matches(
"CREATE",
"OR"))
3435 COMPLETE_WITH(
"REPLACE");
3439 else if (Matches(
"CREATE",
"POLICY", MatchAny))
3440 COMPLETE_WITH(
"ON");
3442 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON"))
3443 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3445 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny))
3446 COMPLETE_WITH(
"AS",
"FOR",
"TO",
"USING (",
"WITH CHECK (");
3448 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS"))
3449 COMPLETE_WITH(
"PERMISSIVE",
"RESTRICTIVE");
3455 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny))
3456 COMPLETE_WITH(
"FOR",
"TO",
"USING",
"WITH CHECK");
3458 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR"))
3459 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
3461 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"INSERT"))
3462 COMPLETE_WITH(
"TO",
"WITH CHECK (");
3464 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"SELECT|DELETE"))
3465 COMPLETE_WITH(
"TO",
"USING (");
3467 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"ALL|UPDATE"))
3468 COMPLETE_WITH(
"TO",
"USING (",
"WITH CHECK (");
3470 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"TO"))
3471 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3472 Keywords_for_list_of_grant_roles);
3474 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"USING"))
3481 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR"))
3482 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
3488 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"INSERT"))
3489 COMPLETE_WITH(
"TO",
"WITH CHECK (");
3495 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"SELECT|DELETE"))
3496 COMPLETE_WITH(
"TO",
"USING (");
3502 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"ALL|UPDATE"))
3503 COMPLETE_WITH(
"TO",
"USING (",
"WITH CHECK (");
3509 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"TO"))
3510 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3511 Keywords_for_list_of_grant_roles);
3517 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"USING"))
3522 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny))
3523 COMPLETE_WITH(
"FOR TABLE",
"FOR ALL TABLES",
"FOR TABLES IN SCHEMA",
"WITH (");
3524 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR"))
3525 COMPLETE_WITH(
"TABLE",
"ALL TABLES",
"TABLES IN SCHEMA");
3526 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"ALL"))
3527 COMPLETE_WITH(
"TABLES");
3528 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"ALL",
"TABLES"))
3529 COMPLETE_WITH(
"WITH (");
3530 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLES"))
3531 COMPLETE_WITH(
"IN SCHEMA");
3532 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLE", MatchAny) && !ends_with(prev_wd,
','))
3533 COMPLETE_WITH(
"WHERE (",
"WITH (");
3535 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLE"))
3536 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3542 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE"))
3544 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE",
"("))
3545 COMPLETE_WITH_ATTR(prev3_wd);
3546 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE",
"(*)"))
3547 COMPLETE_WITH(
" WITH (");
3552 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLES",
"IN",
"SCHEMA"))
3553 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
3554 " AND nspname NOT LIKE E'pg\\\\_%%'",
3556 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLES",
"IN",
"SCHEMA", MatchAny) && (!ends_with(prev_wd,
',')))
3557 COMPLETE_WITH(
"WITH (");
3559 else if (Matches(
"CREATE",
"PUBLICATION", MatchAnyN,
"WITH",
"("))
3560 COMPLETE_WITH(
"publish",
"publish_generated_columns",
"publish_via_partition_root");
3564 else if (Matches(
"CREATE",
"RULE", MatchAny) ||
3565 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny))
3566 COMPLETE_WITH(
"AS ON");
3568 else if (Matches(
"CREATE",
"RULE", MatchAny,
"AS") ||
3569 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny,
"AS"))
3570 COMPLETE_WITH(
"ON");
3576 else if (Matches(
"CREATE",
"RULE", MatchAny,
"AS",
"ON") ||
3577 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny,
"AS",
"ON"))
3578 COMPLETE_WITH(
"SELECT",
"UPDATE",
"INSERT",
"DELETE");
3580 else if (TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE"))
3581 COMPLETE_WITH(
"TO");
3583 else if (TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE",
"TO"))
3584 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3587 else if (Matches(
"CREATE",
"SCHEMA"))
3588 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas,
3590 else if (Matches(
"CREATE",
"SCHEMA",
"AUTHORIZATION") ||
3591 Matches(
"CREATE",
"SCHEMA", MatchAny,
"AUTHORIZATION"))
3592 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3593 Keywords_for_list_of_owner_roles);
3594 else if (Matches(
"CREATE",
"SCHEMA",
"AUTHORIZATION", MatchAny) ||
3595 Matches(
"CREATE",
"SCHEMA", MatchAny,
"AUTHORIZATION", MatchAny))
3596 COMPLETE_WITH(
"CREATE",
"GRANT");
3597 else if (Matches(
"CREATE",
"SCHEMA", MatchAny))
3598 COMPLETE_WITH(
"AUTHORIZATION",
"CREATE",
"GRANT");
3601 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny) ||
3602 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny))
3603 COMPLETE_WITH(
"AS",
"INCREMENT BY",
"MINVALUE",
"MAXVALUE",
"NO",
3604 "CACHE",
"CYCLE",
"OWNED BY",
"START WITH");
3605 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny,
"AS") ||
3606 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny,
"AS"))
3607 COMPLETE_WITH_CS(
"smallint",
"integer",
"bigint");
3608 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny,
"NO") ||
3609 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny,
"NO"))
3610 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
3613 else if (Matches(
"CREATE",
"SERVER", MatchAny))
3614 COMPLETE_WITH(
"TYPE",
"VERSION",
"FOREIGN DATA WRAPPER");
3617 else if (Matches(
"CREATE",
"STATISTICS", MatchAny))
3618 COMPLETE_WITH(
"(",
"ON");
3619 else if (Matches(
"CREATE",
"STATISTICS", MatchAny,
"("))
3620 COMPLETE_WITH(
"ndistinct",
"dependencies",
"mcv");
3621 else if (Matches(
"CREATE",
"STATISTICS", MatchAny,
"(*)"))
3622 COMPLETE_WITH(
"ON");
3623 else if (Matches(
"CREATE",
"STATISTICS", MatchAny, MatchAnyN,
"FROM"))
3624 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3628 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY"))
3629 COMPLETE_WITH(
"SEQUENCE",
"TABLE",
"VIEW");
3631 else if (TailMatches(
"CREATE",
"UNLOGGED"))
3632 COMPLETE_WITH(
"TABLE",
"SEQUENCE");
3634 else if (TailMatches(
"PARTITION",
"BY"))
3635 COMPLETE_WITH(
"RANGE (",
"LIST (",
"HASH (");
3637 else if (TailMatches(
"PARTITION",
"OF"))
3638 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_tables);
3640 else if (TailMatches(
"PARTITION",
"OF", MatchAny))
3641 COMPLETE_WITH(
"FOR VALUES",
"DEFAULT");
3643 else if (TailMatches(
"CREATE",
"TABLE", MatchAny) ||
3644 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny))
3645 COMPLETE_WITH(
"(",
"AS",
"OF",
"PARTITION OF");
3647 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"OF") ||
3648 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"OF"))
3649 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_composite_datatypes);
3651 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"AS") ||
3652 TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)",
"AS") ||
3653 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"AS") ||
3654 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"(*)",
"AS"))
3655 COMPLETE_WITH(
"EXECUTE",
"SELECT",
"TABLE",
"VALUES",
"WITH");
3657 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)") ||
3658 TailMatches(
"CREATE",
"UNLOGGED",
"TABLE", MatchAny,
"(*)"))
3659 COMPLETE_WITH(
"AS",
"INHERITS (",
"PARTITION BY",
"USING",
"TABLESPACE",
"WITH (");
3660 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"TABLE", MatchAny,
"(*)"))
3661 COMPLETE_WITH(
"AS",
"INHERITS (",
"ON COMMIT",
"PARTITION BY",
"USING",
3662 "TABLESPACE",
"WITH (");
3664 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)",
"USING") ||
3665 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"(*)",
"USING"))
3666 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
3668 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)",
"WITH",
"(") ||
3669 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"(*)",
"WITH",
"("))
3670 COMPLETE_WITH_LIST(table_storage_parameters);
3672 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"TABLE", MatchAny,
"(*)",
"ON",
"COMMIT"))
3673 COMPLETE_WITH(
"DELETE ROWS",
"DROP",
"PRESERVE ROWS");
3676 else if (Matches(
"CREATE",
"TABLESPACE", MatchAny))
3677 COMPLETE_WITH(
"OWNER",
"LOCATION");
3679 else if (Matches(
"CREATE",
"TABLESPACE", MatchAny,
"OWNER", MatchAny))
3680 COMPLETE_WITH(
"LOCATION");
3683 else if (Matches(
"CREATE",
"TEXT",
"SEARCH"))
3684 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3685 else if (Matches(
"CREATE",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE", MatchAny))
3689 else if (Matches(
"CREATE",
"TRANSFORM") ||
3690 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM"))
3691 COMPLETE_WITH(
"FOR");
3692 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR") ||
3693 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR"))
3694 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3695 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR", MatchAny) ||
3696 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR", MatchAny))
3697 COMPLETE_WITH(
"LANGUAGE");
3698 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE") ||
3699 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
3701 set_completion_reference(prev2_wd);
3702 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3706 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny))
3707 COMPLETE_WITH(
"CONNECTION");
3708 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny,
"CONNECTION", MatchAny))
3709 COMPLETE_WITH(
"PUBLICATION");
3710 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny,
"CONNECTION",
3711 MatchAny,
"PUBLICATION"))
3715 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAnyN,
"PUBLICATION", MatchAny))
3716 COMPLETE_WITH(
"WITH (");
3718 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAnyN,
"WITH",
"("))
3719 COMPLETE_WITH(
"binary",
"connect",
"copy_data",
"create_slot",
3720 "disable_on_error",
"enabled",
"failover",
"origin",
3721 "password_required",
"run_as_owner",
"slot_name",
3722 "streaming",
"synchronous_commit",
"two_phase");
3730 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny) ||
3731 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny))
3732 COMPLETE_WITH(
"BEFORE",
"AFTER",
"INSTEAD OF");
3738 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER") ||
3739 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER"))
3740 COMPLETE_WITH(
"INSERT",
"DELETE",
"UPDATE",
"TRUNCATE");
3742 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF") ||
3743 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF"))
3744 COMPLETE_WITH(
"INSERT",
"DELETE",
"UPDATE");
3750 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny) ||
3751 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny) ||
3752 TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny) ||
3753 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny))
3754 COMPLETE_WITH(
"ON",
"OR");
3761 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny,
"ON") ||
3762 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny,
"ON"))
3763 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3769 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny,
"ON") ||
3770 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny,
"ON"))
3771 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
3772 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3774 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3778 COMPLETE_WITH(
"NOT DEFERRABLE",
"DEFERRABLE",
"INITIALLY",
3779 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3781 COMPLETE_WITH(
"NOT DEFERRABLE",
"DEFERRABLE",
"INITIALLY",
3782 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3784 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3786 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3788 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3789 "INITIALLY",
"IMMEDIATE|DEFERRED") ||
3790 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3791 "INITIALLY",
"IMMEDIATE|DEFERRED"))
3794 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3796 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3798 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3800 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3802 COMPLETE_WITH(
"OLD TABLE",
"NEW TABLE");
3803 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3804 "OLD|NEW",
"TABLE") ||
3805 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3806 "OLD|NEW",
"TABLE"))
3807 COMPLETE_WITH(
"AS");
3808 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3809 "REFERENCING",
"OLD",
"TABLE",
"AS", MatchAny) ||
3810 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3811 "REFERENCING",
"OLD",
"TABLE",
"AS", MatchAny) ||
3812 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3813 "REFERENCING",
"OLD",
"TABLE", MatchAny) ||
3814 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3815 "REFERENCING",
"OLD",
"TABLE", MatchAny))
3818 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3820 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3822 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3823 "REFERENCING",
"NEW",
"TABLE",
"AS", MatchAny) ||
3824 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3825 "REFERENCING",
"NEW",
"TABLE",
"AS", MatchAny) ||
3826 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3827 "REFERENCING",
"NEW",
"TABLE", MatchAny) ||
3828 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3829 "REFERENCING",
"NEW",
"TABLE", MatchAny))
3832 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3834 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3836 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3837 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3838 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3839 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3840 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3841 "REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3842 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3843 "REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3844 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3845 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE", MatchAny) ||
3846 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3847 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE", MatchAny) ||
3848 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3849 "REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE", MatchAny) ||
3850 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3851 "REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE", MatchAny))
3854 COMPLETE_WITH(
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3856 COMPLETE_WITH(
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3858 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3860 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3862 COMPLETE_WITH(
"EACH",
"ROW",
"STATEMENT");
3863 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3865 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3867 COMPLETE_WITH(
"ROW",
"STATEMENT");
3868 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3869 "FOR",
"EACH",
"ROW|STATEMENT") ||
3870 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3871 "FOR",
"EACH",
"ROW|STATEMENT") ||
3872 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3873 "FOR",
"ROW|STATEMENT") ||
3874 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3875 "FOR",
"ROW|STATEMENT"))
3878 COMPLETE_WITH(
"WHEN (",
"EXECUTE FUNCTION");
3880 COMPLETE_WITH(
"WHEN (",
"EXECUTE PROCEDURE");
3882 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3884 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3888 COMPLETE_WITH(
"EXECUTE FUNCTION");
3890 COMPLETE_WITH(
"EXECUTE PROCEDURE");
3897 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3899 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3903 COMPLETE_WITH(
"FUNCTION");
3905 COMPLETE_WITH(
"PROCEDURE");
3907 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3908 "EXECUTE",
"FUNCTION|PROCEDURE") ||
3909 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3910 "EXECUTE",
"FUNCTION|PROCEDURE"))
3911 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
3914 else if (Matches(
"CREATE",
"ROLE|GROUP|USER", MatchAny) &&
3915 !TailMatches(
"USER",
"MAPPING"))
3916 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
3917 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
3918 "LOGIN",
"NOBYPASSRLS",
3919 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
3920 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
3921 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
3922 "VALID UNTIL",
"WITH");
3925 else if (Matches(
"CREATE",
"ROLE|GROUP|USER", MatchAny,
"WITH"))
3927 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
3928 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
3929 "LOGIN",
"NOBYPASSRLS",
3930 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
3931 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
3932 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
3936 else if (Matches(
"CREATE",
"ROLE|USER|GROUP", MatchAny,
"IN"))
3937 COMPLETE_WITH(
"GROUP",
"ROLE");
3940 else if (Matches(
"CREATE",
"TYPE", MatchAny))
3941 COMPLETE_WITH(
"(",
"AS");
3942 else if (Matches(
"CREATE",
"TYPE", MatchAny,
"AS"))
3943 COMPLETE_WITH(
"ENUM",
"RANGE",
"(");
3944 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"AS",
"("))
3946 if (TailMatches(
"(|*,", MatchAny))
3947 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3948 else if (TailMatches(
"(|*,", MatchAny, MatchAnyExcept(
"*)")))
3949 COMPLETE_WITH(
"COLLATE",
",",
")");
3951 else if (Matches(
"CREATE",
"TYPE", MatchAny,
"AS",
"ENUM|RANGE"))
3953 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"("))
3955 if (TailMatches(
"(|*,"))
3956 COMPLETE_WITH(
"INPUT",
"OUTPUT",
"RECEIVE",
"SEND",
3957 "TYPMOD_IN",
"TYPMOD_OUT",
"ANALYZE",
"SUBSCRIPT",
3958 "INTERNALLENGTH",
"PASSEDBYVALUE",
"ALIGNMENT",
3959 "STORAGE",
"LIKE",
"CATEGORY",
"PREFERRED",
3960 "DEFAULT",
"ELEMENT",
"DELIMITER",
3962 else if (TailMatches(
"(*|*,", MatchAnyExcept(
"*=")))
3964 else if (TailMatches(
"=", MatchAnyExcept(
"*)")))
3965 COMPLETE_WITH(
",",
")");
3967 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"AS",
"RANGE",
"("))
3969 if (TailMatches(
"(|*,"))
3970 COMPLETE_WITH(
"SUBTYPE",
"SUBTYPE_OPCLASS",
"COLLATION",
3971 "CANONICAL",
"SUBTYPE_DIFF",
3972 "MULTIRANGE_TYPE_NAME");
3973 else if (TailMatches(
"(*|*,", MatchAnyExcept(
"*=")))
3975 else if (TailMatches(
"=", MatchAnyExcept(
"*)")))
3976 COMPLETE_WITH(
",",
")");
3981 else if (TailMatches(
"CREATE",
"VIEW", MatchAny) ||
3982 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny))
3983 COMPLETE_WITH(
"AS",
"WITH");
3985 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"AS") ||
3986 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"AS"))
3987 COMPLETE_WITH(
"SELECT");
3989 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH") ||
3990 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH"))
3992 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(") ||
3993 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"("))
3994 COMPLETE_WITH_LIST(view_optional_parameters);
3995 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option") ||
3996 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option"))
3998 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option",
"=") ||
3999 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option",
"="))
4000 COMPLETE_WITH(
"local",
"cascaded");
4002 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(*)") ||
4003 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(*)"))
4004 COMPLETE_WITH(
"AS");
4006 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(*)",
"AS") ||
4007 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(*)",
"AS"))
4008 COMPLETE_WITH(
"SELECT");
4011 else if (Matches(
"CREATE",
"MATERIALIZED"))
4012 COMPLETE_WITH(
"VIEW");
4014 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny))
4015 COMPLETE_WITH(
"AS",
"USING");
4021 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny,
"USING"))
4022 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
4024 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny,
"USING", MatchAny))
4025 COMPLETE_WITH(
"AS");
4031 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny,
"AS") ||
4032 Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny,
"USING", MatchAny,
"AS"))
4033 COMPLETE_WITH(
"SELECT");
4036 else if (Matches(
"CREATE",
"EVENT"))
4037 COMPLETE_WITH(
"TRIGGER");
4039 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny))
4040 COMPLETE_WITH(
"ON");
4042 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny,
"ON"))
4043 COMPLETE_WITH(
"ddl_command_start",
"ddl_command_end",
"login",
4044 "sql_drop",
"table_rewrite");
4051 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny,
"ON", MatchAny))
4054 COMPLETE_WITH(
"WHEN TAG IN (",
"EXECUTE FUNCTION");
4056 COMPLETE_WITH(
"WHEN TAG IN (",
"EXECUTE PROCEDURE");
4058 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAnyN,
"WHEN|AND", MatchAny,
"IN",
"(*)"))
4061 COMPLETE_WITH(
"EXECUTE FUNCTION");
4063 COMPLETE_WITH(
"EXECUTE PROCEDURE");
4065 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAnyN,
"EXECUTE",
"FUNCTION|PROCEDURE"))
4066 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
4069 else if (Matches(
"DEALLOCATE"))
4070 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_prepared_statements,
4079 else if (Matches(
"DECLARE", MatchAny))
4080 COMPLETE_WITH(
"BINARY",
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
4090 else if (Matches(
"DECLARE", MatchAnyN,
"BINARY"))
4091 COMPLETE_WITH(
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
"CURSOR");
4092 else if (Matches(
"DECLARE", MatchAnyN,
"ASENSITIVE|INSENSITIVE"))
4093 COMPLETE_WITH(
"SCROLL",
"NO SCROLL",
"CURSOR");
4094 else if (Matches(
"DECLARE", MatchAnyN,
"SCROLL"))
4095 COMPLETE_WITH(
"CURSOR");
4097 else if (Matches(
"DECLARE", MatchAnyN,
"NO"))
4098 COMPLETE_WITH(
"SCROLL");
4104 else if (Matches(
"DECLARE", MatchAnyN,
"CURSOR"))
4105 COMPLETE_WITH(
"WITH HOLD",
"WITHOUT HOLD",
"FOR");
4107 else if (Matches(
"DECLARE", MatchAnyN,
"CURSOR",
"WITH|WITHOUT"))
4108 COMPLETE_WITH(
"HOLD");
4110 else if (Matches(
"DECLARE", MatchAnyN,
"CURSOR",
"WITH|WITHOUT",
"HOLD"))
4111 COMPLETE_WITH(
"FOR");
4115 else if (Matches(
"DELETE"))
4116 COMPLETE_WITH(
"FROM");
4118 else if (TailMatches(
"DELETE",
"FROM"))
4119 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
4121 else if (TailMatches(
"DELETE",
"FROM", MatchAny))
4122 COMPLETE_WITH(
"USING",
"WHERE");
4126 else if (Matches(
"DISCARD"))
4127 COMPLETE_WITH(
"ALL",
"PLANS",
"SEQUENCES",
"TEMP");
4130 else if (Matches(
"DO"))
4131 COMPLETE_WITH(
"LANGUAGE");
4135 else if (Matches(
"DROP",
4136 "COLLATION|CONVERSION|DOMAIN|EXTENSION|LANGUAGE|PUBLICATION|SCHEMA|SEQUENCE|SERVER|SUBSCRIPTION|STATISTICS|TABLE|TYPE|VIEW",
4138 Matches(
"DROP",
"ACCESS",
"METHOD", MatchAny) ||
4139 Matches(
"DROP",
"EVENT",
"TRIGGER", MatchAny) ||
4140 Matches(
"DROP",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny) ||
4141 Matches(
"DROP",
"FOREIGN",
"TABLE", MatchAny) ||
4142 Matches(
"DROP",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE", MatchAny))
4143 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4144 else if (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny) &&
4145 ends_with(prev_wd,
')'))
4146 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4149 else if (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny))
4151 else if (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny,
"("))
4152 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
4153 else if (Matches(
"DROP",
"FOREIGN"))
4154 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
4155 else if (Matches(
"DROP",
"DATABASE", MatchAny))
4156 COMPLETE_WITH(
"WITH (");
4157 else if (HeadMatches(
"DROP",
"DATABASE") && (ends_with(prev_wd,
'(')))
4158 COMPLETE_WITH(
"FORCE");
4161 else if (Matches(
"DROP",
"INDEX"))
4162 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
4164 else if (Matches(
"DROP",
"INDEX",
"CONCURRENTLY"))
4165 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
4166 else if (Matches(
"DROP",
"INDEX", MatchAny))
4167 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4168 else if (Matches(
"DROP",
"INDEX",
"CONCURRENTLY", MatchAny))
4169 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4172 else if (Matches(
"DROP",
"MATERIALIZED"))
4173 COMPLETE_WITH(
"VIEW");
4174 else if (Matches(
"DROP",
"MATERIALIZED",
"VIEW"))
4175 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
4176 else if (Matches(
"DROP",
"MATERIALIZED",
"VIEW", MatchAny))
4177 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4180 else if (Matches(
"DROP",
"OWNED"))
4181 COMPLETE_WITH(
"BY");
4182 else if (Matches(
"DROP",
"OWNED",
"BY"))
4183 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4184 else if (Matches(
"DROP",
"OWNED",
"BY", MatchAny))
4185 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4188 else if (Matches(
"DROP",
"TEXT",
"SEARCH"))
4189 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
4192 else if (Matches(
"DROP",
"TRIGGER", MatchAny))
4193 COMPLETE_WITH(
"ON");
4194 else if (Matches(
"DROP",
"TRIGGER", MatchAny,
"ON"))
4196 set_completion_reference(prev2_wd);
4197 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
4199 else if (Matches(
"DROP",
"TRIGGER", MatchAny,
"ON", MatchAny))
4200 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4203 else if (Matches(
"DROP",
"ACCESS"))
4204 COMPLETE_WITH(
"METHOD");
4205 else if (Matches(
"DROP",
"ACCESS",
"METHOD"))
4206 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
4209 else if (Matches(
"DROP",
"EVENT"))
4210 COMPLETE_WITH(
"TRIGGER");
4211 else if (Matches(
"DROP",
"EVENT",
"TRIGGER"))
4212 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
4215 else if (Matches(
"DROP",
"POLICY"))
4216 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
4218 else if (Matches(
"DROP",
"POLICY", MatchAny))
4219 COMPLETE_WITH(
"ON");
4221 else if (Matches(
"DROP",
"POLICY", MatchAny,
"ON"))
4223 set_completion_reference(prev2_wd);
4224 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
4226 else if (Matches(
"DROP",
"POLICY", MatchAny,
"ON", MatchAny))
4227 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4230 else if (Matches(
"DROP",
"RULE", MatchAny))
4231 COMPLETE_WITH(
"ON");
4232 else if (Matches(
"DROP",
"RULE", MatchAny,
"ON"))
4234 set_completion_reference(prev2_wd);
4235 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
4237 else if (Matches(
"DROP",
"RULE", MatchAny,
"ON", MatchAny))
4238 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4241 else if (Matches(
"DROP",
"TRANSFORM"))
4242 COMPLETE_WITH(
"FOR");
4243 else if (Matches(
"DROP",
"TRANSFORM",
"FOR"))
4244 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4245 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny))
4246 COMPLETE_WITH(
"LANGUAGE");
4247 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
4249 set_completion_reference(prev2_wd);
4250 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
4252 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE", MatchAny))
4253 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4256 else if (Matches(
"EXECUTE"))
4257 COMPLETE_WITH_QUERY(Query_for_list_of_prepared_statements);
4263 else if (Matches(
"EXPLAIN"))
4264 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4265 "MERGE INTO",
"EXECUTE",
"ANALYZE",
"VERBOSE");
4266 else if (HeadMatches(
"EXPLAIN",
"(*") &&
4267 !HeadMatches(
"EXPLAIN",
"(*)"))
4274 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
4275 COMPLETE_WITH(
"ANALYZE",
"VERBOSE",
"COSTS",
"SETTINGS",
"GENERIC_PLAN",
4276 "BUFFERS",
"SERIALIZE",
"WAL",
"TIMING",
"SUMMARY",
4277 "MEMORY",
"FORMAT");
4278 else if (TailMatches(
"ANALYZE|VERBOSE|COSTS|SETTINGS|GENERIC_PLAN|BUFFERS|WAL|TIMING|SUMMARY|MEMORY"))
4279 COMPLETE_WITH(
"ON",
"OFF");
4280 else if (TailMatches(
"SERIALIZE"))
4281 COMPLETE_WITH(
"TEXT",
"NONE",
"BINARY");
4282 else if (TailMatches(
"FORMAT"))
4283 COMPLETE_WITH(
"TEXT",
"XML",
"JSON",
"YAML");
4285 else if (Matches(
"EXPLAIN",
"ANALYZE"))
4286 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4287 "MERGE INTO",
"EXECUTE",
"VERBOSE");
4288 else if (Matches(
"EXPLAIN",
"(*)") ||
4289 Matches(
"EXPLAIN",
"VERBOSE") ||
4290 Matches(
"EXPLAIN",
"ANALYZE",
"VERBOSE"))
4291 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4292 "MERGE INTO",
"EXECUTE");
4300 else if (Matches(
"FETCH|MOVE"))
4301 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
4318 else if (Matches(
"FETCH|MOVE",
"BACKWARD|FORWARD"))
4319 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
4329 else if (Matches(
"FETCH|MOVE",
"ABSOLUTE|BACKWARD|FORWARD|RELATIVE",
4330 MatchAnyExcept(
"FROM|IN")) ||
4331 Matches(
"FETCH|MOVE",
"ALL|NEXT|PRIOR|FIRST|LAST"))
4332 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
4336 else if (Matches(
"FETCH|MOVE", MatchAnyN,
"FROM|IN"))
4337 COMPLETE_WITH_QUERY(Query_for_list_of_cursors);
4341 else if (TailMatches(
"FOREIGN",
"DATA",
"WRAPPER") &&
4342 !TailMatches(
"CREATE", MatchAny, MatchAny, MatchAny))
4343 COMPLETE_WITH_QUERY(Query_for_list_of_fdws);
4345 else if (Matches(
"CREATE",
"SERVER", MatchAnyN,
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
4346 COMPLETE_WITH(
"OPTIONS");
4349 else if (TailMatches(
"FOREIGN",
"TABLE") &&
4350 !TailMatches(
"CREATE", MatchAny, MatchAny))
4351 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
4354 else if (TailMatches(
"FOREIGN",
"SERVER"))
4355 COMPLETE_WITH_QUERY(Query_for_list_of_servers);
4362 else if (TailMatches(
"GRANT|REVOKE") ||
4363 TailMatches(
"REVOKE",
"ADMIN|GRANT|INHERIT|SET",
"OPTION",
"FOR"))
4369 if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4371 if (TailMatches(
"GRANT") ||
4372 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR"))
4373 COMPLETE_WITH(
"SELECT",
"INSERT",
"UPDATE",
4374 "DELETE",
"TRUNCATE",
"REFERENCES",
"TRIGGER",
4375 "CREATE",
"EXECUTE",
"USAGE",
"MAINTAIN",
"ALL");
4376 else if (TailMatches(
"REVOKE"))
4377 COMPLETE_WITH(
"SELECT",
"INSERT",
"UPDATE",
4378 "DELETE",
"TRUNCATE",
"REFERENCES",
"TRIGGER",
4379 "CREATE",
"EXECUTE",
"USAGE",
"MAINTAIN",
"ALL",
4380 "GRANT OPTION FOR");
4382 else if (TailMatches(
"GRANT"))
4383 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4384 Privilege_options_of_grant_and_revoke);
4385 else if (TailMatches(
"REVOKE"))
4386 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4387 Privilege_options_of_grant_and_revoke,
4390 "INHERIT OPTION FOR",
4392 else if (TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR"))
4393 COMPLETE_WITH(Privilege_options_of_grant_and_revoke);
4394 else if (TailMatches(
"REVOKE",
"ADMIN|INHERIT|SET",
"OPTION",
"FOR"))
4395 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4398 else if (TailMatches(
"GRANT|REVOKE",
"ALTER") ||
4399 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER"))
4400 COMPLETE_WITH(
"SYSTEM");
4402 else if (TailMatches(
"REVOKE",
"SET"))
4403 COMPLETE_WITH(
"ON PARAMETER",
"OPTION FOR");
4404 else if (TailMatches(
"GRANT",
"SET") ||
4405 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"SET") ||
4406 TailMatches(
"GRANT|REVOKE",
"ALTER",
"SYSTEM") ||
4407 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER",
"SYSTEM"))
4408 COMPLETE_WITH(
"ON PARAMETER");
4410 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"PARAMETER") ||
4411 TailMatches(
"GRANT|REVOKE", MatchAny, MatchAny,
"ON",
"PARAMETER") ||
4412 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"PARAMETER") ||
4413 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny, MatchAny,
"ON",
"PARAMETER"))
4414 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_alter_system_set_vars);
4416 else if (TailMatches(
"GRANT", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4417 TailMatches(
"GRANT", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny))
4418 COMPLETE_WITH(
"TO");
4420 else if (TailMatches(
"REVOKE", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4421 TailMatches(
"REVOKE", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4422 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4423 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny))
4424 COMPLETE_WITH(
"FROM");
4430 else if (TailMatches(
"GRANT|REVOKE", MatchAny) ||
4431 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny))
4433 if (TailMatches(
"SELECT|INSERT|UPDATE|DELETE|TRUNCATE|REFERENCES|TRIGGER|CREATE|CONNECT|TEMPORARY|TEMP|EXECUTE|USAGE|MAINTAIN|ALL"))
4434 COMPLETE_WITH(
"ON");
4435 else if (TailMatches(
"GRANT", MatchAny))
4436 COMPLETE_WITH(
"TO");
4438 COMPLETE_WITH(
"FROM");
4448 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON") ||
4449 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON"))
4455 if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4456 COMPLETE_WITH(
"TABLES",
"SEQUENCES",
"FUNCTIONS",
"PROCEDURES",
"ROUTINES",
"TYPES",
"SCHEMAS");
4458 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_grantables,
4459 "ALL FUNCTIONS IN SCHEMA",
4460 "ALL PROCEDURES IN SCHEMA",
4461 "ALL ROUTINES IN SCHEMA",
4462 "ALL SEQUENCES IN SCHEMA",
4463 "ALL TABLES IN SCHEMA",
4466 "FOREIGN DATA WRAPPER",
4480 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"ALL") ||
4481 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"ALL"))
4482 COMPLETE_WITH(
"FUNCTIONS IN SCHEMA",
4483 "PROCEDURES IN SCHEMA",
4484 "ROUTINES IN SCHEMA",
4485 "SEQUENCES IN SCHEMA",
4486 "TABLES IN SCHEMA");
4487 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"FOREIGN") ||
4488 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"FOREIGN"))
4489 COMPLETE_WITH(
"DATA WRAPPER",
"SERVER");
4497 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON", MatchAny) ||
4498 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON", MatchAny))
4500 if (TailMatches(
"DATABASE"))
4501 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
4502 else if (TailMatches(
"DOMAIN"))
4503 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
4504 else if (TailMatches(
"FUNCTION"))
4505 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
4506 else if (TailMatches(
"LANGUAGE"))
4507 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
4508 else if (TailMatches(
"PROCEDURE"))
4509 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_procedures);
4510 else if (TailMatches(
"ROUTINE"))
4511 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
4512 else if (TailMatches(
"SCHEMA"))
4513 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
4514 else if (TailMatches(
"SEQUENCE"))
4515 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_sequences);
4516 else if (TailMatches(
"TABLE"))
4517 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_grantables);
4518 else if (TailMatches(
"TABLESPACE"))
4519 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
4520 else if (TailMatches(
"TYPE"))
4521 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4522 else if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny))
4523 COMPLETE_WITH(
"TO");
4525 COMPLETE_WITH(
"FROM");
4532 else if (Matches(
"GRANT", MatchAnyN,
"TO") ||
4533 Matches(
"REVOKE", MatchAnyN,
"FROM"))
4534 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4535 Keywords_for_list_of_grant_roles);
4540 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny))
4541 COMPLETE_WITH(
"WITH ADMIN",
4544 "WITH GRANT OPTION",
4546 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny,
"WITH"))
4547 COMPLETE_WITH(
"ADMIN",
4551 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny,
"WITH",
"ADMIN|INHERIT|SET"))
4552 COMPLETE_WITH(
"OPTION",
"TRUE",
"FALSE");
4553 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny,
"WITH", MatchAny,
"OPTION"))
4554 COMPLETE_WITH(
"GRANTED BY");
4555 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny,
"WITH", MatchAny,
"OPTION",
"GRANTED",
"BY"))
4556 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4557 Keywords_for_list_of_grant_roles);
4559 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES", MatchAnyN,
"TO|FROM"))
4560 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4561 Keywords_for_list_of_grant_roles);
4563 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES", MatchAnyN,
"TO", MatchAny))
4564 COMPLETE_WITH(
"WITH GRANT OPTION");
4566 else if (Matches(
"GRANT", MatchAnyN,
"ON", MatchAny, MatchAny))
4567 COMPLETE_WITH(
"TO");
4568 else if (Matches(
"REVOKE", MatchAnyN,
"ON", MatchAny, MatchAny))
4569 COMPLETE_WITH(
"FROM");
4572 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"ALL", MatchAny,
"IN",
"SCHEMA", MatchAny) ||
4573 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"ALL", MatchAny,
"IN",
"SCHEMA", MatchAny))
4575 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4576 COMPLETE_WITH(
"TO");
4578 COMPLETE_WITH(
"FROM");
4582 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny) ||
4583 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
4585 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4586 COMPLETE_WITH(
"TO");
4588 COMPLETE_WITH(
"FROM");
4592 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"FOREIGN",
"SERVER", MatchAny) ||
4593 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"FOREIGN",
"SERVER", MatchAny))
4595 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4596 COMPLETE_WITH(
"TO");
4598 COMPLETE_WITH(
"FROM");
4602 else if (TailMatches(
"FROM", MatchAny,
"GROUP"))
4603 COMPLETE_WITH(
"BY");
4606 else if (Matches(
"IMPORT"))
4607 COMPLETE_WITH(
"FOREIGN SCHEMA");
4608 else if (Matches(
"IMPORT",
"FOREIGN"))
4609 COMPLETE_WITH(
"SCHEMA");
4610 else if (Matches(
"IMPORT",
"FOREIGN",
"SCHEMA", MatchAny))
4611 COMPLETE_WITH(
"EXCEPT (",
"FROM SERVER",
"LIMIT TO (");
4612 else if (TailMatches(
"LIMIT",
"TO",
"(*)") ||
4613 TailMatches(
"EXCEPT",
"(*)"))
4614 COMPLETE_WITH(
"FROM SERVER");
4615 else if (TailMatches(
"FROM",
"SERVER", MatchAny))
4616 COMPLETE_WITH(
"INTO");
4617 else if (TailMatches(
"FROM",
"SERVER", MatchAny,
"INTO"))
4618 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
4619 else if (TailMatches(
"FROM",
"SERVER", MatchAny,
"INTO", MatchAny))
4620 COMPLETE_WITH(
"OPTIONS (");
4624 else if (TailMatches(
"NOT",
"MATCHED",
"THEN",
"INSERT"))
4625 COMPLETE_WITH(
"VALUES",
"(");
4627 else if (TailMatches(
"INSERT"))
4628 COMPLETE_WITH(
"INTO");
4630 else if (TailMatches(
"INSERT",
"INTO"))
4631 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
4633 else if (TailMatches(
"INSERT",
"INTO", MatchAny,
"("))
4634 COMPLETE_WITH_ATTR(prev2_wd);
4640 else if (TailMatches(
"INSERT",
"INTO", MatchAny))
4641 COMPLETE_WITH(
"(",
"DEFAULT VALUES",
"SELECT",
"TABLE",
"VALUES",
"OVERRIDING");
4647 else if (TailMatches(
"INSERT",
"INTO", MatchAny, MatchAny) &&
4648 ends_with(prev_wd,
')'))
4649 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES",
"OVERRIDING");
4652 else if (TailMatches(
"OVERRIDING"))
4653 COMPLETE_WITH(
"SYSTEM VALUE",
"USER VALUE");
4656 else if (TailMatches(
"OVERRIDING", MatchAny,
"VALUE"))
4657 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES");
4660 else if (TailMatches(
"VALUES") && !TailMatches(
"DEFAULT",
"VALUES"))
4665 else if (Matches(
"LOCK"))
4666 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
4668 else if (Matches(
"LOCK",
"TABLE"))
4669 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
4671 else if (Matches(
"LOCK",
"TABLE",
"ONLY") || Matches(
"LOCK",
"ONLY"))
4672 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
4676 else if (Matches(
"LOCK", MatchAnyExcept(
"TABLE|ONLY")) ||
4677 Matches(
"LOCK",
"TABLE", MatchAnyExcept(
"ONLY")) ||
4678 Matches(
"LOCK",
"ONLY", MatchAny) ||
4679 Matches(
"LOCK",
"TABLE",
"ONLY", MatchAny))
4680 COMPLETE_WITH(
"IN",
"NOWAIT");
4683 else if (Matches(
"LOCK", MatchAnyN,
"IN"))
4684 COMPLETE_WITH(
"ACCESS SHARE MODE",
4685 "ROW SHARE MODE",
"ROW EXCLUSIVE MODE",
4686 "SHARE UPDATE EXCLUSIVE MODE",
"SHARE MODE",
4687 "SHARE ROW EXCLUSIVE MODE",
4688 "EXCLUSIVE MODE",
"ACCESS EXCLUSIVE MODE");
4694 else if (Matches(
"LOCK", MatchAnyN,
"IN",
"ACCESS|ROW"))
4695 COMPLETE_WITH(
"EXCLUSIVE MODE",
"SHARE MODE");
4698 else if (Matches(
"LOCK", MatchAnyN,
"IN",
"SHARE"))
4699 COMPLETE_WITH(
"MODE",
"ROW EXCLUSIVE MODE",
4700 "UPDATE EXCLUSIVE MODE");
4703 else if (Matches(
"LOCK", MatchAnyN,
"MODE"))
4704 COMPLETE_WITH(
"NOWAIT");
4707 else if (TailMatches(
"MERGE"))
4708 COMPLETE_WITH(
"INTO");
4709 else if (TailMatches(
"MERGE",
"INTO"))
4710 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_mergetargets);
4713 else if (TailMatches(
"MERGE",
"INTO", MatchAny))
4714 COMPLETE_WITH(
"USING",
"AS");
4715 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny) ||
4716 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAnyExcept(
"USING|AS")))
4717 COMPLETE_WITH(
"USING");
4723 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING") ||
4724 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING") ||
4725 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING"))
4726 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
4732 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING", MatchAny) ||
4733 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny) ||
4734 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING", MatchAny))
4735 COMPLETE_WITH(
"AS",
"ON");
4736 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING", MatchAny,
"AS", MatchAny) ||
4737 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny,
"AS", MatchAny) ||
4738 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING", MatchAny,
"AS", MatchAny) ||
4739 TailMatches(
"MERGE",
"INTO", MatchAny,
"USING", MatchAny, MatchAnyExcept(
"ON|AS")) ||
4740 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny, MatchAnyExcept(
"ON|AS")) ||
4741 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING", MatchAny, MatchAnyExcept(
"ON|AS")))
4742 COMPLETE_WITH(
"ON");
4745 else if (TailMatches(
"INTO", MatchAny,
"USING", MatchAny,
"ON"))
4746 COMPLETE_WITH_ATTR(prev4_wd);
4747 else if (TailMatches(
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny,
"AS", MatchAny,
"ON"))
4748 COMPLETE_WITH_ATTR(prev8_wd);
4749 else if (TailMatches(
"INTO", MatchAny, MatchAny,
"USING", MatchAny, MatchAny,
"ON"))
4750 COMPLETE_WITH_ATTR(prev6_wd);
4757 else if (TailMatches(
"USING", MatchAny,
"ON", MatchAny) ||
4758 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny) ||
4759 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny) ||
4760 TailMatches(
"USING", MatchAny,
"ON", MatchAny, MatchAnyExcept(
"WHEN"), MatchAnyExcept(
"WHEN")) ||
4761 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny, MatchAnyExcept(
"WHEN"), MatchAnyExcept(
"WHEN")) ||
4762 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny, MatchAnyExcept(
"WHEN"), MatchAnyExcept(
"WHEN")))
4763 COMPLETE_WITH(
"WHEN MATCHED",
"WHEN NOT MATCHED");
4764 else if (TailMatches(
"USING", MatchAny,
"ON", MatchAny,
"WHEN") ||
4765 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny,
"WHEN") ||
4766 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny,
"WHEN") ||
4767 TailMatches(
"USING", MatchAny,
"ON", MatchAny, MatchAny, MatchAny,
"WHEN") ||
4768 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny, MatchAny, MatchAny,
"WHEN") ||
4769 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny, MatchAny, MatchAny,
"WHEN"))
4770 COMPLETE_WITH(
"MATCHED",
"NOT MATCHED");
4776 else if (TailMatches(
"WHEN",
"MATCHED") ||
4777 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"SOURCE|TARGET"))
4778 COMPLETE_WITH(
"THEN",
"AND");
4781 else if (TailMatches(
"WHEN",
"NOT",
"MATCHED"))
4782 COMPLETE_WITH(
"BY",
"THEN",
"AND");
4785 else if (TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY"))
4786 COMPLETE_WITH(
"SOURCE",
"TARGET");
4792 else if (TailMatches(
"WHEN",
"MATCHED",
"THEN") ||
4793 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"SOURCE",
"THEN"))
4794 COMPLETE_WITH(
"UPDATE SET",
"DELETE",
"DO NOTHING");
4799 else if (TailMatches(
"WHEN",
"NOT",
"MATCHED",
"THEN") ||
4800 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"TARGET",
"THEN"))
4801 COMPLETE_WITH(
"INSERT",
"DO NOTHING");
4804 else if (TailMatches(
"NOTIFY"))
4805 COMPLETE_WITH_QUERY(Query_for_list_of_channels);
4808 else if (TailMatches(
"OPTIONS"))
4812 else if (TailMatches(
"OWNER",
"TO"))
4813 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4814 Keywords_for_list_of_owner_roles);
4817 else if (TailMatches(
"FROM", MatchAny,
"ORDER"))
4818 COMPLETE_WITH(
"BY");
4819 else if (TailMatches(
"FROM", MatchAny,
"ORDER",
"BY"))
4820 COMPLETE_WITH_ATTR(prev3_wd);
4823 else if (Matches(
"PREPARE", MatchAny,
"AS"))
4824 COMPLETE_WITH(
"SELECT",
"UPDATE",
"INSERT INTO",
"DELETE FROM");
4832 else if (Matches(
"REASSIGN"))
4833 COMPLETE_WITH(
"OWNED BY");
4834 else if (Matches(
"REASSIGN",
"OWNED"))
4835 COMPLETE_WITH(
"BY");
4836 else if (Matches(
"REASSIGN",
"OWNED",
"BY"))
4837 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4838 else if (Matches(
"REASSIGN",
"OWNED",
"BY", MatchAny))
4839 COMPLETE_WITH(
"TO");
4840 else if (Matches(
"REASSIGN",
"OWNED",
"BY", MatchAny,
"TO"))
4841 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4844 else if (Matches(
"REFRESH"))
4845 COMPLETE_WITH(
"MATERIALIZED VIEW");
4846 else if (Matches(
"REFRESH",
"MATERIALIZED"))
4847 COMPLETE_WITH(
"VIEW");
4848 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW"))
4849 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_matviews,
4851 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY"))
4852 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
4853 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny))
4854 COMPLETE_WITH(
"WITH");
4855 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny))
4856 COMPLETE_WITH(
"WITH");
4857 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny,
"WITH"))
4858 COMPLETE_WITH(
"NO DATA",
"DATA");
4859 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny,
"WITH"))
4860 COMPLETE_WITH(
"NO DATA",
"DATA");
4861 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny,
"WITH",
"NO"))
4862 COMPLETE_WITH(
"DATA");
4863 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny,
"WITH",
"NO"))
4864 COMPLETE_WITH(
"DATA");
4867 else if (Matches(
"REINDEX") ||
4868 Matches(
"REINDEX",
"(*)"))
4869 COMPLETE_WITH(
"TABLE",
"INDEX",
"SYSTEM",
"SCHEMA",
"DATABASE");
4870 else if (Matches(
"REINDEX",
"TABLE") ||
4871 Matches(
"REINDEX",
"(*)",
"TABLE"))
4872 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexables,
4874 else if (Matches(
"REINDEX",
"INDEX") ||
4875 Matches(
"REINDEX",
"(*)",
"INDEX"))
4876 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
4878 else if (Matches(
"REINDEX",
"SCHEMA") ||
4879 Matches(
"REINDEX",
"(*)",
"SCHEMA"))
4880 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas,
4882 else if (Matches(
"REINDEX",
"SYSTEM|DATABASE") ||
4883 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE"))
4884 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_databases,
4886 else if (Matches(
"REINDEX",
"TABLE",
"CONCURRENTLY") ||
4887 Matches(
"REINDEX",
"(*)",
"TABLE",
"CONCURRENTLY"))
4888 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexables);
4889 else if (Matches(
"REINDEX",
"INDEX",
"CONCURRENTLY") ||
4890 Matches(
"REINDEX",
"(*)",
"INDEX",
"CONCURRENTLY"))
4891 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
4892 else if (Matches(
"REINDEX",
"SCHEMA",
"CONCURRENTLY") ||
4893 Matches(
"REINDEX",
"(*)",
"SCHEMA",
"CONCURRENTLY"))
4894 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
4895 else if (Matches(
"REINDEX",
"SYSTEM|DATABASE",
"CONCURRENTLY") ||
4896 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE",
"CONCURRENTLY"))
4897 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
4898 else if (HeadMatches(
"REINDEX",
"(*") &&
4899 !HeadMatches(
"REINDEX",
"(*)"))
4906 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
4907 COMPLETE_WITH(
"CONCURRENTLY",
"TABLESPACE",
"VERBOSE");
4908 else if (TailMatches(
"TABLESPACE"))
4909 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
4913 else if (Matches(
"SECURITY"))
4914 COMPLETE_WITH(
"LABEL");
4915 else if (Matches(
"SECURITY",
"LABEL"))
4916 COMPLETE_WITH(
"ON",
"FOR");
4917 else if (Matches(
"SECURITY",
"LABEL",
"FOR", MatchAny))
4918 COMPLETE_WITH(
"ON");
4919 else if (Matches(
"SECURITY",
"LABEL",
"ON") ||
4920 Matches(
"SECURITY",
"LABEL",
"FOR", MatchAny,
"ON"))
4921 COMPLETE_WITH(
"TABLE",
"COLUMN",
"AGGREGATE",
"DATABASE",
"DOMAIN",
4922 "EVENT TRIGGER",
"FOREIGN TABLE",
"FUNCTION",
4923 "LARGE OBJECT",
"MATERIALIZED VIEW",
"LANGUAGE",
4924 "PUBLICATION",
"PROCEDURE",
"ROLE",
"ROUTINE",
"SCHEMA",
4925 "SEQUENCE",
"SUBSCRIPTION",
"TABLESPACE",
"TYPE",
"VIEW");
4926 else if (Matches(
"SECURITY",
"LABEL",
"ON", MatchAny, MatchAny))
4927 COMPLETE_WITH(
"IS");
4934 else if (TailMatches(
"SET|RESET") &&
4935 !TailMatches(
"UPDATE", MatchAny,
"SET") &&
4936 !TailMatches(
"ALTER",
"DATABASE", MatchAny,
"RESET"))
4937 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
4944 else if (Matches(
"SHOW"))
4945 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_show_vars,
4946 "SESSION AUTHORIZATION",
4948 else if (Matches(
"SHOW",
"SESSION"))
4949 COMPLETE_WITH(
"AUTHORIZATION");
4951 else if (Matches(
"SET",
"TRANSACTION"))
4952 COMPLETE_WITH(
"SNAPSHOT",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
4953 else if (Matches(
"BEGIN|START",
"TRANSACTION") ||
4954 Matches(
"BEGIN",
"WORK") ||
4956 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION"))
4957 COMPLETE_WITH(
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
4958 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"NOT") ||
4959 Matches(
"BEGIN",
"NOT") ||
4960 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"NOT"))
4961 COMPLETE_WITH(
"DEFERRABLE");
4962 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION") ||
4963 Matches(
"BEGIN",
"ISOLATION") ||
4964 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION"))
4965 COMPLETE_WITH(
"LEVEL");
4966 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL") ||
4967 Matches(
"BEGIN",
"ISOLATION",
"LEVEL") ||
4968 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL"))
4969 COMPLETE_WITH(
"READ",
"REPEATABLE READ",
"SERIALIZABLE");
4970 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"READ") ||
4971 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"READ") ||
4972 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"READ"))
4973 COMPLETE_WITH(
"UNCOMMITTED",
"COMMITTED");
4974 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
4975 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
4976 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"REPEATABLE"))
4977 COMPLETE_WITH(
"READ");
4978 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"READ") ||
4979 Matches(
"BEGIN",
"READ") ||
4980 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"READ"))
4981 COMPLETE_WITH(
"ONLY",
"WRITE");
4983 else if (Matches(
"SET",
"CONSTRAINTS"))
4984 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_constraints_with_schema,
4987 else if (Matches(
"SET",
"CONSTRAINTS", MatchAny))
4988 COMPLETE_WITH(
"DEFERRED",
"IMMEDIATE");
4990 else if (Matches(
"SET",
"ROLE"))
4991 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4993 else if (Matches(
"SET",
"SESSION"))
4994 COMPLETE_WITH(
"AUTHORIZATION",
"CHARACTERISTICS AS TRANSACTION");
4996 else if (Matches(
"SET",
"SESSION",
"AUTHORIZATION"))
4997 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
5000 else if (Matches(
"RESET",
"SESSION"))
5001 COMPLETE_WITH(
"AUTHORIZATION");
5003 else if (Matches(
"SET", MatchAny))
5004 COMPLETE_WITH(
"TO");
5010 else if (Matches(
"ALTER",
"DATABASE|FUNCTION|PROCEDURE|ROLE|ROUTINE|USER", MatchAnyN,
"SET", MatchAnyExcept(
"SCHEMA")))
5011 COMPLETE_WITH(
"FROM CURRENT",
"TO");
5017 else if (TailMatches(
"SET", MatchAny,
"TO|=") &&
5018 !TailMatches(
"UPDATE", MatchAny,
"SET", MatchAny,
"TO|="))
5021 if (TailMatches(
"DateStyle",
"TO|="))
5022 COMPLETE_WITH(
"ISO",
"SQL",
"Postgres",
"German",
5023 "YMD",
"DMY",
"MDY",
5024 "US",
"European",
"NonEuropean",
5026 else if (TailMatches(
"search_path",
"TO|="))
5029 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
5030 " AND nspname NOT LIKE E'pg\\\\_toast%%'"
5031 " AND nspname NOT LIKE E'pg\\\\_temp%%'",
5034 else if (TailMatches(
"TimeZone",
"TO|="))
5035 COMPLETE_WITH_TIMEZONE_NAME();
5039 char *guctype = get_guctype(prev2_wd);
5048 if (strcmp(guctype,
"enum") == 0)
5050 set_completion_reference_verbatim(prev2_wd);
5051 COMPLETE_WITH_QUERY_PLUS(Query_for_values_of_enum_GUC,
5054 else if (strcmp(guctype,
"bool") == 0)
5055 COMPLETE_WITH(
"on",
"off",
"true",
"false",
"yes",
"no",
5056 "1",
"0",
"DEFAULT");
5058 COMPLETE_WITH(
"DEFAULT");
5066 else if (Matches(
"START"))
5067 COMPLETE_WITH(
"TRANSACTION");
5070 else if (Matches(
"TABLE"))
5071 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
5074 else if (TailMatches(
"TABLESAMPLE"))
5075 COMPLETE_WITH_QUERY(Query_for_list_of_tablesample_methods);
5076 else if (TailMatches(
"TABLESAMPLE", MatchAny))
5080 else if (Matches(
"TRUNCATE"))
5081 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_truncatables,
5083 else if (Matches(
"TRUNCATE",
"TABLE"))
5084 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_truncatables,
5086 else if (Matches(
"TRUNCATE", MatchAnyN,
"ONLY"))
5087 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_truncatables);
5088 else if (Matches(
"TRUNCATE", MatchAny) ||
5089 Matches(
"TRUNCATE",
"TABLE|ONLY", MatchAny) ||
5090 Matches(
"TRUNCATE",
"TABLE",
"ONLY", MatchAny))
5091 COMPLETE_WITH(
"RESTART IDENTITY",
"CONTINUE IDENTITY",
"CASCADE",
"RESTRICT");
5092 else if (Matches(
"TRUNCATE", MatchAnyN,
"IDENTITY"))
5093 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
5096 else if (Matches(
"UNLISTEN"))
5097 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_channels,
"*");
5101 else if (TailMatches(
"UPDATE"))
5102 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
5104 else if (TailMatches(
"UPDATE", MatchAny))
5105 COMPLETE_WITH(
"SET");
5107 else if (TailMatches(
"UPDATE", MatchAny,
"SET"))
5108 COMPLETE_WITH_ATTR(prev2_wd);
5110 else if (TailMatches(
"UPDATE", MatchAny,
"SET", MatchAnyExcept(
"*=")))
5114 else if (Matches(
"ALTER|CREATE|DROP",
"USER",
"MAPPING"))
5115 COMPLETE_WITH(
"FOR");
5116 else if (Matches(
"CREATE",
"USER",
"MAPPING",
"FOR"))
5117 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
5122 else if (Matches(
"ALTER|DROP",
"USER",
"MAPPING",
"FOR"))
5123 COMPLETE_WITH_QUERY(Query_for_list_of_user_mappings);
5124 else if (Matches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING",
"FOR", MatchAny))
5125 COMPLETE_WITH(
"SERVER");
5126 else if (Matches(
"CREATE|ALTER",
"USER",
"MAPPING",
"FOR", MatchAny,
"SERVER", MatchAny))
5127 COMPLETE_WITH(
"OPTIONS");
5133 else if (Matches(
"VACUUM"))
5134 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5139 else if (Matches(
"VACUUM",
"FULL"))
5140 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5144 else if (Matches(
"VACUUM",
"FREEZE") ||
5145 Matches(
"VACUUM",
"FULL",
"FREEZE"))
5146 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5149 else if (Matches(
"VACUUM",
"VERBOSE") ||
5150 Matches(
"VACUUM",
"FULL|FREEZE",
"VERBOSE") ||
5151 Matches(
"VACUUM",
"FULL",
"FREEZE",
"VERBOSE"))
5152 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5154 else if (HeadMatches(
"VACUUM",
"(*") &&
5155 !HeadMatches(
"VACUUM",
"(*)"))
5162 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
5163 COMPLETE_WITH(
"FULL",
"FREEZE",
"ANALYZE",
"VERBOSE",
5164 "DISABLE_PAGE_SKIPPING",
"SKIP_LOCKED",
5165 "INDEX_CLEANUP",
"PROCESS_MAIN",
"PROCESS_TOAST",
5166 "TRUNCATE",
"PARALLEL",
"SKIP_DATABASE_STATS",
5167 "ONLY_DATABASE_STATS",
"BUFFER_USAGE_LIMIT");
5168 else if (TailMatches(
"FULL|FREEZE|ANALYZE|VERBOSE|DISABLE_PAGE_SKIPPING|SKIP_LOCKED|PROCESS_MAIN|PROCESS_TOAST|TRUNCATE|SKIP_DATABASE_STATS|ONLY_DATABASE_STATS"))
5169 COMPLETE_WITH(
"ON",
"OFF");
5170 else if (TailMatches(
"INDEX_CLEANUP"))
5171 COMPLETE_WITH(
"AUTO",
"ON",
"OFF");
5173 else if (Matches(
"VACUUM", MatchAnyN,
"("))
5175 COMPLETE_WITH_ATTR(prev2_wd);
5176 else if (HeadMatches(
"VACUUM"))
5177 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_vacuumables);
5185 else if (Matches(
"WITH"))
5186 COMPLETE_WITH(
"RECURSIVE");
5190 else if (TailMatches(MatchAny,
"WHERE"))
5191 COMPLETE_WITH_ATTR(prev2_wd);
5195 else if (TailMatches(
"FROM") && !Matches(
"COPY|\\copy", MatchAny,
"FROM"))
5196 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
5199 else if (TailMatches(
"JOIN"))
5200 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_selectables,
"LATERAL");
5201 else if (TailMatches(
"JOIN", MatchAny) && !TailMatches(
"CROSS|NATURAL",
"JOIN", MatchAny))
5202 COMPLETE_WITH(
"ON",
"USING (");
5203 else if (TailMatches(
"JOIN", MatchAny, MatchAny) &&
5204 !TailMatches(
"CROSS|NATURAL",
"JOIN", MatchAny, MatchAny) && !TailMatches(
"ON|USING"))
5205 COMPLETE_WITH(
"ON",
"USING (");
5206 else if (TailMatches(
"JOIN",
"LATERAL", MatchAny, MatchAny) &&
5207 !TailMatches(
"CROSS|NATURAL",
"JOIN",
"LATERAL", MatchAny, MatchAny) && !TailMatches(
"ON|USING"))
5208 COMPLETE_WITH(
"ON",
"USING (");
5209 else if (TailMatches(
"JOIN", MatchAny,
"USING") ||
5210 TailMatches(
"JOIN", MatchAny, MatchAny,
"USING") ||
5211 TailMatches(
"JOIN",
"LATERAL", MatchAny, MatchAny,
"USING"))
5213 else if (TailMatches(
"JOIN", MatchAny,
"USING",
"("))
5214 COMPLETE_WITH_ATTR(prev3_wd);
5215 else if (TailMatches(
"JOIN", MatchAny, MatchAny,
"USING",
"("))
5216 COMPLETE_WITH_ATTR(prev4_wd);
5219 else if (TailMatches(
"AT"))
5220 COMPLETE_WITH(
"LOCAL",
"TIME ZONE");
5221 else if (TailMatches(
"AT",
"TIME",
"ZONE"))
5222 COMPLETE_WITH_TIMEZONE_NAME();
5226 else if (TailMatchesCS(
"\\?"))
5227 COMPLETE_WITH_CS(
"commands",
"options",
"variables");
5228 else if (TailMatchesCS(
"\\connect|\\c"))
5231 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
5233 else if (TailMatchesCS(
"\\connect|\\c", MatchAny))
5236 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
5238 else if (TailMatchesCS(
"\\da*"))
5239 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_aggregates);
5240 else if (TailMatchesCS(
"\\dAc*", MatchAny) ||
5241 TailMatchesCS(
"\\dAf*", MatchAny))
5242 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
5243 else if (TailMatchesCS(
"\\dAo*", MatchAny) ||
5244 TailMatchesCS(
"\\dAp*", MatchAny))
5245 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_operator_families);
5246 else if (TailMatchesCS(
"\\dA*"))
5247 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
5248 else if (TailMatchesCS(
"\\db*"))
5249 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
5250 else if (TailMatchesCS(
"\\dconfig*"))
5251 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_show_vars);
5252 else if (TailMatchesCS(
"\\dD*"))
5253 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
5254 else if (TailMatchesCS(
"\\des*"))
5255 COMPLETE_WITH_QUERY(Query_for_list_of_servers);
5256 else if (TailMatchesCS(
"\\deu*"))
5257 COMPLETE_WITH_QUERY(Query_for_list_of_user_mappings);
5258 else if (TailMatchesCS(
"\\dew*"))
5259 COMPLETE_WITH_QUERY(Query_for_list_of_fdws);
5260 else if (TailMatchesCS(
"\\df*"))
5261 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
5262 else if (HeadMatchesCS(
"\\df*"))
5263 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
5265 else if (TailMatchesCS(
"\\dFd*"))
5266 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_dictionaries);
5267 else if (TailMatchesCS(
"\\dFp*"))
5268 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_parsers);
5269 else if (TailMatchesCS(
"\\dFt*"))
5270 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_templates);
5272 else if (TailMatchesCS(
"\\dF*"))
5273 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_configurations);
5275 else if (TailMatchesCS(
"\\di*"))
5276 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
5277 else if (TailMatchesCS(
"\\dL*"))
5278 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
5279 else if (TailMatchesCS(
"\\dn*"))
5280 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
5282 else if (HeadMatchesCS(
"\\do*", MatchAny))
5283 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
5284 else if (TailMatchesCS(
"\\dp") || TailMatchesCS(
"\\z"))
5285 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_grantables);
5286 else if (TailMatchesCS(
"\\dPi*"))
5287 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_indexes);
5288 else if (TailMatchesCS(
"\\dPt*"))
5289 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_tables);
5290 else if (TailMatchesCS(
"\\dP*"))
5291 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_relations);
5292 else if (TailMatchesCS(
"\\dRp*"))
5293 COMPLETE_WITH_VERSIONED_QUERY(Query_for_list_of_publications);
5294 else if (TailMatchesCS(
"\\dRs*"))
5295 COMPLETE_WITH_VERSIONED_QUERY(Query_for_list_of_subscriptions);
5296 else if (TailMatchesCS(
"\\ds*"))
5297 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_sequences);
5298 else if (TailMatchesCS(
"\\dt*"))
5299 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
5300 else if (TailMatchesCS(
"\\dT*"))
5301 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
5302 else if (TailMatchesCS(
"\\du*") ||
5303 TailMatchesCS(
"\\dg*") ||
5304 TailMatchesCS(
"\\drg*"))
5305 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
5306 else if (TailMatchesCS(
"\\dv*"))
5307 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
5308 else if (TailMatchesCS(
"\\dx*"))
5309 COMPLETE_WITH_QUERY(Query_for_list_of_extensions);
5310 else if (TailMatchesCS(
"\\dX*"))
5311 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_statistics);
5312 else if (TailMatchesCS(
"\\dm*"))
5313 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
5314 else if (TailMatchesCS(
"\\dE*"))
5315 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
5316 else if (TailMatchesCS(
"\\dy*"))
5317 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
5320 else if (TailMatchesCS(
"\\d*"))
5321 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_relations);
5323 else if (TailMatchesCS(
"\\ef"))
5324 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
5325 else if (TailMatchesCS(
"\\ev"))
5326 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
5328 else if (TailMatchesCS(
"\\encoding"))
5329 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_encodings);
5330 else if (TailMatchesCS(
"\\h|\\help"))
5331 COMPLETE_WITH_LIST(sql_commands);
5332 else if (TailMatchesCS(
"\\h|\\help", MatchAny))
5334 if (TailMatches(
"DROP"))
5335 matches = rl_completion_matches(
text, drop_command_generator);
5336 else if (TailMatches(
"ALTER"))
5337 matches = rl_completion_matches(
text, alter_command_generator);
5344 else if (TailMatchesCS(
"\\h|\\help", MatchAny, MatchAny))
5346 if (TailMatches(
"CREATE|DROP",
"ACCESS"))
5347 COMPLETE_WITH(
"METHOD");
5348 else if (TailMatches(
"ALTER",
"DEFAULT"))
5349 COMPLETE_WITH(
"PRIVILEGES");
5350 else if (TailMatches(
"CREATE|ALTER|DROP",
"EVENT"))
5351 COMPLETE_WITH(
"TRIGGER");
5352 else if (TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN"))
5353 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
5354 else if (TailMatches(
"ALTER",
"LARGE"))
5355 COMPLETE_WITH(
"OBJECT");
5356 else if (TailMatches(
"CREATE|ALTER|DROP",
"MATERIALIZED"))
5357 COMPLETE_WITH(
"VIEW");
5358 else if (TailMatches(
"CREATE|ALTER|DROP",
"TEXT"))
5359 COMPLETE_WITH(
"SEARCH");
5360 else if (TailMatches(
"CREATE|ALTER|DROP",
"USER"))
5361 COMPLETE_WITH(
"MAPPING FOR");
5363 else if (TailMatchesCS(
"\\h|\\help", MatchAny, MatchAny, MatchAny))
5365 if (TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN",
"DATA"))
5366 COMPLETE_WITH(
"WRAPPER");
5367 else if (TailMatches(
"CREATE|ALTER|DROP",
"TEXT",
"SEARCH"))
5368 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
5369 else if (TailMatches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING"))
5370 COMPLETE_WITH(
"FOR");
5372 else if (TailMatchesCS(
"\\l*") && !TailMatchesCS(
"\\lo*"))
5373 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
5374 else if (TailMatchesCS(
"\\password"))
5375 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
5376 else if (TailMatchesCS(
"\\pset"))
5377 COMPLETE_WITH_CS(
"border",
"columns",
"csv_fieldsep",
"expanded",
5378 "fieldsep",
"fieldsep_zero",
"footer",
"format",
5379 "linestyle",
"null",
"numericlocale",
5380 "pager",
"pager_min_lines",
5381 "recordsep",
"recordsep_zero",
5382 "tableattr",
"title",
"tuples_only",
5383 "unicode_border_linestyle",
5384 "unicode_column_linestyle",
5385 "unicode_header_linestyle",
5387 else if (TailMatchesCS(
"\\pset", MatchAny))
5389 if (TailMatchesCS(
"format"))
5390 COMPLETE_WITH_CS(
"aligned",
"asciidoc",
"csv",
"html",
"latex",
5391 "latex-longtable",
"troff-ms",
"unaligned",
5393 else if (TailMatchesCS(
"xheader_width"))
5394 COMPLETE_WITH_CS(
"full",
"column",
"page");
5395 else if (TailMatchesCS(
"linestyle"))
5396 COMPLETE_WITH_CS(
"ascii",
"old-ascii",
"unicode");
5397 else if (TailMatchesCS(
"pager"))
5398 COMPLETE_WITH_CS(
"on",
"off",
"always");
5399 else if (TailMatchesCS(
"unicode_border_linestyle|"
5400 "unicode_column_linestyle|"
5401 "unicode_header_linestyle"))
5402 COMPLETE_WITH_CS(
"single",
"double");
5404 else if (TailMatchesCS(
"\\unset"))
5405 matches = complete_from_variables(
text,
"",
"",
true);
5406 else if (TailMatchesCS(
"\\set"))
5407 matches = complete_from_variables(
text,
"",
"",
false);
5408 else if (TailMatchesCS(
"\\set", MatchAny))
5410 if (TailMatchesCS(
"AUTOCOMMIT|ON_ERROR_STOP|QUIET|SHOW_ALL_RESULTS|"
5411 "SINGLELINE|SINGLESTEP"))
5412 COMPLETE_WITH_CS(
"on",
"off");
5413 else if (TailMatchesCS(
"COMP_KEYWORD_CASE"))
5414 COMPLETE_WITH_CS(
"lower",
"upper",
5415 "preserve-lower",
"preserve-upper");
5416 else if (TailMatchesCS(
"ECHO"))
5417 COMPLETE_WITH_CS(
"errors",
"queries",
"all",
"none");
5418 else if (TailMatchesCS(
"ECHO_HIDDEN"))
5419 COMPLETE_WITH_CS(
"noexec",
"off",
"on");
5420 else if (TailMatchesCS(
"HISTCONTROL"))
5421 COMPLETE_WITH_CS(
"ignorespace",
"ignoredups",
5422 "ignoreboth",
"none");
5423 else if (TailMatchesCS(
"ON_ERROR_ROLLBACK"))
5424 COMPLETE_WITH_CS(
"on",
"off",
"interactive");
5425 else if (TailMatchesCS(
"SHOW_CONTEXT"))
5426 COMPLETE_WITH_CS(
"never",
"errors",
"always");
5427 else if (TailMatchesCS(
"VERBOSITY"))
5428 COMPLETE_WITH_CS(
"default",
"verbose",
"terse",
"sqlstate");
5430 else if (TailMatchesCS(
"\\sf*"))
5431 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
5432 else if (TailMatchesCS(
"\\sv*"))
5433 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
5434 else if (TailMatchesCS(
"\\cd|\\e|\\edit|\\g|\\gx|\\i|\\include|"
5435 "\\ir|\\include_relative|\\o|\\out|"
5436 "\\s|\\w|\\write|\\lo_import"))
5438 completion_charp =
"\\";
5439 completion_force_quote =
false;
5440 matches = rl_completion_matches(
text, complete_from_files);
5469create_or_drop_command_generator(
const char *
text,
int state,
bits32 excluded)
5471 static int list_index,
5479 string_length = strlen(
text);
5483 while ((
name = words_after_create[list_index++].
name))
5486 !(words_after_create[list_index - 1].flags & excluded))
5487 return pg_strdup_keyword_case(
name,
text);
5498create_command_generator(
const char *
text,
int state)
5500 return create_or_drop_command_generator(
text,
state, THING_NO_CREATE);
5507drop_command_generator(
const char *
text,
int state)
5509 return create_or_drop_command_generator(
text,
state, THING_NO_DROP);
5516alter_command_generator(
const char *
text,
int state)
5518 return create_or_drop_command_generator(
text,
state, THING_NO_ALTER);
5527complete_from_query(
const char *
text,
int state)
5530 return _complete_from_query(completion_charp, NULL, completion_charpp,
5535complete_from_versioned_query(
const char *
text,
int state)
5537 const VersionedQuery *vquery = completion_vquery;
5543 if (vquery->query == NULL)
5546 return _complete_from_query(vquery->query, NULL, completion_charpp,
5551complete_from_schema_query(
const char *
text,
int state)
5554 return _complete_from_query(NULL, completion_squery, completion_charpp,
5559complete_from_versioned_schema_query(
const char *
text,
int state)
5561 const SchemaQuery *squery = completion_squery;
5567 if (squery->catname == NULL)
5570 return _complete_from_query(NULL, squery, completion_charpp,
5617_complete_from_query(
const char *simple_query,
5618 const SchemaQuery *schema_query,
5623 static int list_index,
5628 static bool non_empty_object;
5629 static bool schemaquoted;
5630 static bool objectquoted;
5641 char *e_object_like;
5648 num_schema_only = 0;
5649 num_query_other = 0;
5662 parse_identifier(
text,
5663 &schemaname, &objectname,
5664 &schemaquoted, &objectquoted);
5668 non_empty_object = (*objectname !=
'\0');
5674 e_object_like = make_like_pattern(objectname);
5679 e_schemaname = NULL;
5681 if (completion_ref_object)
5684 e_ref_object = NULL;
5686 if (completion_ref_schema)
5689 e_ref_schema = NULL;
5695 Assert(simple_query == NULL);
5702 if (schemaname == NULL || schema_query->namespace == NULL)
5706 if (schema_query->use_distinct)
5709 "%s, NULL::pg_catalog.text FROM %s",
5710 schema_query->result,
5711 schema_query->catname);
5712 if (schema_query->refnamespace && completion_ref_schema)
5714 ", pg_catalog.pg_namespace nr");
5716 if (schema_query->selcondition)
5718 schema_query->selcondition);
5720 schema_query->result,
5722 if (schema_query->viscondition)
5724 schema_query->viscondition);
5725 if (schema_query->refname)
5727 Assert(completion_ref_object);
5729 schema_query->refname, e_ref_object);
5730 if (schema_query->refnamespace && completion_ref_schema)
5732 " AND %s = nr.oid AND nr.nspname = '%s'",
5733 schema_query->refnamespace,
5735 else if (schema_query->refviscondition)
5738 schema_query->refviscondition);
5748 if (strcmp(schema_query->catname,
5749 "pg_catalog.pg_class c") == 0 &&
5750 strncmp(objectname,
"pg_", 3) != 0)
5753 " AND c.relnamespace <> (SELECT oid FROM"
5754 " pg_catalog.pg_namespace WHERE nspname = 'pg_catalog')");
5761 if (schema_query->namespace)
5764 "SELECT NULL::pg_catalog.text, n.nspname "
5765 "FROM pg_catalog.pg_namespace n "
5766 "WHERE n.nspname LIKE '%s'",
5773 if (strncmp(objectname,
"pg_", 3) != 0)
5775 " AND n.nspname NOT LIKE E'pg\\\\_%'");
5782 schemaquoted = objectquoted;
5789 if (schema_query->use_distinct)
5792 "FROM %s, pg_catalog.pg_namespace n",
5793 schema_query->result,
5794 schema_query->catname);
5795 if (schema_query->refnamespace && completion_ref_schema)
5797 ", pg_catalog.pg_namespace nr");
5799 schema_query->namespace);
5800 if (schema_query->selcondition)
5802 schema_query->selcondition);
5804 schema_query->result,
5808 if (schema_query->refname)
5810 Assert(completion_ref_object);
5812 schema_query->refname, e_ref_object);
5813 if (schema_query->refnamespace && completion_ref_schema)
5815 " AND %s = nr.oid AND nr.nspname = '%s'",
5816 schema_query->refnamespace,
5818 else if (schema_query->refviscondition)
5821 schema_query->refviscondition);
5831 e_ref_object, e_ref_schema);
5836 completion_max_records);
5839 result = exec_query(query_buffer.
data);
5845 free(e_object_like);
5858 const char *item = NULL;
5859 const char *nsp = NULL;
5882 if (non_empty_object)
5884 if (item && !objectquoted && identifier_needs_quotes(item))
5886 if (nsp && !schemaquoted && identifier_needs_quotes(nsp))
5891 if (item == NULL && nsp != NULL)
5896 return requote_identifier(nsp, item, schemaquoted, objectquoted);
5905 if (schema_query && schema_query->keywords)
5907 const char *
const *itemp = schema_query->keywords;
5911 const char *item = *itemp++;
5919 return pg_strdup_keyword_case(item,
text);
5925 const char *
const *itemp =
keywords;
5929 const char *item = *itemp++;
5937 return pg_strdup_keyword_case(item,
text);
5948 if (num_schema_only > 0 && num_query_other == 0 && num_keywords == 0)
5949 rl_completion_append_character =
'\0';
5964set_completion_reference(
const char *
word)
5969 parse_identifier(
word,
5970 &completion_ref_schema, &completion_ref_object,
5971 &schemaquoted, &objectquoted);
5979set_completion_reference_verbatim(
const char *
word)
5981 completion_ref_schema = NULL;
5992complete_from_list(
const char *
text,
int state)
5994 static int string_length,
5997 static bool casesensitive;
6001 Assert(completion_charpp != NULL);
6007 string_length = strlen(
text);
6008 casesensitive = completion_case_sensitive;
6012 while ((item = completion_charpp[list_index++]))
6015 if (casesensitive && strncmp(
text, item, string_length) == 0)
6024 if (completion_case_sensitive)
6032 return pg_strdup_keyword_case(item,
text);
6040 if (casesensitive && matches == 0)
6042 casesensitive =
false;
6072complete_from_const(
const char *
text,
int state)
6074 Assert(completion_charp != NULL);
6077 if (completion_case_sensitive)
6085 return pg_strdup_keyword_case(completion_charp,
text);
6097append_variable_names(
char ***varnames,
int *nvars,
6098 int *maxvars,
const char *varname,
6099 const char *prefix,
const char *suffix)
6101 if (*nvars >= *maxvars)
6105 ((*maxvars) + 1) *
sizeof(
char *));
6108 (*varnames)[(*nvars)++] =
psprintf(
"%s%s%s", prefix, varname, suffix);
6120complete_from_variables(
const char *
text,
const char *prefix,
const char *suffix,
6130 varnames = (
char **)
pg_malloc((maxvars + 1) *
sizeof(
char *));
6134 if (need_value && !(ptr->
value))
6136 append_variable_names(&varnames, &nvars, &maxvars, ptr->
name,
6140 varnames[nvars] = NULL;
6141 COMPLETE_WITH_LIST_CS((
const char *
const *) varnames);
6143 for (
i = 0;
i < nvars;
i++)
6165complete_from_files(
const char *
text,
int state)
6167#ifdef USE_FILENAME_QUOTING_FUNCTIONS
6184#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
6185 rl_completion_suppress_quote = 1;
6190 completion_force_quote =
true;
6192 return rl_filename_completion_function(
text,
state);
6198 static const char *unquoted_text;
6199 char *unquoted_match;
6204 completion_force_quote =
true;
6209 unquoted_text =
strtokx(
text,
"", NULL,
"'", *completion_charp,
6215 unquoted_text =
text;
6219 unquoted_match = rl_filename_completion_function(unquoted_text,
state);
6222 struct stat statbuf;
6223 bool is_dir = (
stat(unquoted_match, &statbuf) == 0 &&
6224 S_ISDIR(statbuf.st_mode) != 0);
6228 '\'', *completion_charp,
6229 completion_force_quote,
6232 free(unquoted_match);
6234 ret = unquoted_match;
6241 if (*ret ==
'\'' && is_dir)
6243 char *retend = ret + strlen(ret) - 1;
6248 rl_completion_append_character =
'\0';
6265pg_strdup_keyword_case(
const char *s,
const char *ref)
6269 unsigned char first = ref[0];
6278 for (p = ret; *p; p++)
6283 for (p = ret; *p; p++)
6320make_like_pattern(
const char *
word)
6324 char *bptr = buffer;
6366parse_identifier(
const char *
ident,
6367 char **schemaname,
char **objectname,
6368 bool *schemaquoted,
bool *objectquoted)
6370 size_t buflen = strlen(
ident) + 1;
6380 *schemaquoted = *objectquoted =
false;
6386 unsigned char ch = (
unsigned char) *
ident++;
6390 if (inquotes && *
ident ==
'"')
6398 inquotes = !inquotes;
6399 *objectquoted =
true;
6402 else if (ch ==
'.' && !inquotes)
6410 *schemaquoted = *objectquoted;
6411 *objectquoted =
false;
6423 *optr++ = (char) ch;
6438 if (ch >=
'A' && ch <=
'Z')
6440 else if (enc_is_single_byte &&
IS_HIGHBIT_SET(ch) && isupper(ch))
6443 *optr++ = (char) ch;
6448 *schemaname = sname;
6449 *objectname = oname;
6465requote_identifier(
const char *schemaname,
const char *objectname,
6466 bool quote_schema,
bool quote_object)
6478 buflen += strlen(schemaname) + 1;
6480 quote_schema = identifier_needs_quotes(schemaname);
6484 for (
const char *p = schemaname; *p; p++)
6493 buflen += strlen(objectname);
6495 quote_object = identifier_needs_quotes(objectname);
6499 for (
const char *p = objectname; *p; p++)
6512 for (
const char *p = schemaname; *p; p++)
6526 for (
const char *p = objectname; *p; p++)
6547identifier_needs_quotes(
const char *
ident)
6554 if (strspn(
ident,
"abcdefghijklmnopqrstuvwxyz0123456789_$") != strlen(
ident))
6580exec_query(
const char *query)
6597 pg_log_error(
"tab completion query failed: %s\nQuery was:\n%s",
6620get_previous_words(
int point,
char **buffer,
int *nwords)
6622 char **previous_words;
6625 int words_found = 0;
6639 memcpy(
buf +
i, rl_line_buffer, point);
6646 buf = rl_line_buffer;
6655 previous_words = (
char **)
pg_malloc(point *
sizeof(
char *));
6656 *buffer = outptr = (
char *)
pg_malloc(point * 2);
6663 for (
i = point - 1;
i >= 0;
i--)
6665 if (strchr(WORD_BREAKS,
buf[
i]))
6679 bool inquotes =
false;
6680 int parentheses = 0;
6684 for (
i = point;
i >= 0;
i--)
6686 if (!isspace((
unsigned char)
buf[
i]))
6705 inquotes = !inquotes;
6712 if (--parentheses <= 0)
6715 else if (parentheses == 0 &&
6716 strchr(WORD_BREAKS,
buf[
start - 1]))
6722 previous_words[words_found++] = outptr;
6733 if (
buf != rl_line_buffer)
6736 *nwords = words_found;
6737 return previous_words;
6747get_guctype(
const char *varname)
6752 char *guctype = NULL;
6758 "SELECT vartype FROM pg_catalog.pg_settings "
6759 "WHERE pg_catalog.lower(name) = pg_catalog.lower('%s')",
6762 result = exec_query(query_buffer.
data);
6774#ifdef USE_FILENAME_QUOTING_FUNCTIONS
6783quote_file_name(
char *fname,
int match_type,
char *quote_pointer)
6786 struct stat statbuf;
6790 '\'', *completion_charp,
6791 completion_force_quote,
6806 completion_last_char !=
'\'' &&
6807 (match_type != SINGLE_MATCH ||
6808 (quote_pointer && *quote_pointer ==
'\'') ||
6809 stat(fname, &statbuf) != 0 ||
6812 char *
send = s + strlen(s) - 1;
6823#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
6824 rl_completion_suppress_quote = 0;
6832 if (quote_pointer && *quote_pointer !=
'\'')
6833 *quote_pointer =
'\0';
6844dequote_file_name(
char *fname,
int quote_char)
6846 char *unquoted_fname;
6853 if (quote_char ==
'\'')
6855 char *workspace = (
char *)
pg_malloc(strlen(fname) + 2);
6857 workspace[0] = quote_char;
6858 strcpy(workspace + 1, fname);
6859 unquoted_fname =
strtokx(workspace,
"", NULL,
"'", *completion_charp,
6864 unquoted_fname =
strtokx(fname,
"", NULL,
"'", *completion_charp,
6868 if (!unquoted_fname)
6871 unquoted_fname = 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)
char * PQgetvalue(const PGresult *res, int tup_num, int field_num)
ExecStatusType PQresultStatus(const PGresult *res)
int PQntuples(const PGresult *res)
int PQgetisnull(const PGresult *res, int tup_num, int field_num)
PGresult * PQexec(PGconn *conn, const char *query)
int PQnfields(const PGresult *res)
int PQmblenBounded(const char *s, int encoding)
void * pg_malloc(size_t size)
char * pg_strdup(const char *in)
void * pg_realloc(void *ptr, size_t size)
static const JsonPathKeyword keywords[]
PGDLLIMPORT const ScanKeywordList ScanKeywords
#define UNRESERVED_KEYWORD
int ScanKeywordLookup(const char *str, const ScanKeywordList *keywords)
#define pg_log_error(...)
char * pnstrdup(const char *in, Size len)
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)