File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -8470,11 +8470,24 @@ impl<'a> Parser<'a> {
84708470 } )
84718471 }
84728472
8473+ fn parse_pragma_value ( & mut self ) -> Result < Value , ParserError > {
8474+ match self . parse_value ( ) ? {
8475+ v @ Value :: SingleQuotedString ( _) => Ok ( v) ,
8476+ v @ Value :: DoubleQuotedString ( _) => Ok ( v) ,
8477+ v @ Value :: Number ( _, _) => Ok ( v) ,
8478+ v @ Value :: Placeholder ( _) => Ok ( v) ,
8479+ _ => {
8480+ self . prev_token ( ) ;
8481+ self . expected ( "number or string or ? placeholder" , self . peek_token ( ) )
8482+ }
8483+ }
8484+ }
8485+
84738486 // PRAGMA [schema-name '.'] pragma-name [('=' pragma-value) | '(' pragma-value ')']
84748487 pub fn parse_pragma ( & mut self ) -> Result < Statement , ParserError > {
84758488 let name = self . parse_object_name ( ) ?;
84768489 if self . consume_token ( & Token :: LParen ) {
8477- let value = self . parse_number_value ( ) ?;
8490+ let value = self . parse_pragma_value ( ) ?;
84788491 self . expect_token ( & Token :: RParen ) ?;
84798492 Ok ( Statement :: Pragma {
84808493 name,
@@ -8484,7 +8497,7 @@ impl<'a> Parser<'a> {
84848497 } else if self . consume_token ( & Token :: Eq ) {
84858498 Ok ( Statement :: Pragma {
84868499 name,
8487- value : Some ( self . parse_number_value ( ) ?) ,
8500+ value : Some ( self . parse_pragma_value ( ) ?) ,
84888501 is_eq : true ,
84898502 } )
84908503 } else {
Original file line number Diff line number Diff line change @@ -70,6 +70,54 @@ fn pragma_funciton_style() {
7070 }
7171}
7272
73+ #[ test]
74+ fn pragma_eq_string_style ( ) {
75+ let sql = "PRAGMA table_info = 'sqlite_master'" ;
76+ match sqlite_and_generic ( ) . verified_stmt ( sql) {
77+ Statement :: Pragma {
78+ name,
79+ value : Some ( val) ,
80+ is_eq : true ,
81+ } => {
82+ assert_eq ! ( "table_info" , name. to_string( ) ) ;
83+ assert_eq ! ( "'sqlite_master'" , val. to_string( ) ) ;
84+ }
85+ _ => unreachable ! ( ) ,
86+ }
87+ }
88+
89+ #[ test]
90+ fn pragma_function_string_style ( ) {
91+ let sql = "PRAGMA table_info(\" sqlite_master\" )" ;
92+ match sqlite_and_generic ( ) . verified_stmt ( sql) {
93+ Statement :: Pragma {
94+ name,
95+ value : Some ( val) ,
96+ is_eq : false ,
97+ } => {
98+ assert_eq ! ( "table_info" , name. to_string( ) ) ;
99+ assert_eq ! ( "\" sqlite_master\" " , val. to_string( ) ) ;
100+ }
101+ _ => unreachable ! ( ) ,
102+ }
103+ }
104+
105+ #[ test]
106+ fn pragma_eq_placehoder_style ( ) {
107+ let sql = "PRAGMA table_info = ?" ;
108+ match sqlite_and_generic ( ) . verified_stmt ( sql) {
109+ Statement :: Pragma {
110+ name,
111+ value : Some ( val) ,
112+ is_eq : true ,
113+ } => {
114+ assert_eq ! ( "table_info" , name. to_string( ) ) ;
115+ assert_eq ! ( "?" , val. to_string( ) ) ;
116+ }
117+ _ => unreachable ! ( ) ,
118+ }
119+ }
120+
73121#[ test]
74122fn parse_create_table_without_rowid ( ) {
75123 let sql = "CREATE TABLE t (a INT) WITHOUT ROWID" ;
You can’t perform that action at this time.
0 commit comments