Fixed support for integers. OCI_TYPECODE_INTEGER is stored as a OCINumber, not
as a native integer.
This commit is contained in:
parent
d86cf980ba
commit
614b272e34
8
Object.c
8
Object.c
@ -290,11 +290,6 @@ static int Object_ConvertFromPython(
|
|||||||
*ociValue = oracleValue->stringValue;
|
*ociValue = oracleValue->stringValue;
|
||||||
break;
|
break;
|
||||||
case OCI_TYPECODE_INTEGER:
|
case OCI_TYPECODE_INTEGER:
|
||||||
oracleValue->integerValue = PyInt_AsLong(pythonValue);
|
|
||||||
if (PyErr_Occurred())
|
|
||||||
return -1;
|
|
||||||
*ociValue = &oracleValue->integerValue;
|
|
||||||
break;
|
|
||||||
case OCI_TYPECODE_NUMBER:
|
case OCI_TYPECODE_NUMBER:
|
||||||
if (PythonNumberToOracleNumber(environment,
|
if (PythonNumberToOracleNumber(environment,
|
||||||
pythonValue, &oracleValue->numberValue) < 0)
|
pythonValue, &oracleValue->numberValue) < 0)
|
||||||
@ -388,7 +383,8 @@ static PyObject *Object_ConvertToPython(
|
|||||||
return cxString_FromEncodedString( (char*) stringValue,
|
return cxString_FromEncodedString( (char*) stringValue,
|
||||||
stringSize, environment->encoding);
|
stringSize, environment->encoding);
|
||||||
case OCI_TYPECODE_INTEGER:
|
case OCI_TYPECODE_INTEGER:
|
||||||
return PyInt_FromLong(* (int*) value);
|
return OracleNumberToPythonInteger(environment,
|
||||||
|
(OCINumber*) value);
|
||||||
case OCI_TYPECODE_NUMBER:
|
case OCI_TYPECODE_NUMBER:
|
||||||
return OracleNumberToPythonFloat(environment, (OCINumber*) value);
|
return OracleNumberToPythonFloat(environment, (OCINumber*) value);
|
||||||
case OCI_TYPECODE_DATE:
|
case OCI_TYPECODE_DATE:
|
||||||
|
|||||||
22
Transforms.c
22
Transforms.c
@ -96,7 +96,7 @@ static PyObject *OracleTimestampToPythonDate(
|
|||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// OracleNumberToPythonFloat()
|
// OracleNumberToPythonFloat()
|
||||||
// Return a Python date object given an Oracle date.
|
// Return a Python float given an Oracle number.
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
static PyObject *OracleNumberToPythonFloat(
|
static PyObject *OracleNumberToPythonFloat(
|
||||||
udt_Environment *environment, // environment
|
udt_Environment *environment, // environment
|
||||||
@ -114,6 +114,26 @@ static PyObject *OracleNumberToPythonFloat(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// OracleNumberToPythonInteger()
|
||||||
|
// Return a Python integer given an Oracle number.
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
static PyObject *OracleNumberToPythonInteger(
|
||||||
|
udt_Environment *environment, // environment
|
||||||
|
OCINumber* value) // value to convert
|
||||||
|
{
|
||||||
|
long integerValue;
|
||||||
|
sword status;
|
||||||
|
|
||||||
|
status = OCINumberToInt(environment->errorHandle, value,
|
||||||
|
sizeof(long), OCI_NUMBER_SIGNED, (dvoid*) &integerValue);
|
||||||
|
if (Environment_CheckForError(environment, status,
|
||||||
|
"OracleNumberToPythonInteger()") < 0)
|
||||||
|
return NULL;
|
||||||
|
return PyInt_FromLong(integerValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#if ORACLE_VERSION_HEX >= ORACLE_VERSION(12, 1)
|
#if ORACLE_VERSION_HEX >= ORACLE_VERSION(12, 1)
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// PythonBooleanToOracleBoolean()
|
// PythonBooleanToOracleBoolean()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user