@@ -16006,6 +16006,27 @@ fn parse_not_null_supported() {
16006
16006
let _ = dialects.expr_parses_to("x NOT NULL", "x IS NOT NULL");
16007
16007
}
16008
16008
16009
+ #[test]
16010
+ fn test_not_null_precedence() {
16011
+ // For dialects which support it, `NOT NULL NOT NULL` should
16012
+ // parse as `(NOT (NULL IS NOT NULL))`
16013
+ let supported_dialects =
16014
+ all_dialects_where(|d| d.supports_is_not_null_alias(IsNotNullAlias::NotSpaceNull));
16015
+ let unsuported_dialects =
16016
+ all_dialects_except(|d| d.supports_is_not_null_alias(IsNotNullAlias::NotSpaceNull));
16017
+
16018
+ assert_matches!(
16019
+ supported_dialects.expr_parses_to("NOT NULL NOT NULL", "NOT NULL IS NOT NULL"),
16020
+ Expr::UnaryOp {
16021
+ op: UnaryOperator::Not,
16022
+ ..
16023
+ }
16024
+ );
16025
+
16026
+ // for unsupported dialects, parsing should stop at `NOT NULL`
16027
+ unsuported_dialects.expr_parses_to("NOT NULL NOT NULL", "NOT NULL");
16028
+ }
16029
+
16009
16030
#[test]
16010
16031
fn parse_notnull_unsupported() {
16011
16032
// Only Postgres, DuckDB, and SQLite support `x NOTNULL` as an expression
@@ -16022,3 +16043,24 @@ fn parse_notnull_supported() {
16022
16043
let dialects = all_dialects_where(|d| d.supports_is_not_null_alias(IsNotNullAlias::NotNull));
16023
16044
let _ = dialects.expr_parses_to("x NOTNULL", "x IS NOT NULL");
16024
16045
}
16046
+
16047
+ #[test]
16048
+ fn test_notnull_precedence() {
16049
+ // For dialects which support it, `NOT NULL NOTNULL` should
16050
+ // parse as `(NOT (NULL IS NOT NULL))`
16051
+ let supported_dialects =
16052
+ all_dialects_where(|d| d.supports_is_not_null_alias(IsNotNullAlias::NotNull));
16053
+ let unsuported_dialects =
16054
+ all_dialects_except(|d| d.supports_is_not_null_alias(IsNotNullAlias::NotNull));
16055
+
16056
+ assert_matches!(
16057
+ supported_dialects.expr_parses_to("NOT NULL NOTNULL", "NOT NULL IS NOT NULL"),
16058
+ Expr::UnaryOp {
16059
+ op: UnaryOperator::Not,
16060
+ ..
16061
+ }
16062
+ );
16063
+
16064
+ // for unsupported dialects, parsing should stop at `NOT NULL`
16065
+ unsuported_dialects.expr_parses_to("NOT NULL NOTNULL", "NOT NULL");
16066
+ }
0 commit comments