File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -76,12 +76,16 @@ impl Parse for DeriveDialectInput {
7676 while !content. is_empty ( ) {
7777 let key: Ident = content. parse ( ) ?;
7878 content. parse :: < Token ! [ =] > ( ) ?;
79- let value = if content. peek ( LitBool ) {
80- Override :: Bool ( content. parse ( ) ?)
81- } else if content. peek ( LitChar ) {
82- Override :: Char ( content. parse ( ) ?)
83- } else {
84- Override :: Expr ( content. parse ( ) ?)
79+ let value = match content. parse :: < Expr > ( ) ? {
80+ Expr :: Lit ( syn:: ExprLit {
81+ lit : syn:: Lit :: Bool ( value) ,
82+ ..
83+ } ) => Override :: Bool ( value) ,
84+ Expr :: Lit ( syn:: ExprLit {
85+ lit : syn:: Lit :: Char ( value) ,
86+ ..
87+ } ) => Override :: Char ( value) ,
88+ expr => Override :: Expr ( expr) ,
8589 } ;
8690 overrides. push ( ( key, value) ) ;
8791 if content. peek ( Token ! [ , ] ) {
Original file line number Diff line number Diff line change @@ -117,7 +117,9 @@ pub use self::teradata::TeradataDialect;
117117/// use sqlparser::dialect::{BindPlaceholderStyle, Dialect, GenericDialect};
118118///
119119/// derive_dialect!(DollarBindDialect, GenericDialect,
120- /// overrides = { ordered_bind_placeholder_style = Some(BindPlaceholderStyle::DollarNumbered) }
120+ /// overrides = {
121+ /// ordered_bind_placeholder_style = true.then_some(BindPlaceholderStyle::DollarNumbered)
122+ /// }
121123/// );
122124/// let d: &dyn Dialect = &DollarBindDialect::new();
123125/// assert_eq!(
Original file line number Diff line number Diff line change @@ -194,3 +194,29 @@ fn test_lambda_keyword_syntax_with_json_arrow_operator() {
194194 } ;
195195 assert_eq ! ( & BinaryOperator :: Arrow , op) ;
196196}
197+
198+ #[ test]
199+ fn test_literal_leading_char_expression_override ( ) {
200+ derive_dialect ! ( LiteralExpressionDialect , GenericDialect , overrides = {
201+ is_identifier_start = '_' == ch || ch. is_ascii_alphabetic( ) ,
202+ } ) ;
203+ let dialect = LiteralExpressionDialect :: new ( ) ;
204+
205+ assert ! ( dialect. is_identifier_start( '_' ) ) ;
206+ assert ! ( dialect. is_identifier_start( 'a' ) ) ;
207+ assert ! ( !dialect. is_identifier_start( '1' ) ) ;
208+ }
209+
210+ #[ test]
211+ fn test_literal_leading_bool_expression_override ( ) {
212+ derive_dialect ! ( LiteralExpressionDialect , GenericDialect , overrides = {
213+ ordered_bind_placeholder_style =
214+ true . then_some( sqlparser:: dialect:: BindPlaceholderStyle :: DollarNumbered ) ,
215+ } ) ;
216+ let dialect = LiteralExpressionDialect :: new ( ) ;
217+
218+ assert_eq ! (
219+ dialect. ordered_bind_placeholder_style( ) ,
220+ Some ( sqlparser:: dialect:: BindPlaceholderStyle :: DollarNumbered )
221+ ) ;
222+ }
You can’t perform that action at this time.
0 commit comments