                                History
                                =======

Changes in 1.17.4 (released 04/30/2007)
=======================================

     * The threshold for string length for procedure and function
       arguments has been reduced to 4000.

Changes in 1.17.3 (released 03/08/2007)
=======================================

     * BLOB arguments for procedures and functions are always passed
       as variables now.

Changes in 1.17.2 (released 03/07/2007)
=======================================

     * Arguments for procedures and functions that are longer that
       32000 characters are passed as variables now (the threshold
       was 32768 before and didn't work).

Changes in 1.17.1 (released 03/02/2007)
=======================================

     * Fix an inverted logic bug in Record.fromdata that surfaced in
       unicode mode: BLOBs were treated as string and CLOBs as binary
       data.

Changes in 1.17 (released 02/23/2007)
=====================================

     * The readlobs and unicode parameters are now honored when
       calling procedures and functions via Procedure and Function
       objects.

Changes in 1.16 (released 02/21/2007)
=====================================

     * A parameter unicode has been added to various constructors and
       methods. This parameter can be used to get strings (i.e.
       VARCHAR2 and CLOBs) as unicode object instead of str objects.

Changes in 1.15 (released 02/17/2007)
=====================================

     * Fixed an output bug in oradiff.py when running in full output
       mode.
     * A parameter readlobs has been added to various constructors
       and methods that can be used to get small (or all) LOBs as
       strings in cursor fetch calls.

Changes in 1.14 (released 02/01/2007)
=====================================

     * A new method iterprivileges has been added to Connection.
     * A script oragrant.py has been added for copying privileges.

Changes in 1.13 (released 11/06/2006)
=====================================

     * Two new methods (itertables and iterfks) have been added to
       Connection. They yield all table definitions or all foreign
       keys respectively.
     * A new method isenabled has been added to ForeignKey.
     * A __str__ method has been added to Object.
     * A bug in oramerge.py has been fixed: In certain situations
       oramerge.py used merging actions that were meant to be used
       for the preceeding object.

Changes in 1.12.2 (released 10/18/2006)
=======================================

     * Fixed a bug that showed up when an index and a foreign key of
       the same name existed.

Changes in 1.12.1 (released 09/19/2006)
=======================================

     * Fixed a bug in Index.__xattrs__.

Changes in 1.12 (released 09/06/2006)
=====================================

     * Function objects are now callable too. They return the return
       value and a Record containing the modified input parameters.

Changes in 1.11.1 (released 08/29/2006)
=======================================

     * Fixed a bug in Column.modifyddl.

Changes in 1.11 (released 08/22/2006)
=====================================

     * The class Column has gained a few new methods: datatype,
       default, nullable and comment.
     * Calling a procedure will now raise a SQLObjectNotFoundError
       error, if the procedure doesn't exist.

Changes in 1.10 (released 08/11/2006)
=====================================

     * The classes Proc and LLProc have been removed. The
       functionality of Proc has been merged into ProcedureDefinition
       (with has been renamed to Procedure). Information about the
       procedure arguments is provided by the iteraguments method.
     * All other subclasses of Definition have been renamed to remove
       the "Definition" for the name to reduce typing. (Methods have
       been renamed accordingly too.
     * oramerge.main and oradiff.main now accept option arrays as
       arguments.
     * oradiff.py has finally been fixed.

Changes in 1.9.4 (released 08/09/2006)
======================================

     * Fixed a bug in oradiff.py.

Changes in 1.9.3 (released 08/08/2006)
======================================

     * Fixed a bug in oramerge.py.

Changes in 1.9.2 (released 08/04/2006)
======================================

     * Fixed a bug in TableDefinition.iterdefinitions.

Changes in 1.9.1 (released 08/02/2006)
======================================

     * Fixed a bug in oracreate.py.

Changes in 1.9 (released 07/24/2006)
====================================

     * Dependencies involving MaterializedViewDefinitions and
       IndexDefinitions generated by constraints work properly now,
       so that iterating all definitions in create order really
       results in a working SQL script.
     * A method table has been added to PKDefinition, FKDefinition,
       UniqueDefinition and IndexDefinition. This method returns the
       TableDefinition to object belongs to.
     * A method pk has been added to FKDefinition. It returns the
       primary key that this foreign key references.
     * Indexes and constraints belonging to skipped tables are now
       skipped too in oracreate.py.
     * Arguments other than sys.argv[1:] can now be passed to the
       oracreate.py and oradrop.py main functions.

Changes in 1.8.1 (released 07/17/2006)
======================================

     * ll.orasql can now handle objects name that are not in
       uppercase.

Changes in 1.8 (released 07/14/2006)
====================================

     * Connection.iterobjects has been renamed to iterdefinitions.
     * Each Definition subclass has a new classmethod iterdefinitions
       that iterates through all definitions of this type in a schema
       (or all schemas).
     * Each Definition subclass has new methods iterreferences and
       iterreferencedby that iterate through related definitions. The
       methods iterreferencesall and iterreferencedbyall do this
       recursively. The method iterdependent is gone now.
     * The method iterschema of Connection now has an additional
       parameter schema. Passing "all" for schema will give you
       statistics for the complete database not just one schema.
     * A new definition class MaterializedViewDefinition has been
       added that handles materialized views. Handling of create
       options is rudimentary though. Patches are welcome.
     * TableDefinition has a three new methods: ismview returns
       whether the table is a materialized view; itercomments
       iterates through comments and iterconstraints iterates through
       primary keys, foreign keys and unique constraints.
     * The method getcursor will now raise a TypeError if it can't
       get a cursor.

Changes in 1.7.2 (released 07/05/2006)
======================================

     * RAW fields in tables are now output properly in
       TableDefinition.createddl.
     * A class PackageBodyDefinition has been added. oracreate.py
       will output package body definitions and oradrop.py will drop
       them.

Changes in 1.7.1 (released 07/04/2006)
======================================

     * Duplicate code in the scripts has been removed.
     * Fixed a bug in oramerge.py: If the source to be diffed was
       long enough the call to diff3 deadlocked.

Changes in 1.7 (released 06/29/2006)
====================================

     * The method iterobjects has been moved from Cursor to
       Connection.
     * The method itercolumns has been moved from Cursor to
       TableDefinition.
     * LLProc now recognizes the c_out parameter used by ll.toxic
       0.8.
     * Support for positional arguments has been added for Proc and
       LLProc. Error messages for calling procedures have been
       enhanced.
     * SequenceDefinition now has a new method createddlcopy that
       returns code that copies the sequence value. oracreate.py has
       a new option -s/--seqcopy that uses this feature.
     * setuptools is now supported for installation.

Changes in 1.6 (released 04/26/2006)
====================================

     * Added a SessionPool (a subclass of cx_Oracles SessionPool)
       whose acquire method returns ll.orasql.Connection objects.

Changes in 1.5 (released 04/05/2006)
====================================

     * Added a class IndexDefinition for indexes. oracreate.py will
       now issue create statements for indexes.

Changes in 1.4.3 (released 12/07/2005)
======================================

     * Fixed a bug with empty lines in procedure sources.
     * Remove spurious spaces at the start of procedure and function
       definitions.

Changes in 1.4.2 (released 12/07/2005)
======================================

     * Fixed a bug that the DDL output of Java source.
     * Trailing whitespace in each line of procedures, functions etc.
       is now stripped.

Changes in 1.4.1 (released 12/06/2005)
======================================

     * Fixed a bug that resulted in omitted field lengths.

Changes in 1.4 (released 12/05/2005)
====================================

     * The option -m/--mode has been dropped from the script
       oramerge.py.
     * A new class ColumnDefinition has been added to ll.orasql. The
       Cursor class has a new method itercolumns that iterates the
       ColumnDefinitions of a table.
     * oramerge.py now doesn't output a merged create table
       statement, but the appropriate alter table statements.

Changes in 1.3 (released 11/24/2005)
====================================

     * Added an option -i to oracreate.py and oradrop.py to ignore
       errors.
     * The argument all of the cursor method iterobjects is now named
       schema and may have three values: "own", "dep" and "all".
     * Added an script oramerge.py that does a three way merge of
       three database schemas and outputs the resulting script.
     * DB links are now copied over in SynonymDefinitions.

Changes in 1.2 (released 10/24/2005)
====================================

     * Added a argument to createddl and dropddl to specify if
       terminated or unterminated DDL is wanted (i.e. add ; or / or
       not).
     * CommentsDefinition has been renamed to CommentDefinition and
       holds the comment for one field only.
     * JavaSourceDefinition has been added.
     * The scripts oracreate.py, oradrop.py and oradiff.py now skip
       objects with "$" in their name by default. This can be changed
       with the -k option (but this will lead to unexecutable
       scripts).
     * oradiff.py has a new options -b: This allows you to specify
       how whitespace should be treated.
     * Added an option -x to oracreate.py to make it possible to
       directly execute the DDL in another database.
     * Fixed a bug in SequenceDefinition when the CACHE field was 0.

Changes in 1.1 (released 10/20/2005)
====================================

     * A script oradiff.py has been added which can be used for
       diffing Oracle schemas.
     * Definition classes now have two new methods cdate and udate
       that give the creation and modification time of the schema
       object (if available).
     * A "flat" iteration mode has been added to Cursor.iterobjects
       that returns objects unordered.
     * Connection has a new method connectstring.
     * A class LibraryDefinition has been added.
     * CommentsDefinition.createddl returns "" instead of "\n" now if
       there are no comments.
     * SQLObjectNotfoundError has been renamed to
       SQLObjectNotFoundError.

Changes in 1.0 (released 10/13/2005)
====================================

     * ll.orasql requires version 1.0 of the core package now.
     * A new generator method iterobjects has been added to the
       Cursor class. This generator returns "definition objects" for
       all the objects in a schema in topological order (i.e. if the
       name of an object (e.g. a table) is generated it will only
       depend on objects whose name has been yielded before). SQL for
       recreating and deleting these SQL objects can be generated
       from the definition objects.
     * Two scripts (oracreate.py and oradrop.py) have been added,
       that create SQL scripts for recreating or deleting the content
       of an Oracle schema.

Changes in 0.7 (released 08/09/2005)
====================================

     * The commands generated by iterdrop no longer have a
       terminating ;, as this seems to confuse Oracle/cx_Oracle.

Changes in 0.6 (released 06/20/2005)
====================================

     * Two new functions have been added: iterdrop is a generator
       that yields information about how to clear the schema (i.e.
       drop all table, sequences, etc.). itercreate yields
       information about how to recreate a schema.

Changes in 0.5 (released 06/07/2005)
====================================

     * Date values are now supported as OUT parameters.

Changes in 0.4.1 (released 03/22/2005)
======================================

     * Added a note about the package init file to the installation
       documentation.

Changes in 0.4 (released 01/03/2005)
====================================

     * ll.orasql now requires ll-core.
     * Procedures can now be called with string arguments longer that
       32768 characters. In this case the argument will be converted
       to a variable before the call. The procedure argument must be
       a CLOB in this case.
     * Creating Record instances from database data is now done by
       the class method Record.fromdata. This means it's now possible
       to use any other class as long as it provides this method.

Changes in 0.3 (released 12/09/2004)
====================================

     * ll.orasql requires cx_Oracle 4.1 now.

Changes in 0.2.1 (released 09/09/2004)
======================================

     * Fixed a regression bug in Proc._calcrealargs as cursors will
       now always return Record objects.

Changes in 0.2 (released 09/08/2004)
====================================

     * Now generating Record object is done automatically in a
       subclass of cx_Oracle.Cursor. So now it's possible to use
       ll.orasql as an extended cx_Oracle.

Changes in 0.1 (released 07/15/2004)
====================================

     * Initial release.