@@ -15992,6 +15992,27 @@ fn parse_not_null_supported() {
1599215992 let _ = dialects.expr_parses_to("x NOT NULL", "x IS NOT NULL");
1599315993}
1599415994
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+
1599516016#[test]
1599616017fn parse_notnull_unsupported() {
1599716018 // Only Postgres, DuckDB, and SQLite support `x NOTNULL` as an expression
@@ -16008,3 +16029,24 @@ fn parse_notnull_supported() {
1600816029 let dialects = all_dialects_where(|d| d.supports_is_not_null_alias(IsNotNullAlias::NotNull));
1600916030 let _ = dialects.expr_parses_to("x NOTNULL", "x IS NOT NULL");
1601016031}
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