@@ -882,9 +882,6 @@ fn opt_xml_passing_mech(p: &mut Parser<'_>) -> bool {
882882}
883883
884884fn xmlexists_arg ( p : & mut Parser < ' _ > ) {
885- if expr ( p) . is_none ( ) {
886- p. error ( "expected expression" ) ;
887- }
888885 p. expect ( PASSING_KW ) ;
889886 opt_xml_passing_mech ( p) ;
890887 if expr ( p) . is_none ( ) {
@@ -905,6 +902,9 @@ fn xmlexists_arg(p: &mut Parser<'_>) {
905902fn xmlexists_fn ( p : & mut Parser < ' _ > ) -> CompletedMarker {
906903 assert ! ( p. at( XMLEXISTS_KW ) ) ;
907904 custom_fn ( p, XMLEXISTS_KW , |p| {
905+ if expr ( p) . is_none ( ) {
906+ p. error ( "expected expression" ) ;
907+ }
908908 xmlexists_arg ( p) ;
909909 } )
910910}
@@ -979,7 +979,7 @@ fn xmlserialize_fn(p: &mut Parser<'_>) -> CompletedMarker {
979979 p. error ( "expected expression" ) ;
980980 }
981981 p. expect ( AS_KW ) ;
982- simple_type_name ( p) ;
982+ type_name ( p) ;
983983 if p. eat ( NO_KW ) {
984984 p. expect ( INDENT_KW ) ;
985985 } else {
@@ -2898,14 +2898,15 @@ fn data_source(p: &mut Parser<'_>) {
28982898 p. expect ( L_PAREN ) ;
28992899 xml_namespace_list ( p) ;
29002900 p. expect ( R_PAREN ) ;
2901+ p. expect ( COMMA ) ;
29012902 }
29022903 if expr ( p) . is_none ( ) {
29032904 p. error ( "expected expression" ) ;
29042905 }
29052906 xmlexists_arg ( p) ;
2906- p. expect ( COLUMNS_KW ) ;
29072907 xmltable_column_list ( p) ;
29082908 p. expect ( R_PAREN ) ;
2909+ opt_alias ( p) ;
29092910 }
29102911 ROWS_KW if p. nth_at ( 1 , FROM_KW ) => {
29112912 p. bump ( ROWS_KW ) ;
@@ -2940,34 +2941,39 @@ fn data_source(p: &mut Parser<'_>) {
29402941}
29412942
29422943fn xmltable_column_list ( p : & mut Parser < ' _ > ) {
2944+ let m = p. start ( ) ;
2945+ p. expect ( COLUMNS_KW ) ;
29432946 xmltable_column_el ( p) ;
29442947 while !p. at ( EOF ) && p. eat ( COMMA ) {
29452948 xmltable_column_el ( p) ;
29462949 }
2950+ m. complete ( p, XML_TABLE_COLUMN_LIST ) ;
29472951}
29482952
29492953fn xmltable_column_el ( p : & mut Parser < ' _ > ) {
2954+ let m = p. start ( ) ;
29502955 name ( p) ;
29512956 if p. eat ( FOR_KW ) {
29522957 p. expect ( ORDINALITY_KW ) ;
29532958 } else {
29542959 type_name ( p) ;
29552960 opt_xmltable_column_option_list ( p) ;
29562961 }
2962+ m. complete ( p, XML_TABLE_COLUMN ) ;
29572963}
29582964
29592965fn opt_xmltable_column_option_list ( p : & mut Parser < ' _ > ) {
2960- if opt_xmltable_column_option_el ( p) {
2966+ let m = p. start ( ) ;
2967+ if opt_xmltable_column_option_el ( p) . is_none ( ) {
2968+ m. abandon ( p) ;
29612969 return ;
29622970 }
2963- while !p. at ( EOF ) && p. eat ( COMMA ) {
2964- if !opt_xmltable_column_option_el ( p) {
2965- p. error ( "expected column option" ) ;
2966- }
2967- }
2971+ while !p. at ( EOF ) && opt_xmltable_column_option_el ( p) . is_some ( ) { }
2972+ m. complete ( p, XML_COLUMN_OPTION_LIST ) ;
29682973}
29692974
2970- fn opt_xmltable_column_option_el ( p : & mut Parser < ' _ > ) -> bool {
2975+ fn opt_xmltable_column_option_el ( p : & mut Parser < ' _ > ) -> Option < CompletedMarker > {
2976+ let m = p. start ( ) ;
29712977 match p. current ( ) {
29722978 DEFAULT_KW | PATH_KW | IDENT => {
29732979 p. bump_any ( ) ;
@@ -2982,9 +2988,12 @@ fn opt_xmltable_column_option_el(p: &mut Parser<'_>) -> bool {
29822988 NULL_KW => {
29832989 p. bump ( NULL_KW ) ;
29842990 }
2985- _ => return false ,
2991+ _ => {
2992+ m. abandon ( p) ;
2993+ return None ;
2994+ }
29862995 }
2987- true
2996+ Some ( m . complete ( p , XML_COLUMN_OPTION ) )
29882997}
29892998
29902999fn xml_namespace_list ( p : & mut Parser < ' _ > ) {
@@ -13098,6 +13107,10 @@ fn set(p: &mut Parser<'_>) -> CompletedMarker {
1309813107 let m = p. start ( ) ;
1309913108 p. bump ( SET_KW ) ;
1310013109 let _ = p. eat ( SESSION_KW ) || p. eat ( LOCAL_KW ) ;
13110+ if p. eat ( XML_KW ) {
13111+ p. expect ( OPTION_KW ) ;
13112+ let _ = p. eat ( DOCUMENT_KW ) || p. eat ( CONTENT_KW ) ;
13113+ } else
1310113114 // TIME ZONE { value | 'value' | LOCAL | DEFAULT }
1310213115 if p. eat ( TIME_KW ) {
1310313116 p. expect ( ZONE_KW ) ;
0 commit comments