I had to remove the factorial example from the casting docs because
factorial is now defined only for numeric.  Would someone take the
attached example and make a new one with a different operator?  

Thanks.

---------------------------------------------------------------------------

Gavin Sherry wrote:
> Attached is a patch implementing factorial(), returning numeric. Points to
> note:
> 
> 1) arttype is numeric. I thought this was the best way of allowing
> arbitarily large factorials, even though factorial(2^63) is a large
> number. Happy to change to integers if this is overkill.
> 2) since we're accepting numeric arguments, the patch tests for floats. If
> a numeric is passed with non-zero decimal portion, an error is raised
> since (from memory) they are undefined.
> 3) I have not removed factorial([int2|int4|int8]), not their operator
> counterparts since I didn't know what people would want done with these.
> 4) I haven't added any documentation but am happy to once I know if people
> want int or numeric arguments.
> 
> Thanks,
> 
> Gavin

Content-Description: 

[ Attachment, skipping... ]

> 
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
>       subscribe-nomail command to [EMAIL PROTECTED] so that your
>       message can get through to the mailing list cleanly

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [EMAIL PROTECTED]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: doc/src/sgml/typeconv.sgml
===================================================================
RCS file: /cvsroot/pgsql-server/doc/src/sgml/typeconv.sgml,v
retrieving revision 1.39
diff -c -c -r1.39 typeconv.sgml
*** doc/src/sgml/typeconv.sgml  29 Nov 2003 19:51:38 -0000      1.39
--- doc/src/sgml/typeconv.sgml  1 Dec 2003 21:42:04 -0000
***************
*** 437,466 ****
  ERROR:  "-4.5e500" is out of range for type double precision
  </screen>
  </para>
- 
- <para>
- On the other hand, the postfix operator <literal>!</> (factorial)
- is defined only for integer data types, not for <type>float8</type>.  So, if we
- try a similar case with <literal>!</>, we get:
- <screen>
- SELECT '20' ! AS "factorial";
- 
- ERROR:  operator is not unique: "unknown" !
- HINT:  Could not choose a best candidate operator. You may need to add explicit
- type casts.
- </screen>
- This happens because the system can't decide which of the several
- possible <literal>!</> operators should be preferred.  We can help
- it out with an explicit cast:
- <screen>
- SELECT CAST('20' AS int8) ! AS "factorial";
- 
-       factorial
- ---------------------
-  2432902008176640000
- (1 row)
- </screen>
- </para>
  </example>
  
  </sect1>
--- 437,442 ----
---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

               http://www.postgresql.org/docs/faqs/FAQ.html

Reply via email to