python patch - Mailing list pgsql-hackers

From Greg Copeland
Subject python patch
Date
Msg-id 1028775309.18932.15.camel@mouse.copelandconsulting.net
Whole thread Raw
Responses Re: python patch  ("Christopher Kings-Lynne" <chriskl@familyhealth.com.au>)
Re: python patch  (Bruce Momjian <pgman@candle.pha.pa.us>)
Re: python patch  (Bruce Momjian <pgman@candle.pha.pa.us>)
List pgsql-hackers
Okay, I read
http://archives.postgresql.org/pgsql-bugs/2002-06/msg00086.php and never
saw a fix offered up.  Since I'm gearing up to use Postgres and Python
soon, I figured I'd have a hand at trying to get this sucker addressed.
Apologies if this has already been plugged.  I looked in the archives
and never saw a response.

At any rate, I must admit I don't think I fully understand the
implications of some of the changes I made even though they appear to be
straight forward.  We all know the devil is in the details.  Anyone more
knowledgeable is requested to review my changes. :(

I also updated the advanced.py script in a somewhat nonsensical fashion
to make use of an int8 field in an effort to test this change.  It seems
to run okay, however, this is by no means an all exhaustive test.  So,
it's possible that a bumpy road may lay ahead for some.  On the other
hand...overflows (hopefully) previously lurked (long -> int conversion).

This is my first submission.  Please be kind if I submitted to the wrong
list.  ;)

Thank you,
    Greg Copeland

? lib_pgmodule.so.0.0
? postgres-python.patch
? tutorial/advanced.pyc
Index: pgmodule.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/python/pgmodule.c,v
retrieving revision 1.38
diff -u -r1.38 pgmodule.c
--- pgmodule.c    2002/03/29 07:45:39    1.38
+++ pgmodule.c    2002/08/08 02:46:12
@@ -289,23 +289,26 @@
         {
             case INT2OID:
             case INT4OID:
-            case INT8OID:
             case OIDOID:
                 typ[j] = 1;
                 break;

+            case INT8OID:
+                typ[j] = 2;
+                break;
+
             case FLOAT4OID:
             case FLOAT8OID:
             case NUMERICOID:
-                typ[j] = 2;
+                typ[j] = 3;
                 break;

             case CASHOID:
-                typ[j] = 3;
+                typ[j] = 4;
                 break;

             default:
-                typ[j] = 4;
+                typ[j] = 5;
                 break;
         }
     }
@@ -1797,23 +1800,26 @@
         {
             case INT2OID:
             case INT4OID:
-            case INT8OID:
             case OIDOID:
                 typ[j] = 1;
                 break;

+            case INT8OID:
+                typ[j] = 2;
+                break;
+
             case FLOAT4OID:
             case FLOAT8OID:
             case NUMERICOID:
-                typ[j] = 2;
+                typ[j] = 3;
                 break;

             case CASHOID:
-                typ[j] = 3;
+                typ[j] = 4;
                 break;

             default:
-                typ[j] = 4;
+                typ[j] = 5;
                 break;
         }
     }
@@ -1846,10 +1852,14 @@
                         break;

                     case 2:
-                        val = PyFloat_FromDouble(strtod(s, NULL));
+                        val = PyLong_FromLong(strtol(s, NULL, 10));
                         break;

                     case 3:
+                        val = PyFloat_FromDouble(strtod(s, NULL));
+                        break;
+
+                    case 4:
                         {
                             int            mult = 1;

@@ -1946,11 +1956,14 @@
         {
             case INT2OID:
             case INT4OID:
-            case INT8OID:
             case OIDOID:
                 typ[j] = 1;
                 break;

+            case INT8OID:
+                typ[j] = 2;
+                break;
+
             case FLOAT4OID:
             case FLOAT8OID:
             case NUMERICOID:
@@ -1995,10 +2008,14 @@
                         break;

                     case 2:
-                        val = PyFloat_FromDouble(strtod(s, NULL));
+                        val = PyLong_FromLong(strtol(s, NULL, 10));
                         break;

                     case 3:
+                        val = PyFloat_FromDouble(strtod(s, NULL));
+                        break;
+
+                    case 4:
                         {
                             int            mult = 1;

Index: tutorial/advanced.py
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/python/tutorial/advanced.py,v
retrieving revision 1.5
diff -u -r1.5 advanced.py
--- tutorial/advanced.py    2000/10/02 03:46:24    1.5
+++ tutorial/advanced.py    2002/08/08 02:46:12
@@ -109,11 +109,13 @@
     print "CREATE TABLE sal_emp ("
     print "    name            text,"
     print "    pay_by_quarter  int4[],"
+    print "    pay_by_extra_quarter  int8[],"
     print "    schedule        text[][]"
     print ")"
     pgcnx.query("""CREATE TABLE sal_emp (
         name              text,
         pay_by_quarter    int4[],
+        pay_by_extra_quarter    int8[],
         schedule          text[][])""")
     wait_key()
     print
@@ -123,18 +125,22 @@
     print "INSERT INTO sal_emp VALUES ("
     print "    'Bill',"
     print "    '{10000,10000,10000,10000}',"
+    print "    '{9223372036854775800,9223372036854775800,9223372036854775800}',"
     print "    '{{\"meeting\", \"lunch\"}, {}}')"
     print
     print "INSERT INTO sal_emp VALUES ("
     print "    'Carol',"
     print "    '{20000,25000,25000,25000}',"
+    print "    '{9223372036854775807,9223372036854775807,9223372036854775807}',"
     print "    '{{\"talk\", \"consult\"}, {\"meeting\"}}')"
     print
     pgcnx.query("""INSERT INTO sal_emp VALUES (
         'Bill', '{10000,10000,10000,10000}',
+    '{9223372036854775800,9223372036854775800,9223372036854775800}',
         '{{\"meeting\", \"lunch\"}, {}}')""")
     pgcnx.query("""INSERT INTO sal_emp VALUES (
         'Carol', '{20000,25000,25000,25000}',
+    '{9223372036854775807,9223372036854775807,9223372036854775807}',
         '{{\"talk\", \"consult\"}, {\"meeting\"}}')""")
     wait_key()
     print
@@ -148,11 +154,25 @@
     print pgcnx.query("""SELECT name FROM sal_emp WHERE
         sal_emp.pay_by_quarter[1] <> sal_emp.pay_by_quarter[2]""")
     print
+    print pgcnx.query("""SELECT name FROM sal_emp WHERE
+        sal_emp.pay_by_extra_quarter[1] <> sal_emp.pay_by_extra_quarter[2]""")
+    print
     print "-- retrieve third quarter pay of all employees"
     print
     print "SELECT sal_emp.pay_by_quarter[3] FROM sal_emp"
     print
     print pgcnx.query("SELECT sal_emp.pay_by_quarter[3] FROM sal_emp")
+    print
+    print "-- retrieve third quarter extra pay of all employees"
+    print
+    print "SELECT sal_emp.pay_by_extra_quarter[3] FROM sal_emp"
+    print pgcnx.query("SELECT sal_emp.pay_by_extra_quarter[3] FROM sal_emp")
+    print
+    print "-- retrieve first two quarters of extra quarter pay of all employees"
+    print
+    print "SELECT sal_emp.pay_by_extra_quarter[1:2] FROM sal_emp"
+    print
+    print pgcnx.query("SELECT sal_emp.pay_by_extra_quarter[1:2] FROM sal_emp")
     print
     print "-- select subarrays"
     print

Attachment

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Open 7.3 items
Next
From: Greg Copeland
Date:
Subject: Re: Open 7.3 items