HISTORY.txt 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715
  1. Changes from 5.1.1 to 5.1.2
  2. 1) Added support for LONG_UNICODE which is a type used to handle long unicode
  3. strings. These are not explicitly supported in Oracle but can be used to
  4. bind to NCLOB, for example, without getting the error "unimplemented or
  5. unreasonable conversion requested".
  6. 2) Set the row number in a cursor when executing PL/SQL blocks as requested
  7. by Robert Ritchie.
  8. 3) Added support for setting the module, action and client_info attributes
  9. during connection so that logon triggers will see the supplied values, as
  10. requested by Rodney Barnett.
  11. Changes from 5.1 to 5.1.1
  12. 1) Simplify management of threads for callbacks performed by database change
  13. notification and eliminate a crash that occurred under high load in
  14. certain situations. Thanks to Calvin S. for noting the issue and suggesting
  15. a solution and testing the patch.
  16. 2) Force server detach on close so that the connection is completely closed
  17. and not just the session as before.
  18. 3) Force use of OCI_UTF16ID for NCLOBs as using the default character set
  19. would result in ORA-03127 with Oracle 11.2.0.2 and UTF8 character set.
  20. 4) Avoid attempting to clear temporary LOBs a second time when destroying the
  21. variable as in certain situations this results in spurious errors.
  22. 5) Added additional parameter service_name to makedsn() which can be used to
  23. use the service_name rather than the SID in the DSN string that is
  24. generated.
  25. 6) Fix cursor description in test suite to take into account the number of
  26. bytes per character.
  27. 7) Added tests for NCLOBS to the test suite.
  28. 8) Removed redundant code in setup.py for calculating the library path.
  29. Changes from 5.0.4 to 5.1
  30. 1) Remove support for UNICODE mode and permit Unicode to be passed through in
  31. everywhere a string may be passed in. This means that strings will be
  32. passed through to Oracle using the value of the NLS_LANG environment
  33. variable in Python 3.x as well. Doing this eliminated a bunch of problems
  34. that were discovered by using UNICODE mode and also removed an unnecessary
  35. restriction in Python 2.x that Unicode could not be used in connect strings
  36. or SQL statements, for example.
  37. 2) Added support for creating an empty object variable via a named type, the
  38. first step to adding full object support.
  39. 3) Added support for Python 3.2.
  40. 4) Account for lib64 used on x86_64 systems. Thanks to Alex Wood for supplying
  41. the patch.
  42. 5) Clear up potential problems when calling cursor.close() ahead of the
  43. cursor being freed by going out of scope.
  44. 6) Avoid compilation difficulties on AIX5 as OCIPing does not appear to be
  45. available on that platform under Oracle 10g Release 2. Thanks to
  46. Pierre-Yves Fontaniere for the patch.
  47. 7) Free temporary LOBs prior to each fetch in order to avoid leaking them.
  48. Thanks to Uwe Hoffmann for the initial patch.
  49. Changes from 5.0.3 to 5.0.4
  50. 1) Added support for Python 2.7.
  51. 2) Added support for new parameter (port) for subscription() call which allows
  52. the client to specify the listening port for callback notifications from
  53. the database server. Thanks to Geoffrey Weber for the initial patch.
  54. 3) Fixed compilation under Oracle 9i.
  55. 4) Fixed a few error messages.
  56. Changes from 5.0.2 to 5.0.3
  57. 1) Added support for 64-bit Windows.
  58. 2) Added support for Python 3.1 and dropped support for Python 3.0.
  59. 3) Added support for keyword arguments in cursor.callproc() and
  60. cursor.callfunc().
  61. 4) Added documentation for the UNICODE and FIXED_UNICODE variable types.
  62. 5) Added extra link arguments required for Mac OS X as suggested by Jason
  63. Woodward.
  64. 6) Added additional error codes to the list of error codes that raise
  65. OperationalError rather than DatabaseError.
  66. 7) Fixed calculation of display size for strings with national database
  67. character sets that are not the default AL16UTF16.
  68. 8) Moved the resetting of the setinputsizes flag before the binding takes
  69. place so that if an error takes place and a new statement is prepared
  70. subsequently, spurious errors will not occur.
  71. 9) Fixed compilation with Oracle 10g Release 1.
  72. 10) Tweaked documentation based on feedback from a number of people.
  73. 11) Added support for running the test suite using "python setup.py test"
  74. 12) Added support for setting the CLIENT_IDENTIFIER value in the v$session
  75. table for connections.
  76. 13) Added exception when attempting to call executemany() with arrays which is
  77. not supported by the OCI.
  78. 14) Fixed bug when converting from decimal would result in OCI-22062 because
  79. the locale decimal point was not a period. Thanks to Amaury Forgeot d'Arc
  80. for the solution to this problem.
  81. Changes from 5.0.1 to 5.0.2
  82. 1) Fix creation of temporary NCLOB values and the writing of NCLOB values in
  83. non Unicode mode.
  84. 2) Re-enabled parsing of non select statements as requested by Roy Terrill.
  85. 3) Implemented a parse error offset as requested by Catherine Devlin.
  86. 4) Removed lib subdirectory when forcing RPATH now that the library directory
  87. is being calculated exactly in setup.py.
  88. 5) Added an additional cast in order to support compiling by Microsoft
  89. Visual C++ 2008 as requested by Marco de Paoli.
  90. 6) Added additional include directory to setup.py in order to support
  91. compiling by Microsoft Visual Studio was requested by Jason Coombs.
  92. 7) Fixed a few documentation issues.
  93. Changes from 5.0 to 5.0.1
  94. 1) Added support for database change notification available in Oracle 10g
  95. Release 2 and higher.
  96. 2) Fix bug where NCLOB data would be corrupted upon retrieval (non Unicode
  97. mode) or would generate exception ORA-24806 (LOB form mismatch). Oracle
  98. insists upon differentiating between CLOB and NCLOB no matter which
  99. character set is being used for retrieval.
  100. 3) Add new attributes size, bufferSize and numElements to variable objects,
  101. deprecating allocelems (replaced by numElements) and maxlength (replaced
  102. by bufferSize)
  103. 4) Avoid increasing memory allocation for strings when using variable width
  104. character sets and increasing the number of elements in a variable during
  105. executemany().
  106. 5) Tweaked code in order to ensure that cx_Oracle can compile with Python
  107. 3.0.1.
  108. Changes from 4.4.1 to 5.0
  109. 1) Added support for Python 3.0 with much help from Amaury Forgeot d'Arc.
  110. 2) Removed support for Python 2.3 and Oracle 8i.
  111. 3) Added support for full unicode mode in Python 2.x where all strings are
  112. passed in and returned as unicode (module must be built in this mode)
  113. rather than encoded strings
  114. 4) nchar and nvarchar columns now return unicode instead of encoded strings
  115. 5) Added support for an output type handler and/or an input type handler to be
  116. specified at the connection and cursor levels.
  117. 6) Added support for specifying both input and output converters for variables
  118. 7) Added support for specifying the array size of variables that are created
  119. using the cursor.var() method
  120. 8) Added support for events mode and database resident connection pooling
  121. (DRCP) in Oracle 11g.
  122. 9) Added support for changing the password during construction of a new
  123. connection object as well as after the connection object has been created
  124. 10) Added support for the interval day to second data type in Oracle,
  125. represented as datetime.timedelta objects in Python.
  126. 11) Added support for getting and setting the current_schema attribute for a
  127. session
  128. 12) Added support for proxy authentication in session pools as requested by
  129. Michael Wegrzynek (and thanks for the initial patch as well).
  130. 13) Modified connection.prepare() to return a boolean indicating if a
  131. transaction was actually prepared in order to avoid the error ORA-24756
  132. (transaction does not exist).
  133. 14) Raise a cx_Oracle.Error instance rather than a string for column
  134. truncation errors as requested by Helge Tesdal.
  135. 15) Fixed handling of environment handles in session pools in order to allow
  136. session pools to fetch objects without exceptions taking place.
  137. Changes from 4.4 to 4.4.1
  138. 1) Make the bind variables and fetch variables accessible although they need
  139. to be treated carefully since they are used internally; support added for
  140. forward compatibility with version 5.x.
  141. 2) Include the "cannot insert null value" in the list of errors that are
  142. treated as integrity errors as requested by Matt Boersma.
  143. 3) Use a cx_Oracle.Error instance rather than a string to hold the error when
  144. truncation (ORA-1406) takes place as requested by Helge Tesdal.
  145. 4) Added support for fixed char, old style varchar and timestamp attribute
  146. values in objects.
  147. 5) Tweaked setup.py to check for the Oracle version up front rather than
  148. during the build in order to produce more meaningful errors and simplify
  149. the code.
  150. 6) In setup.py added proper detection for the instant client on Mac OS X as
  151. recommended by Martijn Pieters.
  152. 7) In setup.py, avoided resetting the extraLinkArgs on Mac OS X as doing so
  153. prevents simple modification where desired as expressed by Christian
  154. Zagrodnick.
  155. 8) Added documentation on exception handling as requested by Andreas Mock, who
  156. also graciously provided an initial patch.
  157. 9) Modified documentation indicating that the password attribute on connection
  158. objects can be written.
  159. 10) Added documentation warning that parameters not passed in during subsequent
  160. executions of a statement will retain their original values as requested by
  161. Harald Armin Massa.
  162. 11) Added comments indicating that an Oracle client is required since so many
  163. people find this surprising.
  164. 12) Removed all references to Oracle 8i from the documentation and version 5.x
  165. will eliminate all vestiges of support for this version of the Oracle
  166. client.
  167. 13) Added additional link arguments for Cygwin as requested by Rob Gillen.
  168. Changes from 4.3.3 to 4.4
  169. 1) Fix setup.py to handle the Oracle instant client and Oracle XE on both
  170. Linux and Windows as pointed out by many. Thanks also to the many people
  171. who also provided patches.
  172. 2) Set the default array size to 50 instead of 1 as the DB API suggests
  173. because the performance difference is so drastic and many people have
  174. recommended that the default be changed.
  175. 3) Added Py_BEGIN_ALLOW_THREADS and Py_END_ALLOW_THREADS around each blocking
  176. call for LOBs as requested by Jason Conroy who also provided an initial
  177. patch and performed a number of tests that demonstrate the new code is much
  178. more responsive.
  179. 4) Add support for acquiring cursor.description after a parse.
  180. 5) Defer type assignment when performing executemany() until the last possible
  181. moment if the value being bound in is null as suggested by Dragos Dociu.
  182. 6) When dropping a connection from the pool, ignore any errors that occur
  183. during the rollback; unfortunately, Oracle decides to commit data even when
  184. dropping a connection from the pool instead of rolling it back so the
  185. attempt still has to be made.
  186. 7) Added support for setting CLIENT_DRIVER in V$SESSION_CONNECT_INFO in Oracle
  187. 11g and higher.
  188. 8) Use cx_Oracle.InterfaceError rather than the builtin RuntimeError when
  189. unable to create the Oracle environment object as requested by Luke Mewburn
  190. since the error is specific to Oracle and someone attempting to catch any
  191. exception cannot simply use cx_Oracle.Error.
  192. 9) Translated some error codes to OperationalError as requested by Matthew
  193. Harriger; translated if/elseif/else logic to switch statement to make it
  194. more readable and to allow for additional translation if desired.
  195. 10) Transformed documentation to new format using restructured text. Thanks to
  196. Waldemar Osuch for contributing the initial draft of the new documentation.
  197. 11) Allow the password to be overwritten by a new value as requested by Alex
  198. VanderWoude; this value is retained as a convenience to the user and not
  199. used by anything in the module; if changed externally it may be convenient
  200. to keep this copy up to date.
  201. 12) Cygwin is on Windows so should be treated in the same way as noted by
  202. Matthew Cahn.
  203. 13) Add support for using setuptools if so desired as requested by Shreya
  204. Bhatt.
  205. 14) Specify that the version of Oracle 10 that is now primarily used is 10.2,
  206. not 10.1.
  207. Changes from 4.3.2 to 4.3.3
  208. 1) Added method ping() on connections which can be used to test whether or not
  209. a connection is still active (available in Oracle 10g R2).
  210. 2) Added method cx_Oracle.clientversion() which returns a 5-tuple giving the
  211. version of the client that is in use (available in Oracle 10g R2).
  212. 3) Added methods startup() and shutdown() on connections which can be used to
  213. startup and shutdown databases (available in Oracle 10g R2).
  214. 4) Added support for Oracle 11g.
  215. 5) Added samples directory which contains a handful of scripts containing
  216. sample code for more advanced techniques. More will follow in future
  217. releases.
  218. 6) Prevent error "ORA-24333: zero iteration count" when calling executemany()
  219. with zero rows as requested by Andreas Mock.
  220. 7) Added methods __enter__() and __exit__() on connections to support using
  221. connections as context managers in Python 2.5 and higher. The context
  222. managed is the transaction state. Upon exit the transaction is either
  223. rolled back or committed depending on whether an exception took place or
  224. not.
  225. 8) Make the search for the lib32 and lib64 directories automatic for all
  226. platforms.
  227. 9) Tweak the setup configuration script to include all of the metadata and
  228. allow for building the module within another setup configuration script
  229. 10) Include the Oracle version in addition to the Python version in the build
  230. directories that are created and in the names of the binary packages that
  231. are created.
  232. 11) Remove unnecessary dependency on win32api to build module on Windows.
  233. Changes from 4.3.1 to 4.3.2
  234. 1) Added methods open(), close(), isopen() and getchunksize() in order to
  235. improve performance of reading/writing LOB values in chunks.
  236. 2) Fixed support for native doubles and floats in Oracle 10g; added new type
  237. NATIVE_FLOAT to allow specification of a variable of that specific type
  238. where desired. Thanks to D.R. Boxhoorn for pointing out the fact that this
  239. was not working properly when the arraysize was anything other than 1.
  240. 3) When calling connection.begin(), only create a new tranasction handle if
  241. one is not already associated with the connection. Thanks to Andreas Mock
  242. for discovering this and for Amaury Forgeot d'Arc for diagnosing the
  243. problem and pointing the way to a solution.
  244. 4) Added attribute cursor.rowfactory which allows a method to be called for
  245. each row that is returned; this is about 20% faster than calling the method
  246. in Python using the idiom [method(*r) for r in cursor].
  247. 5) Attempt to locate an Oracle installation by looking at the PATH if the
  248. environment variable ORACLE_HOME is not set; this is of primary use on
  249. Windows where this variable should not normally be set.
  250. 6) Added support for autocommit mode as requested by Ian Kelly.
  251. 7) Added support for connection.stmtcachesize which allows for both reading
  252. and writing the size of the statement cache size. This parameter can make a
  253. huge difference with the length of time taken to prepare statements. Added
  254. support for setting the statement tag when preparing a statement. Both of
  255. these were requested by Bjorn Sandberg who also provided an initial patch.
  256. 8) When copying the value of a variable, copy the return code as well.
  257. Changes from 4.3 to 4.3.1
  258. 1) Ensure that if the client buffer size exceeds 4000 bytes that the server
  259. buffer size does not as strings may only contain 4000 bytes; this allows
  260. handling of multibyte character sets on the server as well as the client.
  261. 2) Added support for using buffer objects to populate binary data and made the
  262. Binary() constructor the buffer type as requested by Ken Mason.
  263. 3) Fix potential crash when using full optimization with some compilers.
  264. Thanks to Aris Motas for noticing this and providing the initial patch and
  265. to Amaury Forgeot d'Arc for providing an even simpler solution.
  266. 4) Pass the correct charset form in to the write call in order to support
  267. writing to national character set LOB values properly. Thanks to Ian Kelly
  268. for noticing this discrepancy.
  269. Changes from 4.2.1 to 4.3
  270. 1) Added preliminary support for fetching Oracle objects (SQL types) as
  271. requested by Kristof Beyls (who kindly provided an initial patch).
  272. Additional work needs to be done to support binding and updating objects
  273. but the basic structure is now in place.
  274. 2) Added connection.maxBytesPerCharacter which indicates the maximum number of
  275. bytes each character can use; use this value to also determine the size of
  276. local buffers in order to handle discrepancies between the client character
  277. set and the server character set. Thanks to Andreas Mock for providing the
  278. initial patch and working with me to resolve this issue.
  279. 3) Added support for querying native floats in Oracle 10g as requested by
  280. Danny Boxhoorn.
  281. 4) Add support for temporary LOB variables created via PL/SQL instead of only
  282. directly by cx_Oracle; thanks to Henning von Bargen for discovering this
  283. problem.
  284. 5) Added support for specifying variable types using the builtin types int,
  285. float, str and datetime.date which allows for finer control of what type of
  286. Python object is returned from cursor.callfunc() for example.
  287. 6) Added support for passing booleans to callproc() and callfunc() as
  288. requested by Anana Aiyer.
  289. 7) Fixed support for 64-bit environments in Python 2.5.
  290. 8) Thanks to Filip Ballegeer and a number of his co-workers, an intermittent
  291. crash was tracked down; specifically, if a connection is closed, then the
  292. call to OCIStmtRelease() will free memory twice. Preventing the call when
  293. the connection is closed solves the problem.
  294. Changes from 4.2 to 4.2.1
  295. 1) Added additional type (NCLOB) to handle CLOBs that use the national
  296. character set as requested by Chris Dunscombe.
  297. 2) Added support for returning cursors from functions as requested by Daniel
  298. Steinmann.
  299. 3) Added support for getting/setting the "get" mode on session pools as
  300. requested by Anand Aiyer.
  301. 4) Added support for binding subclassed cursors.
  302. 5) Fixed binding of decimal objects with absolute values less than 0.1.
  303. Changes from 4.1.2 to 4.2
  304. 1) Added support for parsing an Oracle statement as requested by Patrick
  305. Blackwill.
  306. 2) Added support for BFILEs at the request of Matthew Cahn.
  307. 3) Added support for binding decimal.Decimal objects to cursors.
  308. 4) Added support for reading from NCLOBs as requested by Chris Dunscombe.
  309. 5) Added connection attributes encoding and nencoding which return the IANA
  310. character set name for the character set and national character set in use
  311. by the client.
  312. 6) Rework module initialization to use the techniques recommended by the
  313. Python documentation as one user was experiencing random segfaults due
  314. to the use of the module dictionary after the initialization was complete.
  315. 7) Removed support for the OPT_Threading attribute. Use the threaded keyword
  316. when creating connections and session pools instead.
  317. 8) Removed support for the OPT_NumbersAsStrings attribute. Use the
  318. numbersAsStrings attribute on cursors instead.
  319. 9) Use type long rather than type int in order to support long integers on
  320. 64-bit machines as reported by Uwe Hoffmann.
  321. 10) Add cursor attribute "bindarraysize" which is defaulted to 1 and is used
  322. to determine the size of the arrays created for bind variables.
  323. 11) Added repr() methods to provide something a little more useful than the
  324. standard type name and memory address.
  325. 12) Added keyword argument support to the functions that imply such in the
  326. documentation as requested by Harald Armin Massa.
  327. 13) Treat an empty dictionary passed through to cursor.execute() as keyword
  328. arguments the same as if no keyword arguments were specified at all, as
  329. requested by Fabien Grumelard.
  330. 14) Fixed memory leak when a LOB read would fail.
  331. 15) Set the LDFLAGS value in the environment rather than directly in the
  332. setup.py file in order to satisfy those who wish to enable the use of
  333. debugging symbols.
  334. 16) Use __DATE__ and __TIME__ to determine the date and time of the build
  335. rather than passing it through directly.
  336. 17) Use Oracle types and add casts to reduce warnings as requested by Amaury
  337. Forgeot d'Arc.
  338. 18) Fixed typo in error message.
  339. Changes from 4.1.1 to 4.1.2
  340. 1) Restore support of Oracle 9i features when using the Oracle 10g client.
  341. Changes from 4.1 to 4.1.1
  342. 1) Add support for dropping a connection from a session pool.
  343. 2) Add support for write only attributes "module", "action" and "clientinfo"
  344. which work only in Oracle 10g as requested by Egor Starostin.
  345. 3) Add support for pickling database errors.
  346. 4) Use the previously created bind variable as a template if available when
  347. creating a new variable of a larger size. Thanks to Ted Skolnick for the
  348. initial patch.
  349. 5) Fixed tests to work properly in the Python 2.4 environment where dates and
  350. timestamps are different Python types. Thanks to Henning von Bargen for
  351. pointing this out.
  352. 6) Added additional directories to search for include files and libraries in
  353. order to better support the Oracle 10g instant client.
  354. 7) Set the internal fetch number to 0 in order to satisfy very picky source
  355. analysis tools as requested by Amaury Fogeot d'Arc.
  356. 8) Improve the documentation for building and installing the module from
  357. source as some people are unaware of the standard methods for building
  358. Python modules using distutils.
  359. 9) Added note in the documentation indicating that the arraysize attribute
  360. can drastically affect performance of queries since this seems to be a
  361. common misunderstanding of first time users of cx_Oracle.
  362. 10) Add a comment indicating that on HP-UX Itanium with Oracle 10g the library
  363. ttsh10 must alos be linked against. Thanks to Bernard Delmee for the
  364. information.
  365. Changes from 4.1 beta 1 to 4.1
  366. 1) Fixed bug where subclasses of Cursor do not pass the connection in the
  367. constructor causing a segfault.
  368. 2) DDL statements must be reparsed before execution as noted by Mihai
  369. Ibanescu.
  370. 3) Add support for setting input sizes by position.
  371. 4) Fixed problem with catching an exception during execute and then still
  372. attempting to perform a fetch afterwards as noted by Leith Parkin.
  373. 5) Rename the types so that they can be pickled and unpickled. Thanks to Harri
  374. Pasanen for pointing out the problem.
  375. 6) Handle invalid NLS_LANG setting properly (Oracle seems to like to provide a
  376. handle back even though it is invalid) and determine the number of bytes
  377. per character in order to allow for proper support in the future of
  378. multibyte and variable width character sets.
  379. 7) Remove date checking from the native case since Python already checks that
  380. dates are valid; enhance error message when invalid dates are encountered
  381. so that additional processing can be done.
  382. 8) Fix bug executing SQL using numeric parameter names with predefined
  383. variables (such as what takes place when calling stored procedures with out
  384. parameters).
  385. 9) Add support for reading CLOB values using multibyte or variable length
  386. character sets.
  387. Changes from 4.0.1 to 4.1 beta 1
  388. 1) Added support for Python 2.4. In Python 2.4, the datetime module is used
  389. for both binding and fetching of date and timestamp data. In Python 2.3,
  390. objects from the datetime module can be bound but the internal datetime
  391. objects will be returned from queries.
  392. 2) Added pickling support for LOB and datetime data.
  393. 3) Fully qualified the table name that was missing in an alter table
  394. statement in the setup test script as noted by Marc Gehling.
  395. 4) Added a section allowing for the setting of the RPATH linker directive in
  396. setup.py as requested by Iustin Pop.
  397. 5) Added code to raise a programming error exception when an attempt is made
  398. to access a LOB locator variable in a subsequent fetch.
  399. 6) The username, password and dsn (tnsentry) are stored on the connection
  400. object when specified, regardless of whether or not a standard connection
  401. takes place.
  402. 7) Added additional module level constant called "LOB" as requested by Joseph
  403. Canedo.
  404. 8) Changed exception type to IntegrityError for constraint violations as
  405. requested by Joseph Canedo.
  406. 9) If scale and precision are not specified, an attempt is made to return a
  407. long integer as requested by Joseph Canedo.
  408. 10) Added workaround for Oracle bug which returns an invalid handle when the
  409. prepare call fails. Thanks to alantam@hsbc.com for providing the code that
  410. demonstrated the problem.
  411. 11) The cusor method arravar() will now accept the actual list so that it is
  412. not necessary to call cursor.arrayvar() followed immediately by
  413. var.setvalue().
  414. 12) Fixed bug where attempts to execute the statement "None" with bind
  415. variables would cause a segmentation fault.
  416. 13) Added support for binding by position (paramstyle = "numeric").
  417. 14) Removed memory leak created by calls to OCIParamGet() which were not
  418. mirrored by calls to OCIDescriptorFree(). Thanks to Mihai Ibanescu for
  419. pointing this out and providing a patch.
  420. 15) Added support for calling cursor.executemany() with statement None
  421. implying that the previously prepared statement ought to be executed.
  422. Thanks to Mihai Ibanescu for providing a patch.
  423. 16) Added support for rebinding variables when a subsequent call to
  424. cursor.executemany() uses a different number of rows. Thanks to Mihai
  425. Ibanescu for supplying a patch.
  426. 17) The microseconds are now displayed in datetime variables when nonzero
  427. similar to method used in the datetime module.
  428. 18) Added support for binary_float and binary_double columns in Oracle 10g.
  429. Changes from 4.0 to 4.0.1
  430. 1) Fixed bugs on 64-bit platforms that caused segmentation faults and bus
  431. errors in session pooling and determining the bind variables associated
  432. with a statement.
  433. 2) Modified test suite so that 64-bit platforms are tested properly.
  434. 3) Added missing commit statements in the test setup scripts. Thanks to Keith
  435. Lyon for pointing this out.
  436. 4) Fix setup.py for Cygwin environments. Thanks to Doug Henderson for
  437. providing the necessary fix.
  438. 5) Added support for compiling cx_Oracle without thread support. Thanks to
  439. Andre Reitz for pointing this out.
  440. 6) Added support for a new keyword parameter called threaded on connections
  441. and session pools. This parameter defaults to False and indicates whether
  442. threaded mode ought to be used. It replaces the module level attribute
  443. OPT_Threading although examining the attribute will be retained until the
  444. next release at least.
  445. 7) Added support for a new keyword parameter called twophase on connections.
  446. This parameter defaults to False and indicates whether support for two
  447. phase (distributed or global) transactions ought to be present. Note that
  448. support for distributed transactions is buggy when crossing major version
  449. boundaries (Oracle 8i to Oracle 9i for example).
  450. 8) Ensure that the rowcount attribute is set properly when an exception is
  451. raised during execution. Thanks to Gary Aviv for pointing out this problem
  452. and its solution.
  453. Changes from 3.1 to 4.0
  454. 1) Added support for subclassing connections, cursors and session pools. The
  455. changes involved made it necessary to drop support for Python 2.1 and
  456. earlier although a branch exists in CVS to allow for support of Python 2.1
  457. and earlier if needed.
  458. 2) Connections and session pools can now be created with keyword parameters,
  459. not just sequential parameters.
  460. 3) Queries now return integers whenever possible and long integers if the
  461. number will overflow a simple integer. Floats are only returned when it is
  462. known that the number is a floating point number or the integer conversion
  463. fails.
  464. 4) Added initial support for user callbacks on OCI functions. See the
  465. documentation for more details.
  466. 5) Add support for retrieving the bind variable names associated with a
  467. cursor with a new method bindnames().
  468. 6) Add support for temporary LOB variables. This means that setinputsizes()
  469. can be used with the values CLOB and BLOB to create these temporary LOB
  470. variables and allow for the equivalent of empty_clob() and empty_blob()
  471. since otherwise Oracle will treat empty strings as NULL values.
  472. 7) Automatically switch to long strings when the data size exceeds the
  473. maximum string size that Oracle allows (4000 characters) and raise an
  474. error if an attempt is made to set a string variable to a size that it
  475. does not support. This avoids truncation errors as reported by Jon Franz.
  476. 8) Add support for global (distributed) transactions and two phase commit.
  477. 9) Force the NLS settings for the session so that test tables are populated
  478. correctly in all circumstances; problems were noted by Ralf Braun and
  479. Allan Poulsen.
  480. 10) Display error messages using the environment handle when the error handle
  481. has not yet been created; this provides better error messages during this
  482. rather rare situation.
  483. 11) Removed memory leak in callproc() that was reported by Todd Whiteman.
  484. 12) Make consistent the calls to manipulate memory; otherwise segfaults can
  485. occur when the pymalloc option is used, as reported by Matt Hoskins.
  486. 13) Force a rollback when a session is released back to the session pool.
  487. Apparently the connections are not as stateless as Oracle's documentation
  488. suggests and this makes the logic consistent with normal connections.
  489. 14) Removed module method attach(). This can be replaced with a call to
  490. Connection(handle=) if needed.
  491. Changes from 3.0a to 3.1
  492. 1) Added support for connecting with SYSDBA and SYSOPER access which is
  493. needed for connecting as sys in Oracle 9i.
  494. 2) Only check the dictionary size if the variable is not NULL; otherwise, an
  495. error takes place which is not caught or cleared; this eliminates a
  496. spurious "Objects/dictobject.c:1258: bad argument to internal function" in
  497. Python 2.3.
  498. 3) Add support for session pooling. This is only support for Oracle 9i but
  499. is amazingly fast -- about 100 times faster than connecting.
  500. 4) Add support for statement caching when pooling sessions, this reduces the
  501. parse time considerably. Unfortunately, the Oracle OCI does not allow this
  502. to be easily turned on for normal sessions.
  503. 5) Add method trim() on CLOB and BLOB variables for trimming the size.
  504. 6) Add support for externally identified users; to use this feature leave the
  505. username and password fields empty when connecting.
  506. 7) Add method cancel() on connection objects to cancel long running queries.
  507. Note that this only works on non-Windows platforms.
  508. 8) Add method callfunc() on cursor objects to allow calling a function
  509. without using an anonymous PL/SQL block.
  510. 9) Added documentation on objects that were not documented. At this point all
  511. objects, methods and constants in cx_Oracle have been documented.
  512. 10) Added support for timestamp columns in Oracle 9i.
  513. 11) Added module level method makedsn() which creates a data source name given
  514. the host, port and SID.
  515. 12) Added constant "buildtime" which is the time when the module was built as
  516. an additional means of identifying the build that is in use.
  517. 13) Binding a value that is incompatible to the previous value that was bound
  518. (data types do not match or array size is larger) will now result in a
  519. new bind taking place. This is more consistent with the DB API although
  520. it does imply a performance penalty when used.
  521. Changes from 3.0 to 3.0a
  522. 1) Fixed bug where zero length PL/SQL arrays were being mishandled
  523. 2) Fixed support for the data type "float" in Oracle; added one to the
  524. display size to allow for the sign of the number, if necessary; changed
  525. the display size of unconstrained numbers to 127, which is the largest
  526. number that Oracle can handle
  527. 3) Added support for retrieving the description of a bound cursor before
  528. fetching it
  529. 4) Fixed a couple of build issues on Mac OS X, AIX and Solaris (64-bit)
  530. 5) Modified documentation slightly based on comments from several people
  531. 6) Included files in MANIFEST that are needed to generate the binaries
  532. 7) Modified test suite to work within the test environment at Computronix
  533. as well as within the packages that are distributed
  534. Changes from 2.5a to 3.0
  535. 1) Removed support for connection to Oracle7 databases; it is entirely
  536. possible that it will still work but I no longer have any way of testing
  537. and Oracle has dropped any meaningful support for Oracle7 anyway
  538. 2) Fetching of strings is now done with predefined memory areas rather than
  539. dynamic memory areas; dynamic fetching of strings was causing problems
  540. with Oracle 9i in some instances and databases using a different character
  541. set other than US ASCII
  542. 3) Fixed bug where segfault would occur if the '/' character preceded the '@'
  543. character in a connect string
  544. 4) Added two new cursor methods var() and arrayvar() in order to eliminate
  545. the need for setinputsizes() when defining PL/SQL arrays and as a generic
  546. method of acquiring bind variables directly when needed
  547. 5) Fixed support for binding cursors and added support for fetching cursors
  548. (these are known as ref cursors in PL/SQL).
  549. 6) Eliminated discrepancy between the array size used internally and the
  550. array size specified by the interface user; this was done earlier to avoid
  551. bus errors on 64-bit platforms but another way has been found to get
  552. around that issue and a number of people were getting confused because of
  553. the discrepancy
  554. 7) Added support for the attribute "connection" on cursors, an optional
  555. DB API extension
  556. 8) Added support for passing a dictionary as the second parameter for the
  557. cursor.execute() method in order to comply with the DB API more closely;
  558. the method of passing parameters with keyword arguments is still supported
  559. and is in fact preferred
  560. 9) Added support for the attribute "statement" on cursors which is a
  561. reference to the last SQL statement prepared or executed
  562. 10) Added support for passing any sequence to callproc() rather than just
  563. lists as before
  564. 11) Fixed bug where segfault would occur if the array size was changed after
  565. the cursor was executed but before it was fetched
  566. 12) Ignore array size when performing executemany() and use the length of the
  567. list of arguments instead
  568. 13) Rollback when connection is closed or destroyed to follow DB API rather
  569. than use the Oracle default (which is commit)
  570. 14) Added check for array size too large causing an integer overflow
  571. 15) Added support for iterators for Python 2.2 and above
  572. 16) Added test suite based on PyUnitTest
  573. 17) Added documentation in HTML format similar to the documentation for the
  574. core Python library
  575. Changes from 2.5 to 2.5a
  576. 1) Fix problem with Oracle 9i and retrieving strings; it seems that Oracle 9i
  577. uses the correct method for dynamic callback but Oracle 8i will not work
  578. with that method so an #ifdef was added to check for the existence of an
  579. Oracle 9i feature; thanks to Paul Denize for discovering this problem
  580. Changes from 2.4 to 2.5
  581. 1) Added flag OPT_NoOracle7 which, if set, assumes that connections are being
  582. made to Oracle8 or higher databases; this allows for eliminating the
  583. overhead in performing this check at connect time
  584. 2) Added flag OPT_NumbersAsStrings which, if set, returns all numbers as
  585. strings rather than integers or floats; this flag is used when defined
  586. variables are created (during select statements only)
  587. 3) Added flag OPT_Threading which, if set, uses OCI threading mode; there is a
  588. significant performance degradation in this mode (about 15-20%) but it does
  589. allow threads to share connections (threadsafety level 2 according to the
  590. Python Database API 2.0); note that in order to support this, Oracle 8i or
  591. higher is now required
  592. 4) Added Py_BEGIN_ALLOW_THREADS and Py_END_ALLOW_THREADS pairs where
  593. applicable to support threading during blocking OCI calls
  594. 5) Added global method attach() to cx_Oracle to support attaching to an
  595. existing database handle (as provided by PowerBuilder, for example)
  596. 6) Eliminated the cursor method fetchbinds() which was used for returning the
  597. list of bind variables after execution to get the values of out variables;
  598. the cursor method setinputsizes() was modified to return the list of bind
  599. variables and the cursor method execute() was modified to return the list
  600. of defined variables in the case of a select statement being executed;
  601. these variables have three methods available to them: getvalue([<pos>]) to
  602. get the value of a variable, setvalue(<pos>, <value>) to set its value and
  603. copy(<var>, <src_pos>, <targ_pos>) to copy the value from a variable in a
  604. more efficient manner than setvalue(getvalue())
  605. 7) Implemented cursor method executemany() which expects a list of
  606. dictionaries for the arguments
  607. 8) Implemented cursor method callproc()
  608. 9) Added cursr method prepare() which parses (prepares) the statement for
  609. execution; subsequent execute() or executemany() calls can pass None as the
  610. statement which will imply use of the previously prepared statement; used
  611. for high performance only
  612. 10) Added cursor method fetchraw() which will perform a raw fetch of the cursor
  613. returning the number of rows thus fetched; this is used to avoid the
  614. overhead of generating result sets; used for high performance only
  615. 11) Added cursor method executemanyprepared() which is identical to the method
  616. executemany() except that it takes a single argument which is the number of
  617. times to execute a previously prepared statement and it assumes that the
  618. bind variables already have their values set; used for high performance
  619. only
  620. 12) Added support for rowid being returned in a select statement
  621. 13) Added support for comparing dates returned by cx_Oracle
  622. 14) Integrated patch from Andre Reitz to set the null ok flag in the
  623. description attribute of the cursor
  624. 15) Integrated patch from Andre Reitz to setup.py to support compilation with
  625. Python 1.5
  626. 16) Integrated patch from Benjamin Kearns to setup.py to support compilation
  627. on Cygwin
  628. Changes from 2.3 to 2.4
  629. 1) String variables can now be made any length (previously restricted to the
  630. 64K limit imposed by Oracle for default binding); use the type
  631. cx_Oracle.LONG_STRING as the argument to setinputsizes() for binding in
  632. string values larger than 4000 bytes.
  633. 2) Raw and long raw columns are now supported; use the types cx_Oracle.BINARY
  634. and cx_Oracle.LONG_BINARY as the argument to setinputsizes() for binding in
  635. values of these types.
  636. 3) Functions DateFromTicks(), TimeFromTicks() and TimestampFromTicks()
  637. are now implemented.
  638. 4) Function cursor.setoutputsize() implemented
  639. 5) Added the ability to bind arrays as out parameters to procedures; use the
  640. format [cx_Oracle.<DataType>, <NumElems>] as the input to the function
  641. setinputsizes() for binding arrays
  642. 6) Discovered from the Oracle 8.1.6 version of the documentation of the OCI
  643. libraries, that the size of the memory location required for the precision
  644. variable is larger than the printed documentation says; this was causing a
  645. problem with the code on the Sun platform.
  646. 7) Now support building RPMs for Linux.
  647. Changes from 2.2 to 2.3
  648. 1) Incremental performance enhancements (dealing with reusing cursors and
  649. bind handles)
  650. 2) Ensured that arrays of integers with a single float in them are all
  651. treated as floats, as suggested by Martin Koch.
  652. 3) Fixed code dealing with scale and precision for both defining a numeric
  653. variable and for providing the cursor description; this eliminates the
  654. problem of an underflow error (OCI-22054) when retrieving data with
  655. non-zero scale.
  656. Changes from 2.1 to 2.2
  657. 1) Upgraded thread safety to level 1 (according to the Python DB API 2.0) as
  658. an internal project required the ability to share the module between
  659. threads.
  660. 2) Added ability to bind ref cursors to PL/SQL blocks as requested by
  661. Brad Powell.
  662. 3) Added function write(Value, [Offset]) to LOB variables as requested by
  663. Matthias Kirst.
  664. 4) Procedure execute() on Cursor objects now permits a value None for the
  665. statement which means that the previously prepared statement will be
  666. executed and any input sizes set earlier will be retained. This was done to
  667. improve the performance of scripts that execute one statement many times.
  668. 5) Modified module global constants BINARY and DATETIME to point to the
  669. external representations of those types so that the expression
  670. type(var) == cx_Oracle.DATETIME will work as expected.
  671. 6) Added global constant version to provide means of determining the current
  672. version of the module.
  673. 7) Modified error checking routine to distinguish between an Oracle error and
  674. invalid handles.
  675. 8) Added error checking to avoid setting the value of a bind variable to a
  676. value that it cannot support and raised an exception to indicate this fact.
  677. 9) Added extra compile arguments for the AIX platform as suggested by Jehwan
  678. Ryu.
  679. 10) Added section to the README to indicate the method for a binary
  680. installation as suggested by Steve Holden.
  681. 11) Added simple usage example as requested by many people.
  682. 12) Added HISTORY file to the distribution.