X-Original-To: pgsql-patches-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [64.117.224.130]) by svr1.postgresql.org (Postfix) with ESMTP id 4FB4DD1C9D9 for ; Fri, 1 Aug 2003 00:58:36 +0000 (GMT) Received: from svr1.postgresql.org ([64.117.224.193]) by localhost (neptune.hub.org [64.117.224.130]) (amavisd-new, port 10024) with ESMTP id 99010-09 for ; Thu, 31 Jul 2003 21:57:31 -0300 (ADT) Received: from linuxworld.com.au (www.linuxworld.com.au [203.34.46.50]) by svr1.postgresql.org (Postfix) with ESMTP id F365AD1C9E2 for ; Thu, 31 Jul 2003 21:58:27 -0300 (ADT) Received: from localhost (swm@localhost) by linuxworld.com.au (8.11.6p2/8.11.4) with ESMTP id h710wFj15576 for ; Fri, 1 Aug 2003 10:58:16 +1000 Date: Fri, 1 Aug 2003 10:58:15 +1000 (EST) From: Gavin Sherry To: pgsql-patches@postgresql.org Subject: Numeric version of factorial() Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="583741998-1952606938-1059698638=:12997" Content-ID: X-Virus-Scanned: by amavisd-new at postgresql.org X-Archive-Number: 200307/248 X-Sequence-Number: 7835 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --583741998-1952606938-1059698638=:12997 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: 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 --583741998-1952606938-1059698638=:12997 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="factorial.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="factorial.diff" SW5kZXg6IHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9udW1lcmljLmMNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL2N2c3Jv b3QvcGdzcWwtc2VydmVyL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9udW1lcmlj LmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjYyDQpkaWZmIC0yIC1jIC1y MS42MiBudW1lcmljLmMNCioqKiBzcmMvYmFja2VuZC91dGlscy9hZHQvbnVt ZXJpYy5jCTMgSnVsIDIwMDMgMTk6NDE6NDcgLTAwMDAJMS42Mg0KLS0tIHNy Yy9iYWNrZW5kL3V0aWxzL2FkdC9udW1lcmljLmMJMSBBdWcgMjAwMyAxNDo0 ODoyMyAtMDAwMA0KKioqKioqKioqKioqKioqDQoqKiogMTMxMiwxMzE1ICoq KioNCi0tLSAxMzEyLDE0MjkgLS0tLQ0KICAgKi8NCiAgDQorIC8qDQorICAq IG51bWVyaWNfZmFjKCkNCisgICogQ29tcHV0ZXIgZmFjdG9yaWFsDQorICAq Lw0KKyANCisgRGF0dW0NCisgbnVtZXJpY19mYWMoUEdfRlVOQ1RJT05fQVJH UykNCisgew0KKyANCisgCU51bWVyaWMJCW51bTEgPSBQR19HRVRBUkdfTlVN RVJJQygwKTsNCisgCU51bWVyaWNWYXIJY291bnQ7DQorIAlOdW1lcmljVmFy CWZhY3Q7DQorIAlOdW1lcmljVmFyCW9uZTsNCisgCU51bWVyaWNWYXIJemVy b3ZhcjsNCisgCU51bWVyaWNWYXIJcmVzdWx0Ow0KKyAJTnVtZXJpY1Zhcgl0 bXA7DQorIAlOdW1lcmljCQlyZXM7DQorIAlpbnQJCQlyZXQ7DQorIAlib29s CQlmaXJzdGNhbGwgPSB0cnVlOw0KKyANCisgCS8qDQorIAkgKiBIYW5kbGUg TmFODQorIAkgKi8NCisgCWlmIChOVU1FUklDX0lTX05BTihudW0xKSkNCisg CQlQR19SRVRVUk5fTlVNRVJJQyhtYWtlX3Jlc3VsdCgmY29uc3RfbmFuKSk7 DQorIA0KKyAJaW5pdF92YXIoJmZhY3QpOw0KKyAJaW5pdF92YXIoJm9uZSk7 DQorIAlzZXRfdmFyX2Zyb21fbnVtKG51bTEsICZmYWN0KTsNCisgCWludDhf dG9fbnVtZXJpY3ZhcigoaW50NjQpMSwgJm9uZSk7DQorIA0KKyAJcmV0ID0g Y21wX3ZhcigmZmFjdCwgJm9uZSk7CQ0KKyANCisgCS8qIGlmIDw9IDEsIHJl dHVybigxKSAqLw0KKyANCisgCWlmKHJldCA8IDEpIHsNCisgCQlyZXMgPSBt YWtlX3Jlc3VsdCgmb25lKTsNCisgCQlmcmVlX3ZhcigmZmFjdCk7DQorIAkJ ZnJlZV92YXIoJm9uZSk7DQorIAkJUEdfUkVUVVJOX05VTUVSSUMocmVzKTsN CisgCX0NCisgDQorIAlpbml0X3ZhcigmdG1wKTsNCisgICAgIHNldF92YXJf ZnJvbV9udW0obnVtMSwgJmZhY3QpOw0KKyANCisgICAgIC8qIA0KKyAJICog bi54ISBpcyB1bmRlZmluZWQsIHRydW5jYXRlIGZhY3RvcmlhbCwgYW5kIGNv bXBhcmUNCisgCSAqIHRvIG9yaWdpbmFsDQorIAkgKi8NCisgDQorICAgICBz ZXRfdmFyX2Zyb21fdmFyKCZmYWN0LCAmdG1wKTsNCisgCXRydW5jX3Zhcigm dG1wLDApOw0KKyAJcmV0ID0gY21wX3ZhcigmZmFjdCwgJnRtcCk7DQorIAlp ZihyZXQgIT0gMCkgew0KKyAJCWVsb2coRVJST1IsIkZhY3RvcmlhbHMgY2Fu IG9ubHkgYmUgY2FsY3VsYXRlZCBvbiBuYXR1cmFsIG51bWJlcnMiKTsNCisg CX0NCisgDQorIAkvKg0KKyAJICogVHJ1bmNhdGUgZmFjdG9yaWFsIGFueXdh eSwgc2luY2Ugbi4wMDAwIG1pZ2h0IGhhdmUgYmVlbiBwYXNzZWQNCisgCSAq Lw0KKyANCisgCXRydW5jX3ZhcigmZmFjdCwgMCk7DQorIA0KKyAJaW5pdF92 YXIoJmNvdW50KTsNCisgCWluaXRfdmFyKCZyZXN1bHQpOw0KKyAJaW5pdF92 YXIoJnplcm92YXIpOw0KKyAJemVyb192YXIoJnplcm92YXIpOw0KKyANCisg DQorIAlpbnQ4X3RvX251bWVyaWN2YXIoKGludDY0KTEsICZvbmUpOw0KKyAJ c2V0X3Zhcl9mcm9tX3Zhcigmb25lLCAmY291bnQpOw0KKyANCisgCS8qDQor IAkgKiBJbnRlcmF0ZSB0aHJvdWdoIE4gLi4uIDEsIG11bHRpcGxpbmcgYGNv dW50JyBieSBgZmFjdCcgZWFjaCB0aW1lDQorIAkgKi8NCisgDQorIAl3aGls ZSgxKSB7DQorIAkJaWYoIWZpcnN0Y2FsbCkgew0KKyAJCQlmcmVlX3Zhcigm Y291bnQpOw0KKyAJCQlpbml0X3ZhcigmY291bnQpOw0KKyAJCQlzZXRfdmFy X2Zyb21fdmFyKCZyZXN1bHQsJmNvdW50KTsNCisgDQorIAkJCWZyZWVfdmFy KCZyZXN1bHQpOw0KKyAJCQlpbml0X3ZhcigmcmVzdWx0KTsNCisgDQorIAkJ CXN1Yl92YXIoJmZhY3QsICZvbmUsICZyZXN1bHQpOw0KKyAJCQlmcmVlX3Zh cigmZmFjdCk7DQorIAkJCWluaXRfdmFyKCZmYWN0KTsNCisgCSAgICAgICAg c2V0X3Zhcl9mcm9tX3ZhcigmcmVzdWx0LCZmYWN0KTsNCisgDQorICAgICAJ ICAgIHJldCA9IGNtcF92YXIoJmZhY3QsICZ6ZXJvdmFyKTsNCisgICAgICAg ICAJaWYocmV0ID09IDApIHsNCisgCSAgICAgICAgICAgIGJyZWFrOw0KKyAg ICAgCSAgICB9DQorIA0KKyAgICAgICAgIAlmcmVlX3ZhcigmcmVzdWx0KTsN CisgCSAgICAgICAgaW5pdF92YXIoJnJlc3VsdCk7DQorIAkJfSBlbHNlIHsN CisgCQkJZmlyc3RjYWxsID0gZmFsc2U7DQorIAkJfQ0KKyAJCW11bF92YXIo JmNvdW50LCAmZmFjdCwgJnJlc3VsdCwgY291bnQuZHNjYWxlICsgZmFjdC5k c2NhbGUpOw0KKyAJfQ0KKyANCisgCXJlcyA9IG1ha2VfcmVzdWx0KCZjb3Vu dCk7DQorIA0KKyAJZnJlZV92YXIoJmNvdW50KTsNCisgCWZyZWVfdmFyKCZm YWN0KTsNCisgCWZyZWVfdmFyKCZyZXN1bHQpOw0KKyAJZnJlZV92YXIoJm9u ZSk7DQorIAlmcmVlX3ZhcigmemVyb3Zhcik7DQorIA0KKyAJUEdfUkVUVVJO X05VTUVSSUMocmVzKTsNCisgfQ0KKyANCiAgDQogIC8qDQpJbmRleDogc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19vcGVyYXRvci5oDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9jdnNyb290L3Bnc3Fs LXNlcnZlci9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wZXJhdG9yLmgsdg0K cmV0cmlldmluZyByZXZpc2lvbiAxLjExOA0KZGlmZiAtMiAtYyAtcjEuMTE4 IHBnX29wZXJhdG9yLmgNCioqKiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29w ZXJhdG9yLmgJMjcgSnVuIDIwMDMgMDA6MzM6MjUgLTAwMDAJMS4xMTgNCi0t LSBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wZXJhdG9yLmgJMSBBdWcgMjAw MyAxNDowMzo1NCAtMDAwMA0KKioqKioqKioqKioqKioqDQoqKiogMTIzLDEy NiAqKioqDQotLS0gMTIzLDEyOCAtLS0tDQogIERBVEEoaW5zZXJ0IE9JRCA9 IDM1MiAoICAiPSIJICAgUEdOU1AgUEdVSUQgYiB0CTI4CTI4CTE2IDM1Mgkg MAkgMAkgMAkgMAkgMCB4aWRlcSBlcXNlbCBlcWpvaW5zZWwgKSk7DQogIERB VEEoaW5zZXJ0IE9JRCA9IDM1MyAoICAiPSIJICAgUEdOU1AgUEdVSUQgYiBm CTI4CTIzCTE2CSAwCSAwCSAwCSAwCSAwCSAwIHhpZGVxaW50NCBlcXNlbCBl cWpvaW5zZWwgKSk7DQorIERBVEEoaW5zZXJ0IE9JRCA9IDM4MCAoICAiISIJ ICAgUEdOU1AgUEdVSUQgciBmICAxNzAwICAgMCAgMTcwMCAgIDAgICAwICAg MCAgIDAgIDAgICAwIG51bWVyaWNfZmFjIC0gLSApKTsNCisgREFUQShpbnNl cnQgT0lEID0gMzgxICggICIhISIJICAgUEdOU1AgUEdVSUQgciBmICAxNzAw ICAgMCAgMTcwMCAgIDAgICAwICAgMCAgIDAgIDAgICAwIG51bWVyaWNfZmFj IC0gLSApKTsNCiAgREFUQShpbnNlcnQgT0lEID0gMzg1ICggICI9IgkgICBQ R05TUCBQR1VJRCBiIHQJMjkJMjkJMTYgMzg1CSAwCSAwCSAwCSAwCSAwIGNp ZGVxIGVxc2VsIGVxam9pbnNlbCApKTsNCiAgREFUQShpbnNlcnQgT0lEID0g Mzg2ICggICI9IgkgICBQR05TUCBQR1VJRCBiIHQJMjIJMjIJMTYgMzg2CSAw CSAwCSAwCSAwCSAwIGludDJ2ZWN0b3JlcSBlcXNlbCBlcWpvaW5zZWwgKSk7 DQpJbmRleDogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmgNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL2N2c3Jv b3QvcGdzcWwtc2VydmVyL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5o LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMDkNCmRpZmYgLTIgLWMgLXIx LjMwOSBwZ19wcm9jLmgNCioqKiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuaAkxIEp1bCAyMDAzIDAwOjA0OjM4IC0wMDAwCTEuMzA5DQotLS0gc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmgJMSBBdWcgMjAwMyAxNDo0Mjox MiAtMDAwMA0KKioqKioqKioqKioqKioqDQoqKiogMjMyLDIzNiAqKioqDQog IERBVEEoaW5zZXJ0IE9JRCA9ICAxMTAgKCAgdW5rbm93bm91dAkgICBQR05T UCBQR1VJRCAxMiBmIGYgdCBmIGkgMSAyMjc1CSI3MDUiCXVua25vd25vdXQg LSBfbnVsbF8gKSk7DQogIERFU0NSKCJJL08iKTsNCiEgDQogIERBVEEoaW5z ZXJ0IE9JRCA9IDExMiAoICB0ZXh0CQkJICAgUEdOU1AgUEdVSUQgMTIgZiBm IHQgZiBpIDEgIDI1ICIyMyIJaW50NF90ZXh0IC0gX251bGxfICkpOw0KICBE RVNDUigiY29udmVydCBpbnQ0IHRvIHRleHQiKTsNCi0tLSAyMzIsMjM2IC0t LS0NCiAgREFUQShpbnNlcnQgT0lEID0gIDExMCAoICB1bmtub3dub3V0CSAg IFBHTlNQIFBHVUlEIDEyIGYgZiB0IGYgaSAxIDIyNzUJIjcwNSIJdW5rbm93 bm91dCAtIF9udWxsXyApKTsNCiAgREVTQ1IoIkkvTyIpOw0KISBEQVRBKGlu c2VydCBPSUQgPSAxMTEgKCAgbnVtZXJpY19mYWMJICAgUEdOU1AgUEdVSUQg MTIgZiBmIHQgZiBpIDEgMTcwMCAiMTcwMCIgIG51bWVyaWNfZmFjIC0gX251 bGxfICkpOw0KICBEQVRBKGluc2VydCBPSUQgPSAxMTIgKCAgdGV4dAkJCSAg IFBHTlNQIFBHVUlEIDEyIGYgZiB0IGYgaSAxICAyNSAiMjMiCWludDRfdGV4 dCAtIF9udWxsXyApKTsNCiAgREVTQ1IoImNvbnZlcnQgaW50NCB0byB0ZXh0 Iik7DQoqKioqKioqKioqKioqKioNCioqKiAxNzU4LDE3NjEgKioqKg0KLS0t IDE3NTgsMTc2MyAtLS0tDQogIERFU0NSKCJmYWN0b3JpYWwiKTsNCiAgREFU QShpbnNlcnQgT0lEID0gMTM5MyAoICBmYWN0b3JpYWwJCSAgIFBHTlNQIFBH VUlEIDEyIGYgZiB0IGYgaSAxIDIwICIyMCIgIGludDhmYWMgLSBfbnVsbF8g KSk7DQorIERFU0NSKCJmYWN0b3JpYWwiKTsNCisgREFUQShpbnNlcnQgT0lE ID0gMTM3NiAoICBmYWN0b3JpYWwgICAgICAgIFBHTlNQIFBHVUlEIDEyIGYg ZiB0IGYgaSAxIDE3MDAgIjE3MDAiICBudW1lcmljX2ZhYyAtIF9udWxsXyAp KTsNCiAgREVTQ1IoImZhY3RvcmlhbCIpOw0KICBEQVRBKGluc2VydCBPSUQg PSAxMzk0ICggIGFicwkJCSAgIFBHTlNQIFBHVUlEIDEyIGYgZiB0IGYgaSAx IDcwMCAiNzAwIiAgZmxvYXQ0YWJzIC0gX251bGxfICkpOw0KSW5kZXg6IHNy Yy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgNCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL2N2c3Jvb3QvcGdzcWwtc2Vy dmVyL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgsdg0KcmV0cmlldmlu ZyByZXZpc2lvbiAxLjIyMw0KZGlmZiAtMiAtYyAtcjEuMjIzIGJ1aWx0aW5z LmgNCioqKiBzcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCTI3IEp1biAy MDAzIDAwOjMzOjI2IC0wMDAwCTEuMjIzDQotLS0gc3JjL2luY2x1ZGUvdXRp bHMvYnVpbHRpbnMuaAkzMSBKdWwgMjAwMyAxODoyMToxMiAtMDAwMA0KKioq KioqKioqKioqKioqDQoqKiogNzA1LDcwOCAqKioqDQotLS0gNzA1LDcwOSAt LS0tDQogIGV4dGVybiBEYXR1bSBudW1lcmljX3NtYWxsZXIoUEdfRlVOQ1RJ T05fQVJHUyk7DQogIGV4dGVybiBEYXR1bSBudW1lcmljX2xhcmdlcihQR19G VU5DVElPTl9BUkdTKTsNCisgZXh0ZXJuIERhdHVtIG51bWVyaWNfZmFjKFBH X0ZVTkNUSU9OX0FSR1MpOw0KICBleHRlcm4gRGF0dW0gbnVtZXJpY19zcXJ0 KFBHX0ZVTkNUSU9OX0FSR1MpOw0KICBleHRlcm4gRGF0dW0gbnVtZXJpY19l eHAoUEdfRlVOQ1RJT05fQVJHUyk7DQo= --583741998-1952606938-1059698638=:12997--