diff options
author | Peter Eisentraut | 2012-09-29 16:41:00 +0000 |
---|---|---|
committer | Peter Eisentraut | 2012-09-29 16:41:00 +0000 |
commit | db0af74af28663e060e8c5d6f8dd0927bb572f25 (patch) | |
tree | 287e081f159932b11bcca1be30feca96dca833f4 /src | |
parent | 811ca1300bf8eb50ff1a84082619ba770126cdc9 (diff) |
PL/Python: Convert oid to long/int
oid is a numeric type, so transform it to the appropriate Python
numeric type like the other ones.
Diffstat (limited to 'src')
-rw-r--r-- | src/pl/plpython/expected/plpython_types.out | 28 | ||||
-rw-r--r-- | src/pl/plpython/expected/plpython_types_3.out | 28 | ||||
-rw-r--r-- | src/pl/plpython/plpy_typeio.c | 10 | ||||
-rw-r--r-- | src/pl/plpython/sql/plpython_types.sql | 10 |
4 files changed, 76 insertions, 0 deletions
diff --git a/src/pl/plpython/expected/plpython_types.out b/src/pl/plpython/expected/plpython_types.out index 888161323d1..46413455c8b 100644 --- a/src/pl/plpython/expected/plpython_types.out +++ b/src/pl/plpython/expected/plpython_types.out @@ -321,6 +321,34 @@ CONTEXT: PL/Python function "test_type_conversion_float8" (1 row) +CREATE FUNCTION test_type_conversion_oid(x oid) RETURNS oid AS $$ +plpy.info(x, type(x)) +return x +$$ LANGUAGE plpythonu; +SELECT * FROM test_type_conversion_oid(100); +INFO: (100L, <type 'long'>) +CONTEXT: PL/Python function "test_type_conversion_oid" + test_type_conversion_oid +-------------------------- + 100 +(1 row) + +SELECT * FROM test_type_conversion_oid(2147483649); +INFO: (2147483649L, <type 'long'>) +CONTEXT: PL/Python function "test_type_conversion_oid" + test_type_conversion_oid +-------------------------- + 2147483649 +(1 row) + +SELECT * FROM test_type_conversion_oid(null); +INFO: (None, <type 'NoneType'>) +CONTEXT: PL/Python function "test_type_conversion_oid" + test_type_conversion_oid +-------------------------- + +(1 row) + CREATE FUNCTION test_type_conversion_text(x text) RETURNS text AS $$ plpy.info(x, type(x)) return x diff --git a/src/pl/plpython/expected/plpython_types_3.out b/src/pl/plpython/expected/plpython_types_3.out index d1ae86377bd..511ef5a4c9a 100644 --- a/src/pl/plpython/expected/plpython_types_3.out +++ b/src/pl/plpython/expected/plpython_types_3.out @@ -321,6 +321,34 @@ CONTEXT: PL/Python function "test_type_conversion_float8" (1 row) +CREATE FUNCTION test_type_conversion_oid(x oid) RETURNS oid AS $$ +plpy.info(x, type(x)) +return x +$$ LANGUAGE plpython3u; +SELECT * FROM test_type_conversion_oid(100); +INFO: (100, <class 'int'>) +CONTEXT: PL/Python function "test_type_conversion_oid" + test_type_conversion_oid +-------------------------- + 100 +(1 row) + +SELECT * FROM test_type_conversion_oid(2147483649); +INFO: (2147483649, <class 'int'>) +CONTEXT: PL/Python function "test_type_conversion_oid" + test_type_conversion_oid +-------------------------- + 2147483649 +(1 row) + +SELECT * FROM test_type_conversion_oid(null); +INFO: (None, <class 'NoneType'>) +CONTEXT: PL/Python function "test_type_conversion_oid" + test_type_conversion_oid +-------------------------- + +(1 row) + CREATE FUNCTION test_type_conversion_text(x text) RETURNS text AS $$ plpy.info(x, type(x)) return x diff --git a/src/pl/plpython/plpy_typeio.c b/src/pl/plpython/plpy_typeio.c index 2402c151a4f..0ad542f21e9 100644 --- a/src/pl/plpython/plpy_typeio.c +++ b/src/pl/plpython/plpy_typeio.c @@ -39,6 +39,7 @@ static PyObject *PLyFloat_FromNumeric(PLyDatumToOb *arg, Datum d); static PyObject *PLyInt_FromInt16(PLyDatumToOb *arg, Datum d); static PyObject *PLyInt_FromInt32(PLyDatumToOb *arg, Datum d); static PyObject *PLyLong_FromInt64(PLyDatumToOb *arg, Datum d); +static PyObject *PLyLong_FromOid(PLyDatumToOb *arg, Datum d); static PyObject *PLyBytes_FromBytea(PLyDatumToOb *arg, Datum d); static PyObject *PLyString_FromDatum(PLyDatumToOb *arg, Datum d); static PyObject *PLyList_FromArray(PLyDatumToOb *arg, Datum d); @@ -460,6 +461,9 @@ PLy_input_datum_func2(PLyDatumToOb *arg, Oid typeOid, HeapTuple typeTup) case INT8OID: arg->func = PLyLong_FromInt64; break; + case OIDOID: + arg->func = PLyLong_FromOid; + break; case BYTEAOID: arg->func = PLyBytes_FromBytea; break; @@ -547,6 +551,12 @@ PLyLong_FromInt64(PLyDatumToOb *arg, Datum d) } static PyObject * +PLyLong_FromOid(PLyDatumToOb *arg, Datum d) +{ + return PyLong_FromUnsignedLong(DatumGetObjectId(d)); +} + +static PyObject * PLyBytes_FromBytea(PLyDatumToOb *arg, Datum d) { text *txt = DatumGetByteaP(d); diff --git a/src/pl/plpython/sql/plpython_types.sql b/src/pl/plpython/sql/plpython_types.sql index 82cd9d42680..6a50b4236db 100644 --- a/src/pl/plpython/sql/plpython_types.sql +++ b/src/pl/plpython/sql/plpython_types.sql @@ -119,6 +119,16 @@ SELECT * FROM test_type_conversion_float8(5000000000.5); SELECT * FROM test_type_conversion_float8(null); +CREATE FUNCTION test_type_conversion_oid(x oid) RETURNS oid AS $$ +plpy.info(x, type(x)) +return x +$$ LANGUAGE plpythonu; + +SELECT * FROM test_type_conversion_oid(100); +SELECT * FROM test_type_conversion_oid(2147483649); +SELECT * FROM test_type_conversion_oid(null); + + CREATE FUNCTION test_type_conversion_text(x text) RETURNS text AS $$ plpy.info(x, type(x)) return x |