diff --git a/pkg/sql/analyze.go b/pkg/sql/analyze.go index 62d247a8b8c5..cc1c17c8e9ea 100644 --- a/pkg/sql/analyze.go +++ b/pkg/sql/analyze.go @@ -207,8 +207,20 @@ func simplifyNotExpr(evalCtx *parser.EvalContext, n *parser.NotExpr) (parser.Typ op = parser.SimilarTo case parser.RegMatch: op = parser.NotRegMatch + case parser.NotRegMatch: + op = parser.RegMatch case parser.RegIMatch: op = parser.NotRegIMatch + case parser.NotRegIMatch: + op = parser.RegIMatch + case parser.IsDistinctFrom: + op = parser.IsNotDistinctFrom + case parser.IsNotDistinctFrom: + op = parser.IsDistinctFrom + case parser.Is: + op = parser.IsNot + case parser.IsNot: + op = parser.Is default: return parser.MakeDBool(true), false } diff --git a/pkg/sql/analyze_test.go b/pkg/sql/analyze_test.go index 13838b5723c0..cf4ca0c1e661 100644 --- a/pkg/sql/analyze_test.go +++ b/pkg/sql/analyze_test.go @@ -330,6 +330,14 @@ func TestSimplifyNotExpr(t *testing.T) { {`NOT i NOT LIKE 'foo'`, `i = 'foo'`, false, false}, {`NOT i SIMILAR TO 'foo'`, `true`, false, false}, {`NOT i NOT SIMILAR TO 'foo'`, `i = 'foo'`, false, false}, + {`NOT i ~ 'foo'`, `true`, false, false}, + {`NOT i !~ 'foo'`, `true`, false, false}, + {`NOT i ~* 'foo'`, `true`, false, false}, + {`NOT i !~* 'foo'`, `true`, false, false}, + {`NOT a IS DISTINCT FROM 1`, `true`, false, false}, + {`NOT a IS NOT DISTINCT FROM 1`, `true`, false, false}, + {`NOT a IS NULL`, `a IS NOT NULL`, true, true}, + {`NOT a IS NOT NULL`, `a IS NULL`, true, true}, {`NOT (a != 1 AND b != 1)`, `(a = 1) OR (b = 1)`, true, true}, {`NOT (a != 1 OR a < 1)`, `a = 1`, true, true}, {`NOT NOT a = 1`, `a = 1`, true, true},