@@ -15992,6 +15992,27 @@ fn parse_not_null_supported() {
15992
15992
let _ = dialects.expr_parses_to("x NOT NULL", "x IS NOT NULL");
15993
15993
}
15994
15994
15995
+ #[test]
15996
+ fn test_not_null_precedence() {
15997
+ // For dialects which support it, `NOT NULL NOT NULL` should
15998
+ // parse as `(NOT (NULL IS NOT NULL))`
15999
+ let supported_dialects =
16000
+ all_dialects_where(|d| d.supports_is_not_null_alias(IsNotNullAlias::NotSpaceNull));
16001
+ let unsuported_dialects =
16002
+ all_dialects_except(|d| d.supports_is_not_null_alias(IsNotNullAlias::NotSpaceNull));
16003
+
16004
+ assert_matches!(
16005
+ supported_dialects.expr_parses_to("NOT NULL NOT NULL", "NOT NULL IS NOT NULL"),
16006
+ Expr::UnaryOp {
16007
+ op: UnaryOperator::Not,
16008
+ ..
16009
+ }
16010
+ );
16011
+
16012
+ // for unsupported dialects, parsing should stop at `NOT NULL`
16013
+ unsuported_dialects.expr_parses_to("NOT NULL NOT NULL", "NOT NULL");
16014
+ }
16015
+
15995
16016
#[test]
15996
16017
fn parse_notnull_unsupported() {
15997
16018
// Only Postgres, DuckDB, and SQLite support `x NOTNULL` as an expression
@@ -16008,3 +16029,24 @@ fn parse_notnull_supported() {
16008
16029
let dialects = all_dialects_where(|d| d.supports_is_not_null_alias(IsNotNullAlias::NotNull));
16009
16030
let _ = dialects.expr_parses_to("x NOTNULL", "x IS NOT NULL");
16010
16031
}
16032
+
16033
+ #[test]
16034
+ fn test_notnull_precedence() {
16035
+ // For dialects which support it, `NOT NULL NOTNULL` should
16036
+ // parse as `(NOT (NULL IS NOT NULL))`
16037
+ let supported_dialects =
16038
+ all_dialects_where(|d| d.supports_is_not_null_alias(IsNotNullAlias::NotNull));
16039
+ let unsuported_dialects =
16040
+ all_dialects_except(|d| d.supports_is_not_null_alias(IsNotNullAlias::NotNull));
16041
+
16042
+ assert_matches!(
16043
+ supported_dialects.expr_parses_to("NOT NULL NOTNULL", "NOT NULL IS NOT NULL"),
16044
+ Expr::UnaryOp {
16045
+ op: UnaryOperator::Not,
16046
+ ..
16047
+ }
16048
+ );
16049
+
16050
+ // for unsupported dialects, parsing should stop at `NOT NULL`
16051
+ unsuported_dialects.expr_parses_to("NOT NULL NOTNULL", "NOT NULL");
16052
+ }
0 commit comments