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

Reply via email to