53#include "catalog/pg_am_d.h"
54#include "catalog/pg_class_d.h"
68#ifndef HAVE_RL_FILENAME_COMPLETION_FUNCTION
69#define rl_filename_completion_function filename_completion_function
72#ifndef HAVE_RL_COMPLETION_MATCHES
73#define rl_completion_matches completion_matches
81#ifdef HAVE_RL_FILENAME_QUOTING_FUNCTION
82#define USE_FILENAME_QUOTING_FUNCTIONS 1
86#define WORD_BREAKS "\t\n@><=;|&() "
107typedef struct VersionedQuery
109 int min_server_version;
129typedef struct SchemaQuery
136 int min_server_version;
152 const char *selcondition;
159 const char *viscondition;
167 const char *
namespace;
203 const char *refviscondition;
210 const char *refnamespace;
217static int completion_max_records;
224static char completion_last_char;
225static const char *completion_charp;
226static const char *
const *completion_charpp;
227static const VersionedQuery *completion_vquery;
228static const SchemaQuery *completion_squery;
229static char *completion_ref_object;
230static char *completion_ref_schema;
231static bool completion_case_sensitive;
232static bool completion_verbatim;
233static bool completion_force_quote;
256#define COMPLETE_WITH_QUERY(query) \
257 COMPLETE_WITH_QUERY_LIST(query, NULL)
259#define COMPLETE_WITH_QUERY_LIST(query, list) \
261 completion_charp = query; \
262 completion_charpp = list; \
263 completion_verbatim = false; \
264 matches = rl_completion_matches(text, complete_from_query); \
267#define COMPLETE_WITH_QUERY_PLUS(query, ...) \
269 static const char *const list[] = { __VA_ARGS__, NULL }; \
270 COMPLETE_WITH_QUERY_LIST(query, list); \
273#define COMPLETE_WITH_QUERY_VERBATIM(query) \
274 COMPLETE_WITH_QUERY_VERBATIM_LIST(query, NULL)
276#define COMPLETE_WITH_QUERY_VERBATIM_LIST(query, list) \
278 completion_charp = query; \
279 completion_charpp = list; \
280 completion_verbatim = true; \
281 matches = rl_completion_matches(text, complete_from_query); \
284#define COMPLETE_WITH_QUERY_VERBATIM_PLUS(query, ...) \
286 static const char *const list[] = { __VA_ARGS__, NULL }; \
287 COMPLETE_WITH_QUERY_VERBATIM_LIST(query, list); \
290#define COMPLETE_WITH_VERSIONED_QUERY(query) \
291 COMPLETE_WITH_VERSIONED_QUERY_LIST(query, NULL)
293#define COMPLETE_WITH_VERSIONED_QUERY_LIST(query, list) \
295 completion_vquery = query; \
296 completion_charpp = list; \
297 completion_verbatim = false; \
298 matches = rl_completion_matches(text, complete_from_versioned_query); \
301#define COMPLETE_WITH_VERSIONED_QUERY_PLUS(query, ...) \
303 static const char *const list[] = { __VA_ARGS__, NULL }; \
304 COMPLETE_WITH_VERSIONED_QUERY_LIST(query, list); \
307#define COMPLETE_WITH_SCHEMA_QUERY(query) \
308 COMPLETE_WITH_SCHEMA_QUERY_LIST(query, NULL)
310#define COMPLETE_WITH_SCHEMA_QUERY_LIST(query, list) \
312 completion_squery = &(query); \
313 completion_charpp = list; \
314 completion_verbatim = false; \
315 matches = rl_completion_matches(text, complete_from_schema_query); \
318#define COMPLETE_WITH_SCHEMA_QUERY_PLUS(query, ...) \
320 static const char *const list[] = { __VA_ARGS__, NULL }; \
321 COMPLETE_WITH_SCHEMA_QUERY_LIST(query, list); \
324#define COMPLETE_WITH_SCHEMA_QUERY_VERBATIM(query) \
326 completion_squery = &(query); \
327 completion_charpp = NULL; \
328 completion_verbatim = true; \
329 matches = rl_completion_matches(text, complete_from_schema_query); \
332#define COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(query) \
333 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_LIST(query, NULL)
335#define COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_LIST(query, list) \
337 completion_squery = query; \
338 completion_charpp = list; \
339 completion_verbatim = false; \
340 matches = rl_completion_matches(text, complete_from_versioned_schema_query); \
343#define COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_PLUS(query, ...) \
345 static const char *const list[] = { __VA_ARGS__, NULL }; \
346 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_LIST(query, list); \
353#define COMPLETE_WITH_CONST(cs, con) \
355 completion_case_sensitive = (cs); \
356 completion_charp = (con); \
357 matches = rl_completion_matches(text, complete_from_const); \
360#define COMPLETE_WITH_LIST_INT(cs, list) \
362 completion_case_sensitive = (cs); \
363 completion_charpp = (list); \
364 matches = rl_completion_matches(text, complete_from_list); \
367#define COMPLETE_WITH_LIST(list) COMPLETE_WITH_LIST_INT(false, list)
368#define COMPLETE_WITH_LIST_CS(list) COMPLETE_WITH_LIST_INT(true, list)
370#define COMPLETE_WITH(...) \
372 static const char *const list[] = { __VA_ARGS__, NULL }; \
373 COMPLETE_WITH_LIST(list); \
376#define COMPLETE_WITH_CS(...) \
378 static const char *const list[] = { __VA_ARGS__, NULL }; \
379 COMPLETE_WITH_LIST_CS(list); \
382#define COMPLETE_WITH_ATTR(relation) \
383 COMPLETE_WITH_ATTR_LIST(relation, NULL)
385#define COMPLETE_WITH_ATTR_LIST(relation, list) \
387 set_completion_reference(relation); \
388 completion_squery = &(Query_for_list_of_attributes); \
389 completion_charpp = list; \
390 completion_verbatim = false; \
391 matches = rl_completion_matches(text, complete_from_schema_query); \
394#define COMPLETE_WITH_ATTR_PLUS(relation, ...) \
396 static const char *const list[] = { __VA_ARGS__, NULL }; \
397 COMPLETE_WITH_ATTR_LIST(relation, list); \
406#define COMPLETE_WITH_ENUM_VALUE(type) \
408 set_completion_reference(type); \
409 if (text[0] == '\'' || \
410 start == 0 || rl_line_buffer[start - 1] != '\'') \
411 completion_squery = &(Query_for_list_of_enum_values_quoted); \
413 completion_squery = &(Query_for_list_of_enum_values_unquoted); \
414 completion_charpp = NULL; \
415 completion_verbatim = true; \
416 matches = rl_completion_matches(text, complete_from_schema_query); \
423#define COMPLETE_WITH_TIMEZONE_NAME() \
425 static const char *const list[] = { "DEFAULT", NULL }; \
426 if (text[0] == '\'') \
427 completion_charp = Query_for_list_of_timezone_names_quoted_in; \
428 else if (start == 0 || rl_line_buffer[start - 1] != '\'') \
429 completion_charp = Query_for_list_of_timezone_names_quoted_out; \
431 completion_charp = Query_for_list_of_timezone_names_unquoted; \
432 completion_charpp = list; \
433 completion_verbatim = true; \
434 matches = rl_completion_matches(text, complete_from_query); \
437#define COMPLETE_WITH_FUNCTION_ARG(function) \
439 set_completion_reference(function); \
440 completion_squery = &(Query_for_list_of_arguments); \
441 completion_charpp = NULL; \
442 completion_verbatim = true; \
443 matches = rl_completion_matches(text, complete_from_schema_query); \
453static const SchemaQuery Query_for_constraint_of_table = {
454 .catname =
"pg_catalog.pg_constraint con, pg_catalog.pg_class c1",
455 .selcondition =
"con.conrelid=c1.oid",
456 .result =
"con.conname",
457 .refname =
"c1.relname",
458 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
459 .refnamespace =
"c1.relnamespace",
462static const SchemaQuery Query_for_constraint_of_table_not_validated = {
463 .catname =
"pg_catalog.pg_constraint con, pg_catalog.pg_class c1",
464 .selcondition =
"con.conrelid=c1.oid and not con.convalidated",
465 .result =
"con.conname",
466 .refname =
"c1.relname",
467 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
468 .refnamespace =
"c1.relnamespace",
471static const SchemaQuery Query_for_constraint_of_type = {
472 .catname =
"pg_catalog.pg_constraint con, pg_catalog.pg_type t",
473 .selcondition =
"con.contypid=t.oid",
474 .result =
"con.conname",
475 .refname =
"t.typname",
476 .refviscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
477 .refnamespace =
"t.typnamespace",
480static const SchemaQuery Query_for_index_of_table = {
481 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_index i",
482 .selcondition =
"c1.oid=i.indrelid and i.indexrelid=c2.oid",
483 .result =
"c2.relname",
484 .refname =
"c1.relname",
485 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
486 .refnamespace =
"c1.relnamespace",
489static const SchemaQuery Query_for_unique_index_of_table = {
490 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_index i",
491 .selcondition =
"c1.oid=i.indrelid and i.indexrelid=c2.oid and i.indisunique",
492 .result =
"c2.relname",
493 .refname =
"c1.relname",
494 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
495 .refnamespace =
"c1.relnamespace",
498static const SchemaQuery Query_for_list_of_aggregates[] = {
500 .min_server_version = 110000,
501 .catname =
"pg_catalog.pg_proc p",
502 .selcondition =
"p.prokind = 'a'",
503 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
504 .namespace =
"p.pronamespace",
505 .result =
"p.proname",
508 .catname =
"pg_catalog.pg_proc p",
509 .selcondition =
"p.proisagg",
510 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
511 .namespace =
"p.pronamespace",
512 .result =
"p.proname",
516static const SchemaQuery Query_for_list_of_arguments = {
517 .catname =
"pg_catalog.pg_proc p",
518 .result =
"pg_catalog.oidvectortypes(p.proargtypes)||')'",
519 .refname =
"p.proname",
520 .refviscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
521 .refnamespace =
"p.pronamespace",
524static const SchemaQuery Query_for_list_of_attributes = {
525 .catname =
"pg_catalog.pg_attribute a, pg_catalog.pg_class c",
526 .selcondition =
"c.oid = a.attrelid and a.attnum > 0 and not a.attisdropped",
527 .result =
"a.attname",
528 .refname =
"c.relname",
529 .refviscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
530 .refnamespace =
"c.relnamespace",
533static const SchemaQuery Query_for_list_of_attribute_numbers = {
534 .catname =
"pg_catalog.pg_attribute a, pg_catalog.pg_class c",
535 .selcondition =
"c.oid = a.attrelid and a.attnum > 0 and not a.attisdropped",
536 .result =
"a.attnum::pg_catalog.text",
537 .refname =
"c.relname",
538 .refviscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
539 .refnamespace =
"c.relnamespace",
542static const char *
const Keywords_for_list_of_datatypes[] = {
562 "time with time zone",
563 "time without time zone",
564 "timestamp with time zone",
565 "timestamp without time zone",
570static const SchemaQuery Query_for_list_of_datatypes = {
571 .catname =
"pg_catalog.pg_type t",
573 .selcondition =
"(t.typrelid = 0 "
574 " OR (SELECT c.relkind = " CppAsString2(RELKIND_COMPOSITE_TYPE)
575 " FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)) "
576 "AND t.typname !~ '^_'",
577 .viscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
578 .namespace =
"t.typnamespace",
579 .result =
"t.typname",
580 .keywords = Keywords_for_list_of_datatypes,
583static const SchemaQuery Query_for_list_of_composite_datatypes = {
584 .catname =
"pg_catalog.pg_type t",
586 .selcondition =
"(SELECT c.relkind = " CppAsString2(RELKIND_COMPOSITE_TYPE)
587 " FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid) "
588 "AND t.typname !~ '^_'",
589 .viscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
590 .namespace =
"t.typnamespace",
591 .result =
"t.typname",
594static const SchemaQuery Query_for_list_of_domains = {
595 .catname =
"pg_catalog.pg_type t",
596 .selcondition =
"t.typtype = 'd'",
597 .viscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
598 .namespace =
"t.typnamespace",
599 .result =
"t.typname",
602static const SchemaQuery Query_for_list_of_enum_values_quoted = {
603 .catname =
"pg_catalog.pg_enum e, pg_catalog.pg_type t",
604 .selcondition =
"t.oid = e.enumtypid",
605 .result =
"pg_catalog.quote_literal(enumlabel)",
606 .refname =
"t.typname",
607 .refviscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
608 .refnamespace =
"t.typnamespace",
611static const SchemaQuery Query_for_list_of_enum_values_unquoted = {
612 .catname =
"pg_catalog.pg_enum e, pg_catalog.pg_type t",
613 .selcondition =
"t.oid = e.enumtypid",
614 .result =
"e.enumlabel",
615 .refname =
"t.typname",
616 .refviscondition =
"pg_catalog.pg_type_is_visible(t.oid)",
617 .refnamespace =
"t.typnamespace",
621static const SchemaQuery Query_for_list_of_functions[] = {
623 .min_server_version = 110000,
624 .catname =
"pg_catalog.pg_proc p",
625 .selcondition =
"p.prokind != 'p'",
626 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
627 .namespace =
"p.pronamespace",
628 .result =
"p.proname",
631 .catname =
"pg_catalog.pg_proc p",
632 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
633 .namespace =
"p.pronamespace",
634 .result =
"p.proname",
638static const SchemaQuery Query_for_list_of_procedures[] = {
640 .min_server_version = 110000,
641 .catname =
"pg_catalog.pg_proc p",
642 .selcondition =
"p.prokind = 'p'",
643 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
644 .namespace =
"p.pronamespace",
645 .result =
"p.proname",
653static const SchemaQuery Query_for_list_of_routines = {
654 .catname =
"pg_catalog.pg_proc p",
655 .viscondition =
"pg_catalog.pg_function_is_visible(p.oid)",
656 .namespace =
"p.pronamespace",
657 .result =
"p.proname",
660static const SchemaQuery Query_for_list_of_sequences = {
661 .catname =
"pg_catalog.pg_class c",
662 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_SEQUENCE)
")",
663 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
664 .namespace =
"c.relnamespace",
665 .result =
"c.relname",
668static const SchemaQuery Query_for_list_of_foreign_tables = {
669 .catname =
"pg_catalog.pg_class c",
670 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_FOREIGN_TABLE)
")",
671 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
672 .namespace =
"c.relnamespace",
673 .result =
"c.relname",
676static const SchemaQuery Query_for_list_of_tables = {
677 .catname =
"pg_catalog.pg_class c",
681 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
682 .namespace =
"c.relnamespace",
683 .result =
"c.relname",
686static const SchemaQuery Query_for_list_of_partitioned_tables = {
687 .catname =
"pg_catalog.pg_class c",
688 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_PARTITIONED_TABLE)
")",
689 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
690 .namespace =
"c.relnamespace",
691 .result =
"c.relname",
694static const SchemaQuery Query_for_list_of_tables_for_constraint = {
695 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_constraint con",
696 .selcondition =
"c.oid=con.conrelid and c.relkind IN ("
699 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
700 .namespace =
"c.relnamespace",
701 .result =
"c.relname",
702 .use_distinct =
true,
703 .refname =
"con.conname",
706static const SchemaQuery Query_for_list_of_tables_for_policy = {
707 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_policy p",
708 .selcondition =
"c.oid=p.polrelid",
709 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
710 .namespace =
"c.relnamespace",
711 .result =
"c.relname",
712 .use_distinct =
true,
713 .refname =
"p.polname",
716static const SchemaQuery Query_for_list_of_tables_for_rule = {
717 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_rewrite r",
718 .selcondition =
"c.oid=r.ev_class",
719 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
720 .namespace =
"c.relnamespace",
721 .result =
"c.relname",
722 .use_distinct =
true,
723 .refname =
"r.rulename",
726static const SchemaQuery Query_for_list_of_tables_for_trigger = {
727 .catname =
"pg_catalog.pg_class c, pg_catalog.pg_trigger t",
728 .selcondition =
"c.oid=t.tgrelid",
729 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
730 .namespace =
"c.relnamespace",
731 .result =
"c.relname",
732 .use_distinct =
true,
733 .refname =
"t.tgname",
736static const SchemaQuery Query_for_list_of_ts_configurations = {
737 .catname =
"pg_catalog.pg_ts_config c",
738 .viscondition =
"pg_catalog.pg_ts_config_is_visible(c.oid)",
739 .namespace =
"c.cfgnamespace",
740 .result =
"c.cfgname",
743static const SchemaQuery Query_for_list_of_ts_dictionaries = {
744 .catname =
"pg_catalog.pg_ts_dict d",
745 .viscondition =
"pg_catalog.pg_ts_dict_is_visible(d.oid)",
746 .namespace =
"d.dictnamespace",
747 .result =
"d.dictname",
750static const SchemaQuery Query_for_list_of_ts_parsers = {
751 .catname =
"pg_catalog.pg_ts_parser p",
752 .viscondition =
"pg_catalog.pg_ts_parser_is_visible(p.oid)",
753 .namespace =
"p.prsnamespace",
754 .result =
"p.prsname",
757static const SchemaQuery Query_for_list_of_ts_templates = {
758 .catname =
"pg_catalog.pg_ts_template t",
759 .viscondition =
"pg_catalog.pg_ts_template_is_visible(t.oid)",
760 .namespace =
"t.tmplnamespace",
761 .result =
"t.tmplname",
764static const SchemaQuery Query_for_list_of_views = {
765 .catname =
"pg_catalog.pg_class c",
766 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_VIEW)
")",
767 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
768 .namespace =
"c.relnamespace",
769 .result =
"c.relname",
772static const SchemaQuery Query_for_list_of_matviews = {
773 .catname =
"pg_catalog.pg_class c",
774 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_MATVIEW)
")",
775 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
776 .namespace =
"c.relnamespace",
777 .result =
"c.relname",
780static const SchemaQuery Query_for_list_of_indexes = {
781 .catname =
"pg_catalog.pg_class c",
785 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
786 .namespace =
"c.relnamespace",
787 .result =
"c.relname",
790static const SchemaQuery Query_for_list_of_partitioned_indexes = {
791 .catname =
"pg_catalog.pg_class c",
792 .selcondition =
"c.relkind = " CppAsString2(RELKIND_PARTITIONED_INDEX),
793 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
794 .namespace =
"c.relnamespace",
795 .result =
"c.relname",
800static const SchemaQuery Query_for_list_of_relations = {
801 .catname =
"pg_catalog.pg_class c",
802 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
803 .namespace =
"c.relnamespace",
804 .result =
"c.relname",
808static const SchemaQuery Query_for_list_of_partitioned_relations = {
809 .catname =
"pg_catalog.pg_class c",
810 .selcondition =
"c.relkind IN (" CppAsString2(RELKIND_PARTITIONED_TABLE)
812 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
813 .namespace =
"c.relnamespace",
814 .result =
"c.relname",
817static const SchemaQuery Query_for_list_of_operator_families = {
818 .catname =
"pg_catalog.pg_opfamily c",
819 .viscondition =
"pg_catalog.pg_opfamily_is_visible(c.oid)",
820 .namespace =
"c.opfnamespace",
821 .result =
"c.opfname",
825static const SchemaQuery Query_for_list_of_updatables = {
826 .catname =
"pg_catalog.pg_class c",
832 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
833 .namespace =
"c.relnamespace",
834 .result =
"c.relname",
838static const SchemaQuery Query_for_list_of_mergetargets = {
839 .catname =
"pg_catalog.pg_class c",
844 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
845 .namespace =
"c.relnamespace",
846 .result =
"c.relname",
850static const SchemaQuery Query_for_list_of_selectables = {
851 .catname =
"pg_catalog.pg_class c",
859 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
860 .namespace =
"c.relnamespace",
861 .result =
"c.relname",
865static const SchemaQuery Query_for_list_of_truncatables = {
866 .catname =
"pg_catalog.pg_class c",
871 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
872 .namespace =
"c.relnamespace",
873 .result =
"c.relname",
877#define Query_for_list_of_grantables Query_for_list_of_selectables
880static const SchemaQuery Query_for_list_of_analyzables = {
881 .catname =
"pg_catalog.pg_class c",
887 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
888 .namespace =
"c.relnamespace",
889 .result =
"c.relname",
893static const SchemaQuery Query_for_list_of_indexables = {
894 .catname =
"pg_catalog.pg_class c",
899 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
900 .namespace =
"c.relnamespace",
901 .result =
"c.relname",
908#define Query_for_list_of_vacuumables Query_for_list_of_indexables
911static const SchemaQuery Query_for_list_of_clusterables = {
912 .catname =
"pg_catalog.pg_class c",
917 .viscondition =
"pg_catalog.pg_table_is_visible(c.oid)",
918 .namespace =
"c.relnamespace",
919 .result =
"c.relname",
922static const SchemaQuery Query_for_list_of_constraints_with_schema = {
923 .catname =
"pg_catalog.pg_constraint c",
924 .selcondition =
"c.conrelid <> 0",
925 .namespace =
"c.connamespace",
926 .result =
"c.conname",
929static const SchemaQuery Query_for_list_of_statistics = {
930 .catname =
"pg_catalog.pg_statistic_ext s",
931 .viscondition =
"pg_catalog.pg_statistics_obj_is_visible(s.oid)",
932 .namespace =
"s.stxnamespace",
933 .result =
"s.stxname",
936static const SchemaQuery Query_for_list_of_collations = {
937 .catname =
"pg_catalog.pg_collation c",
938 .selcondition =
"c.collencoding IN (-1, pg_catalog.pg_char_to_encoding(pg_catalog.getdatabaseencoding()))",
939 .viscondition =
"pg_catalog.pg_collation_is_visible(c.oid)",
940 .namespace =
"c.collnamespace",
941 .result =
"c.collname",
944static const SchemaQuery Query_for_partition_of_table = {
945 .catname =
"pg_catalog.pg_class c1, pg_catalog.pg_class c2, pg_catalog.pg_inherits i",
946 .selcondition =
"c1.oid=i.inhparent and i.inhrelid=c2.oid and c2.relispartition",
947 .viscondition =
"pg_catalog.pg_table_is_visible(c2.oid)",
948 .namespace =
"c2.relnamespace",
949 .result =
"c2.relname",
950 .refname =
"c1.relname",
951 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
952 .refnamespace =
"c1.relnamespace",
955static const SchemaQuery Query_for_rule_of_table = {
956 .catname =
"pg_catalog.pg_rewrite r, pg_catalog.pg_class c1",
957 .selcondition =
"r.ev_class=c1.oid",
958 .result =
"r.rulename",
959 .refname =
"c1.relname",
960 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
961 .refnamespace =
"c1.relnamespace",
964static const SchemaQuery Query_for_trigger_of_table = {
965 .catname =
"pg_catalog.pg_trigger t, pg_catalog.pg_class c1",
966 .selcondition =
"t.tgrelid=c1.oid and not t.tgisinternal",
967 .result =
"t.tgname",
968 .refname =
"c1.relname",
969 .refviscondition =
"pg_catalog.pg_table_is_visible(c1.oid)",
970 .refnamespace =
"c1.relnamespace",
993#define Query_for_list_of_template_databases \
995" FROM pg_catalog.pg_database d "\
996" WHERE d.datname LIKE '%s' "\
997" AND (d.datistemplate OR pg_catalog.pg_has_role(d.datdba, 'USAGE'))"
999#define Query_for_list_of_databases \
1000"SELECT datname FROM pg_catalog.pg_database "\
1001" WHERE datname LIKE '%s'"
1003#define Query_for_list_of_database_vars \
1004"SELECT conf FROM ("\
1005" SELECT setdatabase, pg_catalog.split_part(unnest(setconfig),'=',1) conf"\
1006" FROM pg_db_role_setting "\
1007" ) s, pg_database d "\
1008" WHERE s.setdatabase = d.oid "\
1009" AND conf LIKE '%s'"\
1010" AND d.datname LIKE '%s'"
1012#define Query_for_list_of_tablespaces \
1013"SELECT spcname FROM pg_catalog.pg_tablespace "\
1014" WHERE spcname LIKE '%s'"
1016#define Query_for_list_of_encodings \
1017" SELECT DISTINCT pg_catalog.pg_encoding_to_char(conforencoding) "\
1018" FROM pg_catalog.pg_conversion "\
1019" WHERE pg_catalog.pg_encoding_to_char(conforencoding) LIKE pg_catalog.upper('%s')"
1021#define Query_for_list_of_languages \
1023" FROM pg_catalog.pg_language "\
1024" WHERE lanname != 'internal' "\
1025" AND lanname LIKE '%s'"
1027#define Query_for_list_of_schemas \
1028"SELECT nspname FROM pg_catalog.pg_namespace "\
1029" WHERE nspname LIKE '%s'"
1032#define Query_for_list_of_alter_system_set_vars \
1033"SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1034" WHERE context != 'internal' "\
1035" AND pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1037#define Query_for_list_of_set_vars \
1038"SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1039" WHERE context IN ('user', 'superuser') "\
1040" AND pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1042#define Query_for_list_of_show_vars \
1043"SELECT pg_catalog.lower(name) FROM pg_catalog.pg_settings "\
1044" WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1046#define Query_for_list_of_roles \
1048" FROM pg_catalog.pg_roles "\
1049" WHERE rolname LIKE '%s'"
1052#define Keywords_for_list_of_owner_roles \
1053"CURRENT_ROLE", "CURRENT_USER", "SESSION_USER"
1056#define Keywords_for_list_of_grant_roles \
1057Keywords_for_list_of_owner_roles, "PUBLIC"
1059#define Query_for_all_table_constraints \
1061" FROM pg_catalog.pg_constraint c "\
1062" WHERE c.conrelid <> 0 "\
1063" and conname LIKE '%s'"
1065#define Query_for_list_of_fdws \
1067" FROM pg_catalog.pg_foreign_data_wrapper "\
1068" WHERE fdwname LIKE '%s'"
1070#define Query_for_list_of_servers \
1072" FROM pg_catalog.pg_foreign_server "\
1073" WHERE srvname LIKE '%s'"
1075#define Query_for_list_of_user_mappings \
1077" FROM pg_catalog.pg_user_mappings "\
1078" WHERE usename LIKE '%s'"
1080#define Query_for_list_of_user_vars \
1081" SELECT pg_catalog.split_part(pg_catalog.unnest(rolconfig),'=',1) "\
1082" FROM pg_catalog.pg_roles "\
1083" WHERE rolname LIKE '%s'"
1085#define Query_for_list_of_access_methods \
1087" FROM pg_catalog.pg_am "\
1088" WHERE amname LIKE '%s'"
1090#define Query_for_list_of_index_access_methods \
1092" FROM pg_catalog.pg_am "\
1093" WHERE amname LIKE '%s' AND "\
1094" amtype=" CppAsString2(AMTYPE_INDEX)
1096#define Query_for_list_of_table_access_methods \
1098" FROM pg_catalog.pg_am "\
1099" WHERE amname LIKE '%s' AND "\
1100" amtype=" CppAsString2(AMTYPE_TABLE)
1102#define Query_for_list_of_extensions \
1104" FROM pg_catalog.pg_extension "\
1105" WHERE extname LIKE '%s'"
1107#define Query_for_list_of_available_extensions \
1109" FROM pg_catalog.pg_available_extensions "\
1110" WHERE name LIKE '%s' AND installed_version IS NULL"
1112#define Query_for_list_of_available_extension_versions \
1114" FROM pg_catalog.pg_available_extension_versions "\
1115" WHERE version LIKE '%s' AND name='%s'"
1117#define Query_for_list_of_prepared_statements \
1119" FROM pg_catalog.pg_prepared_statements "\
1120" WHERE name LIKE '%s'"
1122#define Query_for_list_of_event_triggers \
1124" FROM pg_catalog.pg_event_trigger "\
1125" WHERE evtname LIKE '%s'"
1127#define Query_for_list_of_tablesample_methods \
1129" FROM pg_catalog.pg_proc "\
1130" WHERE prorettype = 'pg_catalog.tsm_handler'::pg_catalog.regtype AND "\
1131" proargtypes[0] = 'pg_catalog.internal'::pg_catalog.regtype AND "\
1134#define Query_for_list_of_policies \
1136" FROM pg_catalog.pg_policy "\
1137" WHERE polname LIKE '%s'"
1139#define Query_for_values_of_enum_GUC \
1140" SELECT val FROM ( "\
1141" SELECT name, pg_catalog.unnest(enumvals) AS val "\
1142" FROM pg_catalog.pg_settings "\
1144" WHERE val LIKE '%s'"\
1145" and pg_catalog.lower(name)=pg_catalog.lower('%s')"
1147#define Query_for_list_of_channels \
1149" FROM pg_catalog.pg_listening_channels() AS channel "\
1150" WHERE channel LIKE '%s'"
1152#define Query_for_list_of_cursors \
1154" FROM pg_catalog.pg_cursors "\
1155" WHERE name LIKE '%s'"
1157#define Query_for_list_of_timezone_names_unquoted \
1159" FROM pg_catalog.pg_timezone_names() "\
1160" WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1162#define Query_for_list_of_timezone_names_quoted_out \
1163"SELECT pg_catalog.quote_literal(name) AS name "\
1164" FROM pg_catalog.pg_timezone_names() "\
1165" WHERE pg_catalog.lower(name) LIKE pg_catalog.lower('%s')"
1167#define Query_for_list_of_timezone_names_quoted_in \
1168"SELECT pg_catalog.quote_literal(name) AS name "\
1169" FROM pg_catalog.pg_timezone_names() "\
1170" WHERE pg_catalog.quote_literal(pg_catalog.lower(name)) LIKE pg_catalog.lower('%s')"
1173#define Privilege_options_of_grant_and_revoke \
1174"SELECT", "INSERT", "UPDATE", "DELETE", "TRUNCATE", "REFERENCES", "TRIGGER", \
1175"CREATE", "CONNECT", "TEMPORARY", "EXECUTE", "USAGE", "SET", "ALTER SYSTEM", \
1179#define Alter_procedure_options \
1180"DEPENDS ON EXTENSION", "EXTERNAL SECURITY", "NO DEPENDS ON EXTENSION", \
1181"OWNER TO", "RENAME TO", "RESET", "SECURITY", "SET"
1184#define Alter_routine_options \
1185Alter_procedure_options, "COST", "IMMUTABLE", "LEAKPROOF", "NOT LEAKPROOF", \
1186"PARALLEL", "ROWS", "STABLE", "VOLATILE"
1189#define Alter_function_options \
1190Alter_routine_options, "CALLED ON NULL INPUT", "RETURNS NULL ON NULL INPUT", \
1199static const VersionedQuery Query_for_list_of_publications[] = {
1202 " FROM pg_catalog.pg_publication "
1203 " WHERE pubname LIKE '%s'"
1208static const VersionedQuery Query_for_list_of_subscriptions[] = {
1210 " SELECT s.subname "
1211 " FROM pg_catalog.pg_subscription s, pg_catalog.pg_database d "
1212 " WHERE s.subname LIKE '%s' "
1213 " AND d.datname = pg_catalog.current_database() "
1214 " AND s.subdbid = d.oid"
1220static const char *
const sql_commands[] = {
1221 "ABORT",
"ALTER",
"ANALYZE",
"BEGIN",
"CALL",
"CHECKPOINT",
"CLOSE",
"CLUSTER",
1222 "COMMENT",
"COMMIT",
"COPY",
"CREATE",
"DEALLOCATE",
"DECLARE",
1223 "DELETE FROM",
"DISCARD",
"DO",
"DROP",
"END",
"EXECUTE",
"EXPLAIN",
1224 "FETCH",
"GRANT",
"IMPORT FOREIGN SCHEMA",
"INSERT INTO",
"LISTEN",
"LOAD",
"LOCK",
1225 "MERGE INTO",
"MOVE",
"NOTIFY",
"PREPARE",
1226 "REASSIGN",
"REFRESH MATERIALIZED VIEW",
"REINDEX",
"RELEASE",
1227 "RESET",
"REVOKE",
"ROLLBACK",
1228 "SAVEPOINT",
"SECURITY LABEL",
"SELECT",
"SET",
"SHOW",
"START",
1229 "TABLE",
"TRUNCATE",
"UNLISTEN",
"UPDATE",
"VACUUM",
"VALUES",
"WITH",
1243 const VersionedQuery *vquery;
1244 const SchemaQuery *squery;
1249#define THING_NO_CREATE (1 << 0)
1250#define THING_NO_DROP (1 << 1)
1251#define THING_NO_ALTER (1 << 2)
1252#define THING_NO_SHOW (THING_NO_CREATE | THING_NO_DROP | THING_NO_ALTER)
1255static const char *
const Keywords_for_user_thing[] = {
1260static const pgsql_thing_t words_after_create[] = {
1261 {
"ACCESS METHOD", NULL, NULL, NULL, NULL, THING_NO_ALTER},
1262 {
"AGGREGATE", NULL, NULL, Query_for_list_of_aggregates},
1263 {
"CAST", NULL, NULL, NULL},
1265 {
"COLLATION", NULL, NULL, &Query_for_list_of_collations},
1271 {
"CONFIGURATION", NULL, NULL, &Query_for_list_of_ts_configurations, NULL, THING_NO_SHOW},
1272 {
"CONVERSION",
"SELECT conname FROM pg_catalog.pg_conversion WHERE conname LIKE '%s'"},
1273 {
"DATABASE", Query_for_list_of_databases},
1274 {
"DEFAULT PRIVILEGES", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1275 {
"DICTIONARY", NULL, NULL, &Query_for_list_of_ts_dictionaries, NULL, THING_NO_SHOW},
1276 {
"DOMAIN", NULL, NULL, &Query_for_list_of_domains},
1277 {
"EVENT TRIGGER", NULL, NULL, NULL},
1278 {
"EXTENSION", Query_for_list_of_extensions},
1279 {
"FOREIGN DATA WRAPPER", NULL, NULL, NULL},
1280 {
"FOREIGN TABLE", NULL, NULL, NULL},
1281 {
"FUNCTION", NULL, NULL, Query_for_list_of_functions},
1282 {
"GROUP", Query_for_list_of_roles},
1283 {
"INDEX", NULL, NULL, &Query_for_list_of_indexes},
1284 {
"LANGUAGE", Query_for_list_of_languages},
1285 {
"LARGE OBJECT", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1286 {
"MATERIALIZED VIEW", NULL, NULL, &Query_for_list_of_matviews},
1287 {
"OPERATOR", NULL, NULL, NULL},
1289 {
"OR REPLACE", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1290 {
"OWNED", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_ALTER},
1291 {
"PARSER", NULL, NULL, &Query_for_list_of_ts_parsers, NULL, THING_NO_SHOW},
1292 {
"POLICY", NULL, NULL, NULL},
1293 {
"PROCEDURE", NULL, NULL, Query_for_list_of_procedures},
1294 {
"PUBLICATION", NULL, Query_for_list_of_publications},
1295 {
"ROLE", Query_for_list_of_roles},
1296 {
"ROUTINE", NULL, NULL, &Query_for_list_of_routines, NULL, THING_NO_CREATE},
1297 {
"RULE",
"SELECT rulename FROM pg_catalog.pg_rules WHERE rulename LIKE '%s'"},
1298 {
"SCHEMA", Query_for_list_of_schemas},
1299 {
"SEQUENCE", NULL, NULL, &Query_for_list_of_sequences},
1300 {
"SERVER", Query_for_list_of_servers},
1301 {
"STATISTICS", NULL, NULL, &Query_for_list_of_statistics},
1302 {
"SUBSCRIPTION", NULL, Query_for_list_of_subscriptions},
1303 {
"SYSTEM", NULL, NULL, NULL, NULL, THING_NO_CREATE | THING_NO_DROP},
1304 {
"TABLE", NULL, NULL, &Query_for_list_of_tables},
1305 {
"TABLESPACE", Query_for_list_of_tablespaces},
1306 {
"TEMP", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1308 {
"TEMPLATE", NULL, NULL, &Query_for_list_of_ts_templates, NULL, THING_NO_SHOW},
1309 {
"TEMPORARY", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1311 {
"TEXT SEARCH", NULL, NULL, NULL},
1312 {
"TRANSFORM", NULL, NULL, NULL, NULL, THING_NO_ALTER},
1313 {
"TRIGGER",
"SELECT tgname FROM pg_catalog.pg_trigger WHERE tgname LIKE '%s' AND NOT tgisinternal"},
1314 {
"TYPE", NULL, NULL, &Query_for_list_of_datatypes},
1315 {
"UNIQUE", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1317 {
"UNLOGGED", NULL, NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER},
1319 {
"USER", Query_for_list_of_roles, NULL, NULL, Keywords_for_user_thing},
1320 {
"USER MAPPING FOR", NULL, NULL, NULL},
1321 {
"VIEW", NULL, NULL, &Query_for_list_of_views},
1343#define MatchAny NULL
1344#define MatchAnyExcept(pattern) ("!" pattern)
1351 enum TCPatternKind kind;
1353 const char *
const *words;
1357#define TCPAT(id, kind, ...) \
1358 { (id), (kind), VA_ARGS_NARGS(__VA_ARGS__), \
1359 (const char * const []) { __VA_ARGS__ } }
1361#ifdef SWITCH_CONVERSION_APPLIED
1363static const TCPattern tcpatterns[] =
1371static const char *
const table_storage_parameters[] = {
1372 "autovacuum_analyze_scale_factor",
1373 "autovacuum_analyze_threshold",
1374 "autovacuum_enabled",
1375 "autovacuum_freeze_max_age",
1376 "autovacuum_freeze_min_age",
1377 "autovacuum_freeze_table_age",
1378 "autovacuum_multixact_freeze_max_age",
1379 "autovacuum_multixact_freeze_min_age",
1380 "autovacuum_multixact_freeze_table_age",
1381 "autovacuum_vacuum_cost_delay",
1382 "autovacuum_vacuum_cost_limit",
1383 "autovacuum_vacuum_insert_scale_factor",
1384 "autovacuum_vacuum_insert_threshold",
1385 "autovacuum_vacuum_max_threshold",
1386 "autovacuum_vacuum_scale_factor",
1387 "autovacuum_vacuum_threshold",
1389 "log_autovacuum_min_duration",
1391 "toast.autovacuum_enabled",
1392 "toast.autovacuum_freeze_max_age",
1393 "toast.autovacuum_freeze_min_age",
1394 "toast.autovacuum_freeze_table_age",
1395 "toast.autovacuum_multixact_freeze_max_age",
1396 "toast.autovacuum_multixact_freeze_min_age",
1397 "toast.autovacuum_multixact_freeze_table_age",
1398 "toast.autovacuum_vacuum_cost_delay",
1399 "toast.autovacuum_vacuum_cost_limit",
1400 "toast.autovacuum_vacuum_insert_scale_factor",
1401 "toast.autovacuum_vacuum_insert_threshold",
1402 "toast.autovacuum_vacuum_max_threshold",
1403 "toast.autovacuum_vacuum_scale_factor",
1404 "toast.autovacuum_vacuum_threshold",
1405 "toast.log_autovacuum_min_duration",
1406 "toast.vacuum_index_cleanup",
1407 "toast.vacuum_max_eager_freeze_failure_rate",
1408 "toast.vacuum_truncate",
1409 "toast_tuple_target",
1410 "user_catalog_table",
1411 "vacuum_index_cleanup",
1412 "vacuum_max_eager_freeze_failure_rate",
1418static const char *
const view_optional_parameters[] = {
1426static char **psql_completion(
const char *
text,
int start,
int end);
1427static char **match_previous_words(
int pattern_id,
1429 char **previous_words,
1430 int previous_words_count);
1431static char *create_command_generator(
const char *
text,
int state);
1432static char *drop_command_generator(
const char *
text,
int state);
1433static char *alter_command_generator(
const char *
text,
int state);
1434static char *complete_from_query(
const char *
text,
int state);
1435static char *complete_from_versioned_query(
const char *
text,
int state);
1436static char *complete_from_schema_query(
const char *
text,
int state);
1437static char *complete_from_versioned_schema_query(
const char *
text,
int state);
1438static char *_complete_from_query(
const char *simple_query,
1439 const SchemaQuery *schema_query,
1443static void set_completion_reference(
const char *
word);
1444static void set_completion_reference_verbatim(
const char *
word);
1445static char *complete_from_list(
const char *
text,
int state);
1446static char *complete_from_const(
const char *
text,
int state);
1447static void append_variable_names(
char ***varnames,
int *nvars,
1448 int *maxvars,
const char *varname,
1449 const char *prefix,
const char *suffix);
1450static char **complete_from_variables(
const char *
text,
1451 const char *prefix,
const char *suffix,
bool need_value);
1452static char *complete_from_files(
const char *
text,
int state);
1454static char *pg_strdup_keyword_case(
const char *s,
const char *ref);
1456static char *make_like_pattern(
const char *
word);
1457static void parse_identifier(
const char *
ident,
1458 char **schemaname,
char **objectname,
1459 bool *schemaquoted,
bool *objectquoted);
1460static char *requote_identifier(
const char *schemaname,
const char *objectname,
1461 bool quote_schema,
bool quote_object);
1462static bool identifier_needs_quotes(
const char *
ident);
1463static PGresult *exec_query(
const char *query);
1465static char **get_previous_words(
int point,
char **buffer,
int *nwords);
1467static char *get_guctype(
const char *varname);
1469#ifdef USE_FILENAME_QUOTING_FUNCTIONS
1470static char *quote_file_name(
char *fname,
int match_type,
char *quote_pointer);
1471static char *dequote_file_name(
char *fname,
int quote_char);
1482 rl_attempted_completion_function = psql_completion;
1484#ifdef USE_FILENAME_QUOTING_FUNCTIONS
1485 rl_filename_quoting_function = quote_file_name;
1486 rl_filename_dequoting_function = dequote_file_name;
1489 rl_basic_word_break_characters = WORD_BREAKS;
1498 rl_completer_quote_characters =
"'";
1506#ifdef HAVE_RL_FILENAME_QUOTE_CHARACTERS
1508 unsigned char *fqc = (
unsigned char *)
pg_malloc(256);
1510 for (
int i = 0;
i < 255;
i++)
1511 fqc[
i] = (
unsigned char) (
i + 1);
1513 rl_filename_quote_characters = (
const char *) fqc;
1517 completion_max_records = 1000;
1541word_matches(
const char *pattern,
1543 bool case_sensitive)
1547#define cimatch(s1, s2, n) \
1548 (case_sensitive ? strncmp(s1, s2, n) == 0 : pg_strncasecmp(s1, s2, n) == 0)
1551 if (pattern == NULL)
1555 if (*pattern ==
'!')
1556 return !word_matches(pattern + 1,
word, case_sensitive);
1559 wordlen = strlen(
word);
1562 const char *star = NULL;
1567 while (*
c !=
'\0' && *
c !=
'|')
1577 size_t beforelen = star - pattern,
1578 afterlen =
c - star - 1;
1580 if (wordlen >= (beforelen + afterlen) &&
1581 cimatch(
word, pattern, beforelen) &&
1582 cimatch(
word + wordlen - afterlen, star + 1, afterlen))
1588 if (wordlen == (
c - pattern) &&
1589 cimatch(
word, pattern, wordlen))
1610TailMatchesArray(
bool case_sensitive,
1611 int previous_words_count,
char **previous_words,
1612 int narg,
const char *
const *
args)
1614 if (previous_words_count < narg)
1617 for (
int argno = 0; argno < narg; argno++)
1619 const char *
arg =
args[argno];
1621 if (!word_matches(
arg, previous_words[narg - argno - 1],
1633TailMatchesImpl(
bool case_sensitive,
1634 int previous_words_count,
char **previous_words,
1637 const char *argarray[64];
1642 if (previous_words_count < narg)
1645 va_start(
args, narg);
1646 for (
int argno = 0; argno < narg; argno++)
1647 argarray[argno] = va_arg(
args,
const char *);
1650 return TailMatchesArray(case_sensitive,
1651 previous_words_count, previous_words,
1660HeadMatchesArray(
bool case_sensitive,
1661 int previous_words_count,
char **previous_words,
1662 int narg,
const char *
const *
args)
1664 if (previous_words_count < narg)
1667 for (
int argno = 0; argno < narg; argno++)
1669 const char *
arg =
args[argno];
1671 if (!word_matches(
arg, previous_words[previous_words_count - argno - 1],
1683HeadMatchesImpl(
bool case_sensitive,
1684 int previous_words_count,
char **previous_words,
1687 const char *argarray[64];
1692 if (previous_words_count < narg)
1695 va_start(
args, narg);
1696 for (
int argno = 0; argno < narg; argno++)
1697 argarray[argno] = va_arg(
args,
const char *);
1700 return HeadMatchesArray(case_sensitive,
1701 previous_words_count, previous_words,
1713MatchesArray(
bool case_sensitive,
1714 int previous_words_count,
char **previous_words,
1715 int narg,
const char *
const *
args)
1717 int match_any_pos = -1;
1720 if (previous_words_count < narg - 1)
1724 for (
int argno = 0; argno < narg; argno++)
1726 const char *
arg =
args[argno];
1728 if (
arg != NULL &&
arg[0] ==
'\0')
1730 match_any_pos = argno;
1735 if (match_any_pos < 0)
1738 if (previous_words_count != narg)
1742 if (!HeadMatchesArray(case_sensitive,
1743 previous_words_count, previous_words,
1750 if (!HeadMatchesArray(case_sensitive,
1751 previous_words_count, previous_words,
1752 match_any_pos,
args))
1756 if (!TailMatchesArray(case_sensitive,
1757 previous_words_count, previous_words,
1758 narg - match_any_pos - 1,
1759 args + match_any_pos + 1))
1770MatchesImpl(
bool case_sensitive,
1771 int previous_words_count,
char **previous_words,
1774 const char *argarray[64];
1780 if (previous_words_count < narg - 1)
1783 va_start(
args, narg);
1784 for (
int argno = 0; argno < narg; argno++)
1785 argarray[argno] = va_arg(
args,
const char *);
1788 return MatchesArray(case_sensitive,
1789 previous_words_count, previous_words,
1797ends_with(
const char *s,
char c)
1799 size_t length = strlen(s);
1801 return (length > 0 && s[length - 1] ==
c);
1813psql_completion(
const char *
text,
int start,
int end)
1816 char **matches = NULL;
1822 char **previous_words;
1825 int previous_words_count;
1834#define prev_wd (previous_words[0])
1835#define prev2_wd (previous_words[1])
1836#define prev3_wd (previous_words[2])
1837#define prev4_wd (previous_words[3])
1838#define prev5_wd (previous_words[4])
1839#define prev6_wd (previous_words[5])
1840#define prev7_wd (previous_words[6])
1841#define prev8_wd (previous_words[7])
1842#define prev9_wd (previous_words[8])
1845#define TailMatches(...) \
1846 TailMatchesImpl(false, previous_words_count, previous_words, \
1847 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1850#define TailMatchesCS(...) \
1851 TailMatchesImpl(true, previous_words_count, previous_words, \
1852 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1855#define Matches(...) \
1856 MatchesImpl(false, previous_words_count, previous_words, \
1857 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1860#define MatchesCS(...) \
1861 MatchesImpl(true, previous_words_count, previous_words, \
1862 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1865#define HeadMatches(...) \
1866 HeadMatchesImpl(false, previous_words_count, previous_words, \
1867 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1870#define HeadMatchesCS(...) \
1871 HeadMatchesImpl(true, previous_words_count, previous_words, \
1872 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__)
1875 static const char *
const backslash_commands[] = {
1877 "\\bind",
"\\bind_named",
1878 "\\connect",
"\\conninfo",
"\\C",
"\\cd",
"\\close",
"\\copy",
1879 "\\copyright",
"\\crosstabview",
1880 "\\d",
"\\da",
"\\dA",
"\\dAc",
"\\dAf",
"\\dAo",
"\\dAp",
1881 "\\db",
"\\dc",
"\\dconfig",
"\\dC",
"\\dd",
"\\ddp",
"\\dD",
1882 "\\des",
"\\det",
"\\deu",
"\\dew",
"\\dE",
"\\df",
1883 "\\dF",
"\\dFd",
"\\dFp",
"\\dFt",
"\\dg",
"\\di",
"\\dl",
"\\dL",
1884 "\\dm",
"\\dn",
"\\do",
"\\dO",
"\\dp",
"\\dP",
"\\dPi",
"\\dPt",
1885 "\\drds",
"\\drg",
"\\dRs",
"\\dRp",
"\\ds",
1886 "\\dt",
"\\dT",
"\\dv",
"\\du",
"\\dx",
"\\dX",
"\\dy",
1887 "\\echo",
"\\edit",
"\\ef",
"\\elif",
"\\else",
"\\encoding",
1888 "\\endif",
"\\endpipeline",
"\\errverbose",
"\\ev",
1889 "\\f",
"\\flush",
"\\flushrequest",
1890 "\\g",
"\\gdesc",
"\\getenv",
"\\getresults",
"\\gexec",
"\\gset",
"\\gx",
1892 "\\if",
"\\include",
"\\include_relative",
"\\ir",
1893 "\\list",
"\\lo_import",
"\\lo_export",
"\\lo_list",
"\\lo_unlink",
1895 "\\parse",
"\\password",
"\\print",
"\\prompt",
"\\pset",
1896 "\\qecho",
"\\quit",
1898 "\\s",
"\\sendpipeline",
"\\set",
"\\setenv",
"\\sf",
1899 "\\startpipeline",
"\\sv",
"\\syncpipeline",
1900 "\\t",
"\\T",
"\\timing",
1903 "\\warn",
"\\watch",
"\\write",
1918 completion_last_char = (end >
start) ?
text[end -
start - 1] :
'\0';
1921 rl_completion_append_character =
' ';
1924 completion_charp = NULL;
1925 completion_charpp = NULL;
1926 completion_vquery = NULL;
1927 completion_squery = NULL;
1928 completion_ref_object = NULL;
1929 completion_ref_schema = NULL;
1936 previous_words = get_previous_words(
start,
1938 &previous_words_count);
1941 if (
text[0] ==
'\\')
1942 COMPLETE_WITH_LIST_CS(backslash_commands);
1945 else if (
text[0] ==
':' &&
text[1] !=
':')
1947 if (
text[1] ==
'\'')
1948 matches = complete_from_variables(
text,
":'",
"'",
true);
1949 else if (
text[1] ==
'"')
1950 matches = complete_from_variables(
text,
":\"",
"\"",
true);
1951 else if (
text[1] ==
'{' &&
text[2] ==
'?')
1952 matches = complete_from_variables(
text,
":{?",
"}",
true);
1954 matches = complete_from_variables(
text,
":",
"",
true);
1958 else if (previous_words_count == 0)
1959 COMPLETE_WITH_LIST(sql_commands);
1964#ifdef SWITCH_CONVERSION_APPLIED
1977 for (
int tindx = 0; tindx <
lengthof(tcpatterns); tindx++)
1979 const TCPattern *tcpat = tcpatterns + tindx;
1982 switch (tcpat->kind)
1985 match = MatchesArray(
false,
1986 previous_words_count,
1988 tcpat->nwords, tcpat->words);
1991 match = MatchesArray(
true,
1992 previous_words_count,
1994 tcpat->nwords, tcpat->words);
1997 match = HeadMatchesArray(
false,
1998 previous_words_count,
2000 tcpat->nwords, tcpat->words);
2003 match = HeadMatchesArray(
true,
2004 previous_words_count,
2006 tcpat->nwords, tcpat->words);
2009 match = TailMatchesArray(
false,
2010 previous_words_count,
2012 tcpat->nwords, tcpat->words);
2015 match = TailMatchesArray(
true,
2016 previous_words_count,
2018 tcpat->nwords, tcpat->words);
2023 matches = match_previous_words(tcpat->id,
text,
start, end,
2025 previous_words_count);
2026 if (matches != NULL)
2035 matches = match_previous_words(0,
text,
start, end,
2037 previous_words_count);
2046 if (matches == NULL && previous_words_count > 0)
2048 const pgsql_thing_t *wac;
2050 for (wac = words_after_create; wac->name != NULL; wac++)
2055 COMPLETE_WITH_QUERY_LIST(wac->query,
2057 else if (wac->vquery)
2058 COMPLETE_WITH_VERSIONED_QUERY_LIST(wac->vquery,
2060 else if (wac->squery)
2061 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY_LIST(wac->squery,
2073 if (matches == NULL)
2075 COMPLETE_WITH_CONST(
true,
"");
2077 rl_completion_append_character =
'\0';
2078#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
2079 rl_completion_suppress_quote = 1;
2084 free(previous_words);
2087 free(completion_ref_object);
2088 completion_ref_object = NULL;
2089 free(completion_ref_schema);
2090 completion_ref_schema = NULL;
2135match_previous_words(
int pattern_id,
2137 char **previous_words,
int previous_words_count)
2140 char **matches = NULL;
2153 else if (TailMatches(
"CREATE"))
2156 if (HeadMatches(
"CREATE",
"SCHEMA"))
2157 COMPLETE_WITH(
"TABLE",
"VIEW",
"INDEX",
"SEQUENCE",
"TRIGGER",
2159 "UNIQUE",
"UNLOGGED");
2161 matches = rl_completion_matches(
text, create_command_generator);
2164 else if (TailMatches(
"CREATE",
"OR",
"REPLACE"))
2165 COMPLETE_WITH(
"FUNCTION",
"PROCEDURE",
"LANGUAGE",
"RULE",
"VIEW",
2166 "AGGREGATE",
"TRANSFORM",
"TRIGGER");
2170 else if (Matches(
"DROP"))
2171 matches = rl_completion_matches(
text, drop_command_generator);
2176 else if (Matches(
"ALTER",
"TABLE"))
2177 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
2178 "ALL IN TABLESPACE");
2181 else if (Matches(
"ALTER"))
2182 matches = rl_completion_matches(
text, alter_command_generator);
2184 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny))
2185 COMPLETE_WITH(
"SET TABLESPACE",
"OWNED BY");
2187 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny,
"OWNED",
"BY"))
2188 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
2190 else if (TailMatches(
"ALL",
"IN",
"TABLESPACE", MatchAny,
"OWNED",
"BY", MatchAny))
2191 COMPLETE_WITH(
"SET TABLESPACE");
2193 else if (Matches(
"ALTER",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny))
2196 else if (Matches(
"ALTER",
"AGGREGATE", MatchAny, MatchAny))
2198 if (ends_with(prev_wd,
')'))
2199 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
2201 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
2204 else if (Matches(
"ALTER",
"FUNCTION", MatchAny, MatchAny))
2206 if (ends_with(prev_wd,
')'))
2207 COMPLETE_WITH(Alter_function_options);
2209 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
2212 else if (Matches(
"ALTER",
"PROCEDURE", MatchAny, MatchAny))
2214 if (ends_with(prev_wd,
')'))
2215 COMPLETE_WITH(Alter_procedure_options);
2217 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
2220 else if (Matches(
"ALTER",
"ROUTINE", MatchAny, MatchAny))
2222 if (ends_with(prev_wd,
')'))
2223 COMPLETE_WITH(Alter_routine_options);
2225 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
2228 else if (Matches(
"ALTER",
"FUNCTION|ROUTINE", MatchAny, MatchAny,
"PARALLEL"))
2229 COMPLETE_WITH(
"RESTRICTED",
"SAFE",
"UNSAFE");
2231 else if (Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"SECURITY") ||
2232 Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"EXTERNAL",
"SECURITY"))
2233 COMPLETE_WITH(
"DEFINER",
"INVOKER");
2235 else if (Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"RESET"))
2236 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
2239 else if (Matches(
"ALTER",
"FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny,
"SET"))
2240 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
2244 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny))
2245 COMPLETE_WITH(
"ADD",
"DROP",
"OWNER TO",
"RENAME TO",
"SET");
2247 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD"))
2248 COMPLETE_WITH(
"TABLES IN SCHEMA",
"TABLE");
2249 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE"))
2250 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2251 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE") &&
2252 ends_with(prev_wd,
','))
2253 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2262 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE"))
2264 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE",
"("))
2265 COMPLETE_WITH_ATTR(prev3_wd);
2266 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE") &&
2267 !TailMatches(
"WHERE",
"(*)"))
2268 COMPLETE_WITH(
",",
"WHERE (");
2269 else if (HeadMatches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|SET",
"TABLE"))
2272 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"DROP"))
2273 COMPLETE_WITH(
"TABLES IN SCHEMA",
"TABLE");
2275 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"SET"))
2276 COMPLETE_WITH(
"(",
"TABLES IN SCHEMA",
"TABLE");
2277 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny,
"ADD|DROP|SET",
"TABLES",
"IN",
"SCHEMA"))
2278 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
2279 " AND nspname NOT LIKE E'pg\\\\_%%'",
2282 else if (Matches(
"ALTER",
"PUBLICATION", MatchAny, MatchAnyN,
"SET",
"("))
2283 COMPLETE_WITH(
"publish",
"publish_generated_columns",
"publish_via_partition_root");
2285 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny))
2286 COMPLETE_WITH(
"CONNECTION",
"ENABLE",
"DISABLE",
"OWNER TO",
2287 "RENAME TO",
"REFRESH PUBLICATION",
"SET",
"SKIP (",
2288 "ADD PUBLICATION",
"DROP PUBLICATION");
2290 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"REFRESH",
"PUBLICATION"))
2291 COMPLETE_WITH(
"WITH (");
2293 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"REFRESH",
"PUBLICATION",
"WITH",
"("))
2294 COMPLETE_WITH(
"copy_data");
2296 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny,
"SET"))
2297 COMPLETE_WITH(
"(",
"PUBLICATION");
2299 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"SET",
"("))
2300 COMPLETE_WITH(
"binary",
"disable_on_error",
"failover",
"origin",
2301 "password_required",
"run_as_owner",
"slot_name",
2302 "streaming",
"synchronous_commit",
"two_phase");
2304 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"SKIP",
"("))
2305 COMPLETE_WITH(
"lsn");
2307 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
"SET",
"PUBLICATION"))
2312 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
2313 "ADD|DROP|SET",
"PUBLICATION", MatchAny))
2314 COMPLETE_WITH(
"WITH (");
2316 else if (Matches(
"ALTER",
"SUBSCRIPTION", MatchAny, MatchAnyN,
2317 "ADD|DROP|SET",
"PUBLICATION", MatchAny,
"WITH",
"("))
2318 COMPLETE_WITH(
"copy_data",
"refresh");
2321 else if (Matches(
"ALTER",
"SCHEMA", MatchAny))
2322 COMPLETE_WITH(
"OWNER TO",
"RENAME TO");
2325 else if (Matches(
"ALTER",
"COLLATION", MatchAny))
2326 COMPLETE_WITH(
"OWNER TO",
"REFRESH VERSION",
"RENAME TO",
"SET SCHEMA");
2329 else if (Matches(
"ALTER",
"CONVERSION", MatchAny))
2330 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
2333 else if (Matches(
"ALTER",
"DATABASE", MatchAny))
2334 COMPLETE_WITH(
"RESET",
"SET",
"OWNER TO",
"REFRESH COLLATION VERSION",
"RENAME TO",
2335 "IS_TEMPLATE",
"ALLOW_CONNECTIONS",
2336 "CONNECTION LIMIT");
2339 else if (Matches(
"ALTER",
"DATABASE", MatchAny,
"RESET"))
2341 set_completion_reference(prev2_wd);
2342 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_database_vars,
"ALL");
2346 else if (Matches(
"ALTER",
"DATABASE", MatchAny,
"SET",
"TABLESPACE"))
2347 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
2350 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER"))
2351 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
2354 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER", MatchAny))
2355 COMPLETE_WITH(
"DISABLE",
"ENABLE",
"OWNER TO",
"RENAME TO");
2358 else if (Matches(
"ALTER",
"EVENT",
"TRIGGER", MatchAny,
"ENABLE"))
2359 COMPLETE_WITH(
"REPLICA",
"ALWAYS");
2362 else if (Matches(
"ALTER",
"EXTENSION", MatchAny))
2363 COMPLETE_WITH(
"ADD",
"DROP",
"UPDATE",
"SET SCHEMA");
2366 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP"))
2367 COMPLETE_WITH(
"ACCESS METHOD",
"AGGREGATE",
"CAST",
"COLLATION",
2368 "CONVERSION",
"DOMAIN",
"EVENT TRIGGER",
"FOREIGN",
2369 "FUNCTION",
"MATERIALIZED VIEW",
"OPERATOR",
2370 "LANGUAGE",
"PROCEDURE",
"ROUTINE",
"SCHEMA",
2371 "SEQUENCE",
"SERVER",
"TABLE",
"TEXT SEARCH",
2372 "TRANSFORM FOR",
"TYPE",
"VIEW");
2375 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP",
"FOREIGN"))
2376 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
2379 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP",
"OPERATOR"))
2380 COMPLETE_WITH(
"CLASS",
"FAMILY");
2383 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"ADD|DROP",
"TEXT",
"SEARCH"))
2384 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
2387 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"UPDATE"))
2388 COMPLETE_WITH(
"TO");
2391 else if (Matches(
"ALTER",
"EXTENSION", MatchAny,
"UPDATE",
"TO"))
2393 set_completion_reference(prev3_wd);
2394 COMPLETE_WITH_QUERY(Query_for_list_of_available_extension_versions);
2398 else if (Matches(
"ALTER",
"FOREIGN"))
2399 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
2402 else if (Matches(
"ALTER",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
2403 COMPLETE_WITH(
"HANDLER",
"VALIDATOR",
"NO",
2404 "OPTIONS",
"OWNER TO",
"RENAME TO");
2405 else if (Matches(
"ALTER",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny,
"NO"))
2406 COMPLETE_WITH(
"HANDLER",
"VALIDATOR");
2409 else if (Matches(
"ALTER",
"FOREIGN",
"TABLE", MatchAny))
2410 COMPLETE_WITH(
"ADD",
"ALTER",
"DISABLE TRIGGER",
"DROP",
"ENABLE",
2411 "INHERIT",
"NO INHERIT",
"OPTIONS",
"OWNER TO",
2412 "RENAME",
"SET",
"VALIDATE CONSTRAINT");
2415 else if (Matches(
"ALTER",
"INDEX"))
2416 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
2417 "ALL IN TABLESPACE");
2419 else if (Matches(
"ALTER",
"INDEX", MatchAny))
2420 COMPLETE_WITH(
"ALTER COLUMN",
"OWNER TO",
"RENAME TO",
"SET",
2421 "RESET",
"ATTACH PARTITION",
2422 "DEPENDS ON EXTENSION",
"NO DEPENDS ON EXTENSION");
2423 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ATTACH"))
2424 COMPLETE_WITH(
"PARTITION");
2425 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ATTACH",
"PARTITION"))
2426 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
2428 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER"))
2429 COMPLETE_WITH(
"COLUMN");
2431 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN"))
2433 set_completion_reference(prev3_wd);
2434 COMPLETE_WITH_SCHEMA_QUERY_VERBATIM(Query_for_list_of_attribute_numbers);
2437 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny))
2438 COMPLETE_WITH(
"SET STATISTICS");
2440 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET"))
2441 COMPLETE_WITH(
"STATISTICS");
2443 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STATISTICS"))
2448 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"SET"))
2449 COMPLETE_WITH(
"(",
"TABLESPACE");
2451 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"RESET"))
2454 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"RESET",
"("))
2455 COMPLETE_WITH(
"fillfactor",
2456 "deduplicate_items",
2457 "fastupdate",
"gin_pending_list_limit",
2459 "pages_per_range",
"autosummarize"
2461 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"SET",
"("))
2462 COMPLETE_WITH(
"fillfactor =",
2463 "deduplicate_items =",
2464 "fastupdate =",
"gin_pending_list_limit =",
2466 "pages_per_range =",
"autosummarize ="
2468 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"NO",
"DEPENDS"))
2469 COMPLETE_WITH(
"ON EXTENSION");
2470 else if (Matches(
"ALTER",
"INDEX", MatchAny,
"DEPENDS"))
2471 COMPLETE_WITH(
"ON EXTENSION");
2474 else if (Matches(
"ALTER",
"LANGUAGE", MatchAny))
2475 COMPLETE_WITH(
"OWNER TO",
"RENAME TO");
2478 else if (Matches(
"ALTER",
"LARGE",
"OBJECT", MatchAny))
2479 COMPLETE_WITH(
"OWNER TO");
2482 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW"))
2483 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_matviews,
2484 "ALL IN TABLESPACE");
2487 else if (Matches(
"ALTER",
"USER|ROLE", MatchAny) &&
2488 !TailMatches(
"USER",
"MAPPING"))
2489 COMPLETE_WITH(
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
"CREATEROLE",
2490 "ENCRYPTED PASSWORD",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2491 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2492 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2493 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2494 "VALID UNTIL",
"WITH");
2497 else if (Matches(
"ALTER",
"USER|ROLE", MatchAny,
"RESET"))
2498 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_user_vars,
"ALL");
2501 else if (Matches(
"ALTER",
"USER|ROLE", MatchAny,
"WITH"))
2503 COMPLETE_WITH(
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
"CREATEROLE",
2504 "ENCRYPTED PASSWORD",
"INHERIT",
"LOGIN",
"NOBYPASSRLS",
2505 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
2506 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
2507 "RENAME TO",
"REPLICATION",
"RESET",
"SET",
"SUPERUSER",
2511 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
2512 COMPLETE_WITH(
"FOR",
"GRANT",
"IN SCHEMA",
"REVOKE");
2514 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR"))
2515 COMPLETE_WITH(
"ROLE");
2517 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN"))
2518 COMPLETE_WITH(
"SCHEMA");
2520 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2522 COMPLETE_WITH(
"GRANT",
"REVOKE",
"IN SCHEMA");
2524 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2526 COMPLETE_WITH(
"GRANT",
"REVOKE",
"FOR ROLE");
2528 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2530 COMPLETE_WITH(
"ROLE");
2533 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"FOR",
"ROLE|USER",
2534 MatchAny,
"IN",
"SCHEMA", MatchAny) ||
2535 Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES",
"IN",
"SCHEMA",
2536 MatchAny,
"FOR",
"ROLE|USER", MatchAny))
2537 COMPLETE_WITH(
"GRANT",
"REVOKE");
2539 else if (Matches(
"ALTER",
"DOMAIN", MatchAny))
2540 COMPLETE_WITH(
"ADD",
"DROP",
"OWNER TO",
"RENAME",
"SET",
2541 "VALIDATE CONSTRAINT");
2543 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"DROP"))
2544 COMPLETE_WITH(
"CONSTRAINT",
"DEFAULT",
"NOT NULL");
2546 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"DROP|RENAME|VALIDATE",
"CONSTRAINT"))
2548 set_completion_reference(prev3_wd);
2549 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_type);
2552 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"RENAME"))
2553 COMPLETE_WITH(
"CONSTRAINT",
"TO");
2555 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"RENAME",
"CONSTRAINT", MatchAny))
2556 COMPLETE_WITH(
"TO");
2559 else if (Matches(
"ALTER",
"DOMAIN", MatchAny,
"SET"))
2560 COMPLETE_WITH(
"DEFAULT",
"NOT NULL",
"SCHEMA");
2562 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny))
2563 COMPLETE_WITH(
"AS",
"INCREMENT",
"MINVALUE",
"MAXVALUE",
"RESTART",
2564 "START",
"NO",
"CACHE",
"CYCLE",
"SET",
"OWNED BY",
2565 "OWNER TO",
"RENAME TO");
2567 else if (TailMatches(
"ALTER",
"SEQUENCE", MatchAny,
"AS"))
2568 COMPLETE_WITH_CS(
"smallint",
"integer",
"bigint");
2570 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny,
"NO"))
2571 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
2573 else if (Matches(
"ALTER",
"SEQUENCE", MatchAny,
"SET"))
2574 COMPLETE_WITH(
"SCHEMA",
"LOGGED",
"UNLOGGED");
2576 else if (Matches(
"ALTER",
"SERVER", MatchAny))
2577 COMPLETE_WITH(
"VERSION",
"OPTIONS",
"OWNER TO",
"RENAME TO");
2579 else if (Matches(
"ALTER",
"SERVER", MatchAny,
"VERSION", MatchAny))
2580 COMPLETE_WITH(
"OPTIONS");
2582 else if (Matches(
"ALTER",
"SYSTEM"))
2583 COMPLETE_WITH(
"SET",
"RESET");
2584 else if (Matches(
"ALTER",
"SYSTEM",
"SET|RESET"))
2585 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_alter_system_set_vars,
2587 else if (Matches(
"ALTER",
"SYSTEM",
"SET", MatchAny))
2588 COMPLETE_WITH(
"TO");
2590 else if (Matches(
"ALTER",
"VIEW", MatchAny))
2591 COMPLETE_WITH(
"ALTER COLUMN",
"OWNER TO",
"RENAME",
"RESET",
"SET");
2593 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME"))
2594 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"TO");
2595 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2596 COMPLETE_WITH_ATTR(prev3_wd);
2598 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER", MatchAny) ||
2599 Matches(
"ALTER",
"VIEW", MatchAny,
"ALTER",
"COLUMN", MatchAny))
2600 COMPLETE_WITH(
"SET DEFAULT",
"DROP DEFAULT");
2602 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME", MatchAnyExcept(
"TO")))
2603 COMPLETE_WITH(
"TO");
2605 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RENAME",
"COLUMN", MatchAnyExcept(
"TO")))
2606 COMPLETE_WITH(
"TO");
2608 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"RESET"))
2611 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET"))
2612 COMPLETE_WITH(
"(",
"SCHEMA");
2614 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET|RESET",
"("))
2615 COMPLETE_WITH_LIST(view_optional_parameters);
2616 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET",
"(", MatchAny))
2618 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET",
"(",
"check_option",
"="))
2619 COMPLETE_WITH(
"local",
"cascaded");
2620 else if (Matches(
"ALTER",
"VIEW", MatchAny,
"SET",
"(",
"security_barrier|security_invoker",
"="))
2621 COMPLETE_WITH(
"true",
"false");
2624 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny))
2625 COMPLETE_WITH(
"ALTER COLUMN",
"CLUSTER ON",
"DEPENDS ON EXTENSION",
2626 "NO DEPENDS ON EXTENSION",
"OWNER TO",
"RENAME",
2629 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME"))
2630 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"TO");
2631 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2632 COMPLETE_WITH_ATTR(prev3_wd);
2634 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME", MatchAnyExcept(
"TO")))
2635 COMPLETE_WITH(
"TO");
2637 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"RENAME",
"COLUMN", MatchAnyExcept(
"TO")))
2638 COMPLETE_WITH(
"TO");
2640 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"SET"))
2641 COMPLETE_WITH(
"(",
"ACCESS METHOD",
"SCHEMA",
"TABLESPACE",
"WITHOUT CLUSTER");
2643 else if (Matches(
"ALTER",
"MATERIALIZED",
"VIEW", MatchAny,
"SET",
"ACCESS",
"METHOD"))
2644 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
2647 else if (Matches(
"ALTER",
"POLICY"))
2648 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
2650 else if (Matches(
"ALTER",
"POLICY", MatchAny))
2651 COMPLETE_WITH(
"ON");
2653 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON"))
2655 set_completion_reference(prev2_wd);
2656 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
2659 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny))
2660 COMPLETE_WITH(
"RENAME TO",
"TO",
"USING (",
"WITH CHECK (");
2662 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"TO"))
2663 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
2664 Keywords_for_list_of_grant_roles);
2666 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"USING"))
2669 else if (Matches(
"ALTER",
"POLICY", MatchAny,
"ON", MatchAny,
"WITH",
"CHECK"))
2673 else if (Matches(
"ALTER",
"RULE", MatchAny))
2674 COMPLETE_WITH(
"ON");
2677 else if (Matches(
"ALTER",
"RULE", MatchAny,
"ON"))
2679 set_completion_reference(prev2_wd);
2680 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
2684 else if (Matches(
"ALTER",
"RULE", MatchAny,
"ON", MatchAny))
2685 COMPLETE_WITH(
"RENAME TO");
2688 else if (Matches(
"ALTER",
"STATISTICS", MatchAny))
2689 COMPLETE_WITH(
"OWNER TO",
"RENAME TO",
"SET SCHEMA",
"SET STATISTICS");
2691 else if (Matches(
"ALTER",
"STATISTICS", MatchAny,
"SET"))
2692 COMPLETE_WITH(
"SCHEMA",
"STATISTICS");
2695 else if (Matches(
"ALTER",
"TRIGGER", MatchAny))
2696 COMPLETE_WITH(
"ON");
2698 else if (Matches(
"ALTER",
"TRIGGER", MatchAny,
"ON"))
2700 set_completion_reference(prev2_wd);
2701 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
2705 else if (Matches(
"ALTER",
"TRIGGER", MatchAny,
"ON", MatchAny))
2706 COMPLETE_WITH(
"RENAME TO",
"DEPENDS ON EXTENSION",
2707 "NO DEPENDS ON EXTENSION");
2712 else if (Matches(
"ALTER",
"TABLE", MatchAny))
2713 COMPLETE_WITH(
"ADD",
"ALTER",
"CLUSTER ON",
"DISABLE",
"DROP",
2714 "ENABLE",
"INHERIT",
"NO",
"RENAME",
"RESET",
2715 "OWNER TO",
"SET",
"VALIDATE CONSTRAINT",
2716 "REPLICA IDENTITY",
"ATTACH PARTITION",
2717 "DETACH PARTITION",
"FORCE ROW LEVEL SECURITY",
2720 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD"))
2723 COMPLETE_WITH(
"COLUMN",
"CONSTRAINT",
"CHECK",
"UNIQUE",
"PRIMARY KEY",
2724 "EXCLUDE",
"FOREIGN KEY");
2727 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"COLUMN", MatchAny) ||
2728 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD", MatchAnyExcept(
"COLUMN|CONSTRAINT|CHECK|UNIQUE|PRIMARY|EXCLUDE|FOREIGN")))
2729 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
2731 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny))
2732 COMPLETE_WITH(
"CHECK",
"UNIQUE",
"PRIMARY KEY",
"EXCLUDE",
"FOREIGN KEY");
2734 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"PRIMARY",
"KEY") ||
2735 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"UNIQUE") ||
2736 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
"PRIMARY",
"KEY") ||
2737 Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
"UNIQUE"))
2738 COMPLETE_WITH(
"(",
"USING INDEX");
2740 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"PRIMARY",
"KEY",
"USING",
"INDEX"))
2742 set_completion_reference(prev6_wd);
2743 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2746 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"UNIQUE",
"USING",
"INDEX"))
2748 set_completion_reference(prev5_wd);
2749 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2752 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
2753 "PRIMARY",
"KEY",
"USING",
"INDEX"))
2755 set_completion_reference(prev8_wd);
2756 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2759 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ADD",
"CONSTRAINT", MatchAny,
2760 "UNIQUE",
"USING",
"INDEX"))
2762 set_completion_reference(prev7_wd);
2763 COMPLETE_WITH_SCHEMA_QUERY(Query_for_unique_index_of_table);
2766 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE"))
2767 COMPLETE_WITH(
"ALWAYS",
"REPLICA",
"ROW LEVEL SECURITY",
"RULE",
2769 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"REPLICA|ALWAYS"))
2770 COMPLETE_WITH(
"RULE",
"TRIGGER");
2771 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"RULE"))
2773 set_completion_reference(prev3_wd);
2774 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2776 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE", MatchAny,
"RULE"))
2778 set_completion_reference(prev4_wd);
2779 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2781 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE",
"TRIGGER"))
2783 set_completion_reference(prev3_wd);
2784 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2786 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ENABLE", MatchAny,
"TRIGGER"))
2788 set_completion_reference(prev4_wd);
2789 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2792 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"INHERIT"))
2793 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2795 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"NO"))
2796 COMPLETE_WITH(
"FORCE ROW LEVEL SECURITY",
"INHERIT");
2798 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"NO",
"INHERIT"))
2799 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2801 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE"))
2802 COMPLETE_WITH(
"ROW LEVEL SECURITY",
"RULE",
"TRIGGER");
2803 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE",
"RULE"))
2805 set_completion_reference(prev3_wd);
2806 COMPLETE_WITH_SCHEMA_QUERY(Query_for_rule_of_table);
2808 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DISABLE",
"TRIGGER"))
2810 set_completion_reference(prev3_wd);
2811 COMPLETE_WITH_SCHEMA_QUERY(Query_for_trigger_of_table);
2815 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER"))
2816 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"CONSTRAINT");
2819 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME"))
2820 COMPLETE_WITH_ATTR_PLUS(prev2_wd,
"COLUMN",
"CONSTRAINT",
"TO");
2821 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER|RENAME",
"COLUMN"))
2822 COMPLETE_WITH_ATTR(prev3_wd);
2825 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME", MatchAnyExcept(
"CONSTRAINT|TO")))
2826 COMPLETE_WITH(
"TO");
2829 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RENAME",
"COLUMN|CONSTRAINT", MatchAnyExcept(
"TO")))
2830 COMPLETE_WITH(
"TO");
2833 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DROP"))
2834 COMPLETE_WITH(
"COLUMN",
"CONSTRAINT");
2836 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DROP",
"COLUMN"))
2837 COMPLETE_WITH_ATTR(prev3_wd);
2839 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER|DROP|RENAME",
"CONSTRAINT"))
2841 set_completion_reference(prev3_wd);
2842 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_table);
2845 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"VALIDATE",
"CONSTRAINT"))
2847 set_completion_reference(prev3_wd);
2848 COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_table_not_validated);
2851 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny) ||
2852 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny))
2853 COMPLETE_WITH(
"TYPE",
"SET",
"RESET",
"RESTART",
"ADD",
"DROP");
2855 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD") ||
2856 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD"))
2857 COMPLETE_WITH(
"GENERATED");
2859 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD",
"GENERATED") ||
2860 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD",
"GENERATED"))
2861 COMPLETE_WITH(
"ALWAYS",
"BY DEFAULT");
2863 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD",
"GENERATED",
"ALWAYS") ||
2864 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD",
"GENERATED",
"ALWAYS") ||
2865 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"ADD",
"GENERATED",
"BY",
"DEFAULT") ||
2866 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"ADD",
"GENERATED",
"BY",
"DEFAULT"))
2867 COMPLETE_WITH(
"AS IDENTITY");
2869 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET") ||
2870 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET"))
2871 COMPLETE_WITH(
"(",
"COMPRESSION",
"DATA TYPE",
"DEFAULT",
"EXPRESSION",
"GENERATED",
"NOT NULL",
2872 "STATISTICS",
"STORAGE",
2874 "INCREMENT",
"MINVALUE",
"MAXVALUE",
"START",
"NO",
"CACHE",
"CYCLE");
2876 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"(") ||
2877 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"("))
2878 COMPLETE_WITH(
"n_distinct",
"n_distinct_inherited");
2880 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"COMPRESSION") ||
2881 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"COMPRESSION"))
2882 COMPLETE_WITH(
"DEFAULT",
"PGLZ",
"LZ4");
2884 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"EXPRESSION") ||
2885 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"EXPRESSION"))
2886 COMPLETE_WITH(
"AS");
2888 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"EXPRESSION",
"AS") ||
2889 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"EXPRESSION",
"AS"))
2892 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"GENERATED") ||
2893 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"GENERATED"))
2894 COMPLETE_WITH(
"ALWAYS",
"BY DEFAULT");
2896 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"NO") ||
2897 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"NO"))
2898 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
2900 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STORAGE") ||
2901 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"STORAGE"))
2902 COMPLETE_WITH(
"DEFAULT",
"PLAIN",
"EXTERNAL",
"EXTENDED",
"MAIN");
2904 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"SET",
"STATISTICS") ||
2905 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"SET",
"STATISTICS"))
2910 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER",
"COLUMN", MatchAny,
"DROP") ||
2911 Matches(
"ALTER",
"TABLE", MatchAny,
"ALTER", MatchAny,
"DROP"))
2912 COMPLETE_WITH(
"DEFAULT",
"EXPRESSION",
"IDENTITY",
"NOT NULL");
2913 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"CLUSTER"))
2914 COMPLETE_WITH(
"ON");
2915 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"CLUSTER",
"ON"))
2917 set_completion_reference(prev3_wd);
2918 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
2921 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET"))
2922 COMPLETE_WITH(
"(",
"ACCESS METHOD",
"LOGGED",
"SCHEMA",
2923 "TABLESPACE",
"UNLOGGED",
"WITH",
"WITHOUT");
2929 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"ACCESS",
"METHOD"))
2930 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_table_access_methods,
2937 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"TABLESPACE"))
2938 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
2940 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET",
"WITHOUT"))
2941 COMPLETE_WITH(
"CLUSTER",
"OIDS");
2943 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"RESET"))
2946 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"SET|RESET",
"("))
2947 COMPLETE_WITH_LIST(table_storage_parameters);
2948 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY",
"USING",
"INDEX"))
2950 set_completion_reference(prev5_wd);
2951 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
2953 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY",
"USING"))
2954 COMPLETE_WITH(
"INDEX");
2955 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA",
"IDENTITY"))
2956 COMPLETE_WITH(
"FULL",
"NOTHING",
"DEFAULT",
"USING");
2957 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"REPLICA"))
2958 COMPLETE_WITH(
"IDENTITY");
2964 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"ATTACH",
"PARTITION"))
2965 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
2967 else if (TailMatches(
"ATTACH",
"PARTITION", MatchAny))
2968 COMPLETE_WITH(
"FOR VALUES",
"DEFAULT");
2969 else if (TailMatches(
"FOR",
"VALUES"))
2970 COMPLETE_WITH(
"FROM (",
"IN (",
"WITH (");
2976 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DETACH",
"PARTITION"))
2978 set_completion_reference(prev3_wd);
2979 COMPLETE_WITH_SCHEMA_QUERY(Query_for_partition_of_table);
2981 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"DETACH",
"PARTITION", MatchAny))
2982 COMPLETE_WITH(
"CONCURRENTLY",
"FINALIZE");
2985 else if (Matches(
"ALTER",
"TABLE", MatchAny,
"OF"))
2986 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_composite_datatypes);
2989 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny))
2990 COMPLETE_WITH(
"RENAME TO",
"OWNER TO",
"SET",
"RESET");
2992 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny,
"SET|RESET"))
2995 else if (Matches(
"ALTER",
"TABLESPACE", MatchAny,
"SET|RESET",
"("))
2996 COMPLETE_WITH(
"seq_page_cost",
"random_page_cost",
2997 "effective_io_concurrency",
"maintenance_io_concurrency");
3000 else if (Matches(
"ALTER",
"TEXT",
"SEARCH"))
3001 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3002 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"TEMPLATE|PARSER", MatchAny))
3003 COMPLETE_WITH(
"RENAME TO",
"SET SCHEMA");
3004 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"DICTIONARY", MatchAny))
3005 COMPLETE_WITH(
"(",
"OWNER TO",
"RENAME TO",
"SET SCHEMA");
3006 else if (Matches(
"ALTER",
"TEXT",
"SEARCH",
"CONFIGURATION", MatchAny))
3007 COMPLETE_WITH(
"ADD MAPPING FOR",
"ALTER MAPPING",
3009 "OWNER TO",
"RENAME TO",
"SET SCHEMA");
3012 else if (Matches(
"ALTER",
"TYPE", MatchAny))
3013 COMPLETE_WITH(
"ADD ATTRIBUTE",
"ADD VALUE",
"ALTER ATTRIBUTE",
3015 "OWNER TO",
"RENAME",
"SET SCHEMA",
"SET (");
3017 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ADD"))
3018 COMPLETE_WITH(
"ATTRIBUTE",
"VALUE");
3020 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME"))
3021 COMPLETE_WITH(
"ATTRIBUTE",
"TO",
"VALUE");
3023 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME",
"ATTRIBUTE|VALUE", MatchAny))
3024 COMPLETE_WITH(
"TO");
3026 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME",
"ATTRIBUTE", MatchAny,
"TO", MatchAny))
3027 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3033 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ALTER|DROP|RENAME",
"ATTRIBUTE"))
3034 COMPLETE_WITH_ATTR(prev3_wd);
3036 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ADD",
"ATTRIBUTE", MatchAny))
3037 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3039 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ADD",
"ATTRIBUTE", MatchAny, MatchAny))
3040 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3042 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"DROP",
"ATTRIBUTE", MatchAny))
3043 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3045 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ALTER",
"ATTRIBUTE", MatchAny))
3046 COMPLETE_WITH(
"TYPE");
3048 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"ALTER",
"ATTRIBUTE", MatchAny,
"TYPE", MatchAny))
3049 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
3051 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"RENAME",
"VALUE"))
3052 COMPLETE_WITH_ENUM_VALUE(prev3_wd);
3054 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"SET"))
3055 COMPLETE_WITH(
"(",
"SCHEMA");
3057 else if (Matches(
"ALTER",
"TYPE", MatchAny,
"SET",
"("))
3058 COMPLETE_WITH(
"ANALYZE",
"RECEIVE",
"SEND",
"STORAGE",
"SUBSCRIPT",
3059 "TYPMOD_IN",
"TYPMOD_OUT");
3062 else if (Matches(
"ALTER",
"GROUP", MatchAny))
3063 COMPLETE_WITH(
"ADD USER",
"DROP USER",
"RENAME TO");
3065 else if (Matches(
"ALTER",
"GROUP", MatchAny,
"ADD|DROP"))
3066 COMPLETE_WITH(
"USER");
3068 else if (Matches(
"ALTER",
"GROUP", MatchAny,
"ADD|DROP",
"USER"))
3069 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
3075 else if (Matches(
"ANALYZE"))
3076 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_analyzables,
3077 "(",
"VERBOSE",
"ONLY");
3078 else if (Matches(
"ANALYZE",
"VERBOSE"))
3079 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_analyzables,
3081 else if (HeadMatches(
"ANALYZE",
"(*") &&
3082 !HeadMatches(
"ANALYZE",
"(*)"))
3089 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
3090 COMPLETE_WITH(
"VERBOSE",
"SKIP_LOCKED",
"BUFFER_USAGE_LIMIT");
3091 else if (TailMatches(
"VERBOSE|SKIP_LOCKED"))
3092 COMPLETE_WITH(
"ON",
"OFF");
3094 else if (Matches(
"ANALYZE", MatchAnyN,
"("))
3096 COMPLETE_WITH_ATTR(prev2_wd);
3097 else if (HeadMatches(
"ANALYZE"))
3098 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_analyzables);
3101 else if (Matches(
"BEGIN"))
3102 COMPLETE_WITH(
"WORK",
"TRANSACTION",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
3104 else if (Matches(
"END|ABORT"))
3105 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION");
3107 else if (Matches(
"COMMIT"))
3108 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION",
"PREPARED");
3110 else if (Matches(
"RELEASE"))
3111 COMPLETE_WITH(
"SAVEPOINT");
3113 else if (Matches(
"ROLLBACK"))
3114 COMPLETE_WITH(
"AND",
"WORK",
"TRANSACTION",
"TO SAVEPOINT",
"PREPARED");
3115 else if (Matches(
"ABORT|END|COMMIT|ROLLBACK",
"AND"))
3116 COMPLETE_WITH(
"CHAIN");
3118 else if (Matches(
"CALL"))
3119 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_procedures);
3120 else if (Matches(
"CALL", MatchAny))
3123 else if (Matches(
"CLOSE"))
3124 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
3127 else if (Matches(
"CLUSTER"))
3128 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_clusterables,
3130 else if (Matches(
"CLUSTER",
"VERBOSE") ||
3131 Matches(
"CLUSTER",
"(*)"))
3132 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_clusterables);
3134 else if (Matches(
"CLUSTER", MatchAnyExcept(
"VERBOSE|ON|(|(*)")))
3135 COMPLETE_WITH(
"USING");
3137 else if (Matches(
"CLUSTER",
"VERBOSE|(*)", MatchAny))
3138 COMPLETE_WITH(
"USING");
3140 else if (Matches(
"CLUSTER", MatchAny,
"USING") ||
3141 Matches(
"CLUSTER",
"VERBOSE|(*)", MatchAny,
"USING"))
3143 set_completion_reference(prev2_wd);
3144 COMPLETE_WITH_SCHEMA_QUERY(Query_for_index_of_table);
3146 else if (HeadMatches(
"CLUSTER",
"(*") &&
3147 !HeadMatches(
"CLUSTER",
"(*)"))
3154 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
3155 COMPLETE_WITH(
"VERBOSE");
3159 else if (Matches(
"COMMENT"))
3160 COMPLETE_WITH(
"ON");
3161 else if (Matches(
"COMMENT",
"ON"))
3162 COMPLETE_WITH(
"ACCESS METHOD",
"AGGREGATE",
"CAST",
"COLLATION",
3163 "COLUMN",
"CONSTRAINT",
"CONVERSION",
"DATABASE",
3164 "DOMAIN",
"EXTENSION",
"EVENT TRIGGER",
3165 "FOREIGN DATA WRAPPER",
"FOREIGN TABLE",
3166 "FUNCTION",
"INDEX",
"LANGUAGE",
"LARGE OBJECT",
3167 "MATERIALIZED VIEW",
"OPERATOR",
"POLICY",
3168 "PROCEDURE",
"PROCEDURAL LANGUAGE",
"PUBLICATION",
"ROLE",
3169 "ROUTINE",
"RULE",
"SCHEMA",
"SEQUENCE",
"SERVER",
3170 "STATISTICS",
"SUBSCRIPTION",
"TABLE",
3171 "TABLESPACE",
"TEXT SEARCH",
"TRANSFORM FOR",
3172 "TRIGGER",
"TYPE",
"VIEW");
3173 else if (Matches(
"COMMENT",
"ON",
"ACCESS",
"METHOD"))
3174 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
3175 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT"))
3176 COMPLETE_WITH_QUERY(Query_for_all_table_constraints);
3177 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny))
3178 COMPLETE_WITH(
"ON");
3179 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny,
"ON"))
3181 set_completion_reference(prev2_wd);
3182 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables_for_constraint,
3185 else if (Matches(
"COMMENT",
"ON",
"CONSTRAINT", MatchAny,
"ON",
"DOMAIN"))
3186 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
3187 else if (Matches(
"COMMENT",
"ON",
"EVENT",
"TRIGGER"))
3188 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
3189 else if (Matches(
"COMMENT",
"ON",
"FOREIGN"))
3190 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
3191 else if (Matches(
"COMMENT",
"ON",
"FOREIGN",
"TABLE"))
3192 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
3193 else if (Matches(
"COMMENT",
"ON",
"MATERIALIZED",
"VIEW"))
3194 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
3195 else if (Matches(
"COMMENT",
"ON",
"POLICY"))
3196 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
3197 else if (Matches(
"COMMENT",
"ON",
"POLICY", MatchAny))
3198 COMPLETE_WITH(
"ON");
3199 else if (Matches(
"COMMENT",
"ON",
"POLICY", MatchAny,
"ON"))
3201 set_completion_reference(prev2_wd);
3202 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
3204 else if (Matches(
"COMMENT",
"ON",
"PROCEDURAL",
"LANGUAGE"))
3205 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3206 else if (Matches(
"COMMENT",
"ON",
"RULE", MatchAny))
3207 COMPLETE_WITH(
"ON");
3208 else if (Matches(
"COMMENT",
"ON",
"RULE", MatchAny,
"ON"))
3210 set_completion_reference(prev2_wd);
3211 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
3213 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH"))
3214 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3215 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"CONFIGURATION"))
3216 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_configurations);
3217 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"DICTIONARY"))
3218 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_dictionaries);
3219 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"PARSER"))
3220 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_parsers);
3221 else if (Matches(
"COMMENT",
"ON",
"TEXT",
"SEARCH",
"TEMPLATE"))
3222 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_templates);
3223 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR"))
3224 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3225 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR", MatchAny))
3226 COMPLETE_WITH(
"LANGUAGE");
3227 else if (Matches(
"COMMENT",
"ON",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
3229 set_completion_reference(prev2_wd);
3230 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3232 else if (Matches(
"COMMENT",
"ON",
"TRIGGER", MatchAny))
3233 COMPLETE_WITH(
"ON");
3234 else if (Matches(
"COMMENT",
"ON",
"TRIGGER", MatchAny,
"ON"))
3236 set_completion_reference(prev2_wd);
3237 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
3239 else if (Matches(
"COMMENT",
"ON", MatchAny, MatchAnyExcept(
"IS")) ||
3240 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAnyExcept(
"IS")) ||
3241 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAny, MatchAnyExcept(
"IS")) ||
3242 Matches(
"COMMENT",
"ON", MatchAny, MatchAny, MatchAny, MatchAny, MatchAnyExcept(
"IS")))
3243 COMPLETE_WITH(
"IS");
3251 else if (Matches(
"COPY|\\copy"))
3252 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
"(");
3254 else if (Matches(
"COPY|\\copy",
"("))
3255 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES",
"INSERT INTO",
"UPDATE",
"DELETE FROM",
"MERGE INTO",
"WITH");
3257 else if (Matches(
"COPY|\\copy", MatchAny))
3258 COMPLETE_WITH(
"FROM",
"TO");
3260 else if (Matches(
"COPY", MatchAny,
"FROM|TO"))
3262 completion_charp =
"";
3263 completion_force_quote =
true;
3264 matches = rl_completion_matches(
text, complete_from_files);
3266 else if (Matches(
"\\copy", MatchAny,
"FROM|TO"))
3268 completion_charp =
"";
3269 completion_force_quote =
false;
3270 matches = rl_completion_matches(
text, complete_from_files);
3274 else if (Matches(
"COPY|\\copy", MatchAny,
"TO", MatchAny))
3275 COMPLETE_WITH(
"WITH (");
3278 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM", MatchAny))
3279 COMPLETE_WITH(
"WITH (",
"WHERE");
3282 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO", MatchAny,
"WITH",
"("))
3283 COMPLETE_WITH(
"FORMAT",
"FREEZE",
"DELIMITER",
"NULL",
3284 "HEADER",
"QUOTE",
"ESCAPE",
"FORCE_QUOTE",
3285 "FORCE_NOT_NULL",
"FORCE_NULL",
"ENCODING",
"DEFAULT",
3286 "ON_ERROR",
"LOG_VERBOSITY");
3289 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO", MatchAny,
"WITH",
"(",
"FORMAT"))
3290 COMPLETE_WITH(
"binary",
"csv",
"text");
3293 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO", MatchAny,
"WITH",
"(",
"ON_ERROR"))
3294 COMPLETE_WITH(
"stop",
"ignore");
3297 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM|TO", MatchAny,
"WITH",
"(",
"LOG_VERBOSITY"))
3298 COMPLETE_WITH(
"silent",
"default",
"verbose");
3301 else if (Matches(
"COPY|\\copy", MatchAny,
"FROM", MatchAny,
"WITH", MatchAny))
3302 COMPLETE_WITH(
"WHERE");
3306 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny))
3307 COMPLETE_WITH(
"TYPE");
3309 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny,
"TYPE"))
3310 COMPLETE_WITH(
"INDEX",
"TABLE");
3312 else if (Matches(
"CREATE",
"ACCESS",
"METHOD", MatchAny,
"TYPE", MatchAny))
3313 COMPLETE_WITH(
"HANDLER");
3316 else if (Matches(
"CREATE",
"COLLATION", MatchAny))
3317 COMPLETE_WITH(
"(",
"FROM");
3318 else if (Matches(
"CREATE",
"COLLATION", MatchAny,
"FROM"))
3319 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_collations);
3320 else if (HeadMatches(
"CREATE",
"COLLATION", MatchAny,
"(*"))
3322 if (TailMatches(
"(|*,"))
3323 COMPLETE_WITH(
"LOCALE =",
"LC_COLLATE =",
"LC_CTYPE =",
3324 "PROVIDER =",
"DETERMINISTIC =");
3325 else if (TailMatches(
"PROVIDER",
"="))
3326 COMPLETE_WITH(
"libc",
"icu");
3327 else if (TailMatches(
"DETERMINISTIC",
"="))
3328 COMPLETE_WITH(
"true",
"false");
3332 else if (Matches(
"CREATE",
"DATABASE", MatchAny))
3333 COMPLETE_WITH(
"OWNER",
"TEMPLATE",
"ENCODING",
"TABLESPACE",
3334 "IS_TEMPLATE",
"STRATEGY",
3335 "ALLOW_CONNECTIONS",
"CONNECTION LIMIT",
3336 "LC_COLLATE",
"LC_CTYPE",
"LOCALE",
"OID",
3337 "LOCALE_PROVIDER",
"ICU_LOCALE");
3339 else if (Matches(
"CREATE",
"DATABASE", MatchAny,
"TEMPLATE"))
3340 COMPLETE_WITH_QUERY(Query_for_list_of_template_databases);
3341 else if (Matches(
"CREATE",
"DATABASE", MatchAny,
"STRATEGY"))
3342 COMPLETE_WITH(
"WAL_LOG",
"FILE_COPY");
3345 else if (Matches(
"CREATE",
"DOMAIN", MatchAny))
3346 COMPLETE_WITH(
"AS");
3347 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"AS"))
3348 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3349 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"AS", MatchAny))
3350 COMPLETE_WITH(
"COLLATE",
"DEFAULT",
"CONSTRAINT",
3351 "NOT NULL",
"NULL",
"CHECK (");
3352 else if (Matches(
"CREATE",
"DOMAIN", MatchAny,
"COLLATE"))
3353 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_collations);
3357 else if (Matches(
"CREATE",
"EXTENSION"))
3358 COMPLETE_WITH_QUERY(Query_for_list_of_available_extensions);
3360 else if (Matches(
"CREATE",
"EXTENSION", MatchAny))
3361 COMPLETE_WITH(
"WITH SCHEMA",
"CASCADE",
"VERSION");
3363 else if (Matches(
"CREATE",
"EXTENSION", MatchAny,
"VERSION"))
3365 set_completion_reference(prev2_wd);
3366 COMPLETE_WITH_QUERY(Query_for_list_of_available_extension_versions);
3370 else if (Matches(
"CREATE",
"FOREIGN"))
3371 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
3374 else if (Matches(
"CREATE",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
3375 COMPLETE_WITH(
"HANDLER",
"VALIDATOR",
"OPTIONS");
3378 else if (Matches(
"CREATE",
"FOREIGN",
"TABLE", MatchAny))
3379 COMPLETE_WITH(
"(",
"PARTITION OF");
3383 else if (TailMatches(
"CREATE",
"UNIQUE"))
3384 COMPLETE_WITH(
"INDEX");
3390 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX"))
3391 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
3392 "ON",
"CONCURRENTLY");
3398 else if (TailMatches(
"INDEX|CONCURRENTLY", MatchAny,
"ON") ||
3399 TailMatches(
"INDEX|CONCURRENTLY",
"ON"))
3400 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexables);
3406 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX",
"CONCURRENTLY"))
3407 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
3410 else if (TailMatches(
"CREATE|UNIQUE",
"INDEX", MatchAny) ||
3411 TailMatches(
"CREATE|UNIQUE",
"INDEX",
"CONCURRENTLY", MatchAny))
3412 COMPLETE_WITH(
"ON");
3418 else if (TailMatches(
"INDEX", MatchAny,
"ON", MatchAny) ||
3419 TailMatches(
"INDEX|CONCURRENTLY",
"ON", MatchAny))
3420 COMPLETE_WITH(
"(",
"USING");
3421 else if (TailMatches(
"INDEX", MatchAny,
"ON", MatchAny,
"(") ||
3422 TailMatches(
"INDEX|CONCURRENTLY",
"ON", MatchAny,
"("))
3423 COMPLETE_WITH_ATTR(prev2_wd);
3425 else if (TailMatches(
"ON", MatchAny,
"USING", MatchAny,
"("))
3426 COMPLETE_WITH_ATTR(prev4_wd);
3428 else if (TailMatches(
"INDEX", MatchAny, MatchAny,
"ON", MatchAny,
"USING") ||
3429 TailMatches(
"INDEX", MatchAny,
"ON", MatchAny,
"USING") ||
3430 TailMatches(
"INDEX",
"ON", MatchAny,
"USING"))
3431 COMPLETE_WITH_QUERY(Query_for_list_of_index_access_methods);
3432 else if (TailMatches(
"ON", MatchAny,
"USING", MatchAny) &&
3433 !TailMatches(
"POLICY", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny) &&
3434 !TailMatches(
"FOR", MatchAny, MatchAny, MatchAny))
3438 else if (Matches(
"CREATE",
"OR"))
3439 COMPLETE_WITH(
"REPLACE");
3443 else if (Matches(
"CREATE",
"POLICY", MatchAny))
3444 COMPLETE_WITH(
"ON");
3446 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON"))
3447 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3449 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny))
3450 COMPLETE_WITH(
"AS",
"FOR",
"TO",
"USING (",
"WITH CHECK (");
3452 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS"))
3453 COMPLETE_WITH(
"PERMISSIVE",
"RESTRICTIVE");
3459 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny))
3460 COMPLETE_WITH(
"FOR",
"TO",
"USING",
"WITH CHECK");
3462 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR"))
3463 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
3465 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"INSERT"))
3466 COMPLETE_WITH(
"TO",
"WITH CHECK (");
3468 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"SELECT|DELETE"))
3469 COMPLETE_WITH(
"TO",
"USING (");
3471 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"FOR",
"ALL|UPDATE"))
3472 COMPLETE_WITH(
"TO",
"USING (",
"WITH CHECK (");
3474 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"TO"))
3475 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3476 Keywords_for_list_of_grant_roles);
3478 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"USING"))
3485 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR"))
3486 COMPLETE_WITH(
"ALL",
"SELECT",
"INSERT",
"UPDATE",
"DELETE");
3492 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"INSERT"))
3493 COMPLETE_WITH(
"TO",
"WITH CHECK (");
3499 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"SELECT|DELETE"))
3500 COMPLETE_WITH(
"TO",
"USING (");
3506 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"FOR",
"ALL|UPDATE"))
3507 COMPLETE_WITH(
"TO",
"USING (",
"WITH CHECK (");
3513 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"TO"))
3514 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3515 Keywords_for_list_of_grant_roles);
3521 else if (Matches(
"CREATE",
"POLICY", MatchAny,
"ON", MatchAny,
"AS", MatchAny,
"USING"))
3526 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny))
3527 COMPLETE_WITH(
"FOR TABLE",
"FOR ALL TABLES",
"FOR TABLES IN SCHEMA",
"WITH (");
3528 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR"))
3529 COMPLETE_WITH(
"TABLE",
"ALL TABLES",
"TABLES IN SCHEMA");
3530 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"ALL"))
3531 COMPLETE_WITH(
"TABLES");
3532 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"ALL",
"TABLES"))
3533 COMPLETE_WITH(
"WITH (");
3534 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLES"))
3535 COMPLETE_WITH(
"IN SCHEMA");
3536 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLE", MatchAny) && !ends_with(prev_wd,
','))
3537 COMPLETE_WITH(
"WHERE (",
"WITH (");
3539 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLE"))
3540 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3546 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE"))
3548 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE",
"("))
3549 COMPLETE_WITH_ATTR(prev3_wd);
3550 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny, MatchAnyN,
"WHERE",
"(*)"))
3551 COMPLETE_WITH(
" WITH (");
3556 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLES",
"IN",
"SCHEMA"))
3557 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
3558 " AND nspname NOT LIKE E'pg\\\\_%%'",
3560 else if (Matches(
"CREATE",
"PUBLICATION", MatchAny,
"FOR",
"TABLES",
"IN",
"SCHEMA", MatchAny) && (!ends_with(prev_wd,
',')))
3561 COMPLETE_WITH(
"WITH (");
3563 else if (Matches(
"CREATE",
"PUBLICATION", MatchAnyN,
"WITH",
"("))
3564 COMPLETE_WITH(
"publish",
"publish_generated_columns",
"publish_via_partition_root");
3568 else if (Matches(
"CREATE",
"RULE", MatchAny) ||
3569 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny))
3570 COMPLETE_WITH(
"AS ON");
3572 else if (Matches(
"CREATE",
"RULE", MatchAny,
"AS") ||
3573 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny,
"AS"))
3574 COMPLETE_WITH(
"ON");
3580 else if (Matches(
"CREATE",
"RULE", MatchAny,
"AS",
"ON") ||
3581 Matches(
"CREATE",
"OR",
"REPLACE",
"RULE", MatchAny,
"AS",
"ON"))
3582 COMPLETE_WITH(
"SELECT",
"UPDATE",
"INSERT",
"DELETE");
3584 else if (TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE"))
3585 COMPLETE_WITH(
"TO");
3587 else if (TailMatches(
"AS",
"ON",
"SELECT|UPDATE|INSERT|DELETE",
"TO"))
3588 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3591 else if (Matches(
"CREATE",
"SCHEMA"))
3592 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas,
3594 else if (Matches(
"CREATE",
"SCHEMA",
"AUTHORIZATION") ||
3595 Matches(
"CREATE",
"SCHEMA", MatchAny,
"AUTHORIZATION"))
3596 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
3597 Keywords_for_list_of_owner_roles);
3598 else if (Matches(
"CREATE",
"SCHEMA",
"AUTHORIZATION", MatchAny) ||
3599 Matches(
"CREATE",
"SCHEMA", MatchAny,
"AUTHORIZATION", MatchAny))
3600 COMPLETE_WITH(
"CREATE",
"GRANT");
3601 else if (Matches(
"CREATE",
"SCHEMA", MatchAny))
3602 COMPLETE_WITH(
"AUTHORIZATION",
"CREATE",
"GRANT");
3605 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny) ||
3606 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny))
3607 COMPLETE_WITH(
"AS",
"INCREMENT BY",
"MINVALUE",
"MAXVALUE",
"NO",
3608 "CACHE",
"CYCLE",
"OWNED BY",
"START WITH");
3609 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny,
"AS") ||
3610 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny,
"AS"))
3611 COMPLETE_WITH_CS(
"smallint",
"integer",
"bigint");
3612 else if (TailMatches(
"CREATE",
"SEQUENCE", MatchAny,
"NO") ||
3613 TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"SEQUENCE", MatchAny,
"NO"))
3614 COMPLETE_WITH(
"MINVALUE",
"MAXVALUE",
"CYCLE");
3617 else if (Matches(
"CREATE",
"SERVER", MatchAny))
3618 COMPLETE_WITH(
"TYPE",
"VERSION",
"FOREIGN DATA WRAPPER");
3621 else if (Matches(
"CREATE",
"STATISTICS", MatchAny))
3622 COMPLETE_WITH(
"(",
"ON");
3623 else if (Matches(
"CREATE",
"STATISTICS", MatchAny,
"("))
3624 COMPLETE_WITH(
"ndistinct",
"dependencies",
"mcv");
3625 else if (Matches(
"CREATE",
"STATISTICS", MatchAny,
"(*)"))
3626 COMPLETE_WITH(
"ON");
3627 else if (Matches(
"CREATE",
"STATISTICS", MatchAny, MatchAnyN,
"FROM"))
3628 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3632 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY"))
3633 COMPLETE_WITH(
"SEQUENCE",
"TABLE",
"VIEW");
3635 else if (TailMatches(
"CREATE",
"UNLOGGED"))
3636 COMPLETE_WITH(
"TABLE",
"SEQUENCE");
3638 else if (TailMatches(
"PARTITION",
"BY"))
3639 COMPLETE_WITH(
"RANGE (",
"LIST (",
"HASH (");
3641 else if (TailMatches(
"PARTITION",
"OF"))
3642 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_tables);
3644 else if (TailMatches(
"PARTITION",
"OF", MatchAny))
3645 COMPLETE_WITH(
"FOR VALUES",
"DEFAULT");
3647 else if (TailMatches(
"CREATE",
"TABLE", MatchAny) ||
3648 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny))
3649 COMPLETE_WITH(
"(",
"AS",
"OF",
"PARTITION OF");
3651 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"OF") ||
3652 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"OF"))
3653 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_composite_datatypes);
3655 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"AS") ||
3656 TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)",
"AS") ||
3657 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"AS") ||
3658 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"(*)",
"AS"))
3659 COMPLETE_WITH(
"EXECUTE",
"SELECT",
"TABLE",
"VALUES",
"WITH");
3661 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)") ||
3662 TailMatches(
"CREATE",
"UNLOGGED",
"TABLE", MatchAny,
"(*)"))
3663 COMPLETE_WITH(
"AS",
"INHERITS (",
"PARTITION BY",
"USING",
"TABLESPACE",
"WITH (");
3664 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"TABLE", MatchAny,
"(*)"))
3665 COMPLETE_WITH(
"AS",
"INHERITS (",
"ON COMMIT",
"PARTITION BY",
"USING",
3666 "TABLESPACE",
"WITH (");
3668 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)",
"USING") ||
3669 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"(*)",
"USING"))
3670 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
3672 else if (TailMatches(
"CREATE",
"TABLE", MatchAny,
"(*)",
"WITH",
"(") ||
3673 TailMatches(
"CREATE",
"TEMP|TEMPORARY|UNLOGGED",
"TABLE", MatchAny,
"(*)",
"WITH",
"("))
3674 COMPLETE_WITH_LIST(table_storage_parameters);
3676 else if (TailMatches(
"CREATE",
"TEMP|TEMPORARY",
"TABLE", MatchAny,
"(*)",
"ON",
"COMMIT"))
3677 COMPLETE_WITH(
"DELETE ROWS",
"DROP",
"PRESERVE ROWS");
3680 else if (Matches(
"CREATE",
"TABLESPACE", MatchAny))
3681 COMPLETE_WITH(
"OWNER",
"LOCATION");
3683 else if (Matches(
"CREATE",
"TABLESPACE", MatchAny,
"OWNER", MatchAny))
3684 COMPLETE_WITH(
"LOCATION");
3687 else if (Matches(
"CREATE",
"TEXT",
"SEARCH"))
3688 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
3689 else if (Matches(
"CREATE",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE", MatchAny))
3693 else if (Matches(
"CREATE",
"TRANSFORM") ||
3694 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM"))
3695 COMPLETE_WITH(
"FOR");
3696 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR") ||
3697 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR"))
3698 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3699 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR", MatchAny) ||
3700 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR", MatchAny))
3701 COMPLETE_WITH(
"LANGUAGE");
3702 else if (Matches(
"CREATE",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE") ||
3703 Matches(
"CREATE",
"OR",
"REPLACE",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
3705 set_completion_reference(prev2_wd);
3706 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
3710 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny))
3711 COMPLETE_WITH(
"CONNECTION");
3712 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny,
"CONNECTION", MatchAny))
3713 COMPLETE_WITH(
"PUBLICATION");
3714 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAny,
"CONNECTION",
3715 MatchAny,
"PUBLICATION"))
3719 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAnyN,
"PUBLICATION", MatchAny))
3720 COMPLETE_WITH(
"WITH (");
3722 else if (Matches(
"CREATE",
"SUBSCRIPTION", MatchAnyN,
"WITH",
"("))
3723 COMPLETE_WITH(
"binary",
"connect",
"copy_data",
"create_slot",
3724 "disable_on_error",
"enabled",
"failover",
"origin",
3725 "password_required",
"run_as_owner",
"slot_name",
3726 "streaming",
"synchronous_commit",
"two_phase");
3734 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny) ||
3735 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny))
3736 COMPLETE_WITH(
"BEFORE",
"AFTER",
"INSTEAD OF");
3742 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER") ||
3743 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER"))
3744 COMPLETE_WITH(
"INSERT",
"DELETE",
"UPDATE",
"TRUNCATE");
3746 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF") ||
3747 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF"))
3748 COMPLETE_WITH(
"INSERT",
"DELETE",
"UPDATE");
3754 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny) ||
3755 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny) ||
3756 TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny) ||
3757 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny))
3758 COMPLETE_WITH(
"ON",
"OR");
3765 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny,
"ON") ||
3766 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"BEFORE|AFTER", MatchAny,
"ON"))
3767 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
3773 else if (TailMatches(
"CREATE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny,
"ON") ||
3774 TailMatches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAny,
"INSTEAD",
"OF", MatchAny,
"ON"))
3775 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
3776 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3778 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3782 COMPLETE_WITH(
"NOT DEFERRABLE",
"DEFERRABLE",
"INITIALLY",
3783 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3785 COMPLETE_WITH(
"NOT DEFERRABLE",
"DEFERRABLE",
"INITIALLY",
3786 "REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3788 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3790 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3792 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3793 "INITIALLY",
"IMMEDIATE|DEFERRED") ||
3794 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3795 "INITIALLY",
"IMMEDIATE|DEFERRED"))
3798 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3800 COMPLETE_WITH(
"REFERENCING",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3802 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3804 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3806 COMPLETE_WITH(
"OLD TABLE",
"NEW TABLE");
3807 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3808 "OLD|NEW",
"TABLE") ||
3809 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3810 "OLD|NEW",
"TABLE"))
3811 COMPLETE_WITH(
"AS");
3812 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3813 "REFERENCING",
"OLD",
"TABLE",
"AS", MatchAny) ||
3814 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3815 "REFERENCING",
"OLD",
"TABLE",
"AS", MatchAny) ||
3816 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3817 "REFERENCING",
"OLD",
"TABLE", MatchAny) ||
3818 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3819 "REFERENCING",
"OLD",
"TABLE", MatchAny))
3822 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3824 COMPLETE_WITH(
"NEW TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3826 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3827 "REFERENCING",
"NEW",
"TABLE",
"AS", MatchAny) ||
3828 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3829 "REFERENCING",
"NEW",
"TABLE",
"AS", MatchAny) ||
3830 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3831 "REFERENCING",
"NEW",
"TABLE", MatchAny) ||
3832 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3833 "REFERENCING",
"NEW",
"TABLE", MatchAny))
3836 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3838 COMPLETE_WITH(
"OLD TABLE",
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3840 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3841 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3842 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3843 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3844 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3845 "REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3846 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3847 "REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE",
"AS", MatchAny) ||
3848 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3849 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE", MatchAny) ||
3850 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3851 "REFERENCING",
"OLD|NEW",
"TABLE",
"AS", MatchAny,
"OLD|NEW",
"TABLE", MatchAny) ||
3852 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3853 "REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE", MatchAny) ||
3854 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3855 "REFERENCING",
"OLD|NEW",
"TABLE", MatchAny,
"OLD|NEW",
"TABLE", MatchAny))
3858 COMPLETE_WITH(
"FOR",
"WHEN (",
"EXECUTE FUNCTION");
3860 COMPLETE_WITH(
"FOR",
"WHEN (",
"EXECUTE PROCEDURE");
3862 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3864 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3866 COMPLETE_WITH(
"EACH",
"ROW",
"STATEMENT");
3867 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3869 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3871 COMPLETE_WITH(
"ROW",
"STATEMENT");
3872 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3873 "FOR",
"EACH",
"ROW|STATEMENT") ||
3874 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3875 "FOR",
"EACH",
"ROW|STATEMENT") ||
3876 Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3877 "FOR",
"ROW|STATEMENT") ||
3878 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3879 "FOR",
"ROW|STATEMENT"))
3882 COMPLETE_WITH(
"WHEN (",
"EXECUTE FUNCTION");
3884 COMPLETE_WITH(
"WHEN (",
"EXECUTE PROCEDURE");
3886 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3888 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3892 COMPLETE_WITH(
"EXECUTE FUNCTION");
3894 COMPLETE_WITH(
"EXECUTE PROCEDURE");
3901 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3903 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3907 COMPLETE_WITH(
"FUNCTION");
3909 COMPLETE_WITH(
"PROCEDURE");
3911 else if (Matches(
"CREATE",
"TRIGGER", MatchAnyN,
3912 "EXECUTE",
"FUNCTION|PROCEDURE") ||
3913 Matches(
"CREATE",
"OR",
"REPLACE",
"TRIGGER", MatchAnyN,
3914 "EXECUTE",
"FUNCTION|PROCEDURE"))
3915 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
3918 else if (Matches(
"CREATE",
"ROLE|GROUP|USER", MatchAny) &&
3919 !TailMatches(
"USER",
"MAPPING"))
3920 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
3921 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
3922 "LOGIN",
"NOBYPASSRLS",
3923 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
3924 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
3925 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
3926 "VALID UNTIL",
"WITH");
3929 else if (Matches(
"CREATE",
"ROLE|GROUP|USER", MatchAny,
"WITH"))
3931 COMPLETE_WITH(
"ADMIN",
"BYPASSRLS",
"CONNECTION LIMIT",
"CREATEDB",
3932 "CREATEROLE",
"ENCRYPTED PASSWORD",
"IN",
"INHERIT",
3933 "LOGIN",
"NOBYPASSRLS",
3934 "NOCREATEDB",
"NOCREATEROLE",
"NOINHERIT",
3935 "NOLOGIN",
"NOREPLICATION",
"NOSUPERUSER",
"PASSWORD",
3936 "REPLICATION",
"ROLE",
"SUPERUSER",
"SYSID",
3940 else if (Matches(
"CREATE",
"ROLE|USER|GROUP", MatchAny,
"IN"))
3941 COMPLETE_WITH(
"GROUP",
"ROLE");
3944 else if (Matches(
"CREATE",
"TYPE", MatchAny))
3945 COMPLETE_WITH(
"(",
"AS");
3946 else if (Matches(
"CREATE",
"TYPE", MatchAny,
"AS"))
3947 COMPLETE_WITH(
"ENUM",
"RANGE",
"(");
3948 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"AS",
"("))
3950 if (TailMatches(
"(|*,", MatchAny))
3951 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
3952 else if (TailMatches(
"(|*,", MatchAny, MatchAnyExcept(
"*)")))
3953 COMPLETE_WITH(
"COLLATE",
",",
")");
3955 else if (Matches(
"CREATE",
"TYPE", MatchAny,
"AS",
"ENUM|RANGE"))
3957 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"("))
3959 if (TailMatches(
"(|*,"))
3960 COMPLETE_WITH(
"INPUT",
"OUTPUT",
"RECEIVE",
"SEND",
3961 "TYPMOD_IN",
"TYPMOD_OUT",
"ANALYZE",
"SUBSCRIPT",
3962 "INTERNALLENGTH",
"PASSEDBYVALUE",
"ALIGNMENT",
3963 "STORAGE",
"LIKE",
"CATEGORY",
"PREFERRED",
3964 "DEFAULT",
"ELEMENT",
"DELIMITER",
3966 else if (TailMatches(
"(*|*,", MatchAnyExcept(
"*=")))
3968 else if (TailMatches(
"=", MatchAnyExcept(
"*)")))
3969 COMPLETE_WITH(
",",
")");
3971 else if (HeadMatches(
"CREATE",
"TYPE", MatchAny,
"AS",
"RANGE",
"("))
3973 if (TailMatches(
"(|*,"))
3974 COMPLETE_WITH(
"SUBTYPE",
"SUBTYPE_OPCLASS",
"COLLATION",
3975 "CANONICAL",
"SUBTYPE_DIFF",
3976 "MULTIRANGE_TYPE_NAME");
3977 else if (TailMatches(
"(*|*,", MatchAnyExcept(
"*=")))
3979 else if (TailMatches(
"=", MatchAnyExcept(
"*)")))
3980 COMPLETE_WITH(
",",
")");
3985 else if (TailMatches(
"CREATE",
"VIEW", MatchAny) ||
3986 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny))
3987 COMPLETE_WITH(
"AS",
"WITH");
3989 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"AS") ||
3990 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"AS"))
3991 COMPLETE_WITH(
"SELECT");
3993 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH") ||
3994 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH"))
3996 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(") ||
3997 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"("))
3998 COMPLETE_WITH_LIST(view_optional_parameters);
3999 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option") ||
4000 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option"))
4002 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option",
"=") ||
4003 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(",
"check_option",
"="))
4004 COMPLETE_WITH(
"local",
"cascaded");
4006 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(*)") ||
4007 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(*)"))
4008 COMPLETE_WITH(
"AS");
4010 else if (TailMatches(
"CREATE",
"VIEW", MatchAny,
"WITH",
"(*)",
"AS") ||
4011 TailMatches(
"CREATE",
"OR",
"REPLACE",
"VIEW", MatchAny,
"WITH",
"(*)",
"AS"))
4012 COMPLETE_WITH(
"SELECT");
4015 else if (Matches(
"CREATE",
"MATERIALIZED"))
4016 COMPLETE_WITH(
"VIEW");
4018 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny))
4019 COMPLETE_WITH(
"AS",
"USING");
4025 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny,
"USING"))
4026 COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods);
4028 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny,
"USING", MatchAny))
4029 COMPLETE_WITH(
"AS");
4035 else if (Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny,
"AS") ||
4036 Matches(
"CREATE",
"MATERIALIZED",
"VIEW", MatchAny,
"USING", MatchAny,
"AS"))
4037 COMPLETE_WITH(
"SELECT");
4040 else if (Matches(
"CREATE",
"EVENT"))
4041 COMPLETE_WITH(
"TRIGGER");
4043 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny))
4044 COMPLETE_WITH(
"ON");
4046 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny,
"ON"))
4047 COMPLETE_WITH(
"ddl_command_start",
"ddl_command_end",
"login",
4048 "sql_drop",
"table_rewrite");
4055 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAny,
"ON", MatchAny))
4058 COMPLETE_WITH(
"WHEN TAG IN (",
"EXECUTE FUNCTION");
4060 COMPLETE_WITH(
"WHEN TAG IN (",
"EXECUTE PROCEDURE");
4062 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAnyN,
"WHEN|AND", MatchAny,
"IN",
"(*)"))
4065 COMPLETE_WITH(
"EXECUTE FUNCTION");
4067 COMPLETE_WITH(
"EXECUTE PROCEDURE");
4069 else if (Matches(
"CREATE",
"EVENT",
"TRIGGER", MatchAnyN,
"EXECUTE",
"FUNCTION|PROCEDURE"))
4070 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
4073 else if (Matches(
"DEALLOCATE"))
4074 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_prepared_statements,
4083 else if (Matches(
"DECLARE", MatchAny))
4084 COMPLETE_WITH(
"BINARY",
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
4094 else if (Matches(
"DECLARE", MatchAnyN,
"BINARY"))
4095 COMPLETE_WITH(
"ASENSITIVE",
"INSENSITIVE",
"SCROLL",
"NO SCROLL",
"CURSOR");
4096 else if (Matches(
"DECLARE", MatchAnyN,
"ASENSITIVE|INSENSITIVE"))
4097 COMPLETE_WITH(
"SCROLL",
"NO SCROLL",
"CURSOR");
4098 else if (Matches(
"DECLARE", MatchAnyN,
"SCROLL"))
4099 COMPLETE_WITH(
"CURSOR");
4101 else if (Matches(
"DECLARE", MatchAnyN,
"NO"))
4102 COMPLETE_WITH(
"SCROLL");
4108 else if (Matches(
"DECLARE", MatchAnyN,
"CURSOR"))
4109 COMPLETE_WITH(
"WITH HOLD",
"WITHOUT HOLD",
"FOR");
4111 else if (Matches(
"DECLARE", MatchAnyN,
"CURSOR",
"WITH|WITHOUT"))
4112 COMPLETE_WITH(
"HOLD");
4114 else if (Matches(
"DECLARE", MatchAnyN,
"CURSOR",
"WITH|WITHOUT",
"HOLD"))
4115 COMPLETE_WITH(
"FOR");
4119 else if (Matches(
"DELETE"))
4120 COMPLETE_WITH(
"FROM");
4122 else if (TailMatches(
"DELETE",
"FROM"))
4123 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
4125 else if (TailMatches(
"DELETE",
"FROM", MatchAny))
4126 COMPLETE_WITH(
"USING",
"WHERE");
4130 else if (Matches(
"DISCARD"))
4131 COMPLETE_WITH(
"ALL",
"PLANS",
"SEQUENCES",
"TEMP");
4134 else if (Matches(
"DO"))
4135 COMPLETE_WITH(
"LANGUAGE");
4139 else if (Matches(
"DROP",
4140 "COLLATION|CONVERSION|DOMAIN|EXTENSION|LANGUAGE|PUBLICATION|SCHEMA|SEQUENCE|SERVER|SUBSCRIPTION|STATISTICS|TABLE|TYPE|VIEW",
4142 Matches(
"DROP",
"ACCESS",
"METHOD", MatchAny) ||
4143 Matches(
"DROP",
"EVENT",
"TRIGGER", MatchAny) ||
4144 Matches(
"DROP",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny) ||
4145 Matches(
"DROP",
"FOREIGN",
"TABLE", MatchAny) ||
4146 Matches(
"DROP",
"TEXT",
"SEARCH",
"CONFIGURATION|DICTIONARY|PARSER|TEMPLATE", MatchAny))
4147 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4148 else if (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny) &&
4149 ends_with(prev_wd,
')'))
4150 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4153 else if (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny))
4155 else if (Matches(
"DROP",
"AGGREGATE|FUNCTION|PROCEDURE|ROUTINE", MatchAny,
"("))
4156 COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
4157 else if (Matches(
"DROP",
"FOREIGN"))
4158 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
4159 else if (Matches(
"DROP",
"DATABASE", MatchAny))
4160 COMPLETE_WITH(
"WITH (");
4161 else if (HeadMatches(
"DROP",
"DATABASE") && (ends_with(prev_wd,
'(')))
4162 COMPLETE_WITH(
"FORCE");
4165 else if (Matches(
"DROP",
"INDEX"))
4166 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
4168 else if (Matches(
"DROP",
"INDEX",
"CONCURRENTLY"))
4169 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
4170 else if (Matches(
"DROP",
"INDEX", MatchAny))
4171 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4172 else if (Matches(
"DROP",
"INDEX",
"CONCURRENTLY", MatchAny))
4173 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4176 else if (Matches(
"DROP",
"MATERIALIZED"))
4177 COMPLETE_WITH(
"VIEW");
4178 else if (Matches(
"DROP",
"MATERIALIZED",
"VIEW"))
4179 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
4180 else if (Matches(
"DROP",
"MATERIALIZED",
"VIEW", MatchAny))
4181 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4184 else if (Matches(
"DROP",
"OWNED"))
4185 COMPLETE_WITH(
"BY");
4186 else if (Matches(
"DROP",
"OWNED",
"BY"))
4187 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4188 else if (Matches(
"DROP",
"OWNED",
"BY", MatchAny))
4189 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4192 else if (Matches(
"DROP",
"TEXT",
"SEARCH"))
4193 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
4196 else if (Matches(
"DROP",
"TRIGGER", MatchAny))
4197 COMPLETE_WITH(
"ON");
4198 else if (Matches(
"DROP",
"TRIGGER", MatchAny,
"ON"))
4200 set_completion_reference(prev2_wd);
4201 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_trigger);
4203 else if (Matches(
"DROP",
"TRIGGER", MatchAny,
"ON", MatchAny))
4204 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4207 else if (Matches(
"DROP",
"ACCESS"))
4208 COMPLETE_WITH(
"METHOD");
4209 else if (Matches(
"DROP",
"ACCESS",
"METHOD"))
4210 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
4213 else if (Matches(
"DROP",
"EVENT"))
4214 COMPLETE_WITH(
"TRIGGER");
4215 else if (Matches(
"DROP",
"EVENT",
"TRIGGER"))
4216 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
4219 else if (Matches(
"DROP",
"POLICY"))
4220 COMPLETE_WITH_QUERY(Query_for_list_of_policies);
4222 else if (Matches(
"DROP",
"POLICY", MatchAny))
4223 COMPLETE_WITH(
"ON");
4225 else if (Matches(
"DROP",
"POLICY", MatchAny,
"ON"))
4227 set_completion_reference(prev2_wd);
4228 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_policy);
4230 else if (Matches(
"DROP",
"POLICY", MatchAny,
"ON", MatchAny))
4231 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4234 else if (Matches(
"DROP",
"RULE", MatchAny))
4235 COMPLETE_WITH(
"ON");
4236 else if (Matches(
"DROP",
"RULE", MatchAny,
"ON"))
4238 set_completion_reference(prev2_wd);
4239 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables_for_rule);
4241 else if (Matches(
"DROP",
"RULE", MatchAny,
"ON", MatchAny))
4242 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4245 else if (Matches(
"DROP",
"TRANSFORM"))
4246 COMPLETE_WITH(
"FOR");
4247 else if (Matches(
"DROP",
"TRANSFORM",
"FOR"))
4248 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4249 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny))
4250 COMPLETE_WITH(
"LANGUAGE");
4251 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE"))
4253 set_completion_reference(prev2_wd);
4254 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
4256 else if (Matches(
"DROP",
"TRANSFORM",
"FOR", MatchAny,
"LANGUAGE", MatchAny))
4257 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
4260 else if (Matches(
"EXECUTE"))
4261 COMPLETE_WITH_QUERY(Query_for_list_of_prepared_statements);
4267 else if (Matches(
"EXPLAIN"))
4268 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4269 "MERGE INTO",
"EXECUTE",
"ANALYZE",
"VERBOSE");
4270 else if (HeadMatches(
"EXPLAIN",
"(*") &&
4271 !HeadMatches(
"EXPLAIN",
"(*)"))
4278 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
4279 COMPLETE_WITH(
"ANALYZE",
"VERBOSE",
"COSTS",
"SETTINGS",
"GENERIC_PLAN",
4280 "BUFFERS",
"SERIALIZE",
"WAL",
"TIMING",
"SUMMARY",
4281 "MEMORY",
"FORMAT");
4282 else if (TailMatches(
"ANALYZE|VERBOSE|COSTS|SETTINGS|GENERIC_PLAN|BUFFERS|WAL|TIMING|SUMMARY|MEMORY"))
4283 COMPLETE_WITH(
"ON",
"OFF");
4284 else if (TailMatches(
"SERIALIZE"))
4285 COMPLETE_WITH(
"TEXT",
"NONE",
"BINARY");
4286 else if (TailMatches(
"FORMAT"))
4287 COMPLETE_WITH(
"TEXT",
"XML",
"JSON",
"YAML");
4289 else if (Matches(
"EXPLAIN",
"ANALYZE"))
4290 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4291 "MERGE INTO",
"EXECUTE",
"VERBOSE");
4292 else if (Matches(
"EXPLAIN",
"(*)") ||
4293 Matches(
"EXPLAIN",
"VERBOSE") ||
4294 Matches(
"EXPLAIN",
"ANALYZE",
"VERBOSE"))
4295 COMPLETE_WITH(
"SELECT",
"INSERT INTO",
"DELETE FROM",
"UPDATE",
"DECLARE",
4296 "MERGE INTO",
"EXECUTE");
4304 else if (Matches(
"FETCH|MOVE"))
4305 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
4322 else if (Matches(
"FETCH|MOVE",
"BACKWARD|FORWARD"))
4323 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
4333 else if (Matches(
"FETCH|MOVE",
"ABSOLUTE|BACKWARD|FORWARD|RELATIVE",
4334 MatchAnyExcept(
"FROM|IN")) ||
4335 Matches(
"FETCH|MOVE",
"ALL|NEXT|PRIOR|FIRST|LAST"))
4336 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_cursors,
4340 else if (Matches(
"FETCH|MOVE", MatchAnyN,
"FROM|IN"))
4341 COMPLETE_WITH_QUERY(Query_for_list_of_cursors);
4345 else if (TailMatches(
"FOREIGN",
"DATA",
"WRAPPER") &&
4346 !TailMatches(
"CREATE", MatchAny, MatchAny, MatchAny))
4347 COMPLETE_WITH_QUERY(Query_for_list_of_fdws);
4349 else if (Matches(
"CREATE",
"SERVER", MatchAnyN,
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
4350 COMPLETE_WITH(
"OPTIONS");
4353 else if (TailMatches(
"FOREIGN",
"TABLE") &&
4354 !TailMatches(
"CREATE", MatchAny, MatchAny))
4355 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
4358 else if (TailMatches(
"FOREIGN",
"SERVER"))
4359 COMPLETE_WITH_QUERY(Query_for_list_of_servers);
4366 else if (TailMatches(
"GRANT|REVOKE") ||
4367 TailMatches(
"REVOKE",
"ADMIN|GRANT|INHERIT|SET",
"OPTION",
"FOR"))
4373 if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4375 if (TailMatches(
"GRANT") ||
4376 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR"))
4377 COMPLETE_WITH(
"SELECT",
"INSERT",
"UPDATE",
4378 "DELETE",
"TRUNCATE",
"REFERENCES",
"TRIGGER",
4379 "CREATE",
"EXECUTE",
"USAGE",
"MAINTAIN",
"ALL");
4380 else if (TailMatches(
"REVOKE"))
4381 COMPLETE_WITH(
"SELECT",
"INSERT",
"UPDATE",
4382 "DELETE",
"TRUNCATE",
"REFERENCES",
"TRIGGER",
4383 "CREATE",
"EXECUTE",
"USAGE",
"MAINTAIN",
"ALL",
4384 "GRANT OPTION FOR");
4386 else if (TailMatches(
"GRANT"))
4387 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4388 Privilege_options_of_grant_and_revoke);
4389 else if (TailMatches(
"REVOKE"))
4390 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4391 Privilege_options_of_grant_and_revoke,
4394 "INHERIT OPTION FOR",
4396 else if (TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR"))
4397 COMPLETE_WITH(Privilege_options_of_grant_and_revoke);
4398 else if (TailMatches(
"REVOKE",
"ADMIN|INHERIT|SET",
"OPTION",
"FOR"))
4399 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4402 else if (TailMatches(
"GRANT|REVOKE",
"ALTER") ||
4403 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER"))
4404 COMPLETE_WITH(
"SYSTEM");
4406 else if (TailMatches(
"REVOKE",
"SET"))
4407 COMPLETE_WITH(
"ON PARAMETER",
"OPTION FOR");
4408 else if (TailMatches(
"GRANT",
"SET") ||
4409 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"SET") ||
4410 TailMatches(
"GRANT|REVOKE",
"ALTER",
"SYSTEM") ||
4411 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR",
"ALTER",
"SYSTEM"))
4412 COMPLETE_WITH(
"ON PARAMETER");
4414 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"PARAMETER") ||
4415 TailMatches(
"GRANT|REVOKE", MatchAny, MatchAny,
"ON",
"PARAMETER") ||
4416 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"PARAMETER") ||
4417 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny, MatchAny,
"ON",
"PARAMETER"))
4418 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_alter_system_set_vars);
4420 else if (TailMatches(
"GRANT", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4421 TailMatches(
"GRANT", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny))
4422 COMPLETE_WITH(
"TO");
4424 else if (TailMatches(
"REVOKE", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4425 TailMatches(
"REVOKE", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4426 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"PARAMETER", MatchAny) ||
4427 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny, MatchAny,
"ON",
"PARAMETER", MatchAny))
4428 COMPLETE_WITH(
"FROM");
4434 else if (TailMatches(
"GRANT|REVOKE", MatchAny) ||
4435 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny))
4437 if (TailMatches(
"SELECT|INSERT|UPDATE|DELETE|TRUNCATE|REFERENCES|TRIGGER|CREATE|CONNECT|TEMPORARY|TEMP|EXECUTE|USAGE|MAINTAIN|ALL"))
4438 COMPLETE_WITH(
"ON");
4439 else if (TailMatches(
"GRANT", MatchAny))
4440 COMPLETE_WITH(
"TO");
4442 COMPLETE_WITH(
"FROM");
4452 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON") ||
4453 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON"))
4459 if (HeadMatches(
"ALTER",
"DEFAULT",
"PRIVILEGES"))
4460 COMPLETE_WITH(
"TABLES",
"SEQUENCES",
"FUNCTIONS",
"PROCEDURES",
"ROUTINES",
"TYPES",
"SCHEMAS");
4462 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_grantables,
4463 "ALL FUNCTIONS IN SCHEMA",
4464 "ALL PROCEDURES IN SCHEMA",
4465 "ALL ROUTINES IN SCHEMA",
4466 "ALL SEQUENCES IN SCHEMA",
4467 "ALL TABLES IN SCHEMA",
4470 "FOREIGN DATA WRAPPER",
4484 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"ALL") ||
4485 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"ALL"))
4486 COMPLETE_WITH(
"FUNCTIONS IN SCHEMA",
4487 "PROCEDURES IN SCHEMA",
4488 "ROUTINES IN SCHEMA",
4489 "SEQUENCES IN SCHEMA",
4490 "TABLES IN SCHEMA");
4491 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"FOREIGN") ||
4492 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"FOREIGN"))
4493 COMPLETE_WITH(
"DATA WRAPPER",
"SERVER");
4501 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON", MatchAny) ||
4502 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON", MatchAny))
4504 if (TailMatches(
"DATABASE"))
4505 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
4506 else if (TailMatches(
"DOMAIN"))
4507 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
4508 else if (TailMatches(
"FUNCTION"))
4509 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
4510 else if (TailMatches(
"LANGUAGE"))
4511 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
4512 else if (TailMatches(
"PROCEDURE"))
4513 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_procedures);
4514 else if (TailMatches(
"ROUTINE"))
4515 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
4516 else if (TailMatches(
"SCHEMA"))
4517 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
4518 else if (TailMatches(
"SEQUENCE"))
4519 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_sequences);
4520 else if (TailMatches(
"TABLE"))
4521 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_grantables);
4522 else if (TailMatches(
"TABLESPACE"))
4523 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
4524 else if (TailMatches(
"TYPE"))
4525 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
4526 else if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny))
4527 COMPLETE_WITH(
"TO");
4529 COMPLETE_WITH(
"FROM");
4536 else if (Matches(
"GRANT", MatchAnyN,
"TO") ||
4537 Matches(
"REVOKE", MatchAnyN,
"FROM"))
4538 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4539 Keywords_for_list_of_grant_roles);
4544 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny))
4545 COMPLETE_WITH(
"WITH ADMIN",
4548 "WITH GRANT OPTION",
4550 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny,
"WITH"))
4551 COMPLETE_WITH(
"ADMIN",
4555 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny,
"WITH",
"ADMIN|INHERIT|SET"))
4556 COMPLETE_WITH(
"OPTION",
"TRUE",
"FALSE");
4557 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny,
"WITH", MatchAny,
"OPTION"))
4558 COMPLETE_WITH(
"GRANTED BY");
4559 else if (Matches(
"GRANT", MatchAnyN,
"TO", MatchAny,
"WITH", MatchAny,
"OPTION",
"GRANTED",
"BY"))
4560 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4561 Keywords_for_list_of_grant_roles);
4563 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES", MatchAnyN,
"TO|FROM"))
4564 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4565 Keywords_for_list_of_grant_roles);
4567 else if (Matches(
"ALTER",
"DEFAULT",
"PRIVILEGES", MatchAnyN,
"TO", MatchAny))
4568 COMPLETE_WITH(
"WITH GRANT OPTION");
4570 else if (Matches(
"GRANT", MatchAnyN,
"ON", MatchAny, MatchAny))
4571 COMPLETE_WITH(
"TO");
4572 else if (Matches(
"REVOKE", MatchAnyN,
"ON", MatchAny, MatchAny))
4573 COMPLETE_WITH(
"FROM");
4576 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"ALL", MatchAny,
"IN",
"SCHEMA", MatchAny) ||
4577 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"ALL", MatchAny,
"IN",
"SCHEMA", MatchAny))
4579 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4580 COMPLETE_WITH(
"TO");
4582 COMPLETE_WITH(
"FROM");
4586 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny) ||
4587 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"FOREIGN",
"DATA",
"WRAPPER", MatchAny))
4589 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4590 COMPLETE_WITH(
"TO");
4592 COMPLETE_WITH(
"FROM");
4596 else if (TailMatches(
"GRANT|REVOKE", MatchAny,
"ON",
"FOREIGN",
"SERVER", MatchAny) ||
4597 TailMatches(
"REVOKE",
"GRANT",
"OPTION",
"FOR", MatchAny,
"ON",
"FOREIGN",
"SERVER", MatchAny))
4599 if (TailMatches(
"GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
4600 COMPLETE_WITH(
"TO");
4602 COMPLETE_WITH(
"FROM");
4606 else if (TailMatches(
"FROM", MatchAny,
"GROUP"))
4607 COMPLETE_WITH(
"BY");
4610 else if (Matches(
"IMPORT"))
4611 COMPLETE_WITH(
"FOREIGN SCHEMA");
4612 else if (Matches(
"IMPORT",
"FOREIGN"))
4613 COMPLETE_WITH(
"SCHEMA");
4614 else if (Matches(
"IMPORT",
"FOREIGN",
"SCHEMA", MatchAny))
4615 COMPLETE_WITH(
"EXCEPT (",
"FROM SERVER",
"LIMIT TO (");
4616 else if (TailMatches(
"LIMIT",
"TO",
"(*)") ||
4617 TailMatches(
"EXCEPT",
"(*)"))
4618 COMPLETE_WITH(
"FROM SERVER");
4619 else if (TailMatches(
"FROM",
"SERVER", MatchAny))
4620 COMPLETE_WITH(
"INTO");
4621 else if (TailMatches(
"FROM",
"SERVER", MatchAny,
"INTO"))
4622 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
4623 else if (TailMatches(
"FROM",
"SERVER", MatchAny,
"INTO", MatchAny))
4624 COMPLETE_WITH(
"OPTIONS (");
4628 else if (TailMatches(
"NOT",
"MATCHED",
"THEN",
"INSERT"))
4629 COMPLETE_WITH(
"VALUES",
"(");
4631 else if (TailMatches(
"INSERT"))
4632 COMPLETE_WITH(
"INTO");
4634 else if (TailMatches(
"INSERT",
"INTO"))
4635 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
4637 else if (TailMatches(
"INSERT",
"INTO", MatchAny,
"("))
4638 COMPLETE_WITH_ATTR(prev2_wd);
4644 else if (TailMatches(
"INSERT",
"INTO", MatchAny))
4645 COMPLETE_WITH(
"(",
"DEFAULT VALUES",
"SELECT",
"TABLE",
"VALUES",
"OVERRIDING");
4651 else if (TailMatches(
"INSERT",
"INTO", MatchAny, MatchAny) &&
4652 ends_with(prev_wd,
')'))
4653 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES",
"OVERRIDING");
4656 else if (TailMatches(
"OVERRIDING"))
4657 COMPLETE_WITH(
"SYSTEM VALUE",
"USER VALUE");
4660 else if (TailMatches(
"OVERRIDING", MatchAny,
"VALUE"))
4661 COMPLETE_WITH(
"SELECT",
"TABLE",
"VALUES");
4664 else if (TailMatches(
"VALUES") && !TailMatches(
"DEFAULT",
"VALUES"))
4669 else if (Matches(
"LOCK"))
4670 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
4672 else if (Matches(
"LOCK",
"TABLE"))
4673 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_tables,
4675 else if (Matches(
"LOCK",
"TABLE",
"ONLY") || Matches(
"LOCK",
"ONLY"))
4676 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
4680 else if (Matches(
"LOCK", MatchAnyExcept(
"TABLE|ONLY")) ||
4681 Matches(
"LOCK",
"TABLE", MatchAnyExcept(
"ONLY")) ||
4682 Matches(
"LOCK",
"ONLY", MatchAny) ||
4683 Matches(
"LOCK",
"TABLE",
"ONLY", MatchAny))
4684 COMPLETE_WITH(
"IN",
"NOWAIT");
4687 else if (Matches(
"LOCK", MatchAnyN,
"IN"))
4688 COMPLETE_WITH(
"ACCESS SHARE MODE",
4689 "ROW SHARE MODE",
"ROW EXCLUSIVE MODE",
4690 "SHARE UPDATE EXCLUSIVE MODE",
"SHARE MODE",
4691 "SHARE ROW EXCLUSIVE MODE",
4692 "EXCLUSIVE MODE",
"ACCESS EXCLUSIVE MODE");
4698 else if (Matches(
"LOCK", MatchAnyN,
"IN",
"ACCESS|ROW"))
4699 COMPLETE_WITH(
"EXCLUSIVE MODE",
"SHARE MODE");
4702 else if (Matches(
"LOCK", MatchAnyN,
"IN",
"SHARE"))
4703 COMPLETE_WITH(
"MODE",
"ROW EXCLUSIVE MODE",
4704 "UPDATE EXCLUSIVE MODE");
4707 else if (Matches(
"LOCK", MatchAnyN,
"MODE"))
4708 COMPLETE_WITH(
"NOWAIT");
4711 else if (TailMatches(
"MERGE"))
4712 COMPLETE_WITH(
"INTO");
4713 else if (TailMatches(
"MERGE",
"INTO"))
4714 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_mergetargets);
4717 else if (TailMatches(
"MERGE",
"INTO", MatchAny))
4718 COMPLETE_WITH(
"USING",
"AS");
4719 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny) ||
4720 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAnyExcept(
"USING|AS")))
4721 COMPLETE_WITH(
"USING");
4727 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING") ||
4728 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING") ||
4729 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING"))
4730 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
4736 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING", MatchAny) ||
4737 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny) ||
4738 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING", MatchAny))
4739 COMPLETE_WITH(
"AS",
"ON");
4740 else if (TailMatches(
"MERGE",
"INTO", MatchAny,
"USING", MatchAny,
"AS", MatchAny) ||
4741 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny,
"AS", MatchAny) ||
4742 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING", MatchAny,
"AS", MatchAny) ||
4743 TailMatches(
"MERGE",
"INTO", MatchAny,
"USING", MatchAny, MatchAnyExcept(
"ON|AS")) ||
4744 TailMatches(
"MERGE",
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny, MatchAnyExcept(
"ON|AS")) ||
4745 TailMatches(
"MERGE",
"INTO", MatchAny, MatchAny,
"USING", MatchAny, MatchAnyExcept(
"ON|AS")))
4746 COMPLETE_WITH(
"ON");
4749 else if (TailMatches(
"INTO", MatchAny,
"USING", MatchAny,
"ON"))
4750 COMPLETE_WITH_ATTR(prev4_wd);
4751 else if (TailMatches(
"INTO", MatchAny,
"AS", MatchAny,
"USING", MatchAny,
"AS", MatchAny,
"ON"))
4752 COMPLETE_WITH_ATTR(prev8_wd);
4753 else if (TailMatches(
"INTO", MatchAny, MatchAny,
"USING", MatchAny, MatchAny,
"ON"))
4754 COMPLETE_WITH_ATTR(prev6_wd);
4761 else if (TailMatches(
"USING", MatchAny,
"ON", MatchAny) ||
4762 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny) ||
4763 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny) ||
4764 TailMatches(
"USING", MatchAny,
"ON", MatchAny, MatchAnyExcept(
"WHEN"), MatchAnyExcept(
"WHEN")) ||
4765 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny, MatchAnyExcept(
"WHEN"), MatchAnyExcept(
"WHEN")) ||
4766 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny, MatchAnyExcept(
"WHEN"), MatchAnyExcept(
"WHEN")))
4767 COMPLETE_WITH(
"WHEN MATCHED",
"WHEN NOT MATCHED");
4768 else if (TailMatches(
"USING", MatchAny,
"ON", MatchAny,
"WHEN") ||
4769 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny,
"WHEN") ||
4770 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny,
"WHEN") ||
4771 TailMatches(
"USING", MatchAny,
"ON", MatchAny, MatchAny, MatchAny,
"WHEN") ||
4772 TailMatches(
"USING", MatchAny,
"AS", MatchAny,
"ON", MatchAny, MatchAny, MatchAny,
"WHEN") ||
4773 TailMatches(
"USING", MatchAny, MatchAny,
"ON", MatchAny, MatchAny, MatchAny,
"WHEN"))
4774 COMPLETE_WITH(
"MATCHED",
"NOT MATCHED");
4780 else if (TailMatches(
"WHEN",
"MATCHED") ||
4781 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"SOURCE|TARGET"))
4782 COMPLETE_WITH(
"THEN",
"AND");
4785 else if (TailMatches(
"WHEN",
"NOT",
"MATCHED"))
4786 COMPLETE_WITH(
"BY",
"THEN",
"AND");
4789 else if (TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY"))
4790 COMPLETE_WITH(
"SOURCE",
"TARGET");
4796 else if (TailMatches(
"WHEN",
"MATCHED",
"THEN") ||
4797 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"SOURCE",
"THEN"))
4798 COMPLETE_WITH(
"UPDATE SET",
"DELETE",
"DO NOTHING");
4803 else if (TailMatches(
"WHEN",
"NOT",
"MATCHED",
"THEN") ||
4804 TailMatches(
"WHEN",
"NOT",
"MATCHED",
"BY",
"TARGET",
"THEN"))
4805 COMPLETE_WITH(
"INSERT",
"DO NOTHING");
4808 else if (TailMatches(
"NOTIFY"))
4809 COMPLETE_WITH_QUERY(Query_for_list_of_channels);
4812 else if (TailMatches(
"OPTIONS"))
4816 else if (TailMatches(
"OWNER",
"TO"))
4817 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
4818 Keywords_for_list_of_owner_roles);
4821 else if (TailMatches(
"FROM", MatchAny,
"ORDER"))
4822 COMPLETE_WITH(
"BY");
4823 else if (TailMatches(
"FROM", MatchAny,
"ORDER",
"BY"))
4824 COMPLETE_WITH_ATTR(prev3_wd);
4827 else if (Matches(
"PREPARE", MatchAny,
"AS"))
4828 COMPLETE_WITH(
"SELECT",
"UPDATE",
"INSERT INTO",
"DELETE FROM");
4836 else if (Matches(
"REASSIGN"))
4837 COMPLETE_WITH(
"OWNED BY");
4838 else if (Matches(
"REASSIGN",
"OWNED"))
4839 COMPLETE_WITH(
"BY");
4840 else if (Matches(
"REASSIGN",
"OWNED",
"BY"))
4841 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4842 else if (Matches(
"REASSIGN",
"OWNED",
"BY", MatchAny))
4843 COMPLETE_WITH(
"TO");
4844 else if (Matches(
"REASSIGN",
"OWNED",
"BY", MatchAny,
"TO"))
4845 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4848 else if (Matches(
"REFRESH"))
4849 COMPLETE_WITH(
"MATERIALIZED VIEW");
4850 else if (Matches(
"REFRESH",
"MATERIALIZED"))
4851 COMPLETE_WITH(
"VIEW");
4852 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW"))
4853 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_matviews,
4855 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY"))
4856 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
4857 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny))
4858 COMPLETE_WITH(
"WITH");
4859 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny))
4860 COMPLETE_WITH(
"WITH");
4861 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny,
"WITH"))
4862 COMPLETE_WITH(
"NO DATA",
"DATA");
4863 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny,
"WITH"))
4864 COMPLETE_WITH(
"NO DATA",
"DATA");
4865 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW", MatchAny,
"WITH",
"NO"))
4866 COMPLETE_WITH(
"DATA");
4867 else if (Matches(
"REFRESH",
"MATERIALIZED",
"VIEW",
"CONCURRENTLY", MatchAny,
"WITH",
"NO"))
4868 COMPLETE_WITH(
"DATA");
4871 else if (Matches(
"REINDEX") ||
4872 Matches(
"REINDEX",
"(*)"))
4873 COMPLETE_WITH(
"TABLE",
"INDEX",
"SYSTEM",
"SCHEMA",
"DATABASE");
4874 else if (Matches(
"REINDEX",
"TABLE") ||
4875 Matches(
"REINDEX",
"(*)",
"TABLE"))
4876 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexables,
4878 else if (Matches(
"REINDEX",
"INDEX") ||
4879 Matches(
"REINDEX",
"(*)",
"INDEX"))
4880 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_indexes,
4882 else if (Matches(
"REINDEX",
"SCHEMA") ||
4883 Matches(
"REINDEX",
"(*)",
"SCHEMA"))
4884 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas,
4886 else if (Matches(
"REINDEX",
"SYSTEM|DATABASE") ||
4887 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE"))
4888 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_databases,
4890 else if (Matches(
"REINDEX",
"TABLE",
"CONCURRENTLY") ||
4891 Matches(
"REINDEX",
"(*)",
"TABLE",
"CONCURRENTLY"))
4892 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexables);
4893 else if (Matches(
"REINDEX",
"INDEX",
"CONCURRENTLY") ||
4894 Matches(
"REINDEX",
"(*)",
"INDEX",
"CONCURRENTLY"))
4895 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
4896 else if (Matches(
"REINDEX",
"SCHEMA",
"CONCURRENTLY") ||
4897 Matches(
"REINDEX",
"(*)",
"SCHEMA",
"CONCURRENTLY"))
4898 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
4899 else if (Matches(
"REINDEX",
"SYSTEM|DATABASE",
"CONCURRENTLY") ||
4900 Matches(
"REINDEX",
"(*)",
"SYSTEM|DATABASE",
"CONCURRENTLY"))
4901 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
4902 else if (HeadMatches(
"REINDEX",
"(*") &&
4903 !HeadMatches(
"REINDEX",
"(*)"))
4910 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
4911 COMPLETE_WITH(
"CONCURRENTLY",
"TABLESPACE",
"VERBOSE");
4912 else if (TailMatches(
"TABLESPACE"))
4913 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
4917 else if (Matches(
"SECURITY"))
4918 COMPLETE_WITH(
"LABEL");
4919 else if (Matches(
"SECURITY",
"LABEL"))
4920 COMPLETE_WITH(
"ON",
"FOR");
4921 else if (Matches(
"SECURITY",
"LABEL",
"FOR", MatchAny))
4922 COMPLETE_WITH(
"ON");
4923 else if (Matches(
"SECURITY",
"LABEL",
"ON") ||
4924 Matches(
"SECURITY",
"LABEL",
"FOR", MatchAny,
"ON"))
4925 COMPLETE_WITH(
"TABLE",
"COLUMN",
"AGGREGATE",
"DATABASE",
"DOMAIN",
4926 "EVENT TRIGGER",
"FOREIGN TABLE",
"FUNCTION",
4927 "LARGE OBJECT",
"MATERIALIZED VIEW",
"LANGUAGE",
4928 "PUBLICATION",
"PROCEDURE",
"ROLE",
"ROUTINE",
"SCHEMA",
4929 "SEQUENCE",
"SUBSCRIPTION",
"TABLESPACE",
"TYPE",
"VIEW");
4930 else if (Matches(
"SECURITY",
"LABEL",
"ON", MatchAny, MatchAny))
4931 COMPLETE_WITH(
"IS");
4938 else if (TailMatches(
"SET|RESET") &&
4939 !TailMatches(
"UPDATE", MatchAny,
"SET") &&
4940 !TailMatches(
"ALTER",
"DATABASE", MatchAny,
"RESET"))
4941 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
4948 else if (Matches(
"SHOW"))
4949 COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_show_vars,
4950 "SESSION AUTHORIZATION",
4952 else if (Matches(
"SHOW",
"SESSION"))
4953 COMPLETE_WITH(
"AUTHORIZATION");
4955 else if (Matches(
"SET",
"TRANSACTION"))
4956 COMPLETE_WITH(
"SNAPSHOT",
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
4957 else if (Matches(
"BEGIN|START",
"TRANSACTION") ||
4958 Matches(
"BEGIN",
"WORK") ||
4960 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION"))
4961 COMPLETE_WITH(
"ISOLATION LEVEL",
"READ",
"DEFERRABLE",
"NOT DEFERRABLE");
4962 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"NOT") ||
4963 Matches(
"BEGIN",
"NOT") ||
4964 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"NOT"))
4965 COMPLETE_WITH(
"DEFERRABLE");
4966 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION") ||
4967 Matches(
"BEGIN",
"ISOLATION") ||
4968 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION"))
4969 COMPLETE_WITH(
"LEVEL");
4970 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL") ||
4971 Matches(
"BEGIN",
"ISOLATION",
"LEVEL") ||
4972 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL"))
4973 COMPLETE_WITH(
"READ",
"REPEATABLE READ",
"SERIALIZABLE");
4974 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"READ") ||
4975 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"READ") ||
4976 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"READ"))
4977 COMPLETE_WITH(
"UNCOMMITTED",
"COMMITTED");
4978 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
4979 Matches(
"BEGIN",
"ISOLATION",
"LEVEL",
"REPEATABLE") ||
4980 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"ISOLATION",
"LEVEL",
"REPEATABLE"))
4981 COMPLETE_WITH(
"READ");
4982 else if (Matches(
"SET|BEGIN|START",
"TRANSACTION|WORK",
"READ") ||
4983 Matches(
"BEGIN",
"READ") ||
4984 Matches(
"SET",
"SESSION",
"CHARACTERISTICS",
"AS",
"TRANSACTION",
"READ"))
4985 COMPLETE_WITH(
"ONLY",
"WRITE");
4987 else if (Matches(
"SET",
"CONSTRAINTS"))
4988 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_constraints_with_schema,
4991 else if (Matches(
"SET",
"CONSTRAINTS", MatchAny))
4992 COMPLETE_WITH(
"DEFERRED",
"IMMEDIATE");
4994 else if (Matches(
"SET",
"ROLE"))
4995 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
4997 else if (Matches(
"SET",
"SESSION"))
4998 COMPLETE_WITH(
"AUTHORIZATION",
"CHARACTERISTICS AS TRANSACTION");
5000 else if (Matches(
"SET",
"SESSION",
"AUTHORIZATION"))
5001 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
5004 else if (Matches(
"RESET",
"SESSION"))
5005 COMPLETE_WITH(
"AUTHORIZATION");
5007 else if (Matches(
"SET", MatchAny))
5008 COMPLETE_WITH(
"TO");
5014 else if (Matches(
"ALTER",
"DATABASE|FUNCTION|PROCEDURE|ROLE|ROUTINE|USER", MatchAnyN,
"SET", MatchAnyExcept(
"SCHEMA")))
5015 COMPLETE_WITH(
"FROM CURRENT",
"TO");
5021 else if (TailMatches(
"SET", MatchAny,
"TO|=") &&
5022 !TailMatches(
"UPDATE", MatchAny,
"SET", MatchAny,
"TO|="))
5025 if (TailMatches(
"DateStyle",
"TO|="))
5026 COMPLETE_WITH(
"ISO",
"SQL",
"Postgres",
"German",
5027 "YMD",
"DMY",
"MDY",
5028 "US",
"European",
"NonEuropean",
5030 else if (TailMatches(
"search_path",
"TO|="))
5033 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
5034 " AND nspname NOT LIKE E'pg\\\\_toast%%'"
5035 " AND nspname NOT LIKE E'pg\\\\_temp%%'",
5038 else if (TailMatches(
"TimeZone",
"TO|="))
5039 COMPLETE_WITH_TIMEZONE_NAME();
5043 char *guctype = get_guctype(prev2_wd);
5052 if (strcmp(guctype,
"enum") == 0)
5054 set_completion_reference_verbatim(prev2_wd);
5055 COMPLETE_WITH_QUERY_PLUS(Query_for_values_of_enum_GUC,
5058 else if (strcmp(guctype,
"bool") == 0)
5059 COMPLETE_WITH(
"on",
"off",
"true",
"false",
"yes",
"no",
5060 "1",
"0",
"DEFAULT");
5062 COMPLETE_WITH(
"DEFAULT");
5070 else if (Matches(
"START"))
5071 COMPLETE_WITH(
"TRANSACTION");
5074 else if (Matches(
"TABLE"))
5075 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
5078 else if (TailMatches(
"TABLESAMPLE"))
5079 COMPLETE_WITH_QUERY(Query_for_list_of_tablesample_methods);
5080 else if (TailMatches(
"TABLESAMPLE", MatchAny))
5084 else if (Matches(
"TRUNCATE"))
5085 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_truncatables,
5087 else if (Matches(
"TRUNCATE",
"TABLE"))
5088 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_truncatables,
5090 else if (Matches(
"TRUNCATE", MatchAnyN,
"ONLY"))
5091 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_truncatables);
5092 else if (Matches(
"TRUNCATE", MatchAny) ||
5093 Matches(
"TRUNCATE",
"TABLE|ONLY", MatchAny) ||
5094 Matches(
"TRUNCATE",
"TABLE",
"ONLY", MatchAny))
5095 COMPLETE_WITH(
"RESTART IDENTITY",
"CONTINUE IDENTITY",
"CASCADE",
"RESTRICT");
5096 else if (Matches(
"TRUNCATE", MatchAnyN,
"IDENTITY"))
5097 COMPLETE_WITH(
"CASCADE",
"RESTRICT");
5100 else if (Matches(
"UNLISTEN"))
5101 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_channels,
"*");
5105 else if (TailMatches(
"UPDATE"))
5106 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables);
5108 else if (TailMatches(
"UPDATE", MatchAny))
5109 COMPLETE_WITH(
"SET");
5111 else if (TailMatches(
"UPDATE", MatchAny,
"SET"))
5112 COMPLETE_WITH_ATTR(prev2_wd);
5114 else if (TailMatches(
"UPDATE", MatchAny,
"SET", MatchAnyExcept(
"*=")))
5118 else if (Matches(
"ALTER|CREATE|DROP",
"USER",
"MAPPING"))
5119 COMPLETE_WITH(
"FOR");
5120 else if (Matches(
"CREATE",
"USER",
"MAPPING",
"FOR"))
5121 COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
5126 else if (Matches(
"ALTER|DROP",
"USER",
"MAPPING",
"FOR"))
5127 COMPLETE_WITH_QUERY(Query_for_list_of_user_mappings);
5128 else if (Matches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING",
"FOR", MatchAny))
5129 COMPLETE_WITH(
"SERVER");
5130 else if (Matches(
"CREATE|ALTER",
"USER",
"MAPPING",
"FOR", MatchAny,
"SERVER", MatchAny))
5131 COMPLETE_WITH(
"OPTIONS");
5137 else if (Matches(
"VACUUM"))
5138 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5145 else if (Matches(
"VACUUM",
"FULL"))
5146 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5151 else if (Matches(
"VACUUM", MatchAnyN,
"FREEZE"))
5152 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5156 else if (Matches(
"VACUUM", MatchAnyN,
"VERBOSE"))
5157 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5160 else if (Matches(
"VACUUM", MatchAnyN,
"ANALYZE"))
5161 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_vacuumables,
5163 else if (HeadMatches(
"VACUUM",
"(*") &&
5164 !HeadMatches(
"VACUUM",
"(*)"))
5171 if (ends_with(prev_wd,
'(') || ends_with(prev_wd,
','))
5172 COMPLETE_WITH(
"FULL",
"FREEZE",
"ANALYZE",
"VERBOSE",
5173 "DISABLE_PAGE_SKIPPING",
"SKIP_LOCKED",
5174 "INDEX_CLEANUP",
"PROCESS_MAIN",
"PROCESS_TOAST",
5175 "TRUNCATE",
"PARALLEL",
"SKIP_DATABASE_STATS",
5176 "ONLY_DATABASE_STATS",
"BUFFER_USAGE_LIMIT");
5177 else if (TailMatches(
"FULL|FREEZE|ANALYZE|VERBOSE|DISABLE_PAGE_SKIPPING|SKIP_LOCKED|PROCESS_MAIN|PROCESS_TOAST|TRUNCATE|SKIP_DATABASE_STATS|ONLY_DATABASE_STATS"))
5178 COMPLETE_WITH(
"ON",
"OFF");
5179 else if (TailMatches(
"INDEX_CLEANUP"))
5180 COMPLETE_WITH(
"AUTO",
"ON",
"OFF");
5182 else if (Matches(
"VACUUM", MatchAnyN,
"("))
5184 COMPLETE_WITH_ATTR(prev2_wd);
5185 else if (HeadMatches(
"VACUUM"))
5186 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_vacuumables);
5194 else if (Matches(
"WITH"))
5195 COMPLETE_WITH(
"RECURSIVE");
5199 else if (TailMatches(MatchAny,
"WHERE"))
5200 COMPLETE_WITH_ATTR(prev2_wd);
5204 else if (TailMatches(
"FROM") && !Matches(
"COPY|\\copy", MatchAny,
"FROM"))
5205 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
5208 else if (TailMatches(
"JOIN"))
5209 COMPLETE_WITH_SCHEMA_QUERY_PLUS(Query_for_list_of_selectables,
"LATERAL");
5210 else if (TailMatches(
"JOIN", MatchAny) && !TailMatches(
"CROSS|NATURAL",
"JOIN", MatchAny))
5211 COMPLETE_WITH(
"ON",
"USING (");
5212 else if (TailMatches(
"JOIN", MatchAny, MatchAny) &&
5213 !TailMatches(
"CROSS|NATURAL",
"JOIN", MatchAny, MatchAny) && !TailMatches(
"ON|USING"))
5214 COMPLETE_WITH(
"ON",
"USING (");
5215 else if (TailMatches(
"JOIN",
"LATERAL", MatchAny, MatchAny) &&
5216 !TailMatches(
"CROSS|NATURAL",
"JOIN",
"LATERAL", MatchAny, MatchAny) && !TailMatches(
"ON|USING"))
5217 COMPLETE_WITH(
"ON",
"USING (");
5218 else if (TailMatches(
"JOIN", MatchAny,
"USING") ||
5219 TailMatches(
"JOIN", MatchAny, MatchAny,
"USING") ||
5220 TailMatches(
"JOIN",
"LATERAL", MatchAny, MatchAny,
"USING"))
5222 else if (TailMatches(
"JOIN", MatchAny,
"USING",
"("))
5223 COMPLETE_WITH_ATTR(prev3_wd);
5224 else if (TailMatches(
"JOIN", MatchAny, MatchAny,
"USING",
"("))
5225 COMPLETE_WITH_ATTR(prev4_wd);
5228 else if (TailMatches(
"AT"))
5229 COMPLETE_WITH(
"LOCAL",
"TIME ZONE");
5230 else if (TailMatches(
"AT",
"TIME",
"ZONE"))
5231 COMPLETE_WITH_TIMEZONE_NAME();
5235 else if (TailMatchesCS(
"\\?"))
5236 COMPLETE_WITH_CS(
"commands",
"options",
"variables");
5237 else if (TailMatchesCS(
"\\connect|\\c"))
5240 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
5242 else if (TailMatchesCS(
"\\connect|\\c", MatchAny))
5245 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
5247 else if (TailMatchesCS(
"\\da*"))
5248 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_aggregates);
5249 else if (TailMatchesCS(
"\\dAc*", MatchAny) ||
5250 TailMatchesCS(
"\\dAf*", MatchAny))
5251 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
5252 else if (TailMatchesCS(
"\\dAo*", MatchAny) ||
5253 TailMatchesCS(
"\\dAp*", MatchAny))
5254 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_operator_families);
5255 else if (TailMatchesCS(
"\\dA*"))
5256 COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
5257 else if (TailMatchesCS(
"\\db*"))
5258 COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces);
5259 else if (TailMatchesCS(
"\\dconfig*"))
5260 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_show_vars);
5261 else if (TailMatchesCS(
"\\dD*"))
5262 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
5263 else if (TailMatchesCS(
"\\des*"))
5264 COMPLETE_WITH_QUERY(Query_for_list_of_servers);
5265 else if (TailMatchesCS(
"\\deu*"))
5266 COMPLETE_WITH_QUERY(Query_for_list_of_user_mappings);
5267 else if (TailMatchesCS(
"\\dew*"))
5268 COMPLETE_WITH_QUERY(Query_for_list_of_fdws);
5269 else if (TailMatchesCS(
"\\df*"))
5270 COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
5271 else if (HeadMatchesCS(
"\\df*"))
5272 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
5274 else if (TailMatchesCS(
"\\dFd*"))
5275 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_dictionaries);
5276 else if (TailMatchesCS(
"\\dFp*"))
5277 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_parsers);
5278 else if (TailMatchesCS(
"\\dFt*"))
5279 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_templates);
5281 else if (TailMatchesCS(
"\\dF*"))
5282 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_ts_configurations);
5284 else if (TailMatchesCS(
"\\di*"))
5285 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes);
5286 else if (TailMatchesCS(
"\\dL*"))
5287 COMPLETE_WITH_QUERY(Query_for_list_of_languages);
5288 else if (TailMatchesCS(
"\\dn*"))
5289 COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
5291 else if (HeadMatchesCS(
"\\do*", MatchAny))
5292 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
5293 else if (TailMatchesCS(
"\\dp") || TailMatchesCS(
"\\z"))
5294 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_grantables);
5295 else if (TailMatchesCS(
"\\dPi*"))
5296 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_indexes);
5297 else if (TailMatchesCS(
"\\dPt*"))
5298 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_tables);
5299 else if (TailMatchesCS(
"\\dP*"))
5300 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_partitioned_relations);
5301 else if (TailMatchesCS(
"\\dRp*"))
5302 COMPLETE_WITH_VERSIONED_QUERY(Query_for_list_of_publications);
5303 else if (TailMatchesCS(
"\\dRs*"))
5304 COMPLETE_WITH_VERSIONED_QUERY(Query_for_list_of_subscriptions);
5305 else if (TailMatchesCS(
"\\ds*"))
5306 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_sequences);
5307 else if (TailMatchesCS(
"\\dt*"))
5308 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
5309 else if (TailMatchesCS(
"\\dT*"))
5310 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
5311 else if (TailMatchesCS(
"\\du*") ||
5312 TailMatchesCS(
"\\dg*") ||
5313 TailMatchesCS(
"\\drg*"))
5314 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
5315 else if (TailMatchesCS(
"\\dv*"))
5316 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
5317 else if (TailMatchesCS(
"\\dx*"))
5318 COMPLETE_WITH_QUERY(Query_for_list_of_extensions);
5319 else if (TailMatchesCS(
"\\dX*"))
5320 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_statistics);
5321 else if (TailMatchesCS(
"\\dm*"))
5322 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews);
5323 else if (TailMatchesCS(
"\\dE*"))
5324 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables);
5325 else if (TailMatchesCS(
"\\dy*"))
5326 COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
5329 else if (TailMatchesCS(
"\\d*"))
5330 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_relations);
5332 else if (TailMatchesCS(
"\\ef"))
5333 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
5334 else if (TailMatchesCS(
"\\ev"))
5335 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
5337 else if (TailMatchesCS(
"\\encoding"))
5338 COMPLETE_WITH_QUERY_VERBATIM(Query_for_list_of_encodings);
5339 else if (TailMatchesCS(
"\\h|\\help"))
5340 COMPLETE_WITH_LIST(sql_commands);
5341 else if (TailMatchesCS(
"\\h|\\help", MatchAny))
5343 if (TailMatches(
"DROP"))
5344 matches = rl_completion_matches(
text, drop_command_generator);
5345 else if (TailMatches(
"ALTER"))
5346 matches = rl_completion_matches(
text, alter_command_generator);
5353 else if (TailMatchesCS(
"\\h|\\help", MatchAny, MatchAny))
5355 if (TailMatches(
"CREATE|DROP",
"ACCESS"))
5356 COMPLETE_WITH(
"METHOD");
5357 else if (TailMatches(
"ALTER",
"DEFAULT"))
5358 COMPLETE_WITH(
"PRIVILEGES");
5359 else if (TailMatches(
"CREATE|ALTER|DROP",
"EVENT"))
5360 COMPLETE_WITH(
"TRIGGER");
5361 else if (TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN"))
5362 COMPLETE_WITH(
"DATA WRAPPER",
"TABLE");
5363 else if (TailMatches(
"ALTER",
"LARGE"))
5364 COMPLETE_WITH(
"OBJECT");
5365 else if (TailMatches(
"CREATE|ALTER|DROP",
"MATERIALIZED"))
5366 COMPLETE_WITH(
"VIEW");
5367 else if (TailMatches(
"CREATE|ALTER|DROP",
"TEXT"))
5368 COMPLETE_WITH(
"SEARCH");
5369 else if (TailMatches(
"CREATE|ALTER|DROP",
"USER"))
5370 COMPLETE_WITH(
"MAPPING FOR");
5372 else if (TailMatchesCS(
"\\h|\\help", MatchAny, MatchAny, MatchAny))
5374 if (TailMatches(
"CREATE|ALTER|DROP",
"FOREIGN",
"DATA"))
5375 COMPLETE_WITH(
"WRAPPER");
5376 else if (TailMatches(
"CREATE|ALTER|DROP",
"TEXT",
"SEARCH"))
5377 COMPLETE_WITH(
"CONFIGURATION",
"DICTIONARY",
"PARSER",
"TEMPLATE");
5378 else if (TailMatches(
"CREATE|ALTER|DROP",
"USER",
"MAPPING"))
5379 COMPLETE_WITH(
"FOR");
5381 else if (TailMatchesCS(
"\\l*") && !TailMatchesCS(
"\\lo*"))
5382 COMPLETE_WITH_QUERY(Query_for_list_of_databases);
5383 else if (TailMatchesCS(
"\\password"))
5384 COMPLETE_WITH_QUERY(Query_for_list_of_roles);
5385 else if (TailMatchesCS(
"\\pset"))
5386 COMPLETE_WITH_CS(
"border",
"columns",
"csv_fieldsep",
"expanded",
5387 "fieldsep",
"fieldsep_zero",
"footer",
"format",
5388 "linestyle",
"null",
"numericlocale",
5389 "pager",
"pager_min_lines",
5390 "recordsep",
"recordsep_zero",
5391 "tableattr",
"title",
"tuples_only",
5392 "unicode_border_linestyle",
5393 "unicode_column_linestyle",
5394 "unicode_header_linestyle",
5396 else if (TailMatchesCS(
"\\pset", MatchAny))
5398 if (TailMatchesCS(
"format"))
5399 COMPLETE_WITH_CS(
"aligned",
"asciidoc",
"csv",
"html",
"latex",
5400 "latex-longtable",
"troff-ms",
"unaligned",
5402 else if (TailMatchesCS(
"xheader_width"))
5403 COMPLETE_WITH_CS(
"full",
"column",
"page");
5404 else if (TailMatchesCS(
"linestyle"))
5405 COMPLETE_WITH_CS(
"ascii",
"old-ascii",
"unicode");
5406 else if (TailMatchesCS(
"pager"))
5407 COMPLETE_WITH_CS(
"on",
"off",
"always");
5408 else if (TailMatchesCS(
"unicode_border_linestyle|"
5409 "unicode_column_linestyle|"
5410 "unicode_header_linestyle"))
5411 COMPLETE_WITH_CS(
"single",
"double");
5413 else if (TailMatchesCS(
"\\unset"))
5414 matches = complete_from_variables(
text,
"",
"",
true);
5415 else if (TailMatchesCS(
"\\set"))
5416 matches = complete_from_variables(
text,
"",
"",
false);
5417 else if (TailMatchesCS(
"\\set", MatchAny))
5419 if (TailMatchesCS(
"AUTOCOMMIT|ON_ERROR_STOP|QUIET|SHOW_ALL_RESULTS|"
5420 "SINGLELINE|SINGLESTEP"))
5421 COMPLETE_WITH_CS(
"on",
"off");
5422 else if (TailMatchesCS(
"COMP_KEYWORD_CASE"))
5423 COMPLETE_WITH_CS(
"lower",
"upper",
5424 "preserve-lower",
"preserve-upper");
5425 else if (TailMatchesCS(
"ECHO"))
5426 COMPLETE_WITH_CS(
"errors",
"queries",
"all",
"none");
5427 else if (TailMatchesCS(
"ECHO_HIDDEN"))
5428 COMPLETE_WITH_CS(
"noexec",
"off",
"on");
5429 else if (TailMatchesCS(
"HISTCONTROL"))
5430 COMPLETE_WITH_CS(
"ignorespace",
"ignoredups",
5431 "ignoreboth",
"none");
5432 else if (TailMatchesCS(
"ON_ERROR_ROLLBACK"))
5433 COMPLETE_WITH_CS(
"on",
"off",
"interactive");
5434 else if (TailMatchesCS(
"SHOW_CONTEXT"))
5435 COMPLETE_WITH_CS(
"never",
"errors",
"always");
5436 else if (TailMatchesCS(
"VERBOSITY"))
5437 COMPLETE_WITH_CS(
"default",
"verbose",
"terse",
"sqlstate");
5439 else if (TailMatchesCS(
"\\sf*"))
5440 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_routines);
5441 else if (TailMatchesCS(
"\\sv*"))
5442 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
5443 else if (TailMatchesCS(
"\\cd|\\e|\\edit|\\g|\\gx|\\i|\\include|"
5444 "\\ir|\\include_relative|\\o|\\out|"
5445 "\\s|\\w|\\write|\\lo_import"))
5447 completion_charp =
"\\";
5448 completion_force_quote =
false;
5449 matches = rl_completion_matches(
text, complete_from_files);
5478create_or_drop_command_generator(
const char *
text,
int state,
bits32 excluded)
5480 static int list_index,
5488 string_length = strlen(
text);
5492 while ((
name = words_after_create[list_index++].
name))
5495 !(words_after_create[list_index - 1].flags & excluded))
5496 return pg_strdup_keyword_case(
name,
text);
5507create_command_generator(
const char *
text,
int state)
5509 return create_or_drop_command_generator(
text,
state, THING_NO_CREATE);
5516drop_command_generator(
const char *
text,
int state)
5518 return create_or_drop_command_generator(
text,
state, THING_NO_DROP);
5525alter_command_generator(
const char *
text,
int state)
5527 return create_or_drop_command_generator(
text,
state, THING_NO_ALTER);
5536complete_from_query(
const char *
text,
int state)
5539 return _complete_from_query(completion_charp, NULL, completion_charpp,
5544complete_from_versioned_query(
const char *
text,
int state)
5546 const VersionedQuery *vquery = completion_vquery;
5552 if (vquery->query == NULL)
5555 return _complete_from_query(vquery->query, NULL, completion_charpp,
5560complete_from_schema_query(
const char *
text,
int state)
5563 return _complete_from_query(NULL, completion_squery, completion_charpp,
5568complete_from_versioned_schema_query(
const char *
text,
int state)
5570 const SchemaQuery *squery = completion_squery;
5576 if (squery->catname == NULL)
5579 return _complete_from_query(NULL, squery, completion_charpp,
5626_complete_from_query(
const char *simple_query,
5627 const SchemaQuery *schema_query,
5632 static int list_index,
5637 static bool non_empty_object;
5638 static bool schemaquoted;
5639 static bool objectquoted;
5650 char *e_object_like;
5657 num_schema_only = 0;
5658 num_query_other = 0;
5671 parse_identifier(
text,
5672 &schemaname, &objectname,
5673 &schemaquoted, &objectquoted);
5677 non_empty_object = (*objectname !=
'\0');
5683 e_object_like = make_like_pattern(objectname);
5688 e_schemaname = NULL;
5690 if (completion_ref_object)
5693 e_ref_object = NULL;
5695 if (completion_ref_schema)
5698 e_ref_schema = NULL;
5704 Assert(simple_query == NULL);
5711 if (schemaname == NULL || schema_query->namespace == NULL)
5715 if (schema_query->use_distinct)
5718 "%s, NULL::pg_catalog.text FROM %s",
5719 schema_query->result,
5720 schema_query->catname);
5721 if (schema_query->refnamespace && completion_ref_schema)
5723 ", pg_catalog.pg_namespace nr");
5725 if (schema_query->selcondition)
5727 schema_query->selcondition);
5729 schema_query->result,
5731 if (schema_query->viscondition)
5733 schema_query->viscondition);
5734 if (schema_query->refname)
5736 Assert(completion_ref_object);
5738 schema_query->refname, e_ref_object);
5739 if (schema_query->refnamespace && completion_ref_schema)
5741 " AND %s = nr.oid AND nr.nspname = '%s'",
5742 schema_query->refnamespace,
5744 else if (schema_query->refviscondition)
5747 schema_query->refviscondition);
5757 if (strcmp(schema_query->catname,
5758 "pg_catalog.pg_class c") == 0 &&
5759 strncmp(objectname,
"pg_", 3) != 0)
5762 " AND c.relnamespace <> (SELECT oid FROM"
5763 " pg_catalog.pg_namespace WHERE nspname = 'pg_catalog')");
5770 if (schema_query->namespace)
5773 "SELECT NULL::pg_catalog.text, n.nspname "
5774 "FROM pg_catalog.pg_namespace n "
5775 "WHERE n.nspname LIKE '%s'",
5782 if (strncmp(objectname,
"pg_", 3) != 0)
5784 " AND n.nspname NOT LIKE E'pg\\\\_%'");
5791 schemaquoted = objectquoted;
5798 if (schema_query->use_distinct)
5801 "FROM %s, pg_catalog.pg_namespace n",
5802 schema_query->result,
5803 schema_query->catname);
5804 if (schema_query->refnamespace && completion_ref_schema)
5806 ", pg_catalog.pg_namespace nr");
5808 schema_query->namespace);
5809 if (schema_query->selcondition)
5811 schema_query->selcondition);
5813 schema_query->result,
5817 if (schema_query->refname)
5819 Assert(completion_ref_object);
5821 schema_query->refname, e_ref_object);
5822 if (schema_query->refnamespace && completion_ref_schema)
5824 " AND %s = nr.oid AND nr.nspname = '%s'",
5825 schema_query->refnamespace,
5827 else if (schema_query->refviscondition)
5830 schema_query->refviscondition);
5840 e_ref_object, e_ref_schema);
5845 completion_max_records);
5848 result = exec_query(query_buffer.
data);
5854 free(e_object_like);
5867 const char *item = NULL;
5868 const char *nsp = NULL;
5891 if (non_empty_object)
5893 if (item && !objectquoted && identifier_needs_quotes(item))
5895 if (nsp && !schemaquoted && identifier_needs_quotes(nsp))
5900 if (item == NULL && nsp != NULL)
5905 return requote_identifier(nsp, item, schemaquoted, objectquoted);
5914 if (schema_query && schema_query->keywords)
5916 const char *
const *itemp = schema_query->keywords;
5920 const char *item = *itemp++;
5928 return pg_strdup_keyword_case(item,
text);
5934 const char *
const *itemp =
keywords;
5938 const char *item = *itemp++;
5946 return pg_strdup_keyword_case(item,
text);
5957 if (num_schema_only > 0 && num_query_other == 0 && num_keywords == 0)
5958 rl_completion_append_character =
'\0';
5973set_completion_reference(
const char *
word)
5978 parse_identifier(
word,
5979 &completion_ref_schema, &completion_ref_object,
5980 &schemaquoted, &objectquoted);
5988set_completion_reference_verbatim(
const char *
word)
5990 completion_ref_schema = NULL;
6001complete_from_list(
const char *
text,
int state)
6003 static int string_length,
6006 static bool casesensitive;
6010 Assert(completion_charpp != NULL);
6016 string_length = strlen(
text);
6017 casesensitive = completion_case_sensitive;
6021 while ((item = completion_charpp[list_index++]))
6024 if (casesensitive && strncmp(
text, item, string_length) == 0)
6033 if (completion_case_sensitive)
6041 return pg_strdup_keyword_case(item,
text);
6049 if (casesensitive && matches == 0)
6051 casesensitive =
false;
6081complete_from_const(
const char *
text,
int state)
6083 Assert(completion_charp != NULL);
6086 if (completion_case_sensitive)
6094 return pg_strdup_keyword_case(completion_charp,
text);
6106append_variable_names(
char ***varnames,
int *nvars,
6107 int *maxvars,
const char *varname,
6108 const char *prefix,
const char *suffix)
6110 if (*nvars >= *maxvars)
6114 ((*maxvars) + 1) *
sizeof(
char *));
6117 (*varnames)[(*nvars)++] =
psprintf(
"%s%s%s", prefix, varname, suffix);
6129complete_from_variables(
const char *
text,
const char *prefix,
const char *suffix,
6139 varnames = (
char **)
pg_malloc((maxvars + 1) *
sizeof(
char *));
6143 if (need_value && !(ptr->
value))
6145 append_variable_names(&varnames, &nvars, &maxvars, ptr->
name,
6149 varnames[nvars] = NULL;
6150 COMPLETE_WITH_LIST_CS((
const char *
const *) varnames);
6152 for (
i = 0;
i < nvars;
i++)
6174complete_from_files(
const char *
text,
int state)
6176#ifdef USE_FILENAME_QUOTING_FUNCTIONS
6193#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
6194 rl_completion_suppress_quote = 1;
6199 completion_force_quote =
true;
6201 return rl_filename_completion_function(
text,
state);
6207 static const char *unquoted_text;
6208 char *unquoted_match;
6213 completion_force_quote =
true;
6218 unquoted_text =
strtokx(
text,
"", NULL,
"'", *completion_charp,
6224 unquoted_text =
text;
6228 unquoted_match = rl_filename_completion_function(unquoted_text,
state);
6231 struct stat statbuf;
6232 bool is_dir = (
stat(unquoted_match, &statbuf) == 0 &&
6233 S_ISDIR(statbuf.st_mode) != 0);
6237 '\'', *completion_charp,
6238 completion_force_quote,
6241 free(unquoted_match);
6243 ret = unquoted_match;
6250 if (*ret ==
'\'' && is_dir)
6252 char *retend = ret + strlen(ret) - 1;
6257 rl_completion_append_character =
'\0';
6274pg_strdup_keyword_case(
const char *s,
const char *ref)
6278 unsigned char first = ref[0];
6287 for (p = ret; *p; p++)
6292 for (p = ret; *p; p++)
6329make_like_pattern(
const char *
word)
6333 char *bptr = buffer;
6375parse_identifier(
const char *
ident,
6376 char **schemaname,
char **objectname,
6377 bool *schemaquoted,
bool *objectquoted)
6379 size_t buflen = strlen(
ident) + 1;
6389 *schemaquoted = *objectquoted =
false;
6395 unsigned char ch = (
unsigned char) *
ident++;
6399 if (inquotes && *
ident ==
'"')
6407 inquotes = !inquotes;
6408 *objectquoted =
true;
6411 else if (ch ==
'.' && !inquotes)
6419 *schemaquoted = *objectquoted;
6420 *objectquoted =
false;
6432 *optr++ = (char) ch;
6447 if (ch >=
'A' && ch <=
'Z')
6449 else if (enc_is_single_byte &&
IS_HIGHBIT_SET(ch) && isupper(ch))
6452 *optr++ = (char) ch;
6457 *schemaname = sname;
6458 *objectname = oname;
6474requote_identifier(
const char *schemaname,
const char *objectname,
6475 bool quote_schema,
bool quote_object)
6487 buflen += strlen(schemaname) + 1;
6489 quote_schema = identifier_needs_quotes(schemaname);
6493 for (
const char *p = schemaname; *p; p++)
6502 buflen += strlen(objectname);
6504 quote_object = identifier_needs_quotes(objectname);
6508 for (
const char *p = objectname; *p; p++)
6521 for (
const char *p = schemaname; *p; p++)
6535 for (
const char *p = objectname; *p; p++)
6556identifier_needs_quotes(
const char *
ident)
6563 if (strspn(
ident,
"abcdefghijklmnopqrstuvwxyz0123456789_$") != strlen(
ident))
6589exec_query(
const char *query)
6606 pg_log_error(
"tab completion query failed: %s\nQuery was:\n%s",
6629get_previous_words(
int point,
char **buffer,
int *nwords)
6631 char **previous_words;
6634 int words_found = 0;
6648 memcpy(
buf +
i, rl_line_buffer, point);
6655 buf = rl_line_buffer;
6664 previous_words = (
char **)
pg_malloc(point *
sizeof(
char *));
6665 *buffer = outptr = (
char *)
pg_malloc(point * 2);
6672 for (
i = point - 1;
i >= 0;
i--)
6674 if (strchr(WORD_BREAKS,
buf[
i]))
6688 bool inquotes =
false;
6689 int parentheses = 0;
6693 for (
i = point;
i >= 0;
i--)
6695 if (!isspace((
unsigned char)
buf[
i]))
6714 inquotes = !inquotes;
6721 if (--parentheses <= 0)
6724 else if (parentheses == 0 &&
6725 strchr(WORD_BREAKS,
buf[
start - 1]))
6731 previous_words[words_found++] = outptr;
6742 if (
buf != rl_line_buffer)
6745 *nwords = words_found;
6746 return previous_words;
6756get_guctype(
const char *varname)
6761 char *guctype = NULL;
6767 "SELECT vartype FROM pg_catalog.pg_settings "
6768 "WHERE pg_catalog.lower(name) = pg_catalog.lower('%s')",
6771 result = exec_query(query_buffer.
data);
6783#ifdef USE_FILENAME_QUOTING_FUNCTIONS
6792quote_file_name(
char *fname,
int match_type,
char *quote_pointer)
6795 struct stat statbuf;
6799 '\'', *completion_charp,
6800 completion_force_quote,
6815 completion_last_char !=
'\'' &&
6816 (match_type != SINGLE_MATCH ||
6817 (quote_pointer && *quote_pointer ==
'\'') ||
6818 stat(fname, &statbuf) != 0 ||
6821 char *
send = s + strlen(s) - 1;
6832#ifdef HAVE_RL_COMPLETION_SUPPRESS_QUOTE
6833 rl_completion_suppress_quote = 0;
6841 if (quote_pointer && *quote_pointer !=
'\'')
6842 *quote_pointer =
'\0';
6853dequote_file_name(
char *fname,
int quote_char)
6855 char *unquoted_fname;
6862 if (quote_char ==
'\'')
6864 char *workspace = (
char *)
pg_malloc(strlen(fname) + 2);
6866 workspace[0] = quote_char;
6867 strcpy(workspace + 1, fname);
6868 unquoted_fname =
strtokx(workspace,
"", NULL,
"'", *completion_charp,
6873 unquoted_fname =
strtokx(fname,
"", NULL,
"'", *completion_charp,
6877 if (!unquoted_fname)
6880 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)
char * PQgetvalue(const PGresult *res, int tup_num, int field_num)
ExecStatusType PQresultStatus(const PGresult *res)
void PQclear(PGresult *res)
int PQntuples(const PGresult *res)
int PQgetisnull(const PGresult *res, int tup_num, int field_num)
PGresult * PQexec(PGconn *conn, const char *query)
int PQnfields(const PGresult *res)
int PQmblenBounded(const char *s, int encoding)
void * pg_malloc(size_t size)
char * pg_strdup(const char *in)
void * pg_realloc(void *ptr, size_t size)
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)