diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/parser/gram.y | 14 | ||||
-rw-r--r-- | src/test/regress/expected/select_distinct.out | 25 | ||||
-rw-r--r-- | src/test/regress/sql/select_distinct.sql | 6 |
3 files changed, 44 insertions, 1 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 876e8b53ff5..16fdde7b9bc 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.516 2005/11/28 04:35:31 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.517 2005/12/11 10:54:27 neilc Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -6715,6 +6715,13 @@ a_expr: c_expr { $$ = $1; } { $$ = (Node *) makeSimpleA_Expr(AEXPR_DISTINCT, "=", $1, $5); } + | a_expr IS NOT DISTINCT FROM a_expr %prec IS + { + $$ = (Node *) makeA_Expr(AEXPR_NOT, NIL, NULL, + (Node *) makeSimpleA_Expr(AEXPR_DISTINCT, + "=", $1, $6)); + + } | a_expr IS OF '(' type_list ')' %prec IS { $$ = (Node *) makeSimpleA_Expr(AEXPR_OF, "=", $1, (Node *) $5); @@ -6880,6 +6887,11 @@ b_expr: c_expr { $$ = (Node *) makeSimpleA_Expr(AEXPR_DISTINCT, "=", $1, $5); } + | b_expr IS NOT DISTINCT FROM b_expr %prec IS + { + $$ = (Node *) makeA_Expr(AEXPR_NOT, NIL, + NULL, (Node *) makeSimpleA_Expr(AEXPR_DISTINCT, "=", $1, $6)); + } | b_expr IS OF '(' type_list ')' %prec IS { $$ = (Node *) makeSimpleA_Expr(AEXPR_OF, "=", $1, (Node *) $5); diff --git a/src/test/regress/expected/select_distinct.out b/src/test/regress/expected/select_distinct.out index 019638ed176..abe34ae7ae5 100644 --- a/src/test/regress/expected/select_distinct.out +++ b/src/test/regress/expected/select_distinct.out @@ -195,3 +195,28 @@ SELECT null IS DISTINCT FROM null as "no"; f (1 row) +-- ANSI SQL 2003 form +SELECT 1 IS NOT DISTINCT FROM 2 as "no"; + no +---- + f +(1 row) + +SELECT 2 IS NOT DISTINCT FROM 2 as "yes"; + yes +----- + t +(1 row) + +SELECT 2 IS NOT DISTINCT FROM null as "no"; + no +---- + f +(1 row) + +SELECT null IS NOT DISTINCT FROM null as "yes"; + yes +----- + t +(1 row) + diff --git a/src/test/regress/sql/select_distinct.sql b/src/test/regress/sql/select_distinct.sql index 94032c312ee..c4a63aaf16f 100644 --- a/src/test/regress/sql/select_distinct.sql +++ b/src/test/regress/sql/select_distinct.sql @@ -56,3 +56,9 @@ SELECT 1 IS DISTINCT FROM 2 as "yes"; SELECT 2 IS DISTINCT FROM 2 as "no"; SELECT 2 IS DISTINCT FROM null as "yes"; SELECT null IS DISTINCT FROM null as "no"; + +-- ANSI SQL 2003 form +SELECT 1 IS NOT DISTINCT FROM 2 as "no"; +SELECT 2 IS NOT DISTINCT FROM 2 as "yes"; +SELECT 2 IS NOT DISTINCT FROM null as "no"; +SELECT null IS NOT DISTINCT FROM null as "yes"; |