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); \
446#define COMPLETE_WITH_FILES_LIST(escape, force_quote, list) \
448 completion_charp = escape; \
449 completion_charpp = list; \
450 completion_force_quote = force_quote; \
451 matches = rl_completion_matches(text, complete_from_files); \
454#define COMPLETE_WITH_FILES(escape, force_quote) \
455 COMPLETE_WITH_FILES_LIST(escape, force_quote, NULL)
457#define COMPLETE_WITH_FILES_PLUS(escape, force_quote, ...) \
459 static const char *const list[] = { __VA_ARGS__, NULL }; \
460 COMPLETE_WITH_FILES_LIST(escape, force_quote, list); \
463#define COMPLETE_WITH_GENERATOR(generator) \
464 matches = rl_completion_matches(text, generator)
473static const SchemaQuery Query_for_constraint_of_table = {
474 .catname =
"pg_catalog.pg_constraint con, pg_catalog.pg_class c1",
475 .selcondition =
"con.conrelid=c1.oid",
476 .result =
"con.conname",
477 .refname =
"c1.relname",
478 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
479 .refnamespace =
"c1.relnamespace",
482static const SchemaQuery Query_for_constraint_of_table_not_validated = {
483 .catname =
"pg_catalog.pg_constraint con, pg_catalog.pg_class c1",
484 .selcondition =
"con.conrelid=c1.oid and not con.convalidated",
485 .result =
"con.conname",
486 .refname =
"c1.relname",
487 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
488 .refnamespace =
"c1.relnamespace",
491static const SchemaQuery Query_for_constraint_of_type = {
492 .catname =
"pg_catalog.pg_constraint con, pg_catalog.pg_type t",
493 .selcondition =
"con.contypid=t.oid",
494 .result =
"con.conname",
495 .refname =
"t.typname",
496 .refviscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
497 .refnamespace =
"t.typnamespace",
500static const SchemaQuery Query_for_index_of_table = {
501 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_index i",
502 .selcondition =
"c1.oid=i.indrelid and i.indexrelid=c2.oid",
503 .result =
"c2.relname",
504 .refname =
"c1.relname",
505 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
506 .refnamespace =
"c1.relnamespace",
509static const SchemaQuery Query_for_unique_index_of_table = {
510 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_index i",
511 .selcondition =
"c1.oid=i.indrelid and i.indexrelid=c2.oid and i.indisunique",
512 .result =
"c2.relname",
513 .refname =
"c1.relname",
514 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
515 .refnamespace =
"c1.relnamespace",
518static const SchemaQuery Query_for_list_of_aggregates[] = {
520 .min_server_version = 110000,
521 .catname =
"pg_catalog.pg_proc p",
522 .selcondition =
"p.prokind = 'a'",
523 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
524 .namespace =
"p.pronamespace",
525 .result =
"p.proname",
528 .catname =
"pg_catalog.pg_proc p",
529 .selcondition =
"p.proisagg",
530 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
531 .namespace =
"p.pronamespace",
532 .result =
"p.proname",
536static const SchemaQuery Query_for_list_of_arguments = {
537 .catname =
"pg_catalog.pg_proc p",
538 .result =
"pg_catalog.oidvectortypes(p.proargtypes)||')'",
539 .refname =
"p.proname",
540 .refviscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
541 .refnamespace =
"p.pronamespace",
544static const SchemaQuery Query_for_list_of_attributes = {
545 .catname =
"pg_catalog.pg_attribute a, pg_catalog.pg_class c",
546 .selcondition =
"c.oid = a.attrelid and a.attnum > 0 and not a.attisdropped",
547 .result =
"a.attname",
548 .refname =
"c.relname",
549 .refviscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
550 .refnamespace =
"c.relnamespace",
553static const SchemaQuery Query_for_list_of_attribute_numbers = {
554 .catname =
"pg_catalog.pg_attribute a, pg_catalog.pg_class c",
555 .selcondition =
"c.oid = a.attrelid and a.attnum > 0 and not a.attisdropped",
556 .result =
"a.attnum::pg_catalog.text",
557 .refname =
"c.relname",
558 .refviscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
559 .refnamespace =
"c.relnamespace",
562static const char *
const Keywords_for_list_of_datatypes[] = {
582 "time with time zone",
583 "time without time zone",
584 "timestamp with time zone",
585 "timestamp without time zone",
590static const SchemaQuery Query_for_list_of_datatypes = {
591 .catname =
"pg_catalog.pg_type t",
593 .selcondition =
"(t.typrelid = 0 "
594 " OR (SELECT c.relkind = " CppAsString2(RELKIND_COMPOSITE_TYPE)
595 " FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)) "
596 "AND t.typname !~ '^_'",
597 .viscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
598 .namespace =
"t.typnamespace",
599 .result =
"t.typname",
600 .keywords = Keywords_for_list_of_datatypes,
603static const SchemaQuery Query_for_list_of_composite_datatypes = {
604 .catname =
"pg_catalog.pg_type t",
606 .selcondition =
"(SELECT c.relkind = " CppAsString2(RELKIND_COMPOSITE_TYPE)
607 " FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid) "
608 "AND t.typname !~ '^_'",
609 .viscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
610 .namespace =
"t.typnamespace",
611 .result =
"t.typname",
614static const SchemaQuery Query_for_list_of_domains = {
615 .catname =
"pg_catalog.pg_type t",
616 .selcondition =
"t.typtype = 'd'",
617 .viscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
618 .namespace =
"t.typnamespace",
619 .result =
"t.typname",
622static const SchemaQuery Query_for_list_of_enum_values_quoted = {
623 .catname =
"pg_catalog.pg_enum e, pg_catalog.pg_type t",
624 .selcondition =
"t.oid = e.enumtypid",
625 .result =
"pg_catalog.quote_literal(enumlabel)",
626 .refname =
"t.typname",
627 .refviscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
628 .refnamespace =
"t.typnamespace",
631static const SchemaQuery Query_for_list_of_enum_values_unquoted = {
632 .catname =
"pg_catalog.pg_enum e, pg_catalog.pg_type t",
633 .selcondition =
"t.oid = e.enumtypid",
634 .result =
"e.enumlabel",
635 .refname =
"t.typname",
636 .refviscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
637 .refnamespace =
"t.typnamespace",
641static const SchemaQuery Query_for_list_of_functions[] = {
643 .min_server_version = 110000,
644 .catname =
"pg_catalog.pg_proc p",
645 .selcondition =
"p.prokind != 'p'",
646 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
647 .namespace =
"p.pronamespace",
648 .result =
"p.proname",
651 .catname =
"pg_catalog.pg_proc p",
652 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
653 .namespace =
"p.pronamespace",
654 .result =
"p.proname",
658static const SchemaQuery Query_for_list_of_procedures[] = {
660 .min_server_version = 110000,
661 .catname =
"pg_catalog.pg_proc p",
662 .selcondition =
"p.prokind = 'p'",
663 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
664 .namespace =
"p.pronamespace",
665 .result =
"p.proname",
673static const SchemaQuery Query_for_list_of_routines = {
674 .catname =
"pg_catalog.pg_proc p",
675 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
676 .namespace =
"p.pronamespace",
677 .result =
"p.proname",
680static const SchemaQuery Query_for_list_of_sequences = {
681 .catname =
"pg_catalog.pg_class c",
682 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_SEQUENCE)
")",
683 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
684 .namespace =
"c.relnamespace",
685 .result =
"c.relname",
688static const SchemaQuery Query_for_list_of_foreign_tables = {
689 .catname =
"pg_catalog.pg_class c",
690 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_FOREIGN_TABLE)
")",
691 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
692 .namespace =
"c.relnamespace",
693 .result =
"c.relname",
696static const SchemaQuery Query_for_list_of_tables = {
697 .catname =
"pg_catalog.pg_class c",
701 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
702 .namespace =
"c.relnamespace",
703 .result =
"c.relname",
706static const SchemaQuery Query_for_list_of_partitioned_tables = {
707 .catname =
"pg_catalog.pg_class c",
708 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_PARTITIONED_TABLE)
")",
709 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
710 .namespace =
"c.relnamespace",
711 .result =
"c.relname",
714static const SchemaQuery Query_for_list_of_tables_for_constraint = {
715 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_constraint con",
716 .selcondition =
"c.oid=con.conrelid and c.relkind IN ("
719 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
720 .namespace =
"c.relnamespace",
721 .result =
"c.relname",
722 .use_distinct =
true,
723 .refname =
"con.conname",
726static const SchemaQuery Query_for_list_of_tables_for_policy = {
727 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_policy p",
728 .selcondition =
"c.oid=p.polrelid",
729 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
730 .namespace =
"c.relnamespace",
731 .result =
"c.relname",
732 .use_distinct =
true,
733 .refname =
"p.polname",
736static const SchemaQuery Query_for_list_of_tables_for_rule = {
737 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_rewrite r",
738 .selcondition =
"c.oid=r.ev_class",
739 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
740 .namespace =
"c.relnamespace",
741 .result =
"c.relname",
742 .use_distinct =
true,
743 .refname =
"r.rulename",
746static const SchemaQuery Query_for_list_of_tables_for_trigger = {
747 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_trigger t",
748 .selcondition =
"c.oid=t.tgrelid",
749 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
750 .namespace =
"c.relnamespace",
751 .result =
"c.relname",
752 .use_distinct =
true,
753 .refname =
"t.tgname",
756static const SchemaQuery Query_for_list_of_ts_configurations = {
757 .catname =
"pg_catalog.pg_ts_config c",
758 .viscondition =
"pg_catalog.pg_ts_config_is_visible(c.oid)",
759 .namespace =
"c.cfgnamespace",
760 .result =
"c.cfgname",
763static const SchemaQuery Query_for_list_of_ts_dictionaries = {
764 .catname =
"pg_catalog.pg_ts_dict d",
765 .viscondition =
"pg_catalog.pg_ts_dict_is_visible(d.oid)",
766 .namespace =
"d.dictnamespace",
767 .result =
"d.dictname",
770static const SchemaQuery Query_for_list_of_ts_parsers = {
771 .catname =
"pg_catalog.pg_ts_parser p",
772 .viscondition =
"pg_catalog.pg_ts_parser_is_visible(p.oid)",
773 .namespace =
"p.prsnamespace",
774 .result =
"p.prsname",
777static const SchemaQuery Query_for_list_of_ts_templates = {
778 .catname =
"pg_catalog.pg_ts_template t",
779 .viscondition =
"pg_catalog.pg_ts_template_is_visible(t.oid)",
780 .namespace =
"t.tmplnamespace",
781 .result =
"t.tmplname",
784static const SchemaQuery Query_for_list_of_views = {
785 .catname =
"pg_catalog.pg_class c",
786 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_VIEW)
")",
787 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
788 .namespace =
"c.relnamespace",
789 .result =
"c.relname",
792static const SchemaQuery Query_for_list_of_matviews = {
793 .catname =
"pg_catalog.pg_class c",
794 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_MATVIEW)
")",
795 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
796 .namespace =
"c.relnamespace",
797 .result =
"c.relname",
800static const SchemaQuery Query_for_list_of_indexes = {
801 .catname =
"pg_catalog.pg_class c",
805 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
806 .namespace =
"c.relnamespace",
807 .result =
"c.relname",
810static const SchemaQuery Query_for_list_of_partitioned_indexes = {
811 .catname =
"pg_catalog.pg_class c",
812 .selcondition =
"c.relkind = " CppAsString2(RELKIND_PARTITIONED_INDEX),
813 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
814 .namespace =
"c.relnamespace",
815 .result =
"c.relname",
820static const SchemaQuery Query_for_list_of_relations = {
821 .catname =
"pg_catalog.pg_class c",
822 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
823 .namespace =
"c.relnamespace",
824 .result =
"c.relname",
828static const SchemaQuery Query_for_list_of_partitioned_relations = {
829 .catname =
"pg_catalog.pg_class c",
830 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_PARTITIONED_TABLE)
832 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
833 .namespace =
"c.relnamespace",
834 .result =
"c.relname",
837static const SchemaQuery Query_for_list_of_operator_families = {
838 .catname =
"pg_catalog.pg_opfamily c",
839 .viscondition =
"pg_catalog.pg_opfamily_is_visible(c.oid)",
840 .namespace =
"c.opfnamespace",
841 .result =
"c.opfname",
845static const SchemaQuery Query_for_list_of_updatables = {
846 .catname =
"pg_catalog.pg_class c",
852 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
853 .namespace =
"c.relnamespace",
854 .result =
"c.relname",
858static const SchemaQuery Query_for_list_of_mergetargets = {
859 .catname =
"pg_catalog.pg_class c",
864 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
865 .namespace =
"c.relnamespace",
866 .result =
"c.relname",
870static const SchemaQuery Query_for_list_of_selectables = {
871 .catname =
"pg_catalog.pg_class c",
879 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
880 .namespace =
"c.relnamespace",
881 .result =
"c.relname",
885static const SchemaQuery Query_for_list_of_truncatables = {
886 .catname =
"pg_catalog.pg_class c",
891 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
892 .namespace =
"c.relnamespace",
893 .result =
"c.relname",
897#define Query_for_list_of_grantables Query_for_list_of_selectables
900static const SchemaQuery Query_for_list_of_analyzables = {
901 .catname =
"pg_catalog.pg_class c",
907 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
908 .namespace =
"c.relnamespace",
909 .result =
"c.relname",
918#define Query_for_list_of_tables_for_copy Query_for_list_of_analyzables
921static const SchemaQuery Query_for_list_of_indexables = {
922 .catname =
"pg_catalog.pg_class c",
927 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
928 .namespace =
"c.relnamespace",
929 .result =
"c.relname",
936#define Query_for_list_of_vacuumables Query_for_list_of_indexables
939static const SchemaQuery Query_for_list_of_clusterables = {
940 .catname =
"pg_catalog.pg_class c",
945 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
946 .namespace =
"c.relnamespace",
947 .result =
"c.relname",
950static const SchemaQuery Query_for_list_of_constraints_with_schema = {
951 .catname =
"pg_catalog.pg_constraint c",
952 .selcondition =
"c.conrelid <> 0",
953 .namespace =
"c.connamespace",
954 .result =
"c.conname",
957static const SchemaQuery Query_for_list_of_statistics = {
958 .catname =
"pg_catalog.pg_statistic_ext s",
959 .viscondition =
"pg_catalog.pg_statistics_obj_is_visible(s.oid)",
960 .namespace =
"s.stxnamespace",
961 .result =
"s.stxname",
964static const SchemaQuery Query_for_list_of_collations = {
965 .catname =
"pg_catalog.pg_collation c",
966 .selcondition =
"c.collencoding IN (-1, pg_catalog.pg_char_to_encoding(pg_catalog.getdatabaseencoding()))",
967 .viscondition =
"pg_catalog.pg_collation_is_visible(c.oid)",
968 .namespace =
"c.collnamespace",
969 .result =
"c.collname",
972static const SchemaQuery Query_for_partition_of_table = {
973 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_inherits i",
974 .selcondition =
"c1.oid=i.inhparent and i.inhrelid=c2.oid and c2.relispartition",
975 .viscondition =
"pg_catalog.pg_table_is_visible(c2.oid)",
976 .namespace =
"c2.relnamespace",
977 .result =
"c2.relname",
978 .refname =
"c1.relname",
979 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
980 .refnamespace =
"c1.relnamespace",
983static const SchemaQuery Query_for_rule_of_table = {
984 .catname =
"pg_catalog.pg_rewrite r, pg_catalog.pg_class c1",
985 .selcondition =
"r.ev_class=c1.oid",
986 .result =
"r.rulename",
987 .refname =
"c1.relname",
988 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
989 .refnamespace =
"c1.relnamespace",
992static const SchemaQuery Query_for_trigger_of_table = {
993 .catname =
"pg_catalog.pg_trigger t, pg_catalog.pg_class c1",
994 .selcondition =
"t.tgrelid=c1.oid and not t.tgisinternal",
995 .result =
"t.tgname",
996 .refname =
"c1.relname",
997 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
998 .refnamespace =
"c1.relnamespace",
1021#define Query_for_list_of_template_databases \
1023" FROM pg_catalog.pg_database d "\
1024" WHERE d.datname LIKE '%s' "\
1025" AND (d.datistemplate OR pg_catalog.pg_has_role(d.datdba, 'USAGE'))"
1027#define Query_for_list_of_databases \
1028"SELECT datname FROM pg_catalog.pg_database "\
1029" WHERE datname LIKE '%s'"
1031#define Query_for_list_of_database_vars \
1032"SELECT conf FROM ("\
1033" SELECT setdatabase, pg_catalog.split_part(pg_catalog.unnest(setconfig),'=',1) conf"\
1034" FROM pg_db_role_setting "\
1035" ) s, pg_database d "\
1036" WHERE s.setdatabase = d.oid "\
1037" AND conf LIKE '%s'"\
1038" AND d.datname LIKE '%s'"
1040#define Query_for_list_of_tablespaces \
1041"SELECT spcname FROM pg_catalog.pg_tablespace "\
1042" WHERE spcname LIKE '%s'"
1044#define Query_for_list_of_encodings \
1045" SELECT DISTINCT pg_catalog.pg_encoding_to_char(conforencoding) "\
1046" FROM pg_catalog.pg_conversion "\
1047" WHERE pg_catalog.pg_encoding_to_char(conforencoding) LIKE pg_catalog.upper('%s')"
1049#define Query_for_list_of_languages \
1051" FROM pg_catalog.pg_language "\
1052" WHERE lanname != 'internal' "\
1053" AND lanname LIKE '%s'"
1055#define Query_for_list_of_schemas \
1056"SELECT nspname FROM pg_catalog.pg_namespace "\
1057" WHERE nspname LIKE '%s'"
1060#define Query_for_list_of_alter_system_set_vars \
1061"SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1062" WHERE context != 'internal' "\
1063" AND pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1065#define Query_for_list_of_set_vars \
1066"SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1067" WHERE context IN ('user', 'superuser') "\
1068" AND pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1070#define Query_for_list_of_show_vars \
1071"SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1072" WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1074#define Query_for_list_of_roles \
1076" FROM pg_catalog.pg_roles "\
1077" WHERE rolname LIKE '%s'"
1080#define Keywords_for_list_of_owner_roles \
1081"CURRENT_ROLE", "CURRENT_USER", "SESSION_USER"
1084#define Keywords_for_list_of_grant_roles \
1085Keywords_for_list_of_owner_roles, "PUBLIC"
1087#define Query_for_all_table_constraints \
1089" FROM pg_catalog.pg_constraint c "\
1090" WHERE c.conrelid <> 0 "\
1091" and conname LIKE '%s'"
1093#define Query_for_list_of_fdws \
1095" FROM pg_catalog.pg_foreign_data_wrapper "\
1096" WHERE fdwname LIKE '%s'"
1098#define Query_for_list_of_servers \
1100" FROM pg_catalog.pg_foreign_server "\
1101" WHERE srvname LIKE '%s'"
1103#define Query_for_list_of_user_mappings \
1105" FROM pg_catalog.pg_user_mappings "\
1106" WHERE usename LIKE '%s'"
1108#define Query_for_list_of_user_vars \
1109"SELECT conf FROM ("\
1110" SELECT rolname, pg_catalog.split_part(pg_catalog.unnest(rolconfig),'=',1) conf"\
1111" FROM pg_catalog.pg_roles"\
1113" WHERE s.conf like '%s' "\
1114" AND s.rolname LIKE '%s'"
1116#define Query_for_list_of_access_methods \
1118" FROM pg_catalog.pg_am "\
1119" WHERE amname LIKE '%s'"
1121#define Query_for_list_of_index_access_methods \
1123" FROM pg_catalog.pg_am "\
1124" WHERE amname LIKE '%s' AND "\
1125" amtype=" CppAsString2(AMTYPE_INDEX)
1127#define Query_for_list_of_table_access_methods \
1129" FROM pg_catalog.pg_am "\
1130" WHERE amname LIKE '%s' AND "\
1131" amtype=" CppAsString2(AMTYPE_TABLE)
1133#define Query_for_list_of_extensions \
1135" FROM pg_catalog.pg_extension "\
1136" WHERE extname LIKE '%s'"
1138#define Query_for_list_of_available_extensions \
1140" FROM pg_catalog.pg_available_extensions "\
1141" WHERE name LIKE '%s' AND installed_version IS NULL"
1143#define Query_for_list_of_available_extension_versions \
1145" FROM pg_catalog.pg_available_extension_versions "\
1146" WHERE version LIKE '%s' AND name='%s'"
1148#define Query_for_list_of_prepared_statements \
1150" FROM pg_catalog.pg_prepared_statements "\
1151" WHERE name LIKE '%s'"
1153#define Query_for_list_of_event_triggers \
1155" FROM pg_catalog.pg_event_trigger "\
1156" WHERE evtname LIKE '%s'"
1158#define Query_for_list_of_tablesample_methods \
1160" FROM pg_catalog.pg_proc "\
1161" WHERE prorettype = 'pg_catalog.tsm_handler'::pg_catalog.regtype AND "\
1162" proargtypes[0] = 'pg_catalog.internal'::pg_catalog.regtype AND "\
1165#define Query_for_list_of_policies \
1167" FROM pg_catalog.pg_policy "\
1168" WHERE polname LIKE '%s'"
1170#define Query_for_values_of_enum_GUC \
1171" SELECT val FROM ( "\
1172" SELECT name, pg_catalog.unnest(enumvals) AS val "\
1173" FROM pg_catalog.pg_settings "\
1175" WHERE val LIKE '%s'"\
1176" and pg_catalog.lower(name)=pg_catalog.lower('%s')"
1178#define Query_for_list_of_channels \
1180" FROM pg_catalog.pg_listening_channels() AS channel "\
1181" WHERE channel LIKE '%s'"
1183#define Query_for_list_of_cursors \
1185" FROM pg_catalog.pg_cursors "\
1186" WHERE name LIKE '%s'"
1188#define Query_for_list_of_timezone_names_unquoted \
1190" FROM pg_catalog.pg_timezone_names() "\
1191" WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1193#define Query_for_list_of_timezone_names_quoted_out \
1194"SELECT pg_catalog.quote_literal(name) AS name "\
1195" FROM pg_catalog.pg_timezone_names() "\
1196" WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1198#define Query_for_list_of_timezone_names_quoted_in \
1199"SELECT pg_catalog.quote_literal(name) AS name "\
1200" FROM pg_catalog.pg_timezone_names() "\
1201" WHERE pg_catalog.quote_literal(pg_catalog.lower(name)) LIKE pg_catalog.lower('%s')"
1204#define Privilege_options_of_grant_and_revoke \
1205"SELECT", "INSERT", "UPDATE", "DELETE", "TRUNCATE", "REFERENCES", "TRIGGER", \
1206"CREATE", "CONNECT", "TEMPORARY", "EXECUTE", "USAGE", "SET", "ALTER SYSTEM", \
1210#define Alter_procedure_options \
1211"DEPENDS ON EXTENSION", "EXTERNAL SECURITY", "NO DEPENDS ON EXTENSION", \
1212"OWNER TO", "RENAME TO", "RESET", "SECURITY", "SET"
1215#define Alter_routine_options \
1216Alter_procedure_options, "COST", "IMMUTABLE", "LEAKPROOF", "NOT LEAKPROOF", \
1217"PARALLEL", "ROWS", "STABLE", "VOLATILE"
1220#define Alter_function_options \
1221Alter_routine_options, "CALLED ON NULL INPUT", "RETURNS NULL ON NULL INPUT", \
1225#define Copy_common_options \
1226"DELIMITER", "ENCODING", "ESCAPE", "FORMAT", "HEADER", "NULL", "QUOTE"
1229#define Copy_from_options \
1230Copy_common_options, "DEFAULT", "FORCE_NOT_NULL", "FORCE_NULL", "FREEZE", \
1231"LOG_VERBOSITY", "ON_ERROR", "REJECT_LIMIT"
1234#define Copy_to_options \
1235Copy_common_options, "FORCE_QUOTE"
1243static const VersionedQuery Query_for_list_of_publications[] = {
1246 " FROM pg_catalog.pg_publication "
1247 " WHERE pubname LIKE '%s'"
1252static const VersionedQuery Query_for_list_of_subscriptions[] = {
1254 " SELECT s.subname "
1255 " FROM pg_catalog.pg_subscription s, pg_catalog.pg_database d "
1256 " WHERE s.subname LIKE '%s' "
1257 " AND d.datname = pg_catalog.current_database() "
1258 " AND s.subdbid = d.oid"
1264static const char *
const sql_commands[] = {
1265 "ABORT",
"ALTER",
"ANALYZE",
"BEGIN",
"CALL",
"CHECKPOINT",
"CLOSE",
"CLUSTER",
1266 "COMMENT",
"COMMIT",
"COPY",
"CREATE",
"DEALLOCATE",
"DECLARE",
1267 "DELETE FROM",
"DISCARD",
"DO",
"DROP",
"END",
"EXECUTE",
"EXPLAIN",
1268 "FETCH",
"GRANT",
"IMPORT FOREIGN SCHEMA",
"INSERT INTO",
"LISTEN",
"LOAD",
"LOCK",
1269 "MERGE INTO",
"MOVE",
"NOTIFY",
"PREPARE",
1270 "REASSIGN",
"REFRESH MATERIALIZED VIEW",
"REINDEX",
"RELEASE",
1271 "RESET",
"REVOKE",
"ROLLBACK",
1272 "SAVEPOINT",
"SECURITY LABEL",
"SELECT",
"SET",
"SHOW",
"START",
1273 "TABLE",
"TRUNCATE",
"UNLISTEN",
"UPDATE",
"VACUUM",
"VALUES",
1288 const VersionedQuery *vquery;
1289 const SchemaQuery *squery;
1294#define THING_NO_CREATE (1 << 0)
1295#define THING_NO_DROP (1 << 1)
1296#define THING_NO_ALTER (1 << 2)
1297#define THING_NO_SHOW (THING_NO_CREATE | THING_NO_DROP | THING_NO_ALTER)
1300static const char *
const Keywords_for_user_thing[] = {
1305static const pgsql_thing_t words_after_create[] = {
1306 {
"ACCESS METHOD", NULL, NULL, NULL, NULL, THING_NO_ALTER},
1307 {
"AGGREGATE", NULL, NULL, Query_for_list_of_aggregates},
1308 {
"CAST", NULL, NULL, NULL},
1310 {
"COLLATION", NULL, NULL, &Query_for_list_of_collations},
1316 {
"CONFIGURATION", NULL, NULL, &Query_for_list_of_ts_configurations, NULL, THING_NO_SHOW},
1317 {
"CONVERSION",
"SELECT conname FROM pg_catalog.pg_conversion WHERE conname LIKE '%s'"},
1318 {
"DATABASE", Query_for_list_of_databases},
1319 {
"DEFAULT PRIVILEGES", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1320 {
"DICTIONARY", NULL, NULL, &Query_for_list_of_ts_dictionaries, NULL, THING_NO_SHOW},
1321 {
"DOMAIN", NULL, NULL, &Query_for_list_of_domains},
1322 {
"EVENT TRIGGER", NULL, NULL, NULL},
1323 {
"EXTENSION", Query_for_list_of_extensions},
1324 {
"FOREIGN DATA WRAPPER", NULL, NULL, NULL},
1325 {
"FOREIGN TABLE", NULL, NULL, NULL},
1326 {
"FUNCTION", NULL, NULL, Query_for_list_of_functions},
1327 {
"GROUP", Query_for_list_of_roles},
1328 {
"INDEX", NULL, NULL, &Query_for_list_of_indexes},
1329 {
"LANGUAGE", Query_for_list_of_languages},
1330 {
"LARGE OBJECT", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1331 {
"MATERIALIZED VIEW", NULL, NULL, &Query_for_list_of_matviews},
1332 {
"OPERATOR", NULL, NULL, NULL},
1334 {
"OR REPLACE", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1335 {
"OWNED", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_ALTER},
1336 {
"PARSER", NULL, NULL, &Query_for_list_of_ts_parsers, NULL, THING_NO_SHOW},
1337 {
"POLICY", NULL, NULL, NULL},
1338 {
"PROCEDURE", NULL, NULL, Query_for_list_of_procedures},
1339 {
"PUBLICATION", NULL, Query_for_list_of_publications},
1340 {
"ROLE", Query_for_list_of_roles},
1341 {
"ROUTINE", NULL, NULL, &Query_for_list_of_routines, NULL, THING_NO_CREATE},
1342 {
"RULE",
"SELECT rulename FROM pg_catalog.pg_rules WHERE rulename LIKE '%s'"},
1343 {
"SCHEMA", Query_for_list_of_schemas},
1344 {
"SEQUENCE", NULL, NULL, &Query_for_list_of_sequences},
1345 {
"SERVER", Query_for_list_of_servers},
1346 {
"STATISTICS", NULL, NULL, &Query_for_list_of_statistics},
1347 {
"SUBSCRIPTION", NULL, Query_for_list_of_subscriptions},
1348 {
"SYSTEM", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1349 {
"TABLE", NULL, NULL, &Query_for_list_of_tables},
1350 {
"TABLESPACE", Query_for_list_of_tablespaces},
1351 {
"TEMP", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1353 {
"TEMPLATE", NULL, NULL, &Query_for_list_of_ts_templates, NULL, THING_NO_SHOW},
1354 {
"TEMPORARY", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1356 {
"TEXT SEARCH", NULL, NULL, NULL},
1357 {
"TRANSFORM", NULL, NULL, NULL, NULL, THING_NO_ALTER},
1358 {
"TRIGGER",
"SELECT tgname FROM pg_catalog.pg_trigger WHERE tgname LIKE '%s' AND NOT tgisinternal"},
1359 {
"TYPE", NULL, NULL, &Query_for_list_of_datatypes},
1360 {
"UNIQUE", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1362 {
"UNLOGGED", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1364 {
"USER", Query_for_list_of_roles, NULL, NULL, Keywords_for_user_thing},
1365 {
"USER MAPPING FOR", NULL, NULL, NULL},
1366 {
"VIEW", NULL, NULL, &Query_for_list_of_views},
1388#define MatchAny NULL
1389#define MatchAnyExcept(pattern) ("!" pattern)
1396 enum TCPatternKind kind;
1398 const char *
const *words;
1402#define TCPAT(id, kind, ...) \
1403 { (id), (kind), VA_ARGS_NARGS(__VA_ARGS__), \
1404 (const char * const []) { __VA_ARGS__ } }
1406#ifdef SWITCH_CONVERSION_APPLIED
1408static const TCPattern tcpatterns[] =
1416static const char *
const table_storage_parameters[] = {
1417 "autovacuum_analyze_scale_factor",
1418 "autovacuum_analyze_threshold",
1419 "autovacuum_enabled",
1420 "autovacuum_freeze_max_age",
1421 "autovacuum_freeze_min_age",
1422 "autovacuum_freeze_table_age",
1423 "autovacuum_multixact_freeze_max_age",
1424 "autovacuum_multixact_freeze_min_age",
1425 "autovacuum_multixact_freeze_table_age",
1426 "autovacuum_vacuum_cost_delay",
1427 "autovacuum_vacuum_cost_limit",
1428 "autovacuum_vacuum_insert_scale_factor",
1429 "autovacuum_vacuum_insert_threshold",
1430 "autovacuum_vacuum_max_threshold",
1431 "autovacuum_vacuum_scale_factor",
1432 "autovacuum_vacuum_threshold",
1434 "log_autovacuum_min_duration",
1435 "log_autoanalyze_min_duration",
1437 "toast.autovacuum_enabled",
1438 "toast.autovacuum_freeze_max_age",
1439 "toast.autovacuum_freeze_min_age",
1440 "toast.autovacuum_freeze_table_age",
1441 "toast.autovacuum_multixact_freeze_max_age",
1442 "toast.autovacuum_multixact_freeze_min_age",
1443 "toast.autovacuum_multixact_freeze_table_age",
1444 "toast.autovacuum_vacuum_cost_delay",
1445 "toast.autovacuum_vacuum_cost_limit",
1446 "toast.autovacuum_vacuum_insert_scale_factor",
1447 "toast.autovacuum_vacuum_insert_threshold",
1448 "toast.autovacuum_vacuum_max_threshold",
1449 "toast.autovacuum_vacuum_scale_factor",
1450 "toast.autovacuum_vacuum_threshold",
1451 "toast.log_autovacuum_min_duration",
1452 "toast.vacuum_index_cleanup",
1453 "toast.vacuum_max_eager_freeze_failure_rate",
1454 "toast.vacuum_truncate",
1455 "toast_tuple_target",
1456 "user_catalog_table",
1457 "vacuum_index_cleanup",
1458 "vacuum_max_eager_freeze_failure_rate",
1464static const char *
const view_optional_parameters[] = {
1472static char **psql_completion(
const char *
text,
int start,
int end);
1473static char **match_previous_words(
int pattern_id,
1475 char **previous_words,
1476 int previous_words_count);
1477static char *create_command_generator(
const char *
text,
int state);
1478static char *drop_command_generator(
const char *
text,
int state);
1479static char *alter_command_generator(
const char *
text,
int state);
1480static char *complete_from_query(
const char *
text,
int state);
1481static char *complete_from_versioned_query(
const char *
text,
int state);
1482static char *complete_from_schema_query(
const char *
text,
int state);
1483static char *complete_from_versioned_schema_query(
const char *
text,
int state);
1484static char *_complete_from_query(
const char *simple_query,
1485 const SchemaQuery *schema_query,
1489static void set_completion_reference(
const char *
word);
1490static void set_completion_reference_verbatim(
const char *
word);
1491static char *complete_from_list(
const char *
text,
int state);
1492static char *complete_from_const(
const char *
text,
int state);
1493static void append_variable_names(
char ***varnames,
int *nvars,
1494 int *maxvars,
const char *varname,
1495 const char *prefix,
const char *suffix);
1496static char **complete_from_variables(
const char *
text,
1497 const char *prefix,
const char *suffix,
bool need_value);
1498static char *complete_from_files(
const char *
text,
int state);
1499static char *_complete_from_files(
const char *
text,
int state);
1501static char *pg_strdup_keyword_case(
const char *s,
const char *ref);
1503static char *make_like_pattern(
const char *
word);
1504static void parse_identifier(
const char *
ident,
1505 char **schemaname,
char **objectname,
1506 bool *schemaquoted,
bool *objectquoted);
1507static char *requote_identifier(
const char *schemaname,
const char *objectname,
1508 bool quote_schema,
bool quote_object);
1509static bool identifier_needs_quotes(
const char *
ident);
1510static PGresult *exec_query(
const char *query);
1512static char **get_previous_words(
int point,
char **buffer,
int *nwords);
1514static char *get_guctype(
const char *varname);
1516#ifdef USE_FILENAME_QUOTING_FUNCTIONS
1517static char *quote_file_name(
char *fname,
int match_type,
char *quote_pointer);
1518static char *dequote_file_name(
char *fname,
int quote_char);
1529 rl_attempted_completion_function = psql_completion;
1531#ifdef USE_FILENAME_QUOTING_FUNCTIONS
1532 rl_filename_quoting_function = quote_file_name;
1533 rl_filename_dequoting_function = dequote_file_name;
1536 rl_basic_word_break_characters = WORD_BREAKS;
1545 rl_completer_quote_characters =
"'";
1553#ifdef HAVE_RL_FILENAME_QUOTE_CHARACTERS
1555 unsigned char *fqc = (
unsigned char *)
pg_malloc(256);
1557 for (
int i = 0;
i < 255;
i++)
1558 fqc[
i] = (
unsigned char) (
i + 1);
1560 rl_filename_quote_characters = (
const char *) fqc;
1564 completion_max_records = 1000;
1588word_matches(
const char *pattern,
1590 bool case_sensitive)
1594#define cimatch(s1, s2, n) \
1595 (case_sensitive ? strncmp(s1, s2, n) == 0 : pg_strncasecmp(s1, s2, n) == 0)
1598 if (pattern == NULL)
1602 if (*pattern ==
'!')
1603 return !word_matches(pattern + 1,
word, case_sensitive);
1606 wordlen = strlen(
word);
1609 const char *star = NULL;
1614 while (*
c !=
'\0' && *
c !=
'|')
1624 size_t beforelen = star - pattern,
1625 afterlen =
c - star - 1;
1627 if (wordlen >= (beforelen + afterlen) &&
1628 cimatch(
word, pattern, beforelen) &&
1629 cimatch(
word + wordlen - afterlen, star + 1, afterlen))
1635 if (wordlen == (
c - pattern) &&
1636 cimatch(
word, pattern, wordlen))
1657TailMatchesArray(
bool case_sensitive,
1658 int previous_words_count,
char **previous_words,
1659 int narg,
const char *
const *
args)
1661 if (previous_words_count < narg)
1664 for (
int argno = 0; argno < narg; argno++)
1666 const char *
arg =
args[argno];
1668 if (!word_matches(
arg, previous_words[narg - argno - 1],
1680TailMatchesImpl(
bool case_sensitive,
1681 int previous_words_count,
char **previous_words,
1684 const char *argarray[64];
1689 if (previous_words_count < narg)
1692 va_start(
args, narg);
1693 for (
int argno = 0; argno < narg; argno++)
1694 argarray[argno] = va_arg(
args,
const char *);
1697 return TailMatchesArray(case_sensitive,
1698 previous_words_count, previous_words,
1707HeadMatchesArray(
bool case_sensitive,
1708 int previous_words_count,
char **previous_words,
1709 int narg,
const char *
const *
args)
1711 if (previous_words_count < narg)
1714 for (
int argno = 0; argno < narg; argno++)
1716 const char *
arg =
args[argno];
1718 if (!word_matches(
arg, previous_words[previous_words_count - argno - 1],
1730HeadMatchesImpl(
bool case_sensitive,
1731 int previous_words_count,
char **previous_words,
1734 const char *argarray[64];
1739 if (previous_words_count < narg)
1742 va_start(
args, narg);
1743 for (
int argno = 0; argno < narg; argno++)
1744 argarray[argno] = va_arg(
args,
const char *);
1747 return HeadMatchesArray(case_sensitive,
1748 previous_words_count, previous_words,
1760MatchesArray(
bool case_sensitive,
1761 int previous_words_count,
char **previous_words,
1762 int narg,
const char *
const *
args)
1764 int match_any_pos = -1;
1767 if (previous_words_count < narg - 1)
1771 for (
int argno = 0; argno < narg; argno++)
1773 const char *
arg =
args[argno];
1775 if (
arg != NULL &&
arg[0] ==
'\0')
1777 match_any_pos = argno;
1782 if (match_any_pos < 0)
1785 if (previous_words_count != narg)
1789 if (!HeadMatchesArray(case_sensitive,
1790 previous_words_count, previous_words,
1797 if (!HeadMatchesArray(case_sensitive,
1798 previous_words_count, previous_words,
1799 match_any_pos,
args))
1803 if (!TailMatchesArray(case_sensitive,
1804 previous_words_count, previous_words,
1805 narg - match_any_pos - 1,
1806 args + match_any_pos + 1))
1817MatchesImpl(
bool case_sensitive,
1818 int previous_words_count,
char **previous_words,
1821 const char *argarray[64];
1827 if (previous_words_count < narg - 1)
1830 va_start(
args, narg);
1831 for (
int argno = 0; argno < narg; argno++)
1832 argarray[argno] = va_arg(
args,
const char *);
1835 return MatchesArray(case_sensitive,
1836 previous_words_count, previous_words,
1844ends_with(
const char *s,
char c)
1846 size_t length = strlen(s);
1848 return (length > 0 && s[length - 1] ==
c);
1860psql_completion(
const char *
text,
int start,
int end)
1863 char **matches = NULL;
1869 char **previous_words;
1872 int previous_words_count;
1881#define prev_wd (previous_words[0])
1882#define prev2_wd (previous_words[1])
1883#define prev3_wd (previous_words[2])
1884#define prev4_wd (previous_words[3])
1885#define prev5_wd (previous_words[4])
1886#define prev6_wd (previous_words[5])
1887#define prev7_wd (previous_words[6])
1888#define prev8_wd (previous_words[7])
1889#define prev9_wd (previous_words[8])
1892#define TailMatches(...) \
1893 TailMatchesImpl(false, previous_words_count, previous_words, \
1894 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1897#define TailMatchesCS(...) \
1898 TailMatchesImpl(true, previous_words_count, previous_words, \
1899 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1902#define Matches(...) \
1903 MatchesImpl(false, previous_words_count, previous_words, \
1904 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1907#define MatchesCS(...) \
1908 MatchesImpl(true, previous_words_count, previous_words, \
1909 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1912#define HeadMatches(...) \
1913 HeadMatchesImpl(false, previous_words_count, previous_words, \
1914 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1917#define HeadMatchesCS(...) \
1918 HeadMatchesImpl(true, previous_words_count, previous_words, \
1919 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1922 static const char *
const backslash_commands[] = {
1924 "\\bind",
"\\bind_named",
1925 "\\connect",
"\\conninfo",
"\\C",
"\\cd",
"\\close_prepared",
"\\copy",
1926 "\\copyright",
"\\crosstabview",
1927 "\\d",
"\\da",
"\\dA",
"\\dAc",
"\\dAf",
"\\dAo",
"\\dAp",
1928 "\\db",
"\\dc",
"\\dconfig",
"\\dC",
"\\dd",
"\\ddp",
"\\dD",
1929 "\\des",
"\\det",
"\\deu",
"\\dew",
"\\dE",
"\\df",
1930 "\\dF",
"\\dFd",
"\\dFp",
"\\dFt",
"\\dg",
"\\di",
"\\dl",
"\\dL",
1931 "\\dm",
"\\dn",
"\\do",
"\\dO",
"\\dp",
"\\dP",
"\\dPi",
"\\dPt",
1932 "\\drds",
"\\drg",
"\\dRs",
"\\dRp",
"\\ds",
1933 "\\dt",
"\\dT",
"\\dv",
"\\du",
"\\dx",
"\\dX",
"\\dy",
1934 "\\echo",
"\\edit",
"\\ef",
"\\elif",
"\\else",
"\\encoding",
1935 "\\endif",
"\\endpipeline",
"\\errverbose",
"\\ev",
1936 "\\f",
"\\flush",
"\\flushrequest",
1937 "\\g",
"\\gdesc",
"\\getenv",
"\\getresults",
"\\gexec",
"\\gset",
"\\gx",
1939 "\\if",
"\\include",
"\\include_relative",
"\\ir",
1940 "\\list",
"\\lo_import",
"\\lo_export",
"\\lo_list",
"\\lo_unlink",
1942 "\\parse",
"\\password",
"\\print",
"\\prompt",
"\\pset",
1943 "\\qecho",
"\\quit",
1944 "\\reset",
"\\restrict",
1945 "\\s",
"\\sendpipeline",
"\\set",
"\\setenv",
"\\sf",
1946 "\\startpipeline",
"\\sv",
"\\syncpipeline",
1947 "\\t",
"\\T",
"\\timing",
1948 "\\unrestrict",
"\\unset",
1950 "\\warn",
"\\watch",
"\\write",
1965 completion_last_char = (end >
start) ?
text[end -
start - 1] :
'\0';
1968 rl_completion_append_character =
' ';
1971 completion_charp = NULL;
1972 completion_charpp = NULL;
1973 completion_vquery = NULL;
1974 completion_squery = NULL;
1975 completion_ref_object = NULL;
1976 completion_ref_schema = NULL;
1983 previous_words = get_previous_words(
start,
1985 &previous_words_count);
1988 if (
text[0] ==
'\\')
1989 COMPLETE_WITH_LIST_CS(backslash_commands);
1992 else if (
text[0] ==
':' &&
text[1] !=
':')
1994 if (
text[1] ==
'\'')
1995 matches = complete_from_variables(
text,
":'",
"'",
true);
1996 else if (
text[1] ==
'"')
1997 matches = complete_from_variables(
text,
":\"",
"\"",
true);
1998 else if (
text[1] ==
'{' &&
text[2] ==
'?')
1999 matches = complete_from_variables(
text,
":{?",
"}",
true);
2001 matches = complete_from_variables(
text,
":",
"",
true);
2005 else if (previous_words_count == 0)
2006 COMPLETE_WITH_LIST(sql_commands);
2011#ifdef SWITCH_CONVERSION_APPLIED
2024 for (
int tindx = 0; tindx <
lengthof(tcpatterns); tindx++)
2026 const TCPattern *tcpat = tcpatterns + tindx;
2029 switch (tcpat->kind)
2032 match = MatchesArray(
false,
2033 previous_words_count,
2035 tcpat->nwords, tcpat->words);
2038 match = MatchesArray(
true,
2039 previous_words_count,
2041 tcpat->nwords, tcpat->words);
2044 match = HeadMatchesArray(
false,
2045 previous_words_count,
2047 tcpat->nwords, tcpat->words);
2050 match = HeadMatchesArray(
true,
2051 previous_words_count,
2053 tcpat->nwords, tcpat->words);
2056 match = TailMatchesArray(
false,
2057 previous_words_count,
2059 tcpat->nwords, tcpat->words);
2062 match = TailMatchesArray(
true,
2063 previous_words_count,
2065 tcpat->nwords, tcpat->words);
2070 matches = match_previous_words(tcpat->id,
text,
start, end,
2072 previous_words_count);
2073 if (matches != NULL)
2082 matches = match_previous_words(0,
text,
start, end,
2084 previous_words_count);
2093 if (matches == NULL && previous_words_count > 0)
2095 const pgsql_thing_t *wac;
2097 for (wac = words_after_create; wac->name != NULL; wac++)
2102 COMPLETE_WITH_QUERY_LIST(wac->query,
2104 else if (wac->vquery)
2105 COMPLETE_WITH_VERSIONED_QUERY_LIST(wac->vquery,
2107 else if (wac->squery)
2108 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_LIST(wac->squery,
2120 if (matches == NULL)
2122 COMPLETE_WITH_CONST(
true,
"");
2124 rl_completion_append_character =
'\0';
2125#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
2126 rl_completion_suppress_quote = 1;
2131 free(previous_words);
2134 free(completion_ref_object);
2135 completion_ref_object = NULL;
2136 free(completion_ref_schema);
2137 completion_ref_schema = NULL;
2182match_previous_words(
int pattern_id,
2184 char **previous_words,
int previous_words_count)
2187 char **matches = NULL;
2200 else if (TailMatches(
"CREATE"))
2203 if (HeadMatches(
"CREATE",
"SCHEMA"))
2204 COMPLETE_WITH(
"TABLE",
"VIEW",
"INDEX",
"SEQUENCE",
"TRIGGER",
2206 "UNIQUE",
"UNLOGGED");
2208 COMPLETE_WITH_GENERATOR(create_command_generator);
2211 else if (TailMatches(
"CREATE",
"OR",
"REPLACE"))
2212 COMPLETE_WITH(
"FUNCTION",
"PROCEDURE",
"LANGUAGE",
"RULE",
"VIEW",
2213 "AGGREGATE",
"TRANSFORM",
"TRIGGER");
2217 else if (Matches(
"DROP"))
2218 COMPLETE_WITH_GENERATOR(drop_command_generator);
2223 else if (Matches(
"ALTER",
"TABLE"))
2224 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
2225 "ALL IN TABLESPACE");
2228 else if (Matches(
"ALTER"))
2229 COMPLETE_WITH_GENERATOR(alter_command_generator);
2231 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny))
2232 COMPLETE_WITH(
"SET TABLESPACE",
"OWNED BY");
2234 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny,
"OWNED",
"BY"))
2235 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
2237 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny,
"OWNED",
"BY", MatchAny))
2238 COMPLETE_WITH(
"SET TABLESPACE");
2240 else if (Matches(
"ALTER",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny))
2243 else if (Matches(
"ALTER",
"AGGREGATE", MatchAny, MatchAny))
2245 if (ends_with(prev_wd,
')'))
2246 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
2248 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
2251 else if (Matches(
"ALTER",
"FUNCTION", MatchAny, MatchAny))
2253 if (ends_with(prev_wd,
')'))
2254 COMPLETE_WITH(Alter_function_options);
2256 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
2259 else if (Matches(
"ALTER",
"PROCEDURE", MatchAny, MatchAny))
2261 if (ends_with(prev_wd,
')'))
2262 COMPLETE_WITH(Alter_procedure_options);
2264 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
2267 else if (Matches(
"ALTER",
"ROUTINE", MatchAny, MatchAny))
2269 if (ends_with(prev_wd,
')'))
2270 COMPLETE_WITH(Alter_routine_options);
2272 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
2275 else if (Matches(
"ALTER",
"FUNCTION|ROUTINE", MatchAny, MatchAny,
"PARALLEL"))
2276 COMPLETE_WITH(
"RESTRICTED",
"SAFE",
"UNSAFE");
2278 else if (Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"SECURITY") ||
2279 Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"EXTERNAL",
"SECURITY"))
2280 COMPLETE_WITH(
"DEFINER",
"INVOKER");
2282 else if (Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"RESET"))
2283 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
2286 else if (Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"SET"))
2287 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
2291 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny))
2292 COMPLETE_WITH(
"ADD",
"DROP",
"OWNER TO",
"RENAME TO",
"SET");
2294 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD"))
2295 COMPLETE_WITH(
"TABLES IN SCHEMA",
"TABLE");
2296 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE"))
2297 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2298 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE") &&
2299 ends_with(prev_wd,
','))
2300 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2309 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE"))
2311 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE",
"("))
2312 COMPLETE_WITH_ATTR(prev3_wd);
2313 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE") &&
2314 !TailMatches(
"WHERE",
"(*)"))
2315 COMPLETE_WITH(
",",
"WHERE (");
2316 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE"))
2319 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"DROP"))
2320 COMPLETE_WITH(
"TABLES IN SCHEMA",
"TABLE");
2322 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"SET"))
2323 COMPLETE_WITH(
"(",
"TABLES IN SCHEMA",
"TABLE");
2324 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|DROP|SET",
"TABLES",
"IN",
"SCHEMA"))
2325 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
2326 " AND nspname NOT LIKE E'pg\\\\_%%'",
2329 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny, MatchAnyN,
"SET",
"("))
2330 COMPLETE_WITH(
"publish",
"publish_generated_columns",
"publish_via_partition_root");
2332 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny))
2333 COMPLETE_WITH(
"CONNECTION",
"ENABLE",
"DISABLE",
"OWNER TO",
2334 "RENAME TO",
"REFRESH PUBLICATION",
"REFRESH SEQUENCES",
2335 "SET",
"SKIP (",
"ADD PUBLICATION",
"DROP PUBLICATION");
2337 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"REFRESH"))
2338 COMPLETE_WITH(
"PUBLICATION",
"SEQUENCES");
2340 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"REFRESH",
"PUBLICATION",
"WITH",
"("))
2341 COMPLETE_WITH(
"copy_data");
2343 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny,
"SET"))
2344 COMPLETE_WITH(
"(",
"PUBLICATION");
2346 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"SET",
"("))
2347 COMPLETE_WITH(
"binary",
"disable_on_error",
"failover",
2348 "max_retention_duration",
"origin",
2349 "password_required",
"retain_dead_tuples",
2350 "run_as_owner",
"slot_name",
"streaming",
2351 "synchronous_commit",
"two_phase");
2353 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"SKIP",
"("))
2354 COMPLETE_WITH(
"lsn");
2356 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"SET",
"PUBLICATION"))
2361 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
2362 "ADD|DROP|SET",
"PUBLICATION", MatchAny))
2363 COMPLETE_WITH(
"WITH (");
2365 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
2366 "ADD|DROP|SET",
"PUBLICATION", MatchAny,
"WITH",
"("))
2367 COMPLETE_WITH(
"copy_data",
"refresh");
2370 else if (Matches(
"ALTER",
"SCHEMA", MatchAny))
2371 COMPLETE_WITH(
"OWNER TO",
"RENAME TO");
2374 else if (Matches(
"ALTER",
"COLLATION", MatchAny))
2375 COMPLETE_WITH(
"OWNER TO",
"REFRESH VERSION",
"RENAME TO",
"SET SCHEMA");
2378 else if (Matches(
"ALTER",
"CONVERSION", MatchAny))
2379 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
2382 else if (Matches(
"ALTER",
"DATABASE", MatchAny))
2383 COMPLETE_WITH(
"RESET",
"SET",
"OWNER TO",
"REFRESH COLLATION VERSION",
"RENAME TO",
2384 "IS_TEMPLATE",
"ALLOW_CONNECTIONS",
2385 "CONNECTION LIMIT");
2388 else if (Matches(
"ALTER",
"DATABASE", MatchAny,
"RESET"))
2390 set_completion_reference(prev2_wd);
2391 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_database_vars,
"ALL");
2395 else if (Matches(
"ALTER",
"DATABASE", MatchAny,
"SET",
"TABLESPACE"))
2396 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
2399 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER"))
2400 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
2403 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER", MatchAny))
2404 COMPLETE_WITH(
"DISABLE",
"ENABLE",
"OWNER TO",
"RENAME TO");
2407 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER", MatchAny,
"ENABLE"))
2408 COMPLETE_WITH(
"REPLICA",
"ALWAYS");
2411 else if (Matches(
"ALTER",
"EXTENSION", MatchAny))
2412 COMPLETE_WITH(
"ADD",
"DROP",
"UPDATE",
"SET SCHEMA");
2415 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP"))
2416 COMPLETE_WITH(
"ACCESS METHOD",
"AGGREGATE",
"CAST",
"COLLATION",
2417 "CONVERSION",
"DOMAIN",
"EVENT TRIGGER",
"FOREIGN",
2418 "FUNCTION",
"MATERIALIZED VIEW",
"OPERATOR",
2419 "LANGUAGE",
"PROCEDURE",
"ROUTINE",
"SCHEMA",
2420 "SEQUENCE",
"SERVER",
"TABLE",
"TEXT SEARCH",
2421 "TRANSFORM FOR",
"TYPE",
"VIEW");
2424 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP",
"FOREIGN"))
2425 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
2428 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP",
"OPERATOR"))
2429 COMPLETE_WITH(
"CLASS",
"FAMILY");
2432 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP",
"TEXT",
"SEARCH"))
2433 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
2436 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"UPDATE"))
2437 COMPLETE_WITH(
"TO");
2440 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"UPDATE",
"TO"))
2442 set_completion_reference(prev3_wd);
2443 COMPLETE_WITH_QUERY(Query_for_list_of_available_extension_versions);
2447 else if (Matches(
"ALTER",
"FOREIGN"))
2448 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
2451 else if (Matches(
"ALTER",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
2452 COMPLETE_WITH(
"HANDLER",
"VALIDATOR",
"NO",
2453 "OPTIONS",
"OWNER TO",
"RENAME TO");
2454 else if (Matches(
"ALTER",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny,
"NO"))
2455 COMPLETE_WITH(
"HANDLER",
"VALIDATOR");
2458 else if (Matches(
"ALTER",
"FOREIGN",
"TABLE", MatchAny))
2459 COMPLETE_WITH(
"ADD",
"ALTER",
"DISABLE TRIGGER",
"DROP",
"ENABLE",
2460 "INHERIT",
"NO INHERIT",
"OPTIONS",
"OWNER TO",
2461 "RENAME",
"SET",
"VALIDATE CONSTRAINT");
2464 else if (Matches(
"ALTER",
"INDEX"))
2465 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
2466 "ALL IN TABLESPACE");
2468 else if (Matches(
"ALTER",
"INDEX", MatchAny))
2469 COMPLETE_WITH(
"ALTER COLUMN",
"OWNER TO",
"RENAME TO",
"SET",
2470 "RESET",
"ATTACH PARTITION",
2471 "DEPENDS ON EXTENSION",
"NO DEPENDS ON EXTENSION");
2472 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ATTACH"))
2473 COMPLETE_WITH(
"PARTITION");
2474 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ATTACH",
"PARTITION"))
2475 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
2477 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER"))
2478 COMPLETE_WITH(
"COLUMN");
2480 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN"))
2482 set_completion_reference(prev3_wd);
2483 COMPLETE_WITH_SCHEMA_QUERY_VERBATIM(Query_for_list_of_attribute_numbers);
2486 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny))
2487 COMPLETE_WITH(
"SET STATISTICS");
2489 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET"))
2490 COMPLETE_WITH(
"STATISTICS");
2492 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STATISTICS"))
2497 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"SET"))
2498 COMPLETE_WITH(
"(",
"TABLESPACE");
2500 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"RESET"))
2503 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"RESET",
"("))
2504 COMPLETE_WITH(
"fillfactor",
2505 "deduplicate_items",
2506 "fastupdate",
"gin_pending_list_limit",
2508 "pages_per_range",
"autosummarize"
2510 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"SET",
"("))
2511 COMPLETE_WITH(
"fillfactor =",
2512 "deduplicate_items =",
2513 "fastupdate =",
"gin_pending_list_limit =",
2515 "pages_per_range =",
"autosummarize ="
2517 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"NO",
"DEPENDS"))
2518 COMPLETE_WITH(
"ON EXTENSION");
2519 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"DEPENDS"))
2520 COMPLETE_WITH(
"ON EXTENSION");
2523 else if (Matches(
"ALTER",
"LANGUAGE", MatchAny))
2524 COMPLETE_WITH(
"OWNER TO",
"RENAME TO");
2527 else if (Matches(
"ALTER",
"LARGE",
"OBJECT", MatchAny))
2528 COMPLETE_WITH(
"OWNER TO");
2531 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW"))
2532 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_matviews,
2533 "ALL IN TABLESPACE");
2536 else if (Matches(
"ALTER",
"USER|ROLE", MatchAny) &&
2537 !TailMatches(
"USER",
"MAPPING"))
2538 COMPLETE_WITH(
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
"CREATEROLE",
2539 "ENCRYPTED PASSWORD",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2540 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2541 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2542 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2543 "VALID UNTIL",
"WITH");
2546 else if (Matches(
"ALTER",
"USER|ROLE", MatchAny,
"RESET"))
2548 set_completion_reference(prev2_wd);
2549 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_user_vars,
"ALL");
2553 else if (Matches(
"ALTER",
"USER|ROLE", MatchAny,
"WITH"))
2555 COMPLETE_WITH(
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
"CREATEROLE",
2556 "ENCRYPTED PASSWORD",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2557 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2558 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2559 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2563 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
2564 COMPLETE_WITH(
"FOR",
"GRANT",
"IN SCHEMA",
"REVOKE");
2566 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR"))
2567 COMPLETE_WITH(
"ROLE");
2569 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN"))
2570 COMPLETE_WITH(
"SCHEMA");
2572 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2574 COMPLETE_WITH(
"GRANT",
"REVOKE",
"IN SCHEMA");
2576 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2578 COMPLETE_WITH(
"GRANT",
"REVOKE",
"FOR ROLE");
2580 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2582 COMPLETE_WITH(
"ROLE");
2585 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2586 MatchAny,
"IN",
"SCHEMA", MatchAny) ||
2587 Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2588 MatchAny,
"FOR",
"ROLE|USER", MatchAny))
2589 COMPLETE_WITH(
"GRANT",
"REVOKE");
2591 else if (Matches(
"ALTER",
"DOMAIN", MatchAny))
2592 COMPLETE_WITH(
"ADD",
"DROP",
"OWNER TO",
"RENAME",
"SET",
2593 "VALIDATE CONSTRAINT");
2595 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"ADD"))
2596 COMPLETE_WITH(
"CONSTRAINT",
"NOT NULL",
"CHECK (");
2598 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"ADD",
"CONSTRAINT", MatchAny))
2599 COMPLETE_WITH(
"NOT NULL",
"CHECK (");
2601 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"DROP"))
2602 COMPLETE_WITH(
"CONSTRAINT",
"DEFAULT",
"NOT NULL");
2604 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"DROP|RENAME|VALIDATE",
"CONSTRAINT"))
2606 set_completion_reference(prev3_wd);
2607 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_type);
2610 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"RENAME"))
2611 COMPLETE_WITH(
"CONSTRAINT",
"TO");
2613 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"RENAME",
"CONSTRAINT", MatchAny))
2614 COMPLETE_WITH(
"TO");
2617 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"SET"))
2618 COMPLETE_WITH(
"DEFAULT",
"NOT NULL",
"SCHEMA");
2620 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny))
2621 COMPLETE_WITH(
"AS",
"INCREMENT",
"MINVALUE",
"MAXVALUE",
"RESTART",
2622 "START",
"NO",
"CACHE",
"CYCLE",
"SET",
"OWNED BY",
2623 "OWNER TO",
"RENAME TO");
2625 else if (TailMatches(
"ALTER",
"SEQUENCE", MatchAny,
"AS"))
2626 COMPLETE_WITH_CS(
"smallint",
"integer",
"bigint");
2628 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny,
"NO"))
2629 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
2631 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny,
"SET"))
2632 COMPLETE_WITH(
"SCHEMA",
"LOGGED",
"UNLOGGED");
2634 else if (Matches(
"ALTER",
"SERVER", MatchAny))
2635 COMPLETE_WITH(
"VERSION",
"OPTIONS",
"OWNER TO",
"RENAME TO");
2637 else if (Matches(
"ALTER",
"SERVER", MatchAny,
"VERSION", MatchAny))
2638 COMPLETE_WITH(
"OPTIONS");
2640 else if (Matches(
"ALTER",
"SYSTEM"))
2641 COMPLETE_WITH(
"SET",
"RESET");
2642 else if (Matches(
"ALTER",
"SYSTEM",
"SET|RESET"))
2643 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_alter_system_set_vars,
2645 else if (Matches(
"ALTER",
"SYSTEM",
"SET", MatchAny))
2646 COMPLETE_WITH(
"TO");
2648 else if (Matches(
"ALTER",
"VIEW", MatchAny))
2649 COMPLETE_WITH(
"ALTER COLUMN",
"OWNER TO",
"RENAME",
"RESET",
"SET");
2651 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME"))
2652 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"TO");
2653 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2654 COMPLETE_WITH_ATTR(prev3_wd);
2656 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER", MatchAny) ||
2657 Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER",
"COLUMN", MatchAny))
2658 COMPLETE_WITH(
"SET DEFAULT",
"DROP DEFAULT");
2660 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME", MatchAnyExcept(
"TO")))
2661 COMPLETE_WITH(
"TO");
2663 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME",
"COLUMN", MatchAnyExcept(
"TO")))
2664 COMPLETE_WITH(
"TO");
2666 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RESET"))
2669 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET"))
2670 COMPLETE_WITH(
"(",
"SCHEMA");
2672 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET|RESET",
"("))
2673 COMPLETE_WITH_LIST(view_optional_parameters);
2674 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET",
"(", MatchAny))
2676 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET",
"(",
"check_option",
"="))
2677 COMPLETE_WITH(
"local",
"cascaded");
2678 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET",
"(",
"security_barrier|security_invoker",
"="))
2679 COMPLETE_WITH(
"true",
"false");
2682 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny))
2683 COMPLETE_WITH(
"ALTER COLUMN",
"CLUSTER ON",
"DEPENDS ON EXTENSION",
2684 "NO DEPENDS ON EXTENSION",
"OWNER TO",
"RENAME",
2687 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME"))
2688 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"TO");
2689 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2690 COMPLETE_WITH_ATTR(prev3_wd);
2692 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME", MatchAnyExcept(
"TO")))
2693 COMPLETE_WITH(
"TO");
2695 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME",
"COLUMN", MatchAnyExcept(
"TO")))
2696 COMPLETE_WITH(
"TO");
2698 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"SET"))
2699 COMPLETE_WITH(
"(",
"ACCESS METHOD",
"SCHEMA",
"TABLESPACE",
"WITHOUT CLUSTER");
2701 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"SET",
"ACCESS",
"METHOD"))
2702 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
2705 else if (Matches(
"ALTER",
"POLICY"))
2706 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
2708 else if (Matches(
"ALTER",
"POLICY", MatchAny))
2709 COMPLETE_WITH(
"ON");
2711 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON"))
2713 set_completion_reference(prev2_wd);
2714 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
2717 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny))
2718 COMPLETE_WITH(
"RENAME TO",
"TO",
"USING (",
"WITH CHECK (");
2720 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"TO"))
2721 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
2722 Keywords_for_list_of_grant_roles);
2724 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"USING"))
2727 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"WITH",
"CHECK"))
2731 else if (Matches(
"ALTER",
"RULE", MatchAny))
2732 COMPLETE_WITH(
"ON");
2735 else if (Matches(
"ALTER",
"RULE", MatchAny,
"ON"))
2737 set_completion_reference(prev2_wd);
2738 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
2742 else if (Matches(
"ALTER",
"RULE", MatchAny,
"ON", MatchAny))
2743 COMPLETE_WITH(
"RENAME TO");
2746 else if (Matches(
"ALTER",
"STATISTICS", MatchAny))
2747 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA",
"SET STATISTICS");
2749 else if (Matches(
"ALTER",
"STATISTICS", MatchAny,
"SET"))
2750 COMPLETE_WITH(
"SCHEMA",
"STATISTICS");
2753 else if (Matches(
"ALTER",
"TRIGGER", MatchAny))
2754 COMPLETE_WITH(
"ON");
2756 else if (Matches(
"ALTER",
"TRIGGER", MatchAny,
"ON"))
2758 set_completion_reference(prev2_wd);
2759 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
2763 else if (Matches(
"ALTER",
"TRIGGER", MatchAny,
"ON", MatchAny))
2764 COMPLETE_WITH(
"RENAME TO",
"DEPENDS ON EXTENSION",
2765 "NO DEPENDS ON EXTENSION");
2770 else if (Matches(
"ALTER",
"TABLE", MatchAny))
2771 COMPLETE_WITH(
"ADD",
"ALTER",
"CLUSTER ON",
"DISABLE",
"DROP",
2772 "ENABLE",
"INHERIT",
"NO",
"RENAME",
"RESET",
2773 "OWNER TO",
"SET",
"VALIDATE CONSTRAINT",
2774 "REPLICA IDENTITY",
"ATTACH PARTITION",
2775 "DETACH PARTITION",
"FORCE ROW LEVEL SECURITY",
2778 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD"))
2783 COMPLETE_WITH(
"COLUMN",
"CONSTRAINT",
"CHECK (",
"NOT NULL",
"UNIQUE",
2784 "PRIMARY KEY",
"EXCLUDE",
"FOREIGN KEY");
2787 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"COLUMN", MatchAny) ||
2788 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD", MatchAnyExcept(
"COLUMN|CONSTRAINT|CHECK|UNIQUE|PRIMARY|NOT|EXCLUDE|FOREIGN")))
2789 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
2791 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny))
2792 COMPLETE_WITH(
"CHECK (",
"NOT NULL",
"UNIQUE",
"PRIMARY KEY",
"EXCLUDE",
"FOREIGN KEY");
2794 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"NOT",
"NULL"))
2795 COMPLETE_WITH_ATTR(prev4_wd);
2796 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
"NOT",
"NULL"))
2797 COMPLETE_WITH_ATTR(prev6_wd);
2799 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"PRIMARY",
"KEY") ||
2800 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"UNIQUE") ||
2801 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
"PRIMARY",
"KEY") ||
2802 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
"UNIQUE"))
2803 COMPLETE_WITH(
"(",
"USING INDEX");
2805 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"PRIMARY",
"KEY",
"USING",
"INDEX"))
2807 set_completion_reference(prev6_wd);
2808 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2811 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"UNIQUE",
"USING",
"INDEX"))
2813 set_completion_reference(prev5_wd);
2814 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2817 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
2818 "PRIMARY",
"KEY",
"USING",
"INDEX"))
2820 set_completion_reference(prev8_wd);
2821 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2824 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
2825 "UNIQUE",
"USING",
"INDEX"))
2827 set_completion_reference(prev7_wd);
2828 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2831 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE"))
2832 COMPLETE_WITH(
"ALWAYS",
"REPLICA",
"ROW LEVEL SECURITY",
"RULE",
2834 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"REPLICA|ALWAYS"))
2835 COMPLETE_WITH(
"RULE",
"TRIGGER");
2836 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"RULE"))
2838 set_completion_reference(prev3_wd);
2839 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2841 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE", MatchAny,
"RULE"))
2843 set_completion_reference(prev4_wd);
2844 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2846 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"TRIGGER"))
2848 set_completion_reference(prev3_wd);
2849 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2851 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE", MatchAny,
"TRIGGER"))
2853 set_completion_reference(prev4_wd);
2854 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2857 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"INHERIT"))
2858 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2860 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"NO"))
2861 COMPLETE_WITH(
"FORCE ROW LEVEL SECURITY",
"INHERIT");
2863 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"NO",
"INHERIT"))
2864 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2866 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE"))
2867 COMPLETE_WITH(
"ROW LEVEL SECURITY",
"RULE",
"TRIGGER");
2868 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE",
"RULE"))
2870 set_completion_reference(prev3_wd);
2871 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2873 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE",
"TRIGGER"))
2875 set_completion_reference(prev3_wd);
2876 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2880 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER"))
2881 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"CONSTRAINT");
2884 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME"))
2885 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"CONSTRAINT",
"TO");
2886 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2887 COMPLETE_WITH_ATTR(prev3_wd);
2890 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME", MatchAnyExcept(
"CONSTRAINT|TO")))
2891 COMPLETE_WITH(
"TO");
2894 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME",
"COLUMN|CONSTRAINT", MatchAnyExcept(
"TO")))
2895 COMPLETE_WITH(
"TO");
2898 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DROP"))
2899 COMPLETE_WITH(
"COLUMN",
"CONSTRAINT");
2901 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DROP",
"COLUMN"))
2902 COMPLETE_WITH_ATTR(prev3_wd);
2904 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER|DROP|RENAME",
"CONSTRAINT"))
2906 set_completion_reference(prev3_wd);
2907 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_table);
2910 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"VALIDATE",
"CONSTRAINT"))
2912 set_completion_reference(prev3_wd);
2913 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_table_not_validated);
2916 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny) ||
2917 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny))
2918 COMPLETE_WITH(
"TYPE",
"SET",
"RESET",
"RESTART",
"ADD",
"DROP");
2920 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD") ||
2921 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD"))
2922 COMPLETE_WITH(
"GENERATED");
2924 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD",
"GENERATED") ||
2925 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD",
"GENERATED"))
2926 COMPLETE_WITH(
"ALWAYS",
"BY DEFAULT");
2928 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD",
"GENERATED",
"ALWAYS") ||
2929 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD",
"GENERATED",
"ALWAYS") ||
2930 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD",
"GENERATED",
"BY",
"DEFAULT") ||
2931 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD",
"GENERATED",
"BY",
"DEFAULT"))
2932 COMPLETE_WITH(
"AS IDENTITY");
2934 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET") ||
2935 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET"))
2936 COMPLETE_WITH(
"(",
"COMPRESSION",
"DATA TYPE",
"DEFAULT",
"EXPRESSION",
"GENERATED",
"NOT NULL",
2937 "STATISTICS",
"STORAGE",
2939 "INCREMENT",
"MINVALUE",
"MAXVALUE",
"START",
"NO",
"CACHE",
"CYCLE");
2941 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"(") ||
2942 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"("))
2943 COMPLETE_WITH(
"n_distinct",
"n_distinct_inherited");
2945 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"COMPRESSION") ||
2946 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"COMPRESSION"))
2947 COMPLETE_WITH(
"DEFAULT",
"PGLZ",
"LZ4");
2949 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"EXPRESSION") ||
2950 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"EXPRESSION"))
2951 COMPLETE_WITH(
"AS");
2953 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"EXPRESSION",
"AS") ||
2954 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"EXPRESSION",
"AS"))
2957 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"GENERATED") ||
2958 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"GENERATED"))
2959 COMPLETE_WITH(
"ALWAYS",
"BY DEFAULT");
2961 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"NO") ||
2962 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"NO"))
2963 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
2965 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STORAGE") ||
2966 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"STORAGE"))
2967 COMPLETE_WITH(
"DEFAULT",
"PLAIN",
"EXTERNAL",
"EXTENDED",
"MAIN");
2969 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STATISTICS") ||
2970 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"STATISTICS"))
2975 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"DROP") ||
2976 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"DROP"))
2977 COMPLETE_WITH(
"DEFAULT",
"EXPRESSION",
"IDENTITY",
"NOT NULL");
2978 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"CLUSTER"))
2979 COMPLETE_WITH(
"ON");
2980 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"CLUSTER",
"ON"))
2982 set_completion_reference(prev3_wd);
2983 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
2986 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET"))
2987 COMPLETE_WITH(
"(",
"ACCESS METHOD",
"LOGGED",
"SCHEMA",
2988 "TABLESPACE",
"UNLOGGED",
"WITH",
"WITHOUT");
2994 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"ACCESS",
"METHOD"))
2995 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_table_access_methods,
3002 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"TABLESPACE"))
3003 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
3005 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"WITHOUT"))
3006 COMPLETE_WITH(
"CLUSTER",
"OIDS");
3008 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RESET"))
3011 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET|RESET",
"("))
3012 COMPLETE_WITH_LIST(table_storage_parameters);
3013 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY",
"USING",
"INDEX"))
3015 set_completion_reference(prev5_wd);
3016 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
3018 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY",
"USING"))
3019 COMPLETE_WITH(
"INDEX");
3020 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY"))
3021 COMPLETE_WITH(
"FULL",
"NOTHING",
"DEFAULT",
"USING");
3022 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA"))
3023 COMPLETE_WITH(
"IDENTITY");
3029 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ATTACH",
"PARTITION"))
3030 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3032 else if (TailMatches(
"ATTACH",
"PARTITION", MatchAny))
3033 COMPLETE_WITH(
"FOR VALUES",
"DEFAULT");
3034 else if (TailMatches(
"FOR",
"VALUES"))
3035 COMPLETE_WITH(
"FROM (",
"IN (",
"WITH (");
3041 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DETACH",
"PARTITION"))
3043 set_completion_reference(prev3_wd);
3044 COMPLETE_WITH_SCHEMA_QUERY(Query_for_partition_of_table);
3046 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DETACH",
"PARTITION", MatchAny))
3047 COMPLETE_WITH(
"CONCURRENTLY",
"FINALIZE");
3050 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"OF"))
3051 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_composite_datatypes);
3054 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny))
3055 COMPLETE_WITH(
"RENAME TO",
"OWNER TO",
"SET",
"RESET");
3057 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny,
"SET|RESET"))
3060 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny,
"SET|RESET",
"("))
3061 COMPLETE_WITH(
"seq_page_cost",
"random_page_cost",
3062 "effective_io_concurrency",
"maintenance_io_concurrency");
3065 else if (Matches(
"ALTER",
"TEXT",
"SEARCH"))
3066 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3067 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"TEMPLATE|PARSER", MatchAny))
3068 COMPLETE_WITH(
"RENAME TO",
"SET SCHEMA");
3069 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"DICTIONARY", MatchAny))
3070 COMPLETE_WITH(
"(",
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
3071 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"CONFIGURATION", MatchAny))
3072 COMPLETE_WITH(
"ADD MAPPING FOR",
"ALTER MAPPING",
3074 "OWNER TO",
"RENAME TO",
"SET SCHEMA");
3077 else if (Matches(
"ALTER",
"TYPE", MatchAny))
3078 COMPLETE_WITH(
"ADD ATTRIBUTE",
"ADD VALUE",
"ALTER ATTRIBUTE",
3080 "OWNER TO",
"RENAME",
"SET SCHEMA",
"SET (");
3082 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ADD"))
3083 COMPLETE_WITH(
"ATTRIBUTE",
"VALUE");
3085 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME"))
3086 COMPLETE_WITH(
"ATTRIBUTE",
"TO",
"VALUE");
3088 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME",
"ATTRIBUTE|VALUE", MatchAny))
3089 COMPLETE_WITH(
"TO");
3091 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME",
"ATTRIBUTE", MatchAny,
"TO", MatchAny))
3092 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3098 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ALTER|DROP|RENAME",
"ATTRIBUTE"))
3099 COMPLETE_WITH_ATTR(prev3_wd);
3101 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ADD",
"ATTRIBUTE", MatchAny))
3102 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3104 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ADD",
"ATTRIBUTE", MatchAny, MatchAny))
3105 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3107 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"DROP",
"ATTRIBUTE", MatchAny))
3108 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3110 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ALTER",
"ATTRIBUTE", MatchAny))
3111 COMPLETE_WITH(
"TYPE");
3113 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ALTER",
"ATTRIBUTE", MatchAny,
"TYPE", MatchAny))
3114 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3116 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME",
"VALUE"))
3117 COMPLETE_WITH_ENUM_VALUE(prev3_wd);
3119 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"SET"))
3120 COMPLETE_WITH(
"(",
"SCHEMA");
3122 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"SET",
"("))
3123 COMPLETE_WITH(
"ANALYZE",
"RECEIVE",
"SEND",
"STORAGE",
"SUBSCRIPT",
3124 "TYPMOD_IN",
"TYPMOD_OUT");
3127 else if (Matches(
"ALTER",
"GROUP", MatchAny))
3128 COMPLETE_WITH(
"ADD USER",
"DROP USER",
"RENAME TO");
3130 else if (Matches(
"ALTER",
"GROUP", MatchAny,
"ADD|DROP"))
3131 COMPLETE_WITH(
"USER");
3133 else if (Matches(
"ALTER",
"GROUP", MatchAny,
"ADD|DROP",
"USER"))
3134 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
3140 else if (Matches(
"ANALYZE"))
3141 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_analyzables,
3142 "(",
"VERBOSE",
"ONLY");
3143 else if (Matches(
"ANALYZE",
"VERBOSE"))
3144 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_analyzables,
3146 else if (HeadMatches(
"ANALYZE",
"(*") &&
3147 !HeadMatches(
"ANALYZE",
"(*)"))
3154 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
3155 COMPLETE_WITH(
"VERBOSE",
"SKIP_LOCKED",
"BUFFER_USAGE_LIMIT");
3156 else if (TailMatches(
"VERBOSE|SKIP_LOCKED"))
3157 COMPLETE_WITH(
"ON",
"OFF");
3159 else if (Matches(
"ANALYZE", MatchAnyN,
"("))
3161 COMPLETE_WITH_ATTR(prev2_wd);
3162 else if (HeadMatches(
"ANALYZE"))
3163 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_analyzables);
3166 else if (Matches(
"BEGIN"))
3167 COMPLETE_WITH(
"WORK",
"TRANSACTION",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
3169 else if (Matches(
"END|ABORT"))
3170 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION");
3172 else if (Matches(
"COMMIT"))
3173 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION",
"PREPARED");
3175 else if (Matches(
"RELEASE"))
3176 COMPLETE_WITH(
"SAVEPOINT");
3178 else if (Matches(
"ROLLBACK"))
3179 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION",
"TO SAVEPOINT",
"PREPARED");
3180 else if (Matches(
"ABORT|END|COMMIT|ROLLBACK",
"AND"))
3181 COMPLETE_WITH(
"CHAIN");
3183 else if (Matches(
"CALL"))
3184 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_procedures);
3185 else if (Matches(
"CALL", MatchAny))
3188 else if (Matches(
"CHECKPOINT"))
3190 else if (HeadMatches(
"CHECKPOINT",
"(*") &&
3191 !HeadMatches(
"CHECKPOINT",
"(*)"))
3198 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
3199 COMPLETE_WITH(
"MODE",
"FLUSH_UNLOGGED");
3200 else if (TailMatches(
"MODE"))
3201 COMPLETE_WITH(
"FAST",
"SPREAD");
3204 else if (Matches(
"CLOSE"))
3205 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
3208 else if (Matches(
"CLUSTER"))
3209 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_clusterables,
3211 else if (Matches(
"CLUSTER",
"VERBOSE") ||
3212 Matches(
"CLUSTER",
"(*)"))
3213 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_clusterables);
3215 else if (Matches(
"CLUSTER", MatchAnyExcept(
"VERBOSE|ON|(|(*)")))
3216 COMPLETE_WITH(
"USING");
3218 else if (Matches(
"CLUSTER",
"VERBOSE|(*)", MatchAny))
3219 COMPLETE_WITH(
"USING");
3221 else if (Matches(
"CLUSTER", MatchAny,
"USING") ||
3222 Matches(
"CLUSTER",
"VERBOSE|(*)", MatchAny,
"USING"))
3224 set_completion_reference(prev2_wd);
3225 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
3227 else if (HeadMatches(
"CLUSTER",
"(*") &&
3228 !HeadMatches(
"CLUSTER",
"(*)"))
3235 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
3236 COMPLETE_WITH(
"VERBOSE");
3240 else if (Matches(
"COMMENT"))
3241 COMPLETE_WITH(
"ON");
3242 else if (Matches(
"COMMENT",
"ON"))
3243 COMPLETE_WITH(
"ACCESS METHOD",
"AGGREGATE",
"CAST",
"COLLATION",
3244 "COLUMN",
"CONSTRAINT",
"CONVERSION",
"DATABASE",
3245 "DOMAIN",
"EXTENSION",
"EVENT TRIGGER",
3246 "FOREIGN DATA WRAPPER",
"FOREIGN TABLE",
3247 "FUNCTION",
"INDEX",
"LANGUAGE",
"LARGE OBJECT",
3248 "MATERIALIZED VIEW",
"OPERATOR",
"POLICY",
3249 "PROCEDURE",
"PROCEDURAL LANGUAGE",
"PUBLICATION",
"ROLE",
3250 "ROUTINE",
"RULE",
"SCHEMA",
"SEQUENCE",
"SERVER",
3251 "STATISTICS",
"SUBSCRIPTION",
"TABLE",
3252 "TABLESPACE",
"TEXT SEARCH",
"TRANSFORM FOR",
3253 "TRIGGER",
"TYPE",
"VIEW");
3254 else if (Matches(
"COMMENT",
"ON",
"ACCESS",
"METHOD"))
3255 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
3256 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT"))
3257 COMPLETE_WITH_QUERY(Query_for_all_table_constraints);
3258 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny))
3259 COMPLETE_WITH(
"ON");
3260 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny,
"ON"))
3262 set_completion_reference(prev2_wd);
3263 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables_for_constraint,
3266 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny,
"ON",
"DOMAIN"))
3267 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
3268 else if (Matches(
"COMMENT",
"ON",
"EVENT",
"TRIGGER"))
3269 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
3270 else if (Matches(
"COMMENT",
"ON",
"FOREIGN"))
3271 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
3272 else if (Matches(
"COMMENT",
"ON",
"FOREIGN",
"TABLE"))
3273 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
3274 else if (Matches(
"COMMENT",
"ON",
"MATERIALIZED",
"VIEW"))
3275 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
3276 else if (Matches(
"COMMENT",
"ON",
"POLICY"))
3277 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
3278 else if (Matches(
"COMMENT",
"ON",
"POLICY", MatchAny))
3279 COMPLETE_WITH(
"ON");
3280 else if (Matches(
"COMMENT",
"ON",
"POLICY", MatchAny,
"ON"))
3282 set_completion_reference(prev2_wd);
3283 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
3285 else if (Matches(
"COMMENT",
"ON",
"PROCEDURAL",
"LANGUAGE"))
3286 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3287 else if (Matches(
"COMMENT",
"ON",
"RULE", MatchAny))
3288 COMPLETE_WITH(
"ON");
3289 else if (Matches(
"COMMENT",
"ON",
"RULE", MatchAny,
"ON"))
3291 set_completion_reference(prev2_wd);
3292 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
3294 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH"))
3295 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3296 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"CONFIGURATION"))
3297 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_configurations);
3298 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"DICTIONARY"))
3299 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_dictionaries);
3300 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"PARSER"))
3301 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_parsers);
3302 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"TEMPLATE"))
3303 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_templates);
3304 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR"))
3305 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3306 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR", MatchAny))
3307 COMPLETE_WITH(
"LANGUAGE");
3308 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
3310 set_completion_reference(prev2_wd);
3311 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3313 else if (Matches(
"COMMENT",
"ON",
"TRIGGER", MatchAny))
3314 COMPLETE_WITH(
"ON");
3315 else if (Matches(
"COMMENT",
"ON",
"TRIGGER", MatchAny,
"ON"))
3317 set_completion_reference(prev2_wd);
3318 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
3320 else if (Matches(
"COMMENT",
"ON", MatchAny, MatchAnyExcept(
"IS")) ||
3321 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAnyExcept(
"IS")) ||
3322 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAny, MatchAnyExcept(
"IS")) ||
3323 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAny, MatchAny, MatchAnyExcept(
"IS")))
3324 COMPLETE_WITH(
"IS");
3332 else if (Matches(
"COPY|\\copy"))
3333 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables_for_copy,
"(");
3335 else if (Matches(
"COPY|\\copy",
"("))
3336 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES",
"INSERT INTO",
"UPDATE",
"DELETE FROM",
"MERGE INTO",
"WITH");
3338 else if (Matches(
"COPY|\\copy", MatchAny))
3339 COMPLETE_WITH(
"FROM",
"TO");
3341 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO"))
3344 bool force_quote = HeadMatches(
"COPY");
3346 if (TailMatches(
"FROM"))
3347 COMPLETE_WITH_FILES_PLUS(
"", force_quote,
"STDIN",
"PROGRAM");
3349 COMPLETE_WITH_FILES_PLUS(
"", force_quote,
"STDOUT",
"PROGRAM");
3353 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO",
"PROGRAM"))
3354 COMPLETE_WITH_FILES(
"", HeadMatches(
"COPY"));
3358 else if (Matches(
"COPY|\\copy", MatchAny,
"TO", MatchAnyExcept(
"PROGRAM")) ||
3359 Matches(
"COPY|\\copy", MatchAny,
"TO",
"PROGRAM", MatchAny))
3360 COMPLETE_WITH(
"WITH (");
3363 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM", MatchAnyExcept(
"PROGRAM")) ||
3364 Matches(
"COPY|\\copy", MatchAny,
"FROM",
"PROGRAM", MatchAny))
3365 COMPLETE_WITH(
"WITH (",
"WHERE");
3368 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM", MatchAnyExcept(
"PROGRAM"),
"WITH",
"(") ||
3369 Matches(
"COPY|\\copy", MatchAny,
"FROM",
"PROGRAM", MatchAny,
"WITH",
"("))
3370 COMPLETE_WITH(Copy_from_options);
3373 else if (Matches(
"COPY|\\copy", MatchAny,
"TO", MatchAnyExcept(
"PROGRAM"),
"WITH",
"(") ||
3374 Matches(
"COPY|\\copy", MatchAny,
"TO",
"PROGRAM", MatchAny,
"WITH",
"("))
3375 COMPLETE_WITH(Copy_to_options);
3378 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO", MatchAnyExcept(
"PROGRAM"),
"WITH",
"(",
"FORMAT") ||
3379 Matches(
"COPY|\\copy", MatchAny,
"FROM|TO",
"PROGRAM", MatchAny,
"WITH",
"(",
"FORMAT"))
3380 COMPLETE_WITH(
"binary",
"csv",
"text");
3383 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM", MatchAnyExcept(
"PROGRAM"),
"WITH",
"(",
"ON_ERROR") ||
3384 Matches(
"COPY|\\copy", MatchAny,
"FROM",
"PROGRAM", MatchAny,
"WITH",
"(",
"ON_ERROR"))
3385 COMPLETE_WITH(
"stop",
"ignore");
3388 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM", MatchAnyExcept(
"PROGRAM"),
"WITH",
"(",
"LOG_VERBOSITY") ||
3389 Matches(
"COPY|\\copy", MatchAny,
"FROM",
"PROGRAM", MatchAny,
"WITH",
"(",
"LOG_VERBOSITY"))
3390 COMPLETE_WITH(
"silent",
"default",
"verbose");
3393 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM", MatchAnyExcept(
"PROGRAM"),
"WITH", MatchAny) ||
3394 Matches(
"COPY|\\copy", MatchAny,
"FROM",
"PROGRAM", MatchAny,
"WITH", MatchAny))
3395 COMPLETE_WITH(
"WHERE");
3399 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny))
3400 COMPLETE_WITH(
"TYPE");
3402 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny,
"TYPE"))
3403 COMPLETE_WITH(
"INDEX",
"TABLE");
3405 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny,
"TYPE", MatchAny))
3406 COMPLETE_WITH(
"HANDLER");
3409 else if (Matches(
"CREATE",
"COLLATION", MatchAny))
3410 COMPLETE_WITH(
"(",
"FROM");
3411 else if (Matches(
"CREATE",
"COLLATION", MatchAny,
"FROM"))
3412 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_collations);
3413 else if (HeadMatches(
"CREATE",
"COLLATION", MatchAny,
"(*"))
3415 if (TailMatches(
"(|*,"))
3416 COMPLETE_WITH(
"LOCALE =",
"LC_COLLATE =",
"LC_CTYPE =",
3417 "PROVIDER =",
"DETERMINISTIC =");
3418 else if (TailMatches(
"PROVIDER",
"="))
3419 COMPLETE_WITH(
"libc",
"icu");
3420 else if (TailMatches(
"DETERMINISTIC",
"="))
3421 COMPLETE_WITH(
"true",
"false");
3425 else if (Matches(
"CREATE",
"DATABASE", MatchAny))
3426 COMPLETE_WITH(
"OWNER",
"TEMPLATE",
"ENCODING",
"TABLESPACE",
3427 "IS_TEMPLATE",
"STRATEGY",
3428 "ALLOW_CONNECTIONS",
"CONNECTION LIMIT",
3429 "LC_COLLATE",
"LC_CTYPE",
"LOCALE",
"OID",
3430 "LOCALE_PROVIDER",
"ICU_LOCALE");
3432 else if (Matches(
"CREATE",
"DATABASE", MatchAny,
"TEMPLATE"))
3433 COMPLETE_WITH_QUERY(Query_for_list_of_template_databases);
3434 else if (Matches(
"CREATE",
"DATABASE", MatchAny,
"STRATEGY"))
3435 COMPLETE_WITH(
"WAL_LOG",
"FILE_COPY");
3438 else if (Matches(
"CREATE",
"DOMAIN", MatchAny))
3439 COMPLETE_WITH(
"AS");
3440 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"AS"))
3441 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3442 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"AS", MatchAny))
3443 COMPLETE_WITH(
"COLLATE",
"DEFAULT",
"CONSTRAINT",
3444 "NOT NULL",
"NULL",
"CHECK (");
3445 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"COLLATE"))
3446 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_collations);
3450 else if (Matches(
"CREATE",
"EXTENSION"))
3451 COMPLETE_WITH_QUERY(Query_for_list_of_available_extensions);
3453 else if (Matches(
"CREATE",
"EXTENSION", MatchAny))
3454 COMPLETE_WITH(
"WITH SCHEMA",
"CASCADE",
"VERSION");
3456 else if (Matches(
"CREATE",
"EXTENSION", MatchAny,
"VERSION"))
3458 set_completion_reference(prev2_wd);
3459 COMPLETE_WITH_QUERY(Query_for_list_of_available_extension_versions);
3463 else if (Matches(
"CREATE",
"FOREIGN"))
3464 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
3467 else if (Matches(
"CREATE",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
3468 COMPLETE_WITH(
"HANDLER",
"VALIDATOR",
"OPTIONS");
3471 else if (Matches(
"CREATE",
"FOREIGN",
"TABLE", MatchAny))
3472 COMPLETE_WITH(
"(",
"PARTITION OF");
3476 else if (TailMatches(
"CREATE",
"UNIQUE"))
3477 COMPLETE_WITH(
"INDEX");
3483 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX"))
3484 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
3485 "ON",
"CONCURRENTLY");
3491 else if (TailMatches(
"INDEX|CONCURRENTLY", MatchAny,
"ON") ||
3492 TailMatches(
"INDEX|CONCURRENTLY",
"ON"))
3493 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexables);
3499 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX",
"CONCURRENTLY"))
3500 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
3503 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX", MatchAny) ||
3504 TailMatches(
"CREATE|UNIQUE",
"INDEX",
"CONCURRENTLY", MatchAny))
3505 COMPLETE_WITH(
"ON");
3511 else if (TailMatches(
"INDEX", MatchAny,
"ON", MatchAny) ||
3512 TailMatches(
"INDEX|CONCURRENTLY",
"ON", MatchAny))
3513 COMPLETE_WITH(
"(",
"USING");
3514 else if (TailMatches(
"INDEX", MatchAny,
"ON", MatchAny,
"(") ||
3515 TailMatches(
"INDEX|CONCURRENTLY",
"ON", MatchAny,
"("))
3516 COMPLETE_WITH_ATTR(prev2_wd);
3518 else if (TailMatches(
"ON", MatchAny,
"USING", MatchAny,
"("))
3519 COMPLETE_WITH_ATTR(prev4_wd);
3521 else if (TailMatches(
"INDEX", MatchAny, MatchAny,
"ON", MatchAny,
"USING") ||
3522 TailMatches(
"INDEX", MatchAny,
"ON", MatchAny,
"USING") ||
3523 TailMatches(
"INDEX",
"ON", MatchAny,
"USING"))
3524 COMPLETE_WITH_QUERY(Query_for_list_of_index_access_methods);
3525 else if (TailMatches(
"ON", MatchAny,
"USING", MatchAny) &&
3526 !TailMatches(
"POLICY", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny) &&
3527 !TailMatches(
"FOR", MatchAny, MatchAny, MatchAny))
3531 else if (Matches(
"CREATE",
"OR"))
3532 COMPLETE_WITH(
"REPLACE");
3536 else if (Matches(
"CREATE",
"POLICY", MatchAny))
3537 COMPLETE_WITH(
"ON");
3539 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON"))
3540 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3542 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny))
3543 COMPLETE_WITH(
"AS",
"FOR",
"TO",
"USING (",
"WITH CHECK (");
3545 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS"))
3546 COMPLETE_WITH(
"PERMISSIVE",
"RESTRICTIVE");
3552 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny))
3553 COMPLETE_WITH(
"FOR",
"TO",
"USING",
"WITH CHECK");
3555 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR"))
3556 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
3558 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"INSERT"))
3559 COMPLETE_WITH(
"TO",
"WITH CHECK (");
3561 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"SELECT|DELETE"))
3562 COMPLETE_WITH(
"TO",
"USING (");
3564 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"ALL|UPDATE"))
3565 COMPLETE_WITH(
"TO",
"USING (",
"WITH CHECK (");
3567 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"TO"))
3568 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3569 Keywords_for_list_of_grant_roles);
3571 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"USING"))
3578 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR"))
3579 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
3585 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"INSERT"))
3586 COMPLETE_WITH(
"TO",
"WITH CHECK (");
3592 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"SELECT|DELETE"))
3593 COMPLETE_WITH(
"TO",
"USING (");
3599 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"ALL|UPDATE"))
3600 COMPLETE_WITH(
"TO",
"USING (",
"WITH CHECK (");
3606 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"TO"))
3607 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3608 Keywords_for_list_of_grant_roles);
3614 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"USING"))
3619 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny))
3620 COMPLETE_WITH(
"FOR TABLE",
"FOR TABLES IN SCHEMA",
"FOR ALL TABLES",
"FOR ALL SEQUENCES",
"WITH (");
3621 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR"))
3622 COMPLETE_WITH(
"TABLE",
"TABLES IN SCHEMA",
"ALL TABLES",
"ALL SEQUENCES");
3623 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"ALL"))
3624 COMPLETE_WITH(
"TABLES",
"SEQUENCES");
3625 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"ALL",
"TABLES"))
3626 COMPLETE_WITH(
"WITH (");
3627 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLES"))
3628 COMPLETE_WITH(
"IN SCHEMA");
3629 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLE", MatchAny) && !ends_with(prev_wd,
','))
3630 COMPLETE_WITH(
"WHERE (",
"WITH (");
3632 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLE"))
3633 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3639 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE"))
3641 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE",
"("))
3642 COMPLETE_WITH_ATTR(prev3_wd);
3643 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE",
"(*)"))
3644 COMPLETE_WITH(
" WITH (");
3649 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLES",
"IN",
"SCHEMA"))
3650 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
3651 " AND nspname NOT LIKE E'pg\\\\_%%'",
3653 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLES",
"IN",
"SCHEMA", MatchAny) && (!ends_with(prev_wd,
',')))
3654 COMPLETE_WITH(
"WITH (");
3656 else if (Matches(
"CREATE",
"PUBLICATION", MatchAnyN,
"WITH",
"("))
3657 COMPLETE_WITH(
"publish",
"publish_generated_columns",
"publish_via_partition_root");
3661 else if (Matches(
"CREATE",
"RULE", MatchAny) ||
3662 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny))
3663 COMPLETE_WITH(
"AS ON");
3665 else if (Matches(
"CREATE",
"RULE", MatchAny,
"AS") ||
3666 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny,
"AS"))
3667 COMPLETE_WITH(
"ON");
3673 else if (Matches(
"CREATE",
"RULE", MatchAny,
"AS",
"ON") ||
3674 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny,
"AS",
"ON"))
3675 COMPLETE_WITH(
"SELECT",
"UPDATE",
"INSERT",
"DELETE");
3677 else if (TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE"))
3678 COMPLETE_WITH(
"TO");
3680 else if (TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE",
"TO"))
3681 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3684 else if (Matches(
"CREATE",
"SCHEMA"))
3685 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas,
3687 else if (Matches(
"CREATE",
"SCHEMA",
"AUTHORIZATION") ||
3688 Matches(
"CREATE",
"SCHEMA", MatchAny,
"AUTHORIZATION"))
3689 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3690 Keywords_for_list_of_owner_roles);
3691 else if (Matches(
"CREATE",
"SCHEMA",
"AUTHORIZATION", MatchAny) ||
3692 Matches(
"CREATE",
"SCHEMA", MatchAny,
"AUTHORIZATION", MatchAny))
3693 COMPLETE_WITH(
"CREATE",
"GRANT");
3694 else if (Matches(
"CREATE",
"SCHEMA", MatchAny))
3695 COMPLETE_WITH(
"AUTHORIZATION",
"CREATE",
"GRANT");
3698 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny) ||
3699 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny))
3700 COMPLETE_WITH(
"AS",
"INCREMENT BY",
"MINVALUE",
"MAXVALUE",
"NO",
3701 "CACHE",
"CYCLE",
"OWNED BY",
"START WITH");
3702 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny,
"AS") ||
3703 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny,
"AS"))
3704 COMPLETE_WITH_CS(
"smallint",
"integer",
"bigint");
3705 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny,
"NO") ||
3706 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny,
"NO"))
3707 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
3710 else if (Matches(
"CREATE",
"SERVER", MatchAny))
3711 COMPLETE_WITH(
"TYPE",
"VERSION",
"FOREIGN DATA WRAPPER");
3714 else if (Matches(
"CREATE",
"STATISTICS", MatchAny))
3715 COMPLETE_WITH(
"(",
"ON");
3716 else if (Matches(
"CREATE",
"STATISTICS", MatchAny,
"("))
3717 COMPLETE_WITH(
"ndistinct",
"dependencies",
"mcv");
3718 else if (Matches(
"CREATE",
"STATISTICS", MatchAny,
"(*)"))
3719 COMPLETE_WITH(
"ON");
3720 else if (Matches(
"CREATE",
"STATISTICS", MatchAny, MatchAnyN,
"FROM"))
3721 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3725 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY"))
3726 COMPLETE_WITH(
"SEQUENCE",
"TABLE",
"VIEW");
3728 else if (TailMatches(
"CREATE",
"UNLOGGED"))
3729 COMPLETE_WITH(
"TABLE",
"SEQUENCE");
3731 else if (TailMatches(
"PARTITION",
"BY"))
3732 COMPLETE_WITH(
"RANGE (",
"LIST (",
"HASH (");
3734 else if (TailMatches(
"PARTITION",
"OF"))
3735 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_tables);
3737 else if (TailMatches(
"PARTITION",
"OF", MatchAny))
3738 COMPLETE_WITH(
"FOR VALUES",
"DEFAULT");
3740 else if (TailMatches(
"CREATE",
"TABLE", MatchAny) ||
3741 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny))
3742 COMPLETE_WITH(
"(",
"AS",
"OF",
"PARTITION OF");
3744 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"OF") ||
3745 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"OF"))
3746 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_composite_datatypes);
3748 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"AS") ||
3749 TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)",
"AS") ||
3750 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"AS") ||
3751 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"(*)",
"AS"))
3752 COMPLETE_WITH(
"EXECUTE",
"SELECT",
"TABLE",
"VALUES",
"WITH");
3754 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)"))
3755 COMPLETE_WITH(
"AS",
"INHERITS (",
"PARTITION BY",
"USING",
"TABLESPACE",
"WITH (");
3756 else if (TailMatches(
"CREATE",
"UNLOGGED",
"TABLE", MatchAny,
"(*)"))
3757 COMPLETE_WITH(
"AS",
"INHERITS (",
"USING",
"TABLESPACE",
"WITH (");
3758 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"TABLE", MatchAny,
"(*)"))
3759 COMPLETE_WITH(
"AS",
"INHERITS (",
"ON COMMIT",
"PARTITION BY",
"USING",
3760 "TABLESPACE",
"WITH (");
3762 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)",
"USING") ||
3763 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"(*)",
"USING"))
3764 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
3766 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)",
"WITH",
"(") ||
3767 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"(*)",
"WITH",
"("))
3768 COMPLETE_WITH_LIST(table_storage_parameters);
3770 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"TABLE", MatchAny,
"(*)",
"ON",
"COMMIT"))
3771 COMPLETE_WITH(
"DELETE ROWS",
"DROP",
"PRESERVE ROWS");
3774 else if (Matches(
"CREATE",
"TABLESPACE", MatchAny))
3775 COMPLETE_WITH(
"OWNER",
"LOCATION");
3777 else if (Matches(
"CREATE",
"TABLESPACE", MatchAny,
"OWNER", MatchAny))
3778 COMPLETE_WITH(
"LOCATION");
3781 else if (Matches(
"CREATE",
"TEXT",
"SEARCH"))
3782 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3783 else if (Matches(
"CREATE",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE", MatchAny))
3787 else if (Matches(
"CREATE",
"TRANSFORM") ||
3788 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM"))
3789 COMPLETE_WITH(
"FOR");
3790 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR") ||
3791 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR"))
3792 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3793 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR", MatchAny) ||
3794 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR", MatchAny))
3795 COMPLETE_WITH(
"LANGUAGE");
3796 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE") ||
3797 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
3799 set_completion_reference(prev2_wd);
3800 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3804 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny))
3805 COMPLETE_WITH(
"CONNECTION");
3806 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny,
"CONNECTION", MatchAny))
3807 COMPLETE_WITH(
"PUBLICATION");
3808 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny,
"CONNECTION",
3809 MatchAny,
"PUBLICATION"))
3813 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAnyN,
"PUBLICATION", MatchAny))
3814 COMPLETE_WITH(
"WITH (");
3816 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAnyN,
"WITH",
"("))
3817 COMPLETE_WITH(
"binary",
"connect",
"copy_data",
"create_slot",
3818 "disable_on_error",
"enabled",
"failover",
3819 "max_retention_duration",
"origin",
3820 "password_required",
"retain_dead_tuples",
3821 "run_as_owner",
"slot_name",
"streaming",
3822 "synchronous_commit",
"two_phase");
3830 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny) ||
3831 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny))
3832 COMPLETE_WITH(
"BEFORE",
"AFTER",
"INSTEAD OF");
3838 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER") ||
3839 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER"))
3840 COMPLETE_WITH(
"INSERT",
"DELETE",
"UPDATE",
"TRUNCATE");
3842 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF") ||
3843 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF"))
3844 COMPLETE_WITH(
"INSERT",
"DELETE",
"UPDATE");
3850 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny) ||
3851 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny) ||
3852 TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny) ||
3853 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny))
3854 COMPLETE_WITH(
"ON",
"OR");
3861 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny,
"ON") ||
3862 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny,
"ON"))
3863 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3869 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny,
"ON") ||
3870 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny,
"ON"))
3871 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
3872 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3874 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3878 COMPLETE_WITH(
"NOT DEFERRABLE",
"DEFERRABLE",
"INITIALLY",
3879 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3881 COMPLETE_WITH(
"NOT DEFERRABLE",
"DEFERRABLE",
"INITIALLY",
3882 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3884 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3886 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3888 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3889 "INITIALLY",
"IMMEDIATE|DEFERRED") ||
3890 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3891 "INITIALLY",
"IMMEDIATE|DEFERRED"))
3894 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3896 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3898 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3900 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3902 COMPLETE_WITH(
"OLD TABLE",
"NEW TABLE");
3903 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3904 "OLD|NEW",
"TABLE") ||
3905 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3906 "OLD|NEW",
"TABLE"))
3907 COMPLETE_WITH(
"AS");
3908 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3909 "REFERENCING",
"OLD",
"TABLE",
"AS", MatchAny) ||
3910 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3911 "REFERENCING",
"OLD",
"TABLE",
"AS", MatchAny) ||
3912 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3913 "REFERENCING",
"OLD",
"TABLE", MatchAny) ||
3914 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3915 "REFERENCING",
"OLD",
"TABLE", MatchAny))
3918 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3920 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3922 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3923 "REFERENCING",
"NEW",
"TABLE",
"AS", MatchAny) ||
3924 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3925 "REFERENCING",
"NEW",
"TABLE",
"AS", MatchAny) ||
3926 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3927 "REFERENCING",
"NEW",
"TABLE", MatchAny) ||
3928 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3929 "REFERENCING",
"NEW",
"TABLE", MatchAny))
3932 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3934 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3936 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3937 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3938 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3939 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3940 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3941 "REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3942 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3943 "REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3944 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3945 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE", MatchAny) ||
3946 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3947 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE", MatchAny) ||
3948 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3949 "REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE", MatchAny) ||
3950 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3951 "REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE", MatchAny))
3954 COMPLETE_WITH(
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3956 COMPLETE_WITH(
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3958 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3960 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3962 COMPLETE_WITH(
"EACH",
"ROW",
"STATEMENT");
3963 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3965 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3967 COMPLETE_WITH(
"ROW",
"STATEMENT");
3968 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3969 "FOR",
"EACH",
"ROW|STATEMENT") ||
3970 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3971 "FOR",
"EACH",
"ROW|STATEMENT") ||
3972 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3973 "FOR",
"ROW|STATEMENT") ||
3974 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3975 "FOR",
"ROW|STATEMENT"))
3978 COMPLETE_WITH(
"WHEN (",
"EXECUTE FUNCTION");
3980 COMPLETE_WITH(
"WHEN (",
"EXECUTE PROCEDURE");
3982 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3984 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3988 COMPLETE_WITH(
"EXECUTE FUNCTION");
3990 COMPLETE_WITH(
"EXECUTE PROCEDURE");
3997 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3999 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
4003 COMPLETE_WITH(
"FUNCTION");
4005 COMPLETE_WITH(
"PROCEDURE");
4007 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
4008 "EXECUTE",
"FUNCTION|PROCEDURE") ||
4009 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
4010 "EXECUTE",
"FUNCTION|PROCEDURE"))
4011 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
4014 else if (Matches(
"CREATE",
"ROLE|GROUP|USER", MatchAny) &&
4015 !TailMatches(
"USER",
"MAPPING"))
4016 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
4017 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
4018 "LOGIN",
"NOBYPASSRLS",
4019 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
4020 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
4021 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
4022 "VALID UNTIL",
"WITH");
4025 else if (Matches(
"CREATE",
"ROLE|GROUP|USER", MatchAny,
"WITH"))
4027 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
4028 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
4029 "LOGIN",
"NOBYPASSRLS",
4030 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
4031 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
4032 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
4036 else if (Matches(
"CREATE",
"ROLE|USER|GROUP", MatchAny,
"IN"))
4037 COMPLETE_WITH(
"GROUP",
"ROLE");
4040 else if (Matches(
"CREATE",
"TYPE", MatchAny))
4041 COMPLETE_WITH(
"(",
"AS");
4042 else if (Matches(
"CREATE",
"TYPE", MatchAny,
"AS"))
4043 COMPLETE_WITH(
"ENUM",
"RANGE",
"(");
4044 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"AS",
"("))
4046 if (TailMatches(
"(|*,", MatchAny))
4047 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4048 else if (TailMatches(
"(|*,", MatchAny, MatchAnyExcept(
"*)")))
4049 COMPLETE_WITH(
"COLLATE",
",",
")");
4051 else if (Matches(
"CREATE",
"TYPE", MatchAny,
"AS",
"ENUM|RANGE"))
4053 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"("))
4055 if (TailMatches(
"(|*,"))
4056 COMPLETE_WITH(
"INPUT",
"OUTPUT",
"RECEIVE",
"SEND",
4057 "TYPMOD_IN",
"TYPMOD_OUT",
"ANALYZE",
"SUBSCRIPT",
4058 "INTERNALLENGTH",
"PASSEDBYVALUE",
"ALIGNMENT",
4059 "STORAGE",
"LIKE",
"CATEGORY",
"PREFERRED",
4060 "DEFAULT",
"ELEMENT",
"DELIMITER",
4062 else if (TailMatches(
"(*|*,", MatchAnyExcept(
"*=")))
4064 else if (TailMatches(
"=", MatchAnyExcept(
"*)")))
4065 COMPLETE_WITH(
",",
")");
4067 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"AS",
"RANGE",
"("))
4069 if (TailMatches(
"(|*,"))
4070 COMPLETE_WITH(
"SUBTYPE",
"SUBTYPE_OPCLASS",
"COLLATION",
4071 "CANONICAL",
"SUBTYPE_DIFF",
4072 "MULTIRANGE_TYPE_NAME");
4073 else if (TailMatches(
"(*|*,", MatchAnyExcept(
"*=")))
4075 else if (TailMatches(
"=", MatchAnyExcept(
"*)")))
4076 COMPLETE_WITH(
",",
")");
4081 else if (TailMatches(
"CREATE",
"VIEW", MatchAny) ||
4082 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny))
4083 COMPLETE_WITH(
"AS",
"WITH");
4085 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"AS") ||
4086 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"AS"))
4087 COMPLETE_WITH(
"SELECT");
4089 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH") ||
4090 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH"))
4092 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(") ||
4093 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"("))
4094 COMPLETE_WITH_LIST(view_optional_parameters);
4095 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option") ||
4096 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option"))
4098 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option",
"=") ||
4099 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option",
"="))
4100 COMPLETE_WITH(
"local",
"cascaded");
4102 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(*)") ||
4103 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(*)"))
4104 COMPLETE_WITH(
"AS");
4106 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(*)",
"AS") ||
4107 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(*)",
"AS"))
4108 COMPLETE_WITH(
"SELECT");
4111 else if (Matches(
"CREATE",
"MATERIALIZED"))
4112 COMPLETE_WITH(
"VIEW");
4114 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny))
4115 COMPLETE_WITH(
"AS",
"USING");
4121 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny,
"USING"))
4122 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
4124 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny,
"USING", MatchAny))
4125 COMPLETE_WITH(
"AS");
4131 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny,
"AS") ||
4132 Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny,
"USING", MatchAny,
"AS"))
4133 COMPLETE_WITH(
"SELECT");
4136 else if (Matches(
"CREATE",
"EVENT"))
4137 COMPLETE_WITH(
"TRIGGER");
4139 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny))
4140 COMPLETE_WITH(
"ON");
4142 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny,
"ON"))
4143 COMPLETE_WITH(
"ddl_command_start",
"ddl_command_end",
"login",
4144 "sql_drop",
"table_rewrite");
4151 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny,
"ON", MatchAny))
4154 COMPLETE_WITH(
"WHEN TAG IN (",
"EXECUTE FUNCTION");
4156 COMPLETE_WITH(
"WHEN TAG IN (",
"EXECUTE PROCEDURE");
4158 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAnyN,
"WHEN|AND", MatchAny,
"IN",
"(*)"))
4161 COMPLETE_WITH(
"EXECUTE FUNCTION");
4163 COMPLETE_WITH(
"EXECUTE PROCEDURE");
4165 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAnyN,
"EXECUTE",
"FUNCTION|PROCEDURE"))
4166 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
4169 else if (Matches(
"DEALLOCATE"))
4170 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_prepared_statements,
4179 else if (Matches(
"DECLARE", MatchAny))
4180 COMPLETE_WITH(
"BINARY",
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
4190 else if (Matches(
"DECLARE", MatchAnyN,
"BINARY"))
4191 COMPLETE_WITH(
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
"CURSOR");
4192 else if (Matches(
"DECLARE", MatchAnyN,
"ASENSITIVE|INSENSITIVE"))
4193 COMPLETE_WITH(
"SCROLL",
"NO SCROLL",
"CURSOR");
4194 else if (Matches(
"DECLARE", MatchAnyN,
"SCROLL"))
4195 COMPLETE_WITH(
"CURSOR");
4197 else if (Matches(
"DECLARE", MatchAnyN,
"NO"))
4198 COMPLETE_WITH(
"SCROLL");
4204 else if (Matches(
"DECLARE", MatchAnyN,
"CURSOR"))
4205 COMPLETE_WITH(
"WITH HOLD",
"WITHOUT HOLD",
"FOR");
4207 else if (Matches(
"DECLARE", MatchAnyN,
"CURSOR",
"WITH|WITHOUT"))
4208 COMPLETE_WITH(
"HOLD");
4210 else if (Matches(
"DECLARE", MatchAnyN,
"CURSOR",
"WITH|WITHOUT",
"HOLD"))
4211 COMPLETE_WITH(
"FOR");
4215 else if (Matches(
"DELETE"))
4216 COMPLETE_WITH(
"FROM");
4218 else if (TailMatches(
"DELETE",
"FROM"))
4219 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
4221 else if (TailMatches(
"DELETE",
"FROM", MatchAny))
4222 COMPLETE_WITH(
"USING",
"WHERE");
4226 else if (Matches(
"DISCARD"))
4227 COMPLETE_WITH(
"ALL",
"PLANS",
"SEQUENCES",
"TEMP");
4230 else if (Matches(
"DO"))
4231 COMPLETE_WITH(
"LANGUAGE");
4235 else if (Matches(
"DROP",
4236 "COLLATION|CONVERSION|DOMAIN|EXTENSION|LANGUAGE|PUBLICATION|SCHEMA|SEQUENCE|SERVER|SUBSCRIPTION|STATISTICS|TABLE|TYPE|VIEW",
4238 Matches(
"DROP",
"ACCESS",
"METHOD", MatchAny) ||
4239 Matches(
"DROP",
"EVENT",
"TRIGGER", MatchAny) ||
4240 Matches(
"DROP",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny) ||
4241 Matches(
"DROP",
"FOREIGN",
"TABLE", MatchAny) ||
4242 Matches(
"DROP",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE", MatchAny))
4243 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4244 else if (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny) &&
4245 ends_with(prev_wd,
')'))
4246 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4249 else if (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny))
4251 else if (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny,
"("))
4252 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
4253 else if (Matches(
"DROP",
"FOREIGN"))
4254 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
4255 else if (Matches(
"DROP",
"DATABASE", MatchAny))
4256 COMPLETE_WITH(
"WITH (");
4257 else if (HeadMatches(
"DROP",
"DATABASE") && (ends_with(prev_wd,
'(')))
4258 COMPLETE_WITH(
"FORCE");
4261 else if (Matches(
"DROP",
"INDEX"))
4262 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
4264 else if (Matches(
"DROP",
"INDEX",
"CONCURRENTLY"))
4265 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
4266 else if (Matches(
"DROP",
"INDEX", MatchAny))
4267 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4268 else if (Matches(
"DROP",
"INDEX",
"CONCURRENTLY", MatchAny))
4269 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4272 else if (Matches(
"DROP",
"MATERIALIZED"))
4273 COMPLETE_WITH(
"VIEW");
4274 else if (Matches(
"DROP",
"MATERIALIZED",
"VIEW"))
4275 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
4276 else if (Matches(
"DROP",
"MATERIALIZED",
"VIEW", MatchAny))
4277 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4280 else if (Matches(
"DROP",
"OWNED"))
4281 COMPLETE_WITH(
"BY");
4282 else if (Matches(
"DROP",
"OWNED",
"BY"))
4283 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4284 else if (Matches(
"DROP",
"OWNED",
"BY", MatchAny))
4285 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4288 else if (Matches(
"DROP",
"TEXT",
"SEARCH"))
4289 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
4292 else if (Matches(
"DROP",
"TRIGGER", MatchAny))
4293 COMPLETE_WITH(
"ON");
4294 else if (Matches(
"DROP",
"TRIGGER", MatchAny,
"ON"))
4296 set_completion_reference(prev2_wd);
4297 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
4299 else if (Matches(
"DROP",
"TRIGGER", MatchAny,
"ON", MatchAny))
4300 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4303 else if (Matches(
"DROP",
"ACCESS"))
4304 COMPLETE_WITH(
"METHOD");
4305 else if (Matches(
"DROP",
"ACCESS",
"METHOD"))
4306 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
4309 else if (Matches(
"DROP",
"EVENT"))
4310 COMPLETE_WITH(
"TRIGGER");
4311 else if (Matches(
"DROP",
"EVENT",
"TRIGGER"))
4312 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
4315 else if (Matches(
"DROP",
"POLICY"))
4316 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
4318 else if (Matches(
"DROP",
"POLICY", MatchAny))
4319 COMPLETE_WITH(
"ON");
4321 else if (Matches(
"DROP",
"POLICY", MatchAny,
"ON"))
4323 set_completion_reference(prev2_wd);
4324 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
4326 else if (Matches(
"DROP",
"POLICY", MatchAny,
"ON", MatchAny))
4327 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4330 else if (Matches(
"DROP",
"RULE", MatchAny))
4331 COMPLETE_WITH(
"ON");
4332 else if (Matches(
"DROP",
"RULE", MatchAny,
"ON"))
4334 set_completion_reference(prev2_wd);
4335 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
4337 else if (Matches(
"DROP",
"RULE", MatchAny,
"ON", MatchAny))
4338 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4341 else if (Matches(
"DROP",
"TRANSFORM"))
4342 COMPLETE_WITH(
"FOR");
4343 else if (Matches(
"DROP",
"TRANSFORM",
"FOR"))
4344 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4345 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny))
4346 COMPLETE_WITH(
"LANGUAGE");
4347 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
4349 set_completion_reference(prev2_wd);
4350 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
4352 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE", MatchAny))
4353 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4356 else if (Matches(
"EXECUTE"))
4357 COMPLETE_WITH_QUERY(Query_for_list_of_prepared_statements);
4363 else if (Matches(
"EXPLAIN"))
4364 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4365 "MERGE INTO",
"EXECUTE",
"ANALYZE",
"VERBOSE");
4366 else if (HeadMatches(
"EXPLAIN",
"(*") &&
4367 !HeadMatches(
"EXPLAIN",
"(*)"))
4374 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
4375 COMPLETE_WITH(
"ANALYZE",
"VERBOSE",
"COSTS",
"SETTINGS",
"GENERIC_PLAN",
4376 "BUFFERS",
"SERIALIZE",
"WAL",
"TIMING",
"SUMMARY",
4377 "MEMORY",
"FORMAT");
4378 else if (TailMatches(
"ANALYZE|VERBOSE|COSTS|SETTINGS|GENERIC_PLAN|BUFFERS|WAL|TIMING|SUMMARY|MEMORY"))
4379 COMPLETE_WITH(
"ON",
"OFF");
4380 else if (TailMatches(
"SERIALIZE"))
4381 COMPLETE_WITH(
"TEXT",
"NONE",
"BINARY");
4382 else if (TailMatches(
"FORMAT"))
4383 COMPLETE_WITH(
"TEXT",
"XML",
"JSON",
"YAML");
4385 else if (Matches(
"EXPLAIN",
"ANALYZE"))
4386 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4387 "MERGE INTO",
"EXECUTE",
"VERBOSE");
4388 else if (Matches(
"EXPLAIN",
"(*)") ||
4389 Matches(
"EXPLAIN",
"VERBOSE") ||
4390 Matches(
"EXPLAIN",
"ANALYZE",
"VERBOSE"))
4391 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4392 "MERGE INTO",
"EXECUTE");
4400 else if (Matches(
"FETCH|MOVE"))
4401 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
4418 else if (Matches(
"FETCH|MOVE",
"BACKWARD|FORWARD"))
4419 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
4429 else if (Matches(
"FETCH|MOVE",
"ABSOLUTE|BACKWARD|FORWARD|RELATIVE",
4430 MatchAnyExcept(
"FROM|IN")) ||
4431 Matches(
"FETCH|MOVE",
"ALL|NEXT|PRIOR|FIRST|LAST"))
4432 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
4436 else if (Matches(
"FETCH|MOVE", MatchAnyN,
"FROM|IN"))
4437 COMPLETE_WITH_QUERY(Query_for_list_of_cursors);
4441 else if (TailMatches(
"FOREIGN",
"DATA",
"WRAPPER") &&
4442 !TailMatches(
"CREATE", MatchAny, MatchAny, MatchAny))
4443 COMPLETE_WITH_QUERY(Query_for_list_of_fdws);
4445 else if (Matches(
"CREATE",
"SERVER", MatchAnyN,
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
4446 COMPLETE_WITH(
"OPTIONS");
4449 else if (TailMatches(
"FOREIGN",
"TABLE") &&
4450 !TailMatches(
"CREATE", MatchAny, MatchAny))
4451 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
4454 else if (TailMatches(
"FOREIGN",
"SERVER"))
4455 COMPLETE_WITH_QUERY(Query_for_list_of_servers);
4462 else if (TailMatches(
"GRANT|REVOKE") ||
4463 TailMatches(
"REVOKE",
"ADMIN|GRANT|INHERIT|SET",
"OPTION",
"FOR"))
4469 if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4471 if (TailMatches(
"GRANT") ||
4472 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR"))
4473 COMPLETE_WITH(
"SELECT",
"INSERT",
"UPDATE",
4474 "DELETE",
"TRUNCATE",
"REFERENCES",
"TRIGGER",
4475 "CREATE",
"EXECUTE",
"USAGE",
"MAINTAIN",
"ALL");
4476 else if (TailMatches(
"REVOKE"))
4477 COMPLETE_WITH(
"SELECT",
"INSERT",
"UPDATE",
4478 "DELETE",
"TRUNCATE",
"REFERENCES",
"TRIGGER",
4479 "CREATE",
"EXECUTE",
"USAGE",
"MAINTAIN",
"ALL",
4480 "GRANT OPTION FOR");
4482 else if (TailMatches(
"GRANT"))
4483 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4484 Privilege_options_of_grant_and_revoke);
4485 else if (TailMatches(
"REVOKE"))
4486 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4487 Privilege_options_of_grant_and_revoke,
4490 "INHERIT OPTION FOR",
4492 else if (TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR"))
4493 COMPLETE_WITH(Privilege_options_of_grant_and_revoke);
4494 else if (TailMatches(
"REVOKE",
"ADMIN|INHERIT|SET",
"OPTION",
"FOR"))
4495 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4498 else if (TailMatches(
"GRANT|REVOKE",
"ALTER") ||
4499 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER"))
4500 COMPLETE_WITH(
"SYSTEM");
4502 else if (TailMatches(
"REVOKE",
"SET"))
4503 COMPLETE_WITH(
"ON PARAMETER",
"OPTION FOR");
4504 else if (TailMatches(
"GRANT",
"SET") ||
4505 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"SET") ||
4506 TailMatches(
"GRANT|REVOKE",
"ALTER",
"SYSTEM") ||
4507 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER",
"SYSTEM"))
4508 COMPLETE_WITH(
"ON PARAMETER");
4510 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"PARAMETER") ||
4511 TailMatches(
"GRANT|REVOKE", MatchAny, MatchAny,
"ON",
"PARAMETER") ||
4512 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"PARAMETER") ||
4513 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny, MatchAny,
"ON",
"PARAMETER"))
4514 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_alter_system_set_vars);
4516 else if (TailMatches(
"GRANT", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4517 TailMatches(
"GRANT", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny))
4518 COMPLETE_WITH(
"TO");
4520 else if (TailMatches(
"REVOKE", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4521 TailMatches(
"REVOKE", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4522 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4523 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny))
4524 COMPLETE_WITH(
"FROM");
4530 else if (TailMatches(
"GRANT|REVOKE", MatchAny) ||
4531 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny))
4533 if (TailMatches(
"SELECT|INSERT|UPDATE|DELETE|TRUNCATE|REFERENCES|TRIGGER|CREATE|CONNECT|TEMPORARY|TEMP|EXECUTE|USAGE|MAINTAIN|ALL"))
4534 COMPLETE_WITH(
"ON");
4535 else if (TailMatches(
"GRANT", MatchAny))
4536 COMPLETE_WITH(
"TO");
4538 COMPLETE_WITH(
"FROM");
4548 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON") ||
4549 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON"))
4555 if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4556 COMPLETE_WITH(
"TABLES",
"SEQUENCES",
"FUNCTIONS",
"PROCEDURES",
"ROUTINES",
"TYPES",
"SCHEMAS",
"LARGE OBJECTS");
4558 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_grantables,
4559 "ALL FUNCTIONS IN SCHEMA",
4560 "ALL PROCEDURES IN SCHEMA",
4561 "ALL ROUTINES IN SCHEMA",
4562 "ALL SEQUENCES IN SCHEMA",
4563 "ALL TABLES IN SCHEMA",
4566 "FOREIGN DATA WRAPPER",
4580 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"ALL") ||
4581 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"ALL"))
4582 COMPLETE_WITH(
"FUNCTIONS IN SCHEMA",
4583 "PROCEDURES IN SCHEMA",
4584 "ROUTINES IN SCHEMA",
4585 "SEQUENCES IN SCHEMA",
4586 "TABLES IN SCHEMA");
4594 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON", MatchAny) ||
4595 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON", MatchAny))
4597 if (TailMatches(
"DATABASE"))
4598 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
4599 else if (TailMatches(
"DOMAIN"))
4600 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
4601 else if (TailMatches(
"FUNCTION"))
4602 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
4603 else if (TailMatches(
"FOREIGN"))
4604 COMPLETE_WITH(
"DATA WRAPPER",
"SERVER");
4605 else if (TailMatches(
"LANGUAGE"))
4606 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
4607 else if (TailMatches(
"LARGE"))
4609 if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4610 COMPLETE_WITH(
"OBJECTS");
4612 COMPLETE_WITH(
"OBJECT");
4614 else if (TailMatches(
"PROCEDURE"))
4615 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_procedures);
4616 else if (TailMatches(
"ROUTINE"))
4617 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
4618 else if (TailMatches(
"SCHEMA"))
4619 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
4620 else if (TailMatches(
"SEQUENCE"))
4621 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_sequences);
4622 else if (TailMatches(
"TABLE"))
4623 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_grantables);
4624 else if (TailMatches(
"TABLESPACE"))
4625 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
4626 else if (TailMatches(
"TYPE"))
4627 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4628 else if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny))
4629 COMPLETE_WITH(
"TO");
4631 COMPLETE_WITH(
"FROM");
4638 else if (Matches(
"GRANT", MatchAnyN,
"TO") ||
4639 Matches(
"REVOKE", MatchAnyN,
"FROM"))
4640 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4641 Keywords_for_list_of_grant_roles);
4646 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny))
4647 COMPLETE_WITH(
"WITH ADMIN",
4650 "WITH GRANT OPTION",
4652 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny,
"WITH"))
4653 COMPLETE_WITH(
"ADMIN",
4657 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny,
"WITH",
"ADMIN|INHERIT|SET"))
4658 COMPLETE_WITH(
"OPTION",
"TRUE",
"FALSE");
4659 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny,
"WITH", MatchAny,
"OPTION"))
4660 COMPLETE_WITH(
"GRANTED BY");
4661 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny,
"WITH", MatchAny,
"OPTION",
"GRANTED",
"BY"))
4662 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4663 Keywords_for_list_of_grant_roles);
4665 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES", MatchAnyN,
"TO|FROM"))
4666 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4667 Keywords_for_list_of_grant_roles);
4669 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES", MatchAnyN,
"TO", MatchAny))
4670 COMPLETE_WITH(
"WITH GRANT OPTION");
4672 else if (Matches(
"GRANT|REVOKE", MatchAnyN,
"ON", MatchAny, MatchAny) &&
4673 !TailMatches(
"FOREIGN",
"SERVER") && !TailMatches(
"LARGE",
"OBJECT"))
4675 if (Matches(
"GRANT", MatchAnyN,
"ON", MatchAny, MatchAny))
4676 COMPLETE_WITH(
"TO");
4678 COMPLETE_WITH(
"FROM");
4682 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"ALL", MatchAny,
"IN",
"SCHEMA", MatchAny) ||
4683 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"ALL", MatchAny,
"IN",
"SCHEMA", MatchAny))
4685 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4686 COMPLETE_WITH(
"TO");
4688 COMPLETE_WITH(
"FROM");
4692 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny) ||
4693 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
4695 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4696 COMPLETE_WITH(
"TO");
4698 COMPLETE_WITH(
"FROM");
4702 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"FOREIGN",
"SERVER", MatchAny) ||
4703 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"FOREIGN",
"SERVER", MatchAny))
4705 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4706 COMPLETE_WITH(
"TO");
4708 COMPLETE_WITH(
"FROM");
4712 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"LARGE",
"OBJECT", MatchAny) ||
4713 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"LARGE",
"OBJECT", MatchAny))
4715 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4716 COMPLETE_WITH(
"TO");
4718 COMPLETE_WITH(
"FROM");
4722 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"LARGE",
"OBJECTS") ||
4723 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"LARGE",
"OBJECTS"))
4725 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny))
4726 COMPLETE_WITH(
"TO");
4728 COMPLETE_WITH(
"FROM");
4732 else if (TailMatches(
"FROM", MatchAny,
"GROUP"))
4733 COMPLETE_WITH(
"BY");
4736 else if (Matches(
"IMPORT"))
4737 COMPLETE_WITH(
"FOREIGN SCHEMA");
4738 else if (Matches(
"IMPORT",
"FOREIGN"))
4739 COMPLETE_WITH(
"SCHEMA");
4740 else if (Matches(
"IMPORT",
"FOREIGN",
"SCHEMA", MatchAny))
4741 COMPLETE_WITH(
"EXCEPT (",
"FROM SERVER",
"LIMIT TO (");
4742 else if (TailMatches(
"LIMIT",
"TO",
"(*)") ||
4743 TailMatches(
"EXCEPT",
"(*)"))
4744 COMPLETE_WITH(
"FROM SERVER");
4745 else if (TailMatches(
"FROM",
"SERVER", MatchAny))
4746 COMPLETE_WITH(
"INTO");
4747 else if (TailMatches(
"FROM",
"SERVER", MatchAny,
"INTO"))
4748 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
4749 else if (TailMatches(
"FROM",
"SERVER", MatchAny,
"INTO", MatchAny))
4750 COMPLETE_WITH(
"OPTIONS (");
4754 else if (TailMatches(
"NOT",
"MATCHED",
"THEN",
"INSERT"))
4755 COMPLETE_WITH(
"VALUES",
"(");
4757 else if (TailMatches(
"INSERT"))
4758 COMPLETE_WITH(
"INTO");
4760 else if (TailMatches(
"INSERT",
"INTO"))
4761 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
4763 else if (TailMatches(
"INSERT",
"INTO", MatchAny,
"("))
4764 COMPLETE_WITH_ATTR(prev2_wd);
4770 else if (TailMatches(
"INSERT",
"INTO", MatchAny))
4771 COMPLETE_WITH(
"(",
"DEFAULT VALUES",
"SELECT",
"TABLE",
"VALUES",
"OVERRIDING");
4777 else if (TailMatches(
"INSERT",
"INTO", MatchAny, MatchAny) &&
4778 ends_with(prev_wd,
')'))
4779 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES",
"OVERRIDING");
4782 else if (TailMatches(
"OVERRIDING"))
4783 COMPLETE_WITH(
"SYSTEM VALUE",
"USER VALUE");
4786 else if (TailMatches(
"OVERRIDING", MatchAny,
"VALUE"))
4787 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES");
4790 else if (TailMatches(
"VALUES") && !TailMatches(
"DEFAULT",
"VALUES"))
4795 else if (Matches(
"LOCK"))
4796 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
4798 else if (Matches(
"LOCK",
"TABLE"))
4799 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
4801 else if (Matches(
"LOCK",
"TABLE",
"ONLY") || Matches(
"LOCK",
"ONLY"))
4802 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
4806 else if (Matches(
"LOCK", MatchAnyExcept(
"TABLE|ONLY")) ||
4807 Matches(
"LOCK",
"TABLE", MatchAnyExcept(
"ONLY")) ||
4808 Matches(
"LOCK",
"ONLY", MatchAny) ||
4809 Matches(
"LOCK",
"TABLE",
"ONLY", MatchAny))
4810 COMPLETE_WITH(
"IN",
"NOWAIT");
4813 else if (Matches(
"LOCK", MatchAnyN,
"IN"))
4814 COMPLETE_WITH(
"ACCESS SHARE MODE",
4815 "ROW SHARE MODE",
"ROW EXCLUSIVE MODE",
4816 "SHARE UPDATE EXCLUSIVE MODE",
"SHARE MODE",
4817 "SHARE ROW EXCLUSIVE MODE",
4818 "EXCLUSIVE MODE",
"ACCESS EXCLUSIVE MODE");
4824 else if (Matches(
"LOCK", MatchAnyN,
"IN",
"ACCESS|ROW"))
4825 COMPLETE_WITH(
"EXCLUSIVE MODE",
"SHARE MODE");
4828 else if (Matches(
"LOCK", MatchAnyN,
"IN",
"SHARE"))
4829 COMPLETE_WITH(
"MODE",
"ROW EXCLUSIVE MODE",
4830 "UPDATE EXCLUSIVE MODE");
4833 else if (Matches(
"LOCK", MatchAnyN,
"MODE"))
4834 COMPLETE_WITH(
"NOWAIT");
4837 else if (TailMatches(
"MERGE"))
4838 COMPLETE_WITH(
"INTO");
4839 else if (TailMatches(
"MERGE",
"INTO"))
4840 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_mergetargets);
4843 else if (TailMatches(
"MERGE",
"INTO", MatchAny))
4844 COMPLETE_WITH(
"USING",
"AS");
4845 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny) ||
4846 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAnyExcept(
"USING|AS")))
4847 COMPLETE_WITH(
"USING");
4853 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING") ||
4854 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING") ||
4855 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING"))
4856 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
4862 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING", MatchAny) ||
4863 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny) ||
4864 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING", MatchAny))
4865 COMPLETE_WITH(
"AS",
"ON");
4866 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING", MatchAny,
"AS", MatchAny) ||
4867 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny,
"AS", MatchAny) ||
4868 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING", MatchAny,
"AS", MatchAny) ||
4869 TailMatches(
"MERGE",
"INTO", MatchAny,
"USING", MatchAny, MatchAnyExcept(
"ON|AS")) ||
4870 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny, MatchAnyExcept(
"ON|AS")) ||
4871 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING", MatchAny, MatchAnyExcept(
"ON|AS")))
4872 COMPLETE_WITH(
"ON");
4875 else if (TailMatches(
"INTO", MatchAny,
"USING", MatchAny,
"ON"))
4876 COMPLETE_WITH_ATTR(prev4_wd);
4877 else if (TailMatches(
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny,
"AS", MatchAny,
"ON"))
4878 COMPLETE_WITH_ATTR(prev8_wd);
4879 else if (TailMatches(
"INTO", MatchAny, MatchAny,
"USING", MatchAny, MatchAny,
"ON"))
4880 COMPLETE_WITH_ATTR(prev6_wd);
4887 else if (TailMatches(
"USING", MatchAny,
"ON", MatchAny) ||
4888 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny) ||
4889 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny) ||
4890 TailMatches(
"USING", MatchAny,
"ON", MatchAny, MatchAnyExcept(
"WHEN"), MatchAnyExcept(
"WHEN")) ||
4891 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny, MatchAnyExcept(
"WHEN"), MatchAnyExcept(
"WHEN")) ||
4892 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny, MatchAnyExcept(
"WHEN"), MatchAnyExcept(
"WHEN")))
4893 COMPLETE_WITH(
"WHEN MATCHED",
"WHEN NOT MATCHED");
4894 else if (TailMatches(
"USING", MatchAny,
"ON", MatchAny,
"WHEN") ||
4895 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny,
"WHEN") ||
4896 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny,
"WHEN") ||
4897 TailMatches(
"USING", MatchAny,
"ON", MatchAny, MatchAny, MatchAny,
"WHEN") ||
4898 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny, MatchAny, MatchAny,
"WHEN") ||
4899 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny, MatchAny, MatchAny,
"WHEN"))
4900 COMPLETE_WITH(
"MATCHED",
"NOT MATCHED");
4906 else if (TailMatches(
"WHEN",
"MATCHED") ||
4907 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"SOURCE|TARGET"))
4908 COMPLETE_WITH(
"THEN",
"AND");
4911 else if (TailMatches(
"WHEN",
"NOT",
"MATCHED"))
4912 COMPLETE_WITH(
"BY",
"THEN",
"AND");
4915 else if (TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY"))
4916 COMPLETE_WITH(
"SOURCE",
"TARGET");
4922 else if (TailMatches(
"WHEN",
"MATCHED",
"THEN") ||
4923 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"SOURCE",
"THEN"))
4924 COMPLETE_WITH(
"UPDATE SET",
"DELETE",
"DO NOTHING");
4929 else if (TailMatches(
"WHEN",
"NOT",
"MATCHED",
"THEN") ||
4930 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"TARGET",
"THEN"))
4931 COMPLETE_WITH(
"INSERT",
"DO NOTHING");
4934 else if (TailMatches(
"NOTIFY"))
4935 COMPLETE_WITH_QUERY(Query_for_list_of_channels);
4938 else if (TailMatches(
"OPTIONS"))
4942 else if (TailMatches(
"OWNER",
"TO"))
4943 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4944 Keywords_for_list_of_owner_roles);
4947 else if (TailMatches(
"FROM", MatchAny,
"ORDER"))
4948 COMPLETE_WITH(
"BY");
4949 else if (TailMatches(
"FROM", MatchAny,
"ORDER",
"BY"))
4950 COMPLETE_WITH_ATTR(prev3_wd);
4953 else if (Matches(
"PREPARE", MatchAny,
"AS"))
4954 COMPLETE_WITH(
"SELECT",
"UPDATE",
"INSERT INTO",
"DELETE FROM",
4955 "MERGE INTO",
"VALUES",
"WITH",
"TABLE");
4963 else if (Matches(
"REASSIGN"))
4964 COMPLETE_WITH(
"OWNED BY");
4965 else if (Matches(
"REASSIGN",
"OWNED"))
4966 COMPLETE_WITH(
"BY");
4967 else if (Matches(
"REASSIGN",
"OWNED",
"BY"))
4968 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4969 else if (Matches(
"REASSIGN",
"OWNED",
"BY", MatchAny))
4970 COMPLETE_WITH(
"TO");
4971 else if (Matches(
"REASSIGN",
"OWNED",
"BY", MatchAny,
"TO"))
4972 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4975 else if (Matches(
"REFRESH"))
4976 COMPLETE_WITH(
"MATERIALIZED VIEW");
4977 else if (Matches(
"REFRESH",
"MATERIALIZED"))
4978 COMPLETE_WITH(
"VIEW");
4979 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW"))
4980 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_matviews,
4982 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY"))
4983 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
4984 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny))
4985 COMPLETE_WITH(
"WITH");
4986 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny))
4987 COMPLETE_WITH(
"WITH");
4988 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny,
"WITH"))
4989 COMPLETE_WITH(
"NO DATA",
"DATA");
4990 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny,
"WITH"))
4991 COMPLETE_WITH(
"NO DATA",
"DATA");
4992 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny,
"WITH",
"NO"))
4993 COMPLETE_WITH(
"DATA");
4994 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny,
"WITH",
"NO"))
4995 COMPLETE_WITH(
"DATA");
4998 else if (Matches(
"REINDEX") ||
4999 Matches(
"REINDEX",
"(*)"))
5000 COMPLETE_WITH(
"TABLE",
"INDEX",
"SYSTEM",
"SCHEMA",
"DATABASE");
5001 else if (Matches(
"REINDEX",
"TABLE") ||
5002 Matches(
"REINDEX",
"(*)",
"TABLE"))
5003 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexables,
5005 else if (Matches(
"REINDEX",
"INDEX") ||
5006 Matches(
"REINDEX",
"(*)",
"INDEX"))
5007 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
5009 else if (Matches(
"REINDEX",
"SCHEMA") ||
5010 Matches(
"REINDEX",
"(*)",
"SCHEMA"))
5011 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas,
5013 else if (Matches(
"REINDEX",
"SYSTEM|DATABASE") ||
5014 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE"))
5015 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_databases,
5017 else if (Matches(
"REINDEX",
"TABLE",
"CONCURRENTLY") ||
5018 Matches(
"REINDEX",
"(*)",
"TABLE",
"CONCURRENTLY"))
5019 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexables);
5020 else if (Matches(
"REINDEX",
"INDEX",
"CONCURRENTLY") ||
5021 Matches(
"REINDEX",
"(*)",
"INDEX",
"CONCURRENTLY"))
5022 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
5023 else if (Matches(
"REINDEX",
"SCHEMA",
"CONCURRENTLY") ||
5024 Matches(
"REINDEX",
"(*)",
"SCHEMA",
"CONCURRENTLY"))
5025 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
5026 else if (Matches(
"REINDEX",
"SYSTEM|DATABASE",
"CONCURRENTLY") ||
5027 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE",
"CONCURRENTLY"))
5028 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
5029 else if (HeadMatches(
"REINDEX",
"(*") &&
5030 !HeadMatches(
"REINDEX",
"(*)"))
5037 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
5038 COMPLETE_WITH(
"CONCURRENTLY",
"TABLESPACE",
"VERBOSE");
5039 else if (TailMatches(
"TABLESPACE"))
5040 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
5044 else if (Matches(
"SECURITY"))
5045 COMPLETE_WITH(
"LABEL");
5046 else if (Matches(
"SECURITY",
"LABEL"))
5047 COMPLETE_WITH(
"ON",
"FOR");
5048 else if (Matches(
"SECURITY",
"LABEL",
"FOR", MatchAny))
5049 COMPLETE_WITH(
"ON");
5050 else if (Matches(
"SECURITY",
"LABEL",
"ON") ||
5051 Matches(
"SECURITY",
"LABEL",
"FOR", MatchAny,
"ON"))
5052 COMPLETE_WITH(
"TABLE",
"COLUMN",
"AGGREGATE",
"DATABASE",
"DOMAIN",
5053 "EVENT TRIGGER",
"FOREIGN TABLE",
"FUNCTION",
5054 "LARGE OBJECT",
"MATERIALIZED VIEW",
"LANGUAGE",
5055 "PUBLICATION",
"PROCEDURE",
"ROLE",
"ROUTINE",
"SCHEMA",
5056 "SEQUENCE",
"SUBSCRIPTION",
"TABLESPACE",
"TYPE",
"VIEW");
5057 else if (Matches(
"SECURITY",
"LABEL",
"ON", MatchAny, MatchAny))
5058 COMPLETE_WITH(
"IS");
5065 else if (TailMatches(
"SET|RESET") &&
5066 !TailMatches(
"UPDATE", MatchAny,
"SET") &&
5067 !TailMatches(
"ALTER",
"DATABASE|USER|ROLE", MatchAny,
"RESET"))
5068 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
5075 else if (Matches(
"SHOW"))
5076 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_show_vars,
5077 "SESSION AUTHORIZATION",
5079 else if (Matches(
"SHOW",
"SESSION"))
5080 COMPLETE_WITH(
"AUTHORIZATION");
5082 else if (Matches(
"SET",
"TRANSACTION"))
5083 COMPLETE_WITH(
"SNAPSHOT",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
5084 else if (Matches(
"BEGIN|START",
"TRANSACTION") ||
5085 Matches(
"BEGIN",
"WORK") ||
5087 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION"))
5088 COMPLETE_WITH(
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
5089 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"NOT") ||
5090 Matches(
"BEGIN",
"NOT") ||
5091 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"NOT"))
5092 COMPLETE_WITH(
"DEFERRABLE");
5093 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION") ||
5094 Matches(
"BEGIN",
"ISOLATION") ||
5095 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION"))
5096 COMPLETE_WITH(
"LEVEL");
5097 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL") ||
5098 Matches(
"BEGIN",
"ISOLATION",
"LEVEL") ||
5099 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL"))
5100 COMPLETE_WITH(
"READ",
"REPEATABLE READ",
"SERIALIZABLE");
5101 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"READ") ||
5102 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"READ") ||
5103 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"READ"))
5104 COMPLETE_WITH(
"UNCOMMITTED",
"COMMITTED");
5105 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
5106 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
5107 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"REPEATABLE"))
5108 COMPLETE_WITH(
"READ");
5109 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"READ") ||
5110 Matches(
"BEGIN",
"READ") ||
5111 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"READ"))
5112 COMPLETE_WITH(
"ONLY",
"WRITE");
5114 else if (Matches(
"SET",
"CONSTRAINTS"))
5115 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_constraints_with_schema,
5118 else if (Matches(
"SET",
"CONSTRAINTS", MatchAny))
5119 COMPLETE_WITH(
"DEFERRED",
"IMMEDIATE");
5121 else if (Matches(
"SET",
"ROLE"))
5122 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
5124 else if (Matches(
"SET",
"SESSION"))
5125 COMPLETE_WITH(
"AUTHORIZATION",
"CHARACTERISTICS AS TRANSACTION");
5127 else if (Matches(
"SET",
"SESSION",
"AUTHORIZATION"))
5128 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
5131 else if (Matches(
"RESET",
"SESSION"))
5132 COMPLETE_WITH(
"AUTHORIZATION");
5134 else if (Matches(
"SET", MatchAny))
5135 COMPLETE_WITH(
"TO");
5141 else if (Matches(
"ALTER",
"DATABASE|FUNCTION|PROCEDURE|ROLE|ROUTINE|USER", MatchAnyN,
"SET", MatchAnyExcept(
"SCHEMA")))
5142 COMPLETE_WITH(
"FROM CURRENT",
"TO");
5148 else if (TailMatches(
"SET", MatchAny,
"TO|=") &&
5149 !TailMatches(
"UPDATE", MatchAny,
"SET", MatchAny,
"TO|="))
5152 if (TailMatches(
"DateStyle",
"TO|="))
5153 COMPLETE_WITH(
"ISO",
"SQL",
"Postgres",
"German",
5154 "YMD",
"DMY",
"MDY",
5155 "US",
"European",
"NonEuropean",
5157 else if (TailMatches(
"search_path",
"TO|="))
5160 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
5161 " AND nspname NOT LIKE E'pg\\\\_toast%%'"
5162 " AND nspname NOT LIKE E'pg\\\\_temp%%'",
5165 else if (TailMatches(
"TimeZone",
"TO|="))
5166 COMPLETE_WITH_TIMEZONE_NAME();
5170 char *guctype = get_guctype(prev2_wd);
5179 if (strcmp(guctype,
"enum") == 0)
5181 set_completion_reference_verbatim(prev2_wd);
5182 COMPLETE_WITH_QUERY_PLUS(Query_for_values_of_enum_GUC,
5185 else if (strcmp(guctype,
"bool") == 0)
5186 COMPLETE_WITH(
"on",
"off",
"true",
"false",
"yes",
"no",
5187 "1",
"0",
"DEFAULT");
5189 COMPLETE_WITH(
"DEFAULT");
5197 else if (Matches(
"START"))
5198 COMPLETE_WITH(
"TRANSACTION");
5201 else if (Matches(
"TABLE"))
5202 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
5205 else if (TailMatches(
"TABLESAMPLE"))
5206 COMPLETE_WITH_QUERY(Query_for_list_of_tablesample_methods);
5207 else if (TailMatches(
"TABLESAMPLE", MatchAny))
5211 else if (Matches(
"TRUNCATE"))
5212 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_truncatables,
5214 else if (Matches(
"TRUNCATE",
"TABLE"))
5215 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_truncatables,
5217 else if (Matches(
"TRUNCATE", MatchAnyN,
"ONLY"))
5218 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_truncatables);
5219 else if (Matches(
"TRUNCATE", MatchAny) ||
5220 Matches(
"TRUNCATE",
"TABLE|ONLY", MatchAny) ||
5221 Matches(
"TRUNCATE",
"TABLE",
"ONLY", MatchAny))
5222 COMPLETE_WITH(
"RESTART IDENTITY",
"CONTINUE IDENTITY",
"CASCADE",
"RESTRICT");
5223 else if (Matches(
"TRUNCATE", MatchAnyN,
"IDENTITY"))
5224 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
5227 else if (Matches(
"UNLISTEN"))
5228 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_channels,
"*");
5232 else if (TailMatches(
"UPDATE"))
5233 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
5235 else if (TailMatches(
"UPDATE", MatchAny))
5236 COMPLETE_WITH(
"SET");
5238 else if (TailMatches(
"UPDATE", MatchAny,
"SET"))
5239 COMPLETE_WITH_ATTR(prev2_wd);
5241 else if (TailMatches(
"UPDATE", MatchAny,
"SET", MatchAnyExcept(
"*=")))
5245 else if (Matches(
"ALTER|CREATE|DROP",
"USER",
"MAPPING"))
5246 COMPLETE_WITH(
"FOR");
5247 else if (Matches(
"CREATE",
"USER",
"MAPPING",
"FOR"))
5248 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
5253 else if (Matches(
"ALTER|DROP",
"USER",
"MAPPING",
"FOR"))
5254 COMPLETE_WITH_QUERY(Query_for_list_of_user_mappings);
5255 else if (Matches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING",
"FOR", MatchAny))
5256 COMPLETE_WITH(
"SERVER");
5257 else if (Matches(
"CREATE|ALTER",
"USER",
"MAPPING",
"FOR", MatchAny,
"SERVER", MatchAny))
5258 COMPLETE_WITH(
"OPTIONS");
5264 else if (Matches(
"VACUUM"))
5265 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5272 else if (Matches(
"VACUUM",
"FULL"))
5273 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5278 else if (Matches(
"VACUUM", MatchAnyN,
"FREEZE"))
5279 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5283 else if (Matches(
"VACUUM", MatchAnyN,
"VERBOSE"))
5284 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5287 else if (Matches(
"VACUUM", MatchAnyN,
"ANALYZE"))
5288 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5290 else if (HeadMatches(
"VACUUM",
"(*") &&
5291 !HeadMatches(
"VACUUM",
"(*)"))
5298 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
5299 COMPLETE_WITH(
"FULL",
"FREEZE",
"ANALYZE",
"VERBOSE",
5300 "DISABLE_PAGE_SKIPPING",
"SKIP_LOCKED",
5301 "INDEX_CLEANUP",
"PROCESS_MAIN",
"PROCESS_TOAST",
5302 "TRUNCATE",
"PARALLEL",
"SKIP_DATABASE_STATS",
5303 "ONLY_DATABASE_STATS",
"BUFFER_USAGE_LIMIT");
5304 else if (TailMatches(
"FULL|FREEZE|ANALYZE|VERBOSE|DISABLE_PAGE_SKIPPING|SKIP_LOCKED|PROCESS_MAIN|PROCESS_TOAST|TRUNCATE|SKIP_DATABASE_STATS|ONLY_DATABASE_STATS"))
5305 COMPLETE_WITH(
"ON",
"OFF");
5306 else if (TailMatches(
"INDEX_CLEANUP"))
5307 COMPLETE_WITH(
"AUTO",
"ON",
"OFF");
5309 else if (Matches(
"VACUUM", MatchAnyN,
"("))
5311 COMPLETE_WITH_ATTR(prev2_wd);
5312 else if (HeadMatches(
"VACUUM"))
5313 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_vacuumables);
5321 else if (Matches(
"WAIT"))
5322 COMPLETE_WITH(
"FOR");
5323 else if (Matches(
"WAIT",
"FOR"))
5324 COMPLETE_WITH(
"LSN");
5325 else if (Matches(
"WAIT",
"FOR",
"LSN"))
5328 else if (Matches(
"WAIT",
"FOR",
"LSN", MatchAny))
5329 COMPLETE_WITH(
"WITH");
5330 else if (Matches(
"WAIT",
"FOR",
"LSN", MatchAny,
"WITH"))
5332 else if (HeadMatches(
"WAIT",
"FOR",
"LSN", MatchAny,
"WITH",
"(*") &&
5333 !HeadMatches(
"WAIT",
"FOR",
"LSN", MatchAny,
"WITH",
"(*)"))
5340 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
5341 COMPLETE_WITH(
"timeout",
"no_throw");
5355 else if (Matches(
"WITH"))
5356 COMPLETE_WITH(
"RECURSIVE");
5360 else if (TailMatches(MatchAny,
"WHERE"))
5361 COMPLETE_WITH_ATTR(prev2_wd);
5365 else if (TailMatches(
"FROM") && !Matches(
"COPY|\\copy", MatchAny,
"FROM"))
5366 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
5369 else if (TailMatches(
"JOIN"))
5370 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_selectables,
"LATERAL");
5371 else if (TailMatches(
"JOIN", MatchAny) && !TailMatches(
"CROSS|NATURAL",
"JOIN", MatchAny))
5372 COMPLETE_WITH(
"ON",
"USING (");
5373 else if (TailMatches(
"JOIN", MatchAny, MatchAny) &&
5374 !TailMatches(
"CROSS|NATURAL",
"JOIN", MatchAny, MatchAny) && !TailMatches(
"ON|USING"))
5375 COMPLETE_WITH(
"ON",
"USING (");
5376 else if (TailMatches(
"JOIN",
"LATERAL", MatchAny, MatchAny) &&
5377 !TailMatches(
"CROSS|NATURAL",
"JOIN",
"LATERAL", MatchAny, MatchAny) && !TailMatches(
"ON|USING"))
5378 COMPLETE_WITH(
"ON",
"USING (");
5379 else if (TailMatches(
"JOIN", MatchAny,
"USING") ||
5380 TailMatches(
"JOIN", MatchAny, MatchAny,
"USING") ||
5381 TailMatches(
"JOIN",
"LATERAL", MatchAny, MatchAny,
"USING"))
5383 else if (TailMatches(
"JOIN", MatchAny,
"USING",
"("))
5384 COMPLETE_WITH_ATTR(prev3_wd);
5385 else if (TailMatches(
"JOIN", MatchAny, MatchAny,
"USING",
"("))
5386 COMPLETE_WITH_ATTR(prev4_wd);
5389 else if (TailMatches(
"AT"))
5390 COMPLETE_WITH(
"LOCAL",
"TIME ZONE");
5391 else if (TailMatches(
"AT",
"TIME",
"ZONE"))
5392 COMPLETE_WITH_TIMEZONE_NAME();
5396 else if (TailMatchesCS(
"\\?"))
5397 COMPLETE_WITH_CS(
"commands",
"options",
"variables");
5398 else if (TailMatchesCS(
"\\connect|\\c"))
5401 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
5403 else if (TailMatchesCS(
"\\connect|\\c", MatchAny))
5406 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
5408 else if (TailMatchesCS(
"\\da*"))
5409 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_aggregates);
5410 else if (TailMatchesCS(
"\\dAc*", MatchAny) ||
5411 TailMatchesCS(
"\\dAf*", MatchAny))
5412 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
5413 else if (TailMatchesCS(
"\\dAo*", MatchAny) ||
5414 TailMatchesCS(
"\\dAp*", MatchAny))
5415 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_operator_families);
5416 else if (TailMatchesCS(
"\\dA*"))
5417 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
5418 else if (TailMatchesCS(
"\\db*"))
5419 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
5420 else if (TailMatchesCS(
"\\dconfig*"))
5421 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_show_vars);
5422 else if (TailMatchesCS(
"\\dD*"))
5423 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
5424 else if (TailMatchesCS(
"\\des*"))
5425 COMPLETE_WITH_QUERY(Query_for_list_of_servers);
5426 else if (TailMatchesCS(
"\\deu*"))
5427 COMPLETE_WITH_QUERY(Query_for_list_of_user_mappings);
5428 else if (TailMatchesCS(
"\\dew*"))
5429 COMPLETE_WITH_QUERY(Query_for_list_of_fdws);
5430 else if (TailMatchesCS(
"\\df*"))
5431 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
5432 else if (HeadMatchesCS(
"\\df*"))
5433 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
5435 else if (TailMatchesCS(
"\\dFd*"))
5436 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_dictionaries);
5437 else if (TailMatchesCS(
"\\dFp*"))
5438 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_parsers);
5439 else if (TailMatchesCS(
"\\dFt*"))
5440 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_templates);
5442 else if (TailMatchesCS(
"\\dF*"))
5443 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_configurations);
5445 else if (TailMatchesCS(
"\\di*"))
5446 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
5447 else if (TailMatchesCS(
"\\dL*"))
5448 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
5449 else if (TailMatchesCS(
"\\dn*"))
5450 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
5452 else if (HeadMatchesCS(
"\\do*", MatchAny))
5453 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
5454 else if (TailMatchesCS(
"\\dp") || TailMatchesCS(
"\\z"))
5455 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_grantables);
5456 else if (TailMatchesCS(
"\\dPi*"))
5457 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_indexes);
5458 else if (TailMatchesCS(
"\\dPt*"))
5459 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_tables);
5460 else if (TailMatchesCS(
"\\dP*"))
5461 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_relations);
5462 else if (TailMatchesCS(
"\\dRp*"))
5463 COMPLETE_WITH_VERSIONED_QUERY(Query_for_list_of_publications);
5464 else if (TailMatchesCS(
"\\dRs*"))
5465 COMPLETE_WITH_VERSIONED_QUERY(Query_for_list_of_subscriptions);
5466 else if (TailMatchesCS(
"\\ds*"))
5467 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_sequences);
5468 else if (TailMatchesCS(
"\\dt*"))
5469 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
5470 else if (TailMatchesCS(
"\\dT*"))
5471 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
5472 else if (TailMatchesCS(
"\\du*") ||
5473 TailMatchesCS(
"\\dg*") ||
5474 TailMatchesCS(
"\\drg*"))
5475 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
5476 else if (TailMatchesCS(
"\\dv*"))
5477 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
5478 else if (TailMatchesCS(
"\\dx*"))
5479 COMPLETE_WITH_QUERY(Query_for_list_of_extensions);
5480 else if (TailMatchesCS(
"\\dX*"))
5481 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_statistics);
5482 else if (TailMatchesCS(
"\\dm*"))
5483 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
5484 else if (TailMatchesCS(
"\\dE*"))
5485 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
5486 else if (TailMatchesCS(
"\\dy*"))
5487 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
5490 else if (TailMatchesCS(
"\\d*"))
5491 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_relations);
5493 else if (TailMatchesCS(
"\\ef"))
5494 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
5495 else if (TailMatchesCS(
"\\ev"))
5496 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
5498 else if (TailMatchesCS(
"\\encoding"))
5499 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_encodings);
5500 else if (TailMatchesCS(
"\\h|\\help"))
5501 COMPLETE_WITH_LIST(sql_commands);
5502 else if (TailMatchesCS(
"\\h|\\help", MatchAny))
5504 if (TailMatches(
"DROP"))
5505 COMPLETE_WITH_GENERATOR(drop_command_generator);
5506 else if (TailMatches(
"ALTER"))
5507 COMPLETE_WITH_GENERATOR(alter_command_generator);
5514 else if (TailMatchesCS(
"\\h|\\help", MatchAny, MatchAny))
5516 if (TailMatches(
"CREATE|DROP",
"ACCESS"))
5517 COMPLETE_WITH(
"METHOD");
5518 else if (TailMatches(
"ALTER",
"DEFAULT"))
5519 COMPLETE_WITH(
"PRIVILEGES");
5520 else if (TailMatches(
"CREATE|ALTER|DROP",
"EVENT"))
5521 COMPLETE_WITH(
"TRIGGER");
5522 else if (TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN"))
5523 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
5524 else if (TailMatches(
"ALTER",
"LARGE"))
5525 COMPLETE_WITH(
"OBJECT");
5526 else if (TailMatches(
"CREATE|ALTER|DROP",
"MATERIALIZED"))
5527 COMPLETE_WITH(
"VIEW");
5528 else if (TailMatches(
"CREATE|ALTER|DROP",
"TEXT"))
5529 COMPLETE_WITH(
"SEARCH");
5530 else if (TailMatches(
"CREATE|ALTER|DROP",
"USER"))
5531 COMPLETE_WITH(
"MAPPING FOR");
5533 else if (TailMatchesCS(
"\\h|\\help", MatchAny, MatchAny, MatchAny))
5535 if (TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN",
"DATA"))
5536 COMPLETE_WITH(
"WRAPPER");
5537 else if (TailMatches(
"CREATE|ALTER|DROP",
"TEXT",
"SEARCH"))
5538 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
5539 else if (TailMatches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING"))
5540 COMPLETE_WITH(
"FOR");
5542 else if (TailMatchesCS(
"\\l*") && !TailMatchesCS(
"\\lo*"))
5543 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
5544 else if (TailMatchesCS(
"\\password"))
5545 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
5546 else if (TailMatchesCS(
"\\pset"))
5547 COMPLETE_WITH_CS(
"border",
"columns",
"csv_fieldsep",
5548 "display_false",
"display_true",
"expanded",
5549 "fieldsep",
"fieldsep_zero",
"footer",
"format",
5550 "linestyle",
"null",
"numericlocale",
5551 "pager",
"pager_min_lines",
5552 "recordsep",
"recordsep_zero",
5553 "tableattr",
"title",
"tuples_only",
5554 "unicode_border_linestyle",
5555 "unicode_column_linestyle",
5556 "unicode_header_linestyle",
5558 else if (TailMatchesCS(
"\\pset", MatchAny))
5560 if (TailMatchesCS(
"format"))
5561 COMPLETE_WITH_CS(
"aligned",
"asciidoc",
"csv",
"html",
"latex",
5562 "latex-longtable",
"troff-ms",
"unaligned",
5564 else if (TailMatchesCS(
"xheader_width"))
5565 COMPLETE_WITH_CS(
"full",
"column",
"page");
5566 else if (TailMatchesCS(
"linestyle"))
5567 COMPLETE_WITH_CS(
"ascii",
"old-ascii",
"unicode");
5568 else if (TailMatchesCS(
"pager"))
5569 COMPLETE_WITH_CS(
"on",
"off",
"always");
5570 else if (TailMatchesCS(
"unicode_border_linestyle|"
5571 "unicode_column_linestyle|"
5572 "unicode_header_linestyle"))
5573 COMPLETE_WITH_CS(
"single",
"double");
5575 else if (TailMatchesCS(
"\\unset"))
5576 matches = complete_from_variables(
text,
"",
"",
true);
5577 else if (TailMatchesCS(
"\\set"))
5578 matches = complete_from_variables(
text,
"",
"",
false);
5579 else if (TailMatchesCS(
"\\set", MatchAny))
5581 if (TailMatchesCS(
"AUTOCOMMIT|ON_ERROR_STOP|QUIET|SHOW_ALL_RESULTS|"
5582 "SINGLELINE|SINGLESTEP"))
5583 COMPLETE_WITH_CS(
"on",
"off");
5584 else if (TailMatchesCS(
"COMP_KEYWORD_CASE"))
5585 COMPLETE_WITH_CS(
"lower",
"upper",
5586 "preserve-lower",
"preserve-upper");
5587 else if (TailMatchesCS(
"ECHO"))
5588 COMPLETE_WITH_CS(
"errors",
"queries",
"all",
"none");
5589 else if (TailMatchesCS(
"ECHO_HIDDEN"))
5590 COMPLETE_WITH_CS(
"noexec",
"off",
"on");
5591 else if (TailMatchesCS(
"HISTCONTROL"))
5592 COMPLETE_WITH_CS(
"ignorespace",
"ignoredups",
5593 "ignoreboth",
"none");
5594 else if (TailMatchesCS(
"ON_ERROR_ROLLBACK"))
5595 COMPLETE_WITH_CS(
"on",
"off",
"interactive");
5596 else if (TailMatchesCS(
"SHOW_CONTEXT"))
5597 COMPLETE_WITH_CS(
"never",
"errors",
"always");
5598 else if (TailMatchesCS(
"VERBOSITY"))
5599 COMPLETE_WITH_CS(
"default",
"verbose",
"terse",
"sqlstate");
5601 else if (TailMatchesCS(
"\\sf*"))
5602 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
5603 else if (TailMatchesCS(
"\\sv*"))
5604 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
5605 else if (TailMatchesCS(
"\\cd|\\e|\\edit|\\g|\\gx|\\i|\\include|"
5606 "\\ir|\\include_relative|\\o|\\out|"
5607 "\\s|\\w|\\write|\\lo_import") ||
5608 TailMatchesCS(
"\\lo_export", MatchAny))
5609 COMPLETE_WITH_FILES(
"\\",
false);
5637create_or_drop_command_generator(
const char *
text,
int state,
bits32 excluded)
5639 static int list_index,
5647 string_length = strlen(
text);
5651 while ((
name = words_after_create[list_index++].
name))
5654 !(words_after_create[list_index - 1].flags & excluded))
5655 return pg_strdup_keyword_case(
name,
text);
5666create_command_generator(
const char *
text,
int state)
5668 return create_or_drop_command_generator(
text,
state, THING_NO_CREATE);
5675drop_command_generator(
const char *
text,
int state)
5677 return create_or_drop_command_generator(
text,
state, THING_NO_DROP);
5684alter_command_generator(
const char *
text,
int state)
5686 return create_or_drop_command_generator(
text,
state, THING_NO_ALTER);
5695complete_from_query(
const char *
text,
int state)
5698 return _complete_from_query(completion_charp, NULL, completion_charpp,
5703complete_from_versioned_query(
const char *
text,
int state)
5705 const VersionedQuery *vquery = completion_vquery;
5711 if (vquery->query == NULL)
5714 return _complete_from_query(vquery->query, NULL, completion_charpp,
5719complete_from_schema_query(
const char *
text,
int state)
5722 return _complete_from_query(NULL, completion_squery, completion_charpp,
5727complete_from_versioned_schema_query(
const char *
text,
int state)
5729 const SchemaQuery *squery = completion_squery;
5735 if (squery->catname == NULL)
5738 return _complete_from_query(NULL, squery, completion_charpp,
5785_complete_from_query(
const char *simple_query,
5786 const SchemaQuery *schema_query,
5791 static int list_index,
5796 static bool non_empty_object;
5797 static bool schemaquoted;
5798 static bool objectquoted;
5809 char *e_object_like;
5816 num_schema_only = 0;
5817 num_query_other = 0;
5830 parse_identifier(
text,
5831 &schemaname, &objectname,
5832 &schemaquoted, &objectquoted);
5836 non_empty_object = (*objectname !=
'\0');
5842 e_object_like = make_like_pattern(objectname);
5847 e_schemaname = NULL;
5849 if (completion_ref_object)
5852 e_ref_object = NULL;
5854 if (completion_ref_schema)
5857 e_ref_schema = NULL;
5863 Assert(simple_query == NULL);
5870 if (schemaname == NULL || schema_query->namespace == NULL)
5874 if (schema_query->use_distinct)
5877 "%s, NULL::pg_catalog.text FROM %s",
5878 schema_query->result,
5879 schema_query->catname);
5880 if (schema_query->refnamespace && completion_ref_schema)
5882 ", pg_catalog.pg_namespace nr");
5884 if (schema_query->selcondition)
5886 schema_query->selcondition);
5888 schema_query->result,
5890 if (schema_query->viscondition)
5892 schema_query->viscondition);
5893 if (schema_query->refname)
5895 Assert(completion_ref_object);
5897 schema_query->refname, e_ref_object);
5898 if (schema_query->refnamespace && completion_ref_schema)
5900 " AND %s = nr.oid AND nr.nspname = '%s'",
5901 schema_query->refnamespace,
5903 else if (schema_query->refviscondition)
5906 schema_query->refviscondition);
5916 if (strcmp(schema_query->catname,
5917 "pg_catalog.pg_class c") == 0 &&
5918 strncmp(objectname,
"pg_", 3) != 0)
5921 " AND c.relnamespace <> (SELECT oid FROM"
5922 " pg_catalog.pg_namespace WHERE nspname = 'pg_catalog')");
5929 if (schema_query->namespace)
5932 "SELECT NULL::pg_catalog.text, n.nspname "
5933 "FROM pg_catalog.pg_namespace n "
5934 "WHERE n.nspname LIKE '%s'",
5941 if (strncmp(objectname,
"pg_", 3) != 0)
5943 " AND n.nspname NOT LIKE E'pg\\\\_%'");
5950 schemaquoted = objectquoted;
5957 if (schema_query->use_distinct)
5960 "FROM %s, pg_catalog.pg_namespace n",
5961 schema_query->result,
5962 schema_query->catname);
5963 if (schema_query->refnamespace && completion_ref_schema)
5965 ", pg_catalog.pg_namespace nr");
5967 schema_query->namespace);
5968 if (schema_query->selcondition)
5970 schema_query->selcondition);
5972 schema_query->result,
5976 if (schema_query->refname)
5978 Assert(completion_ref_object);
5980 schema_query->refname, e_ref_object);
5981 if (schema_query->refnamespace && completion_ref_schema)
5983 " AND %s = nr.oid AND nr.nspname = '%s'",
5984 schema_query->refnamespace,
5986 else if (schema_query->refviscondition)
5989 schema_query->refviscondition);
5999 e_ref_object, e_ref_schema);
6004 completion_max_records);
6007 result = exec_query(query_buffer.
data);
6013 free(e_object_like);
6026 const char *item = NULL;
6027 const char *nsp = NULL;
6050 if (non_empty_object)
6052 if (item && !objectquoted && identifier_needs_quotes(item))
6054 if (nsp && !schemaquoted && identifier_needs_quotes(nsp))
6059 if (item == NULL && nsp != NULL)
6064 return requote_identifier(nsp, item, schemaquoted, objectquoted);
6073 if (schema_query && schema_query->keywords)
6075 const char *
const *itemp = schema_query->keywords;
6079 const char *item = *itemp++;
6087 return pg_strdup_keyword_case(item,
text);
6093 const char *
const *itemp =
keywords;
6097 const char *item = *itemp++;
6105 return pg_strdup_keyword_case(item,
text);
6116 if (num_schema_only > 0 && num_query_other == 0 && num_keywords == 0)
6117 rl_completion_append_character =
'\0';
6132set_completion_reference(
const char *
word)
6137 parse_identifier(
word,
6138 &completion_ref_schema, &completion_ref_object,
6139 &schemaquoted, &objectquoted);
6147set_completion_reference_verbatim(
const char *
word)
6149 completion_ref_schema = NULL;
6160complete_from_list(
const char *
text,
int state)
6162 static int string_length,
6165 static bool casesensitive;
6169 Assert(completion_charpp != NULL);
6175 string_length = strlen(
text);
6176 casesensitive = completion_case_sensitive;
6180 while ((item = completion_charpp[list_index++]))
6183 if (casesensitive && strncmp(
text, item, string_length) == 0)
6192 if (completion_case_sensitive)
6200 return pg_strdup_keyword_case(item,
text);
6208 if (casesensitive && matches == 0)
6210 casesensitive =
false;
6240complete_from_const(
const char *
text,
int state)
6242 Assert(completion_charp != NULL);
6245 if (completion_case_sensitive)
6253 return pg_strdup_keyword_case(completion_charp,
text);
6265append_variable_names(
char ***varnames,
int *nvars,
6266 int *maxvars,
const char *varname,
6267 const char *prefix,
const char *suffix)
6269 if (*nvars >= *maxvars)
6273 ((*maxvars) + 1) *
sizeof(
char *));
6276 (*varnames)[(*nvars)++] =
psprintf(
"%s%s%s", prefix, varname, suffix);
6288complete_from_variables(
const char *
text,
const char *prefix,
const char *suffix,
6298 varnames = (
char **)
pg_malloc((maxvars + 1) *
sizeof(
char *));
6302 if (need_value && !(ptr->
value))
6304 append_variable_names(&varnames, &nvars, &maxvars, ptr->
name,
6308 varnames[nvars] = NULL;
6309 COMPLETE_WITH_LIST_CS((
const char *
const *) varnames);
6311 for (
i = 0;
i < nvars;
i++)
6328complete_from_files(
const char *
text,
int state)
6330 static int list_index;
6331 static bool files_done;
6343 char *result = _complete_from_files(
text,
state);
6353 if (!completion_charpp)
6360 while ((item = completion_charpp[list_index++]))
6364 completion_force_quote =
false;
6365 return pg_strdup_keyword_case(item,
text);
6386_complete_from_files(
const char *
text,
int state)
6388#ifdef USE_FILENAME_QUOTING_FUNCTIONS
6405#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
6406 rl_completion_suppress_quote = 1;
6411 completion_force_quote =
true;
6413 return rl_filename_completion_function(
text,
state);
6419 static const char *unquoted_text;
6420 char *unquoted_match;
6425 completion_force_quote =
true;
6430 unquoted_text =
strtokx(
text,
"", NULL,
"'", *completion_charp,
6436 unquoted_text =
text;
6440 unquoted_match = rl_filename_completion_function(unquoted_text,
state);
6443 struct stat statbuf;
6444 bool is_dir = (
stat(unquoted_match, &statbuf) == 0 &&
6445 S_ISDIR(statbuf.st_mode) != 0);
6449 '\'', *completion_charp,
6450 completion_force_quote,
6453 free(unquoted_match);
6455 ret = unquoted_match;
6462 if (*ret ==
'\'' && is_dir)
6464 char *retend = ret + strlen(ret) - 1;
6469 rl_completion_append_character =
'\0';
6486pg_strdup_keyword_case(
const char *s,
const char *ref)
6490 unsigned char first = ref[0];
6499 for (p = ret; *p; p++)
6504 for (p = ret; *p; p++)
6541make_like_pattern(
const char *
word)
6545 char *bptr = buffer;
6587parse_identifier(
const char *
ident,
6588 char **schemaname,
char **objectname,
6589 bool *schemaquoted,
bool *objectquoted)
6591 size_t buflen = strlen(
ident) + 1;
6601 *schemaquoted = *objectquoted =
false;
6607 unsigned char ch = (
unsigned char) *
ident++;
6611 if (inquotes && *
ident ==
'"')
6619 inquotes = !inquotes;
6620 *objectquoted =
true;
6623 else if (ch ==
'.' && !inquotes)
6631 *schemaquoted = *objectquoted;
6632 *objectquoted =
false;
6644 *optr++ = (char) ch;
6659 if (ch >=
'A' && ch <=
'Z')
6661 else if (enc_is_single_byte &&
IS_HIGHBIT_SET(ch) && isupper(ch))
6664 *optr++ = (char) ch;
6669 *schemaname = sname;
6670 *objectname = oname;
6686requote_identifier(
const char *schemaname,
const char *objectname,
6687 bool quote_schema,
bool quote_object)
6699 buflen += strlen(schemaname) + 1;
6701 quote_schema = identifier_needs_quotes(schemaname);
6705 for (
const char *p = schemaname; *p; p++)
6714 buflen += strlen(objectname);
6716 quote_object = identifier_needs_quotes(objectname);
6720 for (
const char *p = objectname; *p; p++)
6733 for (
const char *p = schemaname; *p; p++)
6747 for (
const char *p = objectname; *p; p++)
6768identifier_needs_quotes(
const char *
ident)
6775 if (strspn(
ident,
"abcdefghijklmnopqrstuvwxyz0123456789_$") != strlen(
ident))
6801exec_query(
const char *query)
6818 pg_log_error(
"tab completion query failed: %s\nQuery was:\n%s",
6841get_previous_words(
int point,
char **buffer,
int *nwords)
6843 char **previous_words;
6846 int words_found = 0;
6860 memcpy(
buf +
i, rl_line_buffer, point);
6867 buf = rl_line_buffer;
6876 previous_words = (
char **)
pg_malloc(point *
sizeof(
char *));
6877 *buffer = outptr = (
char *)
pg_malloc(point * 2);
6884 for (
i = point - 1;
i >= 0;
i--)
6886 if (strchr(WORD_BREAKS,
buf[
i]))
6900 bool inquotes =
false;
6901 int parentheses = 0;
6905 for (
i = point;
i >= 0;
i--)
6907 if (!isspace((
unsigned char)
buf[
i]))
6926 inquotes = !inquotes;
6933 if (--parentheses <= 0)
6936 else if (parentheses == 0 &&
6937 strchr(WORD_BREAKS,
buf[
start - 1]))
6943 previous_words[words_found++] = outptr;
6954 if (
buf != rl_line_buffer)
6957 *nwords = words_found;
6958 return previous_words;
6968get_guctype(
const char *varname)
6973 char *guctype = NULL;
6979 "SELECT vartype FROM pg_catalog.pg_settings "
6980 "WHERE pg_catalog.lower(name) = pg_catalog.lower('%s')",
6983 result = exec_query(query_buffer.
data);
6995#ifdef USE_FILENAME_QUOTING_FUNCTIONS
7004quote_file_name(
char *fname,
int match_type,
char *quote_pointer)
7007 struct stat statbuf;
7011 '\'', *completion_charp,
7012 completion_force_quote,
7027 completion_last_char !=
'\'' &&
7028 (match_type != SINGLE_MATCH ||
7029 (quote_pointer && *quote_pointer ==
'\'') ||
7030 stat(fname, &statbuf) != 0 ||
7033 char *
send = s + strlen(s) - 1;
7044#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
7045 rl_completion_suppress_quote = 0;
7053 if (quote_pointer && *quote_pointer !=
'\'')
7054 *quote_pointer =
'\0';
7065dequote_file_name(
char *fname,
int quote_char)
7067 char *unquoted_fname;
7074 if (quote_char ==
'\'')
7076 char *workspace = (
char *)
pg_malloc(strlen(fname) + 2);
7078 workspace[0] = quote_char;
7079 strcpy(workspace + 1, fname);
7080 unquoted_fname =
strtokx(workspace,
"", NULL,
"'", *completion_charp,
7085 unquoted_fname =
strtokx(fname,
"", NULL,
"'", *completion_charp,
7089 if (!unquoted_fname)
7092 unquoted_fname = fname;
bool recognized_connection_string(const char *connstr)
#define IS_HIGHBIT_SET(ch)
const uint8 ScanKeywordCategories[SCANKEYWORDS_NUM_KEYWORDS]
ConnStatusType PQstatus(const PGconn *conn)
char * PQerrorMessage(const PGconn *conn)
size_t PQescapeStringConn(PGconn *conn, char *to, const char *from, size_t length, int *error)
PGresult * PQexec(PGconn *conn, const char *query)
int PQmblenBounded(const char *s, int encoding)
void * pg_malloc(size_t size)
char * pg_strdup(const char *in)
void * pg_realloc(void *ptr, size_t size)
Assert(PointerIsAligned(start, uint64))
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)