[pypy-svn] r70068 - in pypy/trunk/pypy/module/oracle: . test
afa at codespeak.net
afa at codespeak.net
Fri Dec 11 14:01:55 CET 2009
Author: afa
Date: Fri Dec 11 14:01:55 2009
New Revision: 70068
Modified:
pypy/trunk/pypy/module/oracle/interp_connect.py
pypy/trunk/pypy/module/oracle/interp_cursor.py
pypy/trunk/pypy/module/oracle/interp_object.py
pypy/trunk/pypy/module/oracle/interp_variable.py
pypy/trunk/pypy/module/oracle/roci.py
pypy/trunk/pypy/module/oracle/test/test_connect.py
pypy/trunk/pypy/module/oracle/transform.py
Log:
Translation fixes for the Oracle module, on a 64bit platform with the oracle9 client
Modified: pypy/trunk/pypy/module/oracle/interp_connect.py
==============================================================================
--- pypy/trunk/pypy/module/oracle/interp_connect.py (original)
+++ pypy/trunk/pypy/module/oracle/interp_connect.py Fri Dec 11 14:01:55 2009
@@ -315,23 +315,26 @@
mode |= roci.OCI_SESSGET_CREDEXT
# set the connection class, if applicable
- stringBuffer.fill(space, w_cclass)
- try:
- if stringBuffer.size > 0:
- externalCredentials = False
- status = roci.OCIAttrSet(
- authInfo,
- roci.OCI_HTYPE_AUTHINFO,
- stringBuffer.ptr, stringBuffer.size,
- roci.OCI_ATTR_CONNECTION_CLASS,
- self.environment.errorHandle)
- self.environment.checkForError(
- status, "Connection_GetConnection(): set connection class")
- finally:
- stringBuffer.clear()
+ if roci.OCI_ATTR_CONNECTION_CLASS is not None:
+ stringBuffer.fill(space, w_cclass)
+ try:
+ if stringBuffer.size > 0:
+ externalCredentials = False
+ status = roci.OCIAttrSet(
+ authInfo,
+ roci.OCI_HTYPE_AUTHINFO,
+ stringBuffer.ptr, stringBuffer.size,
+ roci.OCI_ATTR_CONNECTION_CLASS,
+ self.environment.errorHandle)
+ self.environment.checkForError(
+ status,
+ "Connection_GetConnection(): set connection class")
+ finally:
+ stringBuffer.clear()
# set the purity, if applicable
- if purity != roci.OCI_ATTR_PURITY_DEFAULT:
+ if (roci.OCI_ATTR_PURITY is not None
+ and purity != roci.OCI_ATTR_PURITY_DEFAULT):
purityptr = lltype.malloc(rffi.CArrayPtr(roci.ub4).TO,
1, flavor='raw')
purityptr[0] = rffi.cast(roci.ub4, purity)
Modified: pypy/trunk/pypy/module/oracle/interp_cursor.py
==============================================================================
--- pypy/trunk/pypy/module/oracle/interp_cursor.py (original)
+++ pypy/trunk/pypy/module/oracle/interp_cursor.py Fri Dec 11 14:01:55 2009
@@ -927,12 +927,13 @@
status, "Cursor_GetBindNames()")
# Too few elements allocated
- if foundElementsPtr[0] < 0:
- return -foundElementsPtr[0], None
+ foundElements = rffi.cast(lltype.Signed, foundElementsPtr[0])
+ if foundElements < 0:
+ return -foundElements, None
names_w = []
# process the bind information returned
- for i in range(foundElementsPtr[0]):
+ for i in range(foundElements):
if rffi.cast(lltype.Signed, duplicate[i]):
continue
names_w.append(
Modified: pypy/trunk/pypy/module/oracle/interp_object.py
==============================================================================
--- pypy/trunk/pypy/module/oracle/interp_object.py (original)
+++ pypy/trunk/pypy/module/oracle/interp_object.py Fri Dec 11 14:01:55 2009
@@ -491,7 +491,7 @@
status,
"ExternalObjectVar_ConvertCollection(): get next")
- if eofptr[0]:
+ if rffi.cast(lltype.Signed, eofptr[0]):
break
element = convertObject(
space, environment,
Modified: pypy/trunk/pypy/module/oracle/interp_variable.py
==============================================================================
--- pypy/trunk/pypy/module/oracle/interp_variable.py (original)
+++ pypy/trunk/pypy/module/oracle/interp_variable.py Fri Dec 11 14:01:55 2009
@@ -1018,7 +1018,7 @@
self.environment.checkForError(
status,
"LobVar_SetValue(): check temporary")
- temporary = temporaryptr[0]
+ temporary = rffi.cast(lltype.Signed, temporaryptr[0])
finally:
lltype.free(temporaryptr, flavor='raw')
@@ -1373,8 +1373,17 @@
variableTypeNChar = {
roci.SQLT_AFC: VT_FixedNationalChar,
roci.SQLT_CHR: VT_NationalCharString,
- roci.SQLT_CLOB: VT_NCLOB,
+ roci.SQLT_CLOB: VT_NCLOB,
}
+# remove eventual undefined types
+try:
+ del variableType[None]
+except KeyError:
+ pass
+try:
+ del variableTypeNChar[None]
+except KeyError:
+ pass
def _typeByOracleDataType(dataType, charsetForm):
if charsetForm == roci.SQLCS_NCHAR:
Modified: pypy/trunk/pypy/module/oracle/roci.py
==============================================================================
--- pypy/trunk/pypy/module/oracle/roci.py (original)
+++ pypy/trunk/pypy/module/oracle/roci.py Fri Dec 11 14:01:55 2009
@@ -18,7 +18,10 @@
libraries = ['oci']
library_dirs = [str(ORACLE_HOME.join('OCI', 'lib', 'MSVC'))]
else:
- include_dirs = [str(ORACLE_HOME.join('sdk', 'include'))]
+ include_dirs = [str(ORACLE_HOME.join('sdk', 'include')), # Oracle 11
+ str(ORACLE_HOME.join('rdbms', 'demo')), # Oracle 9
+ str(ORACLE_HOME.join('rdbms', 'public')), # Oracle 9
+ ]
libraries = ['clntsh']
library_dirs = [str(ORACLE_HOME.join('lib'))]
@@ -67,14 +70,7 @@
('OCIDateTime', OCITime),
])
- constants = '''
- OCI_DEFAULT OCI_OBJECT OCI_THREADED OCI_EVENTS
- OCI_SUCCESS OCI_SUCCESS_WITH_INFO OCI_INVALID_HANDLE OCI_NO_DATA
- OCI_HTYPE_ERROR OCI_HTYPE_SVCCTX OCI_HTYPE_SERVER OCI_HTYPE_SESSION
- OCI_HTYPE_STMT OCI_HTYPE_DESCRIBE OCI_HTYPE_BIND OCI_HTYPE_DEFINE
- OCI_HTYPE_ENV OCI_HTYPE_SPOOL OCI_HTYPE_AUTHINFO OCI_ATTR_CONNECTION_CLASS
- OCI_DTYPE_PARAM OCI_DTYPE_TIMESTAMP OCI_DTYPE_INTERVAL_DS OCI_DTYPE_LOB
- OCI_CRED_RDBMS OCI_CRED_EXT OCI_SPOOL_ATTRVAL_NOWAIT
+ defines = '''
OCI_ATTR_SERVER OCI_ATTR_SESSION OCI_ATTR_USERNAME OCI_ATTR_PASSWORD
OCI_ATTR_STMT_TYPE OCI_ATTR_PARAM OCI_ATTR_PARAM_COUNT OCI_ATTR_ROW_COUNT
OCI_ATTR_NAME OCI_ATTR_SCALE OCI_ATTR_PRECISION OCI_ATTR_IS_NULL
@@ -85,7 +81,23 @@
OCI_ATTR_CHARSET_FORM OCI_ATTR_CHARSET_ID OCI_ATTR_ENV_CHARSET_ID
OCI_ATTR_PARSE_ERROR_OFFSET
OCI_ATTR_SPOOL_OPEN_COUNT OCI_ATTR_SPOOL_BUSY_COUNT OCI_ATTR_SPOOL_TIMEOUT
- OCI_ATTR_SPOOL_GETMODE OCI_ATTR_PURITY
+ OCI_ATTR_SPOOL_GETMODE OCI_ATTR_PURITY OCI_ATTR_CONNECTION_CLASS
+ OCI_ATTR_PURITY_DEFAULT
+ SQLT_CHR SQLT_LNG SQLT_AFC SQLT_RDD SQLT_BIN SQLT_LBI SQLT_LVC SQLT_LVB
+ SQLT_BFLOAT SQLT_IBFLOAT SQLT_BDOUBLE SQLT_IBDOUBLE
+ SQLT_NUM SQLT_VNU SQLT_DAT SQLT_ODT SQLT_DATE SQLT_TIMESTAMP
+ SQLT_TIMESTAMP_TZ SQLT_TIMESTAMP_LTZ SQLT_INTERVAL_DS
+ SQLT_CLOB SQLT_CLOB SQLT_BLOB SQLT_BFILE SQLT_RSET SQLT_NTY
+ '''.split()
+
+ constants = '''
+ OCI_DEFAULT OCI_OBJECT OCI_THREADED OCI_EVENTS
+ OCI_SUCCESS OCI_SUCCESS_WITH_INFO OCI_INVALID_HANDLE OCI_NO_DATA
+ OCI_HTYPE_ERROR OCI_HTYPE_SVCCTX OCI_HTYPE_SERVER OCI_HTYPE_SESSION
+ OCI_HTYPE_STMT OCI_HTYPE_DESCRIBE OCI_HTYPE_BIND OCI_HTYPE_DEFINE
+ OCI_HTYPE_ENV OCI_HTYPE_SPOOL OCI_HTYPE_AUTHINFO
+ OCI_DTYPE_PARAM OCI_DTYPE_TIMESTAMP OCI_DTYPE_INTERVAL_DS OCI_DTYPE_LOB
+ OCI_CRED_RDBMS OCI_CRED_EXT OCI_SPOOL_ATTRVAL_NOWAIT
OCI_NTV_SYNTAX OCI_COMMIT_ON_SUCCESS
OCI_FETCH_NEXT
OCI_IND_NULL OCI_IND_NOTNULL
@@ -93,11 +105,6 @@
OCI_OTYPE_PTR OCI_PTYPE_TYPE
OCI_STMT_SELECT OCI_STMT_CREATE OCI_STMT_DROP OCI_STMT_ALTER
OCI_STMT_INSERT OCI_STMT_DELETE OCI_STMT_UPDATE
- SQLT_CHR SQLT_LNG SQLT_AFC SQLT_RDD SQLT_BIN SQLT_LBI SQLT_LVC SQLT_LVB
- SQLT_BFLOAT SQLT_IBFLOAT SQLT_BDOUBLE SQLT_IBDOUBLE
- SQLT_NUM SQLT_VNU SQLT_DAT SQLT_ODT SQLT_DATE SQLT_TIMESTAMP
- SQLT_TIMESTAMP_TZ SQLT_TIMESTAMP_LTZ SQLT_INTERVAL_DS
- SQLT_CLOB SQLT_CLOB SQLT_BLOB SQLT_BFILE SQLT_RSET SQLT_NTY
SQLCS_IMPLICIT SQLCS_NCHAR
OCI_TEMP_CLOB OCI_TEMP_BLOB OCI_DURATION_SESSION OCI_ONE_PIECE
OCI_NUMBER_SIGNED
@@ -107,9 +114,11 @@
OCI_NLS_MAXBUFSZ OCI_NLS_CS_ORA_TO_IANA OCI_UTF16ID
OCI_SPC_STMTCACHE OCI_SPC_HOMOGENEOUS
OCI_SESSGET_SPOOL OCI_SESSGET_CREDPROXY OCI_SESSGET_STMTCACHE
- OCI_SESSGET_CREDEXT OCI_SESSRLS_DROPSESS OCI_ATTR_PURITY_DEFAULT
+ OCI_SESSGET_CREDEXT OCI_SESSRLS_DROPSESS
'''.split()
+ for c in defines:
+ locals()[c] = platform.DefinedConstantInteger(c)
for c in constants:
locals()[c] = platform.ConstantInteger(c)
Modified: pypy/trunk/pypy/module/oracle/test/test_connect.py
==============================================================================
--- pypy/trunk/pypy/module/oracle/test/test_connect.py (original)
+++ pypy/trunk/pypy/module/oracle/test/test_connect.py Fri Dec 11 14:01:55 2009
@@ -160,4 +160,6 @@
e = raises(oracle.DatabaseError, pool.acquire, user="proxyuser")
# ORA-01017: invalid username/password; logon denied
# ORA-28150: proxy not authorized to connect as client
- assert e.value[0].code in (1017, 28150)
+ # ORA-01031: insufficient privileges
+ print "Error code", e.value[0].code
+ assert e.value[0].code in (1017, 28150, 1031)
Modified: pypy/trunk/pypy/module/oracle/transform.py
==============================================================================
--- pypy/trunk/pypy/module/oracle/transform.py (original)
+++ pypy/trunk/pypy/module/oracle/transform.py Fri Dec 11 14:01:55 2009
@@ -89,7 +89,7 @@
w_datetime,
w(yearptr[0]), w(monthptr[0]), w(dayptr[0]),
w(hourptr[0]), w(minuteptr[0]), w(secondptr[0]),
- w(fsecondptr[0] / 1000))
+ w(rffi.cast(lltype.Signed, fsecondptr[0]) / 1000))
finally:
lltype.free(yearptr, flavor='raw')
lltype.free(monthptr, flavor='raw')
@@ -121,8 +121,10 @@
w('timedelta'))
days = daysptr[0]
- seconds = hoursptr[0] * 3600 + minutesptr[0] * 60 + secondsptr[0]
- microseconds = fsecondsptr[0] / 1000
+ seconds = (rffi.cast(lltype.Signed, hoursptr[0]) * 3600 +
+ rffi.cast(lltype.Signed, minutesptr[0]) * 60 +
+ rffi.cast(lltype.Signed, secondsptr[0]))
+ microseconds = rffi.cast(lltype.Signed, fsecondsptr[0]) / 1000
return space.call_function(
w_timedelta,
More information about the Pypy-commit
mailing list