DBCopy Change Log
=================

1.14
====
 - Added support for mapping the DISTINCT source column type for copying data from PostgreSQL

1.13
====
 - Only attempt to order the tables being copied if there is more than one table 
   in the copy set.

1.12
====
 - Copy thread will wait for the dialog record progress bar to be updated 
   before continuing to copy records.
 - Fixed bug which caused cursors to remain open in the source database after
   the copy operation was complete. 
 
1.11
====
If the source/dest database is Oracle, and the type of column being copied is 
DATE, then treat it like a TIMESTAMP for reading or writing the value.  Oracle 
stores a time component in date columns and this prevents this time component 
value from being lost if the destination database can also store a time 
component in DATE columns.

The error message for SQLExceptions now includes the SQL statement that was 
last executed (including bind variable values if it was a PreparedStatement)

1.1 (12/31/2006)
===
- Removed reflective code used for backward compatibility which was causing 
IllegalAccessExceptions when the keyword test was applied to column names.

- Fixed bug in copying FK constraints which left cursors open by not properly 
closing ResultSets when they were no longer needed.

- Fixed bug in copying FK constraints where the primary key table 
  name wasn't fully qualified the schema of the destination database.  This was 
  most noticeable when copying tables with FKs into a schema which was not the 
  default schema for that session.

- Fixed bug where cancelling the copy operation during table data transfer 
  did not also cancel the transfer of table constraints.

- Removed needless dependency on Java 5 from the DBCopy plugin. 

- Added support for IBM Informix Dynamic Server (10.0) and Sun Java System 
  High-Availability Database (HADB).

1584283: (DBCopy plugin - Copying LOBs from Oracle to Oracle fails)
If destination column type is Types.OTHER (1111), try to get 
the type name and map it to a valid java SQL type (such as 
Types.BLOB or Types.CLOB).  This only works when the database column
type name as reported by the JDBC driver is a standard type such as 
BLOB, VARCHAR, CLOB, CHAR, etc... A mapping exception is thrown 
otherwise.

1584260: (DBCopy plugin - Fix for issue where the same table is found in 
multiple schemas/catalogs that the user has access to.  Now we specify catalog 
or schema if the driver claims to support them.)

- Relocated dialect framework to SQuirreL's fw module so that it can be re-used
  (namely in the refactoring plugin).  This breaks backward compatibility with
  previous versions of SQuirreL.  However, it means SQuirreL can be enhanced to
  take session dialects into consideration for doing all manner of operations.

1.0 (10/07/2006)
===

- Ran latest version of findbugs (http://findbugs.sourceforge.net/) and fixed
  various issues that it reported such as NPEs and the like.
  

0.25 (08/27/2006)
====

- Previously, when copying from Axion and "Copy Primary Keys" or 
  "Copy Foreign Keys" was selected, the copy operation would fail with 
  SQLException stating the following: 
   
   "getPrimaryKeys() is not supported"
   
   "getImportedKeys() is not supported"
   
  Now, when using Axion as the source database, the copy operation will ignore 
  the user's preference for these settings, since it is not possible to honor 
  them with Axion and complete the copy operation.
  
- When selecting tables to copy, the user can now select the "TABLES" folder
  which will mark all tables contained in that schema for copy.  Previously, 
  the user would have to expand the tables folder and select all tables 
  manually.  Similarly, the "TABLES" folder has also become a "target" for 
  paste operations.
  
- Added support for TimesTen 6.0 (Note: fetch size for TimesTen is max 128.
  If the preference is set to larger than this, 128 will be used)

- Bugfix: In getting the qualified name of a table (schema.table) when the
  schema was an empty string, the qualified name would appear to be ".table"

- Bugfix: Added CLOB type to the list of types for which clearParameters must
  be called prior to setting parameters when null and non-null values are used
  for MySQL driver.
  
- Bugfix: Use the same logic to determine the source column type for "OTHER" 
  type when inserting records into destination, as is used to determine what 
  types to use for creating the table in the destination database.  Previously,
  the "OTHER" type resolution was only being done for table creation and not 
  for record insertion.

0.24 (07/23/2006)
====

- Fixed bug #1468056 (Missing i18n string argument)

- No longer use class names of the jdbc driver to decide which dialect 
  to use.  Now we use database product name and version.  This should be
  a more accurate method for determining which dialect to use for source 
  and destination sessions, prompting the user less often.

0.23 (04/07/2006)
====

- Added support for MaxDB 7.6 (open-source re-branding of SAPDB)

- Fine tuning of the precision mechanism added in the previous release 
  for some drivers which report erroneous sizes and precision of number
  and char datatypes.


0.22 (03/18/2006)
====

- Added support for DaffodilDB and H2 (www.h2database.com)

- For number type fields, previously, the precision was always the 
  maximum allowed by the destination database.  A new mechanism was
  added to allow the source database precision to be used if it 
  doesn't exceed the destination database's maximum precision. 
  Otherwise the previous behavior (maximum precision allowed by the
  destination database) is used.


0.21 (01/21/2006)
====

- Tested binary data copy using newly developed BinaryGenerator plugin
  for DBMonster.

- Fixed a bug where copying to MySQL when the table exists in a catalog
  other than the one in the connect URL would result in a "table <X> not
  found" error message.

- Fixed bug #1398199 (Copying large tables from MySQL causes SQuirreL to 
  run out of memory)

- Fixed bug #1386606 (Copying tables with BLOB columns to Pointbase fails)
  Now using ps.setNull instead of ps.setBytes for null values.

- Fixed memory leak caused by undisposed progress dialogs.

- Added elapsed time counter and time remaining estimate to the progress 
  dialog. 

- Added independently configurable delay (in millisecond granularity) between
  copying records and tables.  This reduces the load (cpu and io) on both 
  the client and the database server(s).

- Better support for BOOLEAN types when the source database supports them
  and the destination database does not.

- Updated DBCopy plugin help screens that are available in SQuirreL via 
  the help menu.


0.20 (12/10/2005)
====

- Added the ability to copy to existing table definitions that differ from 
  the source table definitions with regard to column order (columns are now
  matched up by name instead of assuming they are in the same order on the 
  destination database as that of the source database).

- Added support for the Axion (build M3) Java embedded database.

- Added support for the Progress, FrontBase and Ingress RDBM servers.

- Added ability to disable copying Primary Keys (Axion build M3 doesn't have
  the ability to get primary key information).

- Used DBMonster (http://dbmonster.kernelpanic.pl/) to generate a test set for
  DBMonster-supported types. This yielded another round of tweaking the 
  specification of types to use in Hibernate for determining the destination 
  database table definitions. The result is a more precise algorithm for 
  determining what field type and length to use when the destination database 
  table doesn't exist before copying.

- Fixed bug #1355029 (Copying BLOBs to MySQL sometimes fails)

- Fixed bug #1365782 (null values converted to O)

- Fixed bug which caused TIME columns to be copied into MySQL as DATE instead.
  (The value would appear to be 0000-00-00, regardless of this actual value in
   the source database)

- Fixed bug #1369033 (In Sybase, nullable fields are created as NOT NULL)

0.19 (11/04/2005)
====

- Performance increase due to a reduction in the number of data-type queries on the source
  and destination databases (Thanks to Dan Dragut)

- Fixed table analysis progress monitor dialog so that it goes away when the copy operation
  is complete.

- Examined data types for the other dialects (Firebird, HyperSonic, Pointbase, etc.)
  currently supported and explicitly set them for the appropriate java type.  Tested each type 
  against the corresponding database for usage and compatibility.

- Added custom type mappings for McKoi, Derby and Sybase

- Fixed bug which caused multiple dialogs to appear when cancelling a copy operation.

- Fixed bug that would create a temporary file to store the blob in if the blob column
  value is null.

- Fixed bug 1344224 (When auto-commit is disabled, committing the source session)


0.18 (10/22/2005)
====

- Added table analysis of source tables prior to attempting to create the tables in the 
  destination database.  Analysis consists of creating a test table with one column 
  in it for each column of the table.  This can be turned off, but it gives a better description
  of what happened in the event that a column name isn't allowed in the destination database.
  Additionally, this will be done for all tables in the copy set before making any changes in the 
  destination database. If the source and destination databases are the same, this analysis is 
  skipped.

- Updated for SQuirreL plugin interface changes to be compatible with latest SQuirreL (> 2.0 final)
  This version of the plugin is still compatible with previous versions of SQuirreL (2.0RC1, 2.0Final)
  as the interface change added new members and did not change any existing members.

- Examined data types for the major dialects currently supported and explicitly set them for the 
  appropriate java type.  Tested each type against the corresponding database for usage and
  compatibility.  This should hopefully make the default data type mappings used sufficiently 
  robust for compatibility between databases.(See 
  http://dbcopyplugin.sourceforge.net/dbcopydatatypemapping.html for more detail regarding how
  the plugin maps data types between different databases)

- Fixed a bug that resulted in the following error message - "Copy failed: 0".  Behind the scenes
  an ArrayIndexOutOfBoundsException was encountered when getting information about the newly created
  table in the destination schema, if the case of the table name didn't match.


0.17 (8/26/2005)
====

- Added configuration item for column name keyword checking in destination database.
  This feature uses the "keywords" reported by the JDBC driver to find column names
  in the source table copy set that cannot be used as column names in the destination
  database.  However, this is too aggressive in some cases as some databases (like DB2)
  report keywords that can also be used as column names.  So, now this checking can be
  disabled. The configuration is available in 

  "File" -> "Global Preferences" -> "DBCopy" -> "Column Type Mapping"


0.16 (8/21/2005)
====

- Added custom column type mappings for IBM DB2. (Tested against DB2 PE for Windows)

- Added new configuration option to disable auto-detection of destination 
  database.(This causes the Hibernate dialect chooser to always appear when 
  copying to a new database session.  Dialect choices are cached for existing
  sessions).  The configuration is available in 

  "File" -> "Global Preferences" -> "DBCopy" -> "Column Type Mapping"

- Fixed bug which would cause destination copy sessions to linger in memory even 
  after being closed.

- Changed Oracle type mapping for LONGVARCHAR to use CLOB instead of LONG since 
  LONG is deprecated and multiple LONG columns for a single table aren't supported
  whereas multiple CLOB columns for a single table are.

- Massive refactoring to provide a framework for external application integration.
  (For the most part, this facilitates writing a driver that automates regression
   testing, but might be useful for other 3rd-party integrations)


0.15 (8/13/2005)
====

- Added support for turning off auto-commit and committing 
  after a configurable number of records.

- Added support for turning on/off the copy of foreign keys, 
  table records and index defintions.

- Added ability to detect and ignore duplicate index defintions.

- Fixed bug which resulted from using the wrong string function to query 
  max length for a column - this is database-dependent and the code was 
  assuming that all databases have a "length" function.


0.14 (8/5/2005)
====

- Added support for caching BLOBs to disk during transfer to prevent 
  the client from running out of memory on large BLOBs. Transfer buffer
  size is configurable.

- Added DB Copy tab to Global Preferences section of SQuirreL to configure 
  preferences for the DB Copy Plugin.

- Truncate can now be used for databases that support it, instead of "delete".
  This can be turned on/off for all databases in the preferences.  If enabled
  it will be attempted, and if not supported, delete will be used instead.

- When truncating/deleting records for tables that exist in the destination
  database, the dialog that prompts for record deletion now has a "Yes to all"
  button to apply record deletion to all destination tables.

- Added support for choosing additional Hibernate dialects if destination
  database vendor couldn't be determined. (DB2, Derby, FrontBase, Informix, 
  Ingres, Interbase, McKoi and TimesTen)

0.13 (7/30/2005)
==== 

- Added support for copying index definitions along with the tables 
  that are being copied.

- Altered destination table truncation to use "delete from" instead of
  the less standard "truncate table".  Will add support for this back 
  in on some databases in the next release.

- Added check for if column is a keyword when copying data from one 
  table to another (In the case where the data is copied without creating 
  the table). 

- If an SQLException is encountered during record copy, show it's message 
  to the user (instead of simply printing the stack trace).

- Fixed source files eol chars.  


0.12 (7/13/2005) First Beta Release
====
- Added support for internationalizing the the user dialog messages.

- Bug fixes (moved GUI work onto event dispatch thread)

- Added support for checking if source database column names are in fact 
  keywords in the destination database.

- When records exist in the destination table, the delete dialog now indicates
  the name of the table when asking the user if it should truncate the table.

- Added custom type mappings for MS SQLServer

- Added ability to auto-determine when destination database is MS SQLServer.

- Tested this version's MS SQLServer dialect against MS SQLServer 2005(CTP)


0.11 (6/30/2005)
====
 
- Added copying table constraints (Primary Key and Foreign Key).

- Added dialog to allow user to select a hibernate dialect for the destination 
  database, if one couldn't be determined automatically.

- Asks user to truncate records in destination table, if records already exist.

- Fixed packaging to place hibernate and commons-logging jars in subdirectory
  space of dbcopy plugin.

- Supported Hibernate dialects are now: 
  	Firebird, Oracle, Sybase, MS SQLServer, 
  	MySQL, HyperSonic, Pointbase, PostgreSQL.

- Bug fixes.  Actually tested this release a bit.


0.10 (6/24/2005)
====

- Initial release.

