@@ -1894,8 +1894,11 @@ psql_completion(const char *text, int start, int end)
1894
1894
else if (Matches5 ("ALTER" ,"GROUP" ,MatchAny ,"ADD|DROP" ,"USER" ))
1895
1895
COMPLETE_WITH_QUERY (Query_for_list_of_roles );
1896
1896
1897
- /* BEGIN, END, ABORT */
1898
- else if (Matches1 ("BEGIN|END|ABORT" ))
1897
+ /* BEGIN */
1898
+ else if (Matches1 ("BEGIN" ))
1899
+ COMPLETE_WITH_LIST6 ("WORK" ,"TRANSACTION" ,"ISOLATION LEVEL" ,"READ" ,"DEFERRABLE" ,"NOT DEFERRABLE" );
1900
+ /* END, ABORT */
1901
+ else if (Matches1 ("END|ABORT" ))
1899
1902
COMPLETE_WITH_LIST2 ("WORK" ,"TRANSACTION" );
1900
1903
/* COMMIT */
1901
1904
else if (Matches1 ("COMMIT" ))
@@ -2762,20 +2765,36 @@ psql_completion(const char *text, int start, int end)
2762
2765
else if (Matches1 ("SHOW" ))
2763
2766
COMPLETE_WITH_QUERY (Query_for_list_of_show_vars );
2764
2767
/* Complete "SET TRANSACTION" */
2765
- else if (Matches2 ("SET|BEGIN|START" ,"TRANSACTION" )||
2768
+ else if (Matches2 ("SET" ,"TRANSACTION" ))
2769
+ COMPLETE_WITH_LIST5 ("SNAPSHOT" ,"ISOLATION LEVEL" ,"READ" ,"DEFERRABLE" ,"NOT DEFERRABLE" );
2770
+ else if (Matches2 ("BEGIN|START" ,"TRANSACTION" )||
2766
2771
Matches2 ("BEGIN" ,"WORK" )||
2772
+ Matches1 ("BEGIN" )||
2767
2773
Matches5 ("SET" ,"SESSION" ,"CHARACTERISTICS" ,"AS" ,"TRANSACTION" ))
2768
- COMPLETE_WITH_LIST2 ("ISOLATION LEVEL" ,"READ" );
2774
+ COMPLETE_WITH_LIST4 ("ISOLATION LEVEL" ,"READ" ,"DEFERRABLE" ,"NOT DEFERRABLE" );
2775
+ else if (Matches3 ("SET|BEGIN|START" ,"TRANSACTION|WORK" ,"NOT" )||
2776
+ Matches2 ("BEGIN" ,"NOT" )||
2777
+ Matches6 ("SET" ,"SESSION" ,"CHARACTERISTICS" ,"AS" ,"TRANSACTION" ,"NOT" ))
2778
+ COMPLETE_WITH_CONST ("DEFERRABLE" );
2769
2779
else if (Matches3 ("SET|BEGIN|START" ,"TRANSACTION|WORK" ,"ISOLATION" )||
2780
+ Matches2 ("BEGIN" ,"ISOLATION" )||
2770
2781
Matches6 ("SET" ,"SESSION" ,"CHARACTERISTICS" ,"AS" ,"TRANSACTION" ,"ISOLATION" ))
2771
2782
COMPLETE_WITH_CONST ("LEVEL" );
2772
- else if (Matches4 ("SET|BEGIN|START" ,"TRANSACTION|WORK" ,"ISOLATION" ,"LEVEL" ))
2783
+ else if (Matches4 ("SET|BEGIN|START" ,"TRANSACTION|WORK" ,"ISOLATION" ,"LEVEL" )||
2784
+ Matches3 ("BEGIN" ,"ISOLATION" ,"LEVEL" )||
2785
+ Matches7 ("SET" ,"SESSION" ,"CHARACTERISTICS" ,"AS" ,"TRANSACTION" ,"ISOLATION" ,"LEVEL" ))
2773
2786
COMPLETE_WITH_LIST3 ("READ" ,"REPEATABLE READ" ,"SERIALIZABLE" );
2774
- else if (Matches5 ("SET|BEGIN|START" ,"TRANSACTION|WORK" ,"ISOLATION" ,"LEVEL" ,"READ" ))
2787
+ else if (Matches5 ("SET|BEGIN|START" ,"TRANSACTION|WORK" ,"ISOLATION" ,"LEVEL" ,"READ" )||
2788
+ Matches4 ("BEGIN" ,"ISOLATION" ,"LEVEL" ,"READ" )||
2789
+ Matches8 ("SET" ,"SESSION" ,"CHARACTERISTICS" ,"AS" ,"TRANSACTION" ,"ISOLATION" ,"LEVEL" ,"READ" ))
2775
2790
COMPLETE_WITH_LIST2 ("UNCOMMITTED" ,"COMMITTED" );
2776
- else if (Matches5 ("SET|BEGIN|START" ,"TRANSACTION|WORK" ,"ISOLATION" ,"LEVEL" ,"REPEATABLE" ))
2791
+ else if (Matches5 ("SET|BEGIN|START" ,"TRANSACTION|WORK" ,"ISOLATION" ,"LEVEL" ,"REPEATABLE" )||
2792
+ Matches4 ("BEGIN" ,"ISOLATION" ,"LEVEL" ,"REPEATABLE" )||
2793
+ Matches8 ("SET" ,"SESSION" ,"CHARACTERISTICS" ,"AS" ,"TRANSACTION" ,"ISOLATION" ,"LEVEL" ,"REPEATABLE" ))
2777
2794
COMPLETE_WITH_CONST ("READ" );
2778
- else if (Matches3 ("SET|BEGIN|START" ,"TRANSACTION|WORK" ,"READ" ))
2795
+ else if (Matches3 ("SET|BEGIN|START" ,"TRANSACTION|WORK" ,"READ" )||
2796
+ Matches2 ("BEGIN" ,"READ" )||
2797
+ Matches6 ("SET" ,"SESSION" ,"CHARACTERISTICS" ,"AS" ,"TRANSACTION" ,"READ" ))
2779
2798
COMPLETE_WITH_LIST2 ("ONLY" ,"WRITE" );
2780
2799
/* SET CONSTRAINTS */
2781
2800
else if (Matches2 ("SET" ,"CONSTRAINTS" ))