@@ -1894,8 +1894,11 @@ psql_completion(const char *text, int start, int end)
18941894 else if (Matches5 ("ALTER" , "GROUP" , MatchAny , "ADD|DROP" , "USER" ))
18951895 COMPLETE_WITH_QUERY (Query_for_list_of_roles );
18961896
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" ))
18991902 COMPLETE_WITH_LIST2 ("WORK" , "TRANSACTION" );
19001903/* COMMIT */
19011904 else if (Matches1 ("COMMIT" ))
@@ -2762,20 +2765,36 @@ psql_completion(const char *text, int start, int end)
27622765 else if (Matches1 ("SHOW" ))
27632766 COMPLETE_WITH_QUERY (Query_for_list_of_show_vars );
27642767 /* 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" ) ||
27662771 Matches2 ("BEGIN" , "WORK" ) ||
2772+ Matches1 ("BEGIN" ) ||
27672773 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" );
27692779 else if (Matches3 ("SET|BEGIN|START" , "TRANSACTION|WORK" , "ISOLATION" ) ||
2780+ Matches2 ("BEGIN" , "ISOLATION" ) ||
27702781 Matches6 ("SET" , "SESSION" , "CHARACTERISTICS" , "AS" , "TRANSACTION" , "ISOLATION" ))
27712782 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" ))
27732786 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" ))
27752790 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" ))
27772794 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" ))
27792798 COMPLETE_WITH_LIST2 ("ONLY" , "WRITE" );
27802799 /* SET CONSTRAINTS */
27812800 else if (Matches2 ("SET" , "CONSTRAINTS" ))
0 commit comments