@@ -16006,6 +16006,27 @@ fn parse_not_null_supported() {
1600616006 let _ = dialects.expr_parses_to("x NOT NULL", "x IS NOT NULL");
1600716007}
1600816008
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+
1600916030#[test]
1601016031fn parse_notnull_unsupported() {
1601116032 // Only Postgres, DuckDB, and SQLite support `x NOTNULL` as an expression
@@ -16022,3 +16043,24 @@ fn parse_notnull_supported() {
1602216043 let dialects = all_dialects_where(|d| d.supports_is_not_null_alias(IsNotNullAlias::NotNull));
1602316044 let _ = dialects.expr_parses_to("x NOTNULL", "x IS NOT NULL");
1602416045}
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