@@ -4688,11 +4688,12 @@ start_transaction_stmt
4688
4688
transactionKw: read (tKw),
4689
4689
});
4690
4690
}
4691
- / & postgres kw :BEGIN tKw :(__ (TRANSACTION / WORK ))? {
4691
+ / & postgres kw :BEGIN tKw :(__ (TRANSACTION / WORK ))? modes :( __ list$transaction_mode ) ? {
4692
4692
return loc ({
4693
4693
type: " start_transaction_stmt" ,
4694
4694
startKw: kw,
4695
4695
transactionKw: read (tKw),
4696
+ modes: read (modes),
4696
4697
});
4697
4698
}
4698
4699
/ & mysql kw :BEGIN tKw :(__ WORK )? {
@@ -4702,14 +4703,57 @@ start_transaction_stmt
4702
4703
transactionKw: read (tKw),
4703
4704
});
4704
4705
}
4705
- / (& mysql / & postgres ) kw :START tKw :(__ TRANSACTION ) {
4706
+ / (& mysql / & postgres ) kw :START tKw :(__ TRANSACTION ) modes :( __ list$transaction_mode ) ? {
4706
4707
return loc ({
4707
4708
type: " start_transaction_stmt" ,
4708
4709
startKw: kw,
4709
4710
transactionKw: read (tKw),
4711
+ modes: read (modes),
4710
4712
});
4711
4713
}
4712
4714
4715
+ transaction_mode
4716
+ = transaction_mode_deferrable
4717
+ / transaction_mode_not_deferrable
4718
+ / transaction_mode_read_write
4719
+ / transaction_mode_read_only
4720
+ / transaction_mode_isolation_level
4721
+
4722
+ transaction_mode_deferrable
4723
+ = kw :(DEFERRABLE ) {
4724
+ return loc ({ type: " transaction_mode_deferrable" , deferrableKw: kw });
4725
+ }
4726
+
4727
+ transaction_mode_not_deferrable
4728
+ = kw :(NOT __ DEFERRABLE ) {
4729
+ return loc ({ type: " transaction_mode_not_deferrable" , notDeferrableKw: read (kw) });
4730
+ }
4731
+
4732
+ transaction_mode_read_write
4733
+ = kw :(READ __ WRITE ) {
4734
+ return loc ({ type: " transaction_mode_read_write" , readWriteKw: read (kw) });
4735
+ }
4736
+
4737
+ transaction_mode_read_only
4738
+ = kw :(READ __ ONLY ) {
4739
+ return loc ({ type: " transaction_mode_read_only" , readOnlyKw: read (kw) });
4740
+ }
4741
+
4742
+ transaction_mode_isolation_level
4743
+ = kw :(ISOLATION __ LEVEL __ ) levelKw :isolation_level_kw {
4744
+ return loc ({
4745
+ type: " transaction_mode_isolation_level" ,
4746
+ isolationLevelKw: read (kw),
4747
+ levelKw: read (levelKw),
4748
+ });
4749
+ }
4750
+
4751
+ isolation_level_kw
4752
+ = SERIALIZABLE
4753
+ / REPEATABLE __ READ
4754
+ / READ __ COMMITTED
4755
+ / READ __ UNCOMMITTED
4756
+
4713
4757
commit_transaction_stmt
4714
4758
= kw :commit_kw tKw :(__ transaction_kw )? chain :(__ transaction_chain_clause )? {
4715
4759
return loc ({
@@ -7616,6 +7660,7 @@ list$string_literal = .
7616
7660
list$table_func_call = .
7617
7661
list$table_option_postgresql = .
7618
7662
list$tablesample_arg = .
7663
+ list$transaction_mode = .
7619
7664
list$transform_type = .
7620
7665
list$trigger_transition = .
7621
7666
list$type_param = .
@@ -8629,6 +8674,7 @@ COLUMNS = kw:"COLUMNS"i !ident_part { return loc(createK
8629
8674
COMMENT = kw :"COMMENT" i ! ident_part { return loc (createKeyword (kw)); }
8630
8675
COMMENTS = kw :"COMMENTS" i ! ident_part { return loc (createKeyword (kw)); }
8631
8676
COMMIT = kw :"COMMIT" i ! ident_part { return loc (createKeyword (kw)); }
8677
+ COMMITTED = kw :"COMMITTED" i ! ident_part { return loc (createKeyword (kw)); }
8632
8678
COMPACT = kw :"COMPACT" i ! ident_part { return loc (createKeyword (kw)); }
8633
8679
COMPRESSED = kw :"COMPRESSED" i ! ident_part { return loc (createKeyword (kw)); }
8634
8680
COMPRESSION = kw :"COMPRESSION" i ! ident_part { return loc (createKeyword (kw)); }
@@ -8813,6 +8859,7 @@ INVOKER = kw:"INVOKER"i !ident_part { return loc(createK
8813
8859
IS = kw :"IS" i ! ident_part { return loc (createKeyword (kw)); }
8814
8860
ISNULL = kw :"ISNULL" ! ident_part { return loc (createKeyword (kw)); }
8815
8861
ISODOW = kw :"ISODOW" i ! ident_part { return loc (createKeyword (kw)); }
8862
+ ISOLATION = kw :"ISOLATION" i ! ident_part { return loc (createKeyword (kw)); }
8816
8863
ISOWEEK = kw :"ISOWEEK" i ! ident_part { return loc (createKeyword (kw)); }
8817
8864
ISOYEAR = kw :"ISOYEAR" i ! ident_part { return loc (createKeyword (kw)); }
8818
8865
ITERATE = kw :"ITERATE" i ! ident_part { return loc (createKeyword (kw)); }
@@ -9028,6 +9075,7 @@ SECURITY = kw:"SECURITY"i !ident_part { return loc(createK
9028
9075
SELECT = kw :"SELECT" i ! ident_part { return loc (createKeyword (kw)); }
9029
9076
SEQUENCE = kw :"SEQUENCE" i ! ident_part { return loc (createKeyword (kw)); }
9030
9077
SEQUENCES = kw :"SEQUENCES" i ! ident_part { return loc (createKeyword (kw)); }
9078
+ SERIALIZABLE = kw :"SERIALIZABLE" i ! ident_part { return loc (createKeyword (kw)); }
9031
9079
SERVER = kw :"SERVER" i ! ident_part { return loc (createKeyword (kw)); }
9032
9080
SESSION = kw :"SESSION" i ! ident_part { return loc (createKeyword (kw)); }
9033
9081
SESSION_USER = kw :"SESSION_USER" i ! ident_part { return loc (createKeyword (kw)); }
@@ -9107,6 +9155,7 @@ TUESDAY = kw:"TUESDAY"i !ident_part { return loc(createK
9107
9155
TYPE = kw :"TYPE" i ! ident_part { return loc (createKeyword (kw)); }
9108
9156
UESCAPE = kw :"UESCAPE" i ! ident_part { return loc (createKeyword (kw)); }
9109
9157
UNBOUNDED = kw :"UNBOUNDED" i ! ident_part { return loc (createKeyword (kw)); }
9158
+ UNCOMMITTED = kw :"UNCOMMITTED" i ! ident_part { return loc (createKeyword (kw)); }
9110
9159
UNDEFINED = kw :"UNDEFINED" i ! ident_part { return loc (createKeyword (kw)); }
9111
9160
UNION = kw :"UNION" i ! ident_part { return loc (createKeyword (kw)); }
9112
9161
UNIQUE = kw :"UNIQUE" i ! ident_part { return loc (createKeyword (kw)); }
0 commit comments