@@ -30,14 +30,13 @@ use core::str::Chars;
30
30
31
31
#[ cfg( feature = "serde" ) ]
32
32
use serde:: { Deserialize , Serialize } ;
33
-
34
33
#[ cfg( feature = "visitor" ) ]
35
34
use sqlparser_derive:: { Visit , VisitMut } ;
36
35
37
36
use crate :: ast:: DollarQuotedString ;
38
- use crate :: dialect:: { BigQueryDialect , DuckDbDialect , GenericDialect , SnowflakeDialect } ;
37
+ use crate :: dialect:: { BigQueryDialect , ClickHouseDialect , DuckDbDialect , GenericDialect , SnowflakeDialect } ;
39
38
use crate :: dialect:: { Dialect , MySqlDialect } ;
40
- use crate :: keywords:: { Keyword , ALL_KEYWORDS , ALL_KEYWORDS_INDEX } ;
39
+ use crate :: keywords:: { ALL_KEYWORDS , ALL_KEYWORDS_INDEX , Keyword } ;
41
40
42
41
/// SQL Token enumeration
43
42
#[ derive( Debug , Clone , PartialEq , PartialOrd , Eq , Ord , Hash ) ]
@@ -800,6 +799,8 @@ impl<'a> Tokenizer<'a> {
800
799
chars. next ( ) ; // consume
801
800
match chars. peek ( ) {
802
801
Some ( '>' ) => self . consume_and_return ( chars, Token :: RArrow ) ,
802
+ Some ( '=' ) if dialect_of ! ( self is ClickHouseDialect ) =>
803
+ self . consume_and_return ( chars, Token :: DoubleEq ) ,
803
804
_ => Ok ( Some ( Token :: Eq ) ) ,
804
805
}
805
806
}
@@ -1308,6 +1309,28 @@ mod tests {
1308
1309
compare ( expected, tokens) ;
1309
1310
}
1310
1311
1312
+ #[ test]
1313
+ fn tokenize_clickhouse_double_equal ( ) {
1314
+ let sql = String :: from ( "SELECT foo=='1'" ) ;
1315
+ let dialect = ClickHouseDialect { } ;
1316
+ let mut tokenizer = Tokenizer :: new ( & dialect, & sql) ;
1317
+ let tokens = tokenizer. tokenize ( ) . unwrap ( ) ;
1318
+
1319
+ let expected = vec ! [
1320
+ Token :: make_keyword( "SELECT" ) ,
1321
+ Token :: Whitespace ( Whitespace :: Space ) ,
1322
+ Token :: Word ( Word {
1323
+ value: "foo" . to_string( ) ,
1324
+ quote_style: None ,
1325
+ keyword: Keyword :: NoKeyword ,
1326
+ } ) ,
1327
+ Token :: DoubleEq ,
1328
+ Token :: SingleQuotedString ( "1" . to_string( ) ) ,
1329
+ ] ;
1330
+
1331
+ compare ( expected, tokens) ;
1332
+ }
1333
+
1311
1334
#[ test]
1312
1335
fn tokenize_select_exponent ( ) {
1313
1336
let sql = String :: from ( "SELECT 1e10, 1e-10, 1e+10, 1ea, 1e-10a, 1e-10-10" ) ;
0 commit comments