[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