Hello
small patch, add form is not distinct from expression (sql2003)
regards
Pavel Stehule
_________________________________________________________________
Emotikony a pozadi programu MSN Messenger ozivi vasi konverzaci.
http://messenger.msn.cz/
diff -c -r pgsql.old/doc/src/sgml/func.sgml pgsql/doc/src/sgml/func.sgml
*** pgsql.old/doc/src/sgml/func.sgml 2005-11-19 20:44:54.000000000 +0100
--- pgsql/doc/src/sgml/func.sgml 2005-11-25 16:47:42.000000000 +0100
***************
*** 345,350 ****
--- 345,353 ----
<indexterm>
<primary>IS DISTINCT FROM</primary>
</indexterm>
+ <indexterm>
+ <primary>IS NOT DISTINCT FROM</primary>
+ </indexterm>
The ordinary comparison operators yield null (signifying <quote>unknown</>)
when either input is null. Another way to do comparisons is with the
<literal>IS DISTINCT FROM</literal> construct:
***************
*** 356,362 ****
one input is null it will return true. Thus it effectively acts as though
null were a normal data value, rather than <quote>unknown</>.
</para>
!
<para>
<indexterm>
<primary>IS TRUE</primary>
--- 359,371 ----
one input is null it will return true. Thus it effectively acts as though
null were a normal data value, rather than <quote>unknown</>.
</para>
!
! <para>
! <literal>IS NOT DISTINCT FROM</literal> is equal construct:
! <synopsis>
! NOT(<replaceable>expression</replaceable> IS DISTINCT FROM <replaceable>expression</replaceable>)
! </synopsis>
! </para>
<para>
<indexterm>
<primary>IS TRUE</primary>
diff -c -r pgsql.old/src/backend/parser/gram.y pgsql/src/backend/parser/gram.y
*** pgsql.old/src/backend/parser/gram.y 2005-11-22 16:24:17.000000000 +0100
--- pgsql/src/backend/parser/gram.y 2005-11-25 16:39:45.000000000 +0100
***************
*** 6715,6720 ****
--- 6715,6726 ----
{
$$ = (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);
***************
*** 6898,6903 ****
--- 6904,6914 ----
{
$$ = (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 -c -r pgsql.old/src/test/regress/sql/select_distinct.sql pgsql/src/test/regress/sql/select_distinct.sql
*** pgsql.old/src/test/regress/sql/select_distinct.sql 2002-12-13 21:16:11.000000000 +0100
--- pgsql/src/test/regress/sql/select_distinct.sql 2005-11-25 16:49:20.000000000 +0100
***************
*** 56,58 ****
--- 56,64 ----
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 "yes";
+ SELECT 2 IS NOT DISTINCT FROM 2 as "no";
+ SELECT 2 IS NOT DISTINCT FROM null as "yes";
+ SELECT null IS NOT DISTINCT FROM null as "no";
---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?
http://www.postgresql.org/docs/faq