| 17-Feb-2006 |
AdeptSQL Diff v. 1.90 Beta 45 |
Another bunch of corrections, including important improvements in SQL
scripting and in DataDiff.
Quick links:
Changes
- To avoid timeout errors when a complex database is scanned, it may be
necessary to increase the timeout value for queries (not to be confused with
the connection timeout). Such setting did exist in the Diff, but it was hidden
on an unrelated option page ('Executing scripts/General'). This is obviously
a connection-specific setting, so it is now added to the connection panel
and removed from the options dialog.
- When a saved comparison is loaded, the Diff now recognizes when the
two DBs are happen to be on the same server and automatically sets
"(o) On the same server" mode.
- DataDiff column configuration: the pull-down part of the filter
combobox, containing the recently used expressions, is now saved not in the
registry (common for all DataDiff comparisons), but with the settings for
this particular table comparison.
- Fixed-size string columns (e.g. 'NCHAR(30)') were loaded with all their
trailing spaces, which prevented them from comparing correctly. That is,
DataDiff would see any string value in a CHAR(5) column as different from the
identical string value in a CHAR(8) column. Now the DataDiff can optionally RTRIM()
string columns before fetching them from the server. This option is automatically
turned on for CHAR and NCHAR columns, but not for VARCHAR/NVARCHAR (because
trailing spaces in VARCHARs are probably needed). However, you can override
this setting for any string column in the column configuration dialog.
- One recent addition to DataDiff column configuration, the 'Insert mode'
option, was specified as one setting for both compared columns. However, it turned out
to be more consistent to use separate setting for each direction (that is,
depending on whether you update left-hand or right-hand table, the column
value may need to be scripted differently). The column configuration dialog
has been changed accordingly.
Bug fixes
- Constraint generation is broken in Beta44: When constraints are restored,
the Diff now misses the whole 'alter table... add' part! Fixed.
- The SQL editor window used to keep the CPU 100% busy just doing some
idle-loop checks repeatedly. Not so much a bug as an annoyance, but now it is
fixed, anyway. Now the windows in Diff are very quiet CPU-wise, unless you
are actually doing something with them.
- When DataDiff scripted a DECIMAL column, it used system locale settings.
If the locale used comma as a decimal separator, the scripted numbers would
also have commas inside, which is not valid in SQL. This version always
produces valid decimal literals.
- Decimals with different number of decimal places didn't compare correctly
(e.g. the DataDiff would see 1.0000 and 1.00 as different values). This happened
because DataDiff tends to use fast binary comparison whereever possible, especially
for numeric columns. However, for equivalent DECIMALs the binary representation
depends on the number of decimal places, so binary comparison can not always
be used. Fixed.
- Hopefully nobody uses that, but SQL Server does allow to include square
brackets or quote chanracters into "quoted" object names, like "t[1]".
For this to work, the closing brackets must be escaped by doubling them,
e.g. 'CREATE TABLE [t[1]]] (...)'. The Diff didn't do the escaping correctly,
which would cause scan errors if such objects existed in the databases. Fixed.
- When a session starts with connection having Windows authentication,
the login/password fields were not disabled until you switch to SQL login
and back to Windows authentication. Fixed.
- After the fix in Beta40 which disables permission scripting for users
missing in the target DB, the Diff also stopped scripting permissions in
some other situations when they should have been scripted. Fixed.
- The "Hide identical rows" filter in DataDiff didn't work when some of the
columns had different data type (e.g. 'int' against 'float'), even if their
values in a particular row are equivalent or not. Fixed.
- 'Timestamp' columns in DataDiff must have 'Exclude from inserts'
setting as the only one possible for them. Done.
- DataDiff display filters ('Hide unchanged', etc) must not affect the view
when a single table is being viewed in DataDiff. As it was, the filters
remaining after the last comparison could hide the viewed table completely,
whereas the 'set filters' button on the toolbar is disabled. Fixed.
- When viewing a single table in DataDiff, the column configuration dialog
incorrectly forced all columns to be 'ignored for inserts', so no INSERTS
were scripted. Fixed.
- Due to an error reading comparison files, DataDiff configurations for
specific tables were not re-loaded with the comparison. Fixed.
- Several corrections have been made in the code allowing to specify
separate row filter expressions in DataDiff.
- In some situations DataDiff's column configuration dialog assigned to
columns default scripting modes which aren't even enabled for them. The logic
of assigning default descripting modes and other column-wise DataDiff option
has been reviewed and corrected in many places.
Known issues
- When a column with some constrains is recreated, and constraints of this
type are configured to be scripted with column (e.g. 'x int unique'),
the Diff drops the PK, drops the column, recreates the column with constraint,
then tries to add the same constraint again, which is an error.
- The 'Discard unchanged rows' option is DataDiff doesn't work if the
rows contain any column(s) with data conversion (e.g. 'int' vs. 'float').
|
| 16-Feb-2006 |
AdeptSQL Diff v. 1.90 Beta 44 |
Bug fixes
- DataDiff broken: Recent changes in Beta42 changed format
of the connection string being passed to DataDiff when a data comparison starts.
As the result, DataDiff was unable to connect to the databases. Fixed.
- AV reading dependencies: Sometimes during the 'Reading dependencies' phase of the scan the Diff
would show 'Access violation' warning in the message panel and skip the rest
of the schema loading (database properties, extended properties, permissions).
Fixed.
- Some DEFAULT constaints belonging to system tables ended up in the schema
tree as global defaults (that is, those created by 'CREATE DEFAULT...'), which
is an error. Fixed.
- There are several corrections scripting enabled/disabled constraints:
(a) When the Diff generated a script to add a disabled ('WITH NOCHECK') constraint
to the table, it missed the 'WITH NOCHECK' clause. (b) Besides, simply adding a
constraint WITH NOCHECK is not sufficient for it to be disabled, ALTER TABLE NOCHECK
is required as well. (c) When synchronizing enabled vs. disabled constraints
with automatic names, the Diff inserted the wrong name (that is, in the script
for right-hand DB it used constraint name from left-hand DB). All these errors
have been fixed.
|
| 15-Feb-2006 |
AdeptSQL Diff v. 1.90 Beta 42 |
New and changed features
- Server names in the server selection combobox look just like before,
but 'behind the scenes' the Diff now keeps a partial connection string for each
of them, not just the server name. So once you select a server from the combobox,
this can also automatically set netlib, IP, login or timeout, depending on
which information is available for this particular pull-down item (from the server scan
dialog, or from server aliases in the registry, etc).
- To fill the servers combobox, the Diff now uses the list of 'server aliases',
as specified by the MS Client Network Utility, in addition to other sources
it used before.
- The server scan dialog has been modified to allow you to choose connections
with a specific network library. You can now double-click not only on a
'server' node in the scanned tree, but on its netlib-specific subnodes as
well. Supported are 'TCP/IP' and 'named pipe' subnodes.
- The two database schemas are now loaded by two parallel threads, which
can result in significantly shorter loading times. The actual effect of this
parallel schema loading will depend on where your servers
are: loading from two different remote servers may be almost twice as fast now,
whereas for the local server the gain won't be that significant.
- Accordingly, the Diff now uses a new progress dialog during
the schema scan. The dialog has two separate progress indicators for each of
the databases being compared.
- There have been serious internal changes in the Diff to allow the multithreading described
above. One other side effect of these changes is that the Diff now handles
aborted or failed comparison in a more reliable way: if the new comparison fails,
the current comparison remains intact. The Diff will no longer show the one-sided
schema view if one of the connections fails.
- When you change any options in the "Schema Options" dialog, and these changes
affect how the schema tree should look, the Diff immediately repaints or
rebuild the schema tree, as necessary. If complete schema rescan is required,
the Diff first asks if you want to reload the schema now. In previous versions,
changes in the settings would not be reflected in the schema view until you
manually refresh it.
- The option controlling case-sensitivity of name comparison has been moved
from "Schema Scan/Ignored Details" to "Comparison/Textual and name comparison".
Bug fixes
- When you run SQL script in the editor window, and there is a transaction,
and the server encounter a SQL error inside the script, the editor would fail
to reset its internal "in transaction" flag. When this happens, the editor window
can never be closed, because it asks to end the transaction which no longer
exists on the server. This has been fixed: the editor now correctly resets
its internal flags when a transaction is rolled back by an error.
- The "Difference hints/Long items hints" option on the
"Display/Schema Tree" option page didn't work. It is fixed now.
- On the options page "Schema Scan/Ownership", the "Retrieve all/Owned by"
and the "Ignore owner names" options were not correctly loaded on startup,
so every time you run the Diff, they would be reset to the defaults. Fixed.
|
| 05-Feb-2006 |
AdeptSQL Diff v. 1.90 Beta 41 |
This update fixes several problems reported by the users. More changes are on the way,
but putting them into the same update would have delayed it unnecessary, so only the bug fixes
have been included here.
Quick links:
Bug fixes
- The SQL generator would sometimes forget to put the table name in
ALTER TABLE ... ADD CONSTRAINT [foreign key]... Fixed.
- When a NOT NULL column is added to a table which already has data, the
Diff scripts this by first adding the column as a nullable one,
then updating it to some default value (like 0), then ALTERing to NOT NULL.
However, it tried to use the same sequence for a TIMESTAMP column, which is
initialized internally and should be simply added. Fixed.
- Schema reporting command caused access violation if called when you have
only one database loaded (not a comparison). Fixed.
- When a report is about to be generated for a single database, the
"[x] Report only changed items" checkbox doesn't make any sense. So in this version,
it is disabled when reporting a single DB.
Minor changes
- Now the SQL editor blocks the switching of target DBs while in transaction.
Known issues
- There is an AV lurking somewhere in the DataDiff report dialog. I saw it
once but so far has been unable to reproduce.
- Both schems and data reporting for a single database actually need separate
report templates. Using comparison statistics and color highlighting in this
case doesn't seem to make such sense.
|
| 29-Jan-2006 |
AdeptSQL Diff v. 1.90 Beta 40 |
Finalized SQL2005 compatibility for procedures, functions and triggers.
Important improvements in code generation, various bug fixes.
Quick links: "WITH EXEC[UTE] AS ...", "Script users" option, trigger comparison, re-creates permissions, Permissions for missing users, NFR for triggers, mousewheel scrolling, Detecting BEGIN TRANS, Error in column order, Some options not saved
New and changed features
- The Diff now correctly processes "WITH EXEC[UTE] AS ..."
option for SQL2005 procedures, triggers and functions, as well as "RETURNS NULL ON NULL INPUT" /
"CALLED ON NULL INPUT" option for functions. Since the new "EXTERNAL NAME ..."
clause in procedures and functions is compared as part of the body text, it
does not require any special handling in the Diff. This means the Diff now
fully supports procedures, functions and triggers in SQL2005.
- If you try to close an SQL Edit window while there is an open transaction,
the Diff will show you a warning message box and won't close the window unless
you either commit or rollback the transaction.
- A new "Script users" option is added on the "Scripting/Schema level"
option page. This way you can tell the Diff not to script users (groups, roles)
when synchronizing the entire databases (from the root of the schema tree).
It appears that more often than not you will have different sets of users
in the source and the target databases, so this option is initially turned off
(that is, not to script users). Regardless of the setting, you can still
script users if you select some of them (or the entire category) in the schema tree.
Bug fixes
- The trigger comparison logic has been disrupted in Beta 39, so the Diff detects
changes in triggers but can't synchronize them. This is fixed now.
- After an object is synchronized by re-creating it, none of its permissions
were re-created. This applied to procedures, functions, triggers and views.
Now the Diff re-creates permissions, after re-creating the object itself,
as they were in the target database. If you really need to synchronize
the permissions, you will have to apply the re-creation script, refresh the
schema and synchronize again. This is obviously not a perfect solution, but
at least you won't have permissions on the target server suddenly dropped.
- Permissions for missing users: When scripting differences
in permissions and some of the users (to whom those permissions are granted)
are defined only in one database, the Diff did not take this into account and
generated GRANT/DENY/REVOKE statements for those missing users as well.
This version corrects this: permissions are synchronized only for users which
exist in both databases.
- NFR for triggers: Trigger comparison now takes into account the 'Ignore Not For Replication'
option. Since 'NOT FOR REPLICATION' is specified as a part of trigger body,
it took some changes in Diff's built-in SQL parser to make it ignore the NFR
clause during the text comparison. NOTE: if you wish the NFR ignored for
triggers, you must also enable "Lexical comparison" on the
"Comparison/SQL Textual..." option page. The Diff now prompts you to do so.
- The SQL editor did not recognize mousewheel scrolling.
The mousewheel works now.
- Detecting BEGIN TRANS: The SQL editor is supposed to detect
when a transaction begins or ends from the SQL script (e.g. after executing
BEGIN TRANS, as opposite to just clicking the "Begin trans" button), but that
didn't work in previous versions. Fixed.
- Error in column order: In some rare situations, after repeatedly
adding and removing columns from a table (e.g. using MS Enterprise Manager),
the Diff would read the columns in a wrong order. Fixed.
- Some options not saved: The flags controlling textual comparison for procedures/triggers/views/functions,
such as case-sensitivity or lexical comparison, were not properly saved on exit
and therefore would revert to default settings on the next run. Fixed.
Known issues
- When you choose a different server in the connection panel and there is
a database name already selected (for the previous server), the Diff does not
attempt to verify that the database name is valid for the new server as well.
Though not a bug, this creates an opportunity to make mistakes configuring
your server connections, so something is going to be done about this.
- When you run a comparison with the left-hand DB incorrectly specified,
the Diff reports an error connecting to the left-side DB, but then proceeds
reading the right-hand one. When it is done, the tree view remains empty.
The correct behaviour would be to stop the comparison if either of the databases
is not available and revert to the "no comparison" display.
- When you are synchronizing a user type definition, and this user-defined
type is used by some columns in the target database, the columns are not converted
to the new type definition, but instead reverted to their original physical
type. This is not exactly a bug, but the result may be different from what you'd
expect. Probably an option should be added to detemine how you'd like to script
such situations. Example: suppose you have a type 'MyNumber' in both databases,
defined as 'DECIMAL(10,2)' in the left-hand DB and as 'DECIMAL(14,5)' in the
right-hand one. After synchronizing this type left-to-right, any columns of type
'MyNumber' will become of type 'DECIMAL(14,5)' (that is, their actual type
remains unchanged, but that is no longer a UDT), whereas the desired result is
probably that they remain 'MyNumber', but with the physical type changed according
to the new definition 'DECIMAL(10,2)'.
|
| 18-Jan-2006 |
AdeptSQL Diff v. 1.90 Beta 39 |
Bug fixes
- Computed columns in tbale function: When you use a table
function, and the returned table of this function contains
computed columns, SQL Server keeps the column expressions in a way that confuses
Diff's schema reader (it says "CREATE statement expected" and occasionaly has an AV).
This bug existed in all versions of Diff and is now fixed in 1.90 Beta 39.
- SET ANSI_NULLS and SET QUOTED_IDENTs setting for table functions were not
correctly loaded (they were always OFF in the Diff). This error was a result of
SQL2005-compatibility changes in 1.90. Previous versions used an undocumented
'status' field in sysobjects to fetch the settings. This worked fine in SQL2000,
but didn't work at all in SQL2005. Earlier builds of 1.90 switched to the
'official' way of getting these settings via OBJECTPROPERTY, which worked fine
with SQL2005, but it turned out that in SQL2000 it works for all objects
except table functions. So now the Diff uses a combined method which
always fetches the correct values for the ANSI_NULLS and QUOTED_IDENT flags.
- Triggers didn't compare correctly (gave false positives) between SQL2000
and SQL2005 databases. The reason was that on SQL2005 the Diff couldn't get some
of the flags for triggers the way it gets them on SQL2000. In this version, the method of
loading triggers has been changed to work correctly with both SQL2000 and SQL2005.
- The Diff didn't recognize enabled and disabled triggers.
It does not, including their correct comparison and scripting.
- A new option '[x] Ignore Enabled/Disabled added to the
"Ignored details" page of the schema option dialog. It affects the way triggers
and constraints are compared.
- Incorrect table re-creation: When the Diff tries to modify
a table by re-creating it (see the 'Scripting/Tables' option page),
it has to drop all named constraints, so their names can be used again in the
new table. However, the previous version first renamed the table, then tried
to drop constraints using the old table name (already not existing) in ALTER TABLE.
This has now been fixed by changing the order of scripting: constraints are
dropped first, then the table renamed.
- The following change addresses what looks like a quirk in MS SQL Server.
The server sometimes (?) refuses to ALTER a table function because it considers
the function dependent on itself (?). In such situations, a DROP/CREATE sequence
must be used instead of ALTER FUNCTION. The Diff can't recognize this situation
exactly, so it now always re-creates table functions. Or should
this be a separate option?
Known issues
- Trigger comparison doesn't take into account the 'Ignore Not For Replication'
option. As the result, NFR and non-NFR triggers (otherwise identical) are always
considered different and scripted.
|
| 17-Jan-2006 |
AdeptSQL Diff v. 1.90 Beta 38 |
Changes and new features
- The server scan from the connection panel is restored. It is
now implemented as a separate popup dialog where you can see server names
being added to the list in real time, as soon as servers on your LAN are responding.
You can specify the waiting time or cancel the scan whenever you like.
- The server scan dialog also allows you to add any of the found servers
into the preferred servers list, one which is initially taken
from the list of recent servers kept in registry by MSSQL utilities.
- The connection panel is now extended to include optional network
library selection and port selection (for TCP/IP netlib).
- Help file has been updated and now reflects all recent changes
to the program, including the new DataDiff features and changes to the Automation API.
Bug fixes
- Fixed an error loading comparison files. If a comparison
document specified connections to 2 separate servers, the Diff could not
recognize that and incorrectly interpreted the DBs as being on the same server.
- The serial number selection dialog was broken (with assertion failure).
This has been fixed now.
- When a schema scan began, Diff's main window didn't have a chance to
repaint itself properly until the connection to server(s) is established. As a
result, the Diff would appear frozen or broken for a few seconds. This is fixed
now.
- There is another change in the connection panel: connection timeout set
to 0 (as it is by default) should mean "use the default timeout", but in fact
it was interpreted as "wait forever", which caused the Diff to freeze if you try
to connect to a wrong server. Now unless you specify a positive timeout, the
default timeout (usually 15 sec) is used
Known issues and things to do
- The new features in the connection dialog are not logically complete yet.
The server scan dialog can provide netlib and port number as well, but this
information currently is not currently passed to the connection panel.
- The following is not actually a bug, but just another opportunity to make
a mistake, a thing that the Diff should check, ideally, but so far doesn't.
With the introduction of NetLib selection and port number into the connection
panel, you must be aware that the usual form to specify named SQL Server instances
("MachineName\Instance" or ".\Instance" for local servers) won't work with
some NetLib selections, specifically with the TCP/IP. Instead, you must specify
an IP address or a machine name resolvable to IP, whereas the port number
determines the server instance.
- Incorrect comparison of permissions (false positives) has been reported,
but it has not been reproduced yet.
|
| 12-Jan-2006 |
AdeptSQL Diff v. 1.90 Beta 37 |
Changes and new features
- Automation API has been extended to allow loading customized
option sets from an .INI file and running comparisons from previously saved
comparison documents. You can also specify separate filter expressions when running
DataDiff comparison programmatically.
- Removed [Refresh Servers] button from the connection panel.
This is logical, as the Diff no longer scans servers. The button will be back
as [Scan available servers], once such funcitonality is implemented.
Bug fixes
- Scripting INSERTs in DataDiff was broken by the previous Beta.
This important functionality is restored now.
- Some minor corrections in the Automation interfaces.
|
| 08-Jan-2006 |
AdeptSQL Diff v. 1.90 Beta 36 |
Serious cleaning-up of new (and previously nonfunctional) DataDiff features
and various minor corrections.
Quick links:
Bug fixes
- All new features in DataDiff are finalized and tested. Now you can compare a
column only present in one DB against a constant, specify case-insensitive
comparison or numeric tolerance, set scripting modes, etc.
- Various minor corrections.
|
| 20-Dec-2005 |
AdeptSQL Diff v. 1.90 Beta 35 |
New features and changes
-
The Diff no longer uses SQLDMO to obtain the list of available servers,
using instead the list of known servers the SQL client keeps in
Windows registry.
This way the Diff doesn't have to spend time pinging the LAN and there is no need to
have SQLDMO around. This also happens to solve the "freezing" bug described
below
- Besides keeping connections in saved "comparison documents", the last valid
connection settings are remembered as defaults for the next session,
as it was before 1.90.
-
For views and table functions with SCHEMABINDING dependencies are resolved
correctly. Normally it is possible to change a table without dropping and
re-creating views and functions that refer to this table. However, views and
funcs which have the WITH SCHEMABINDING clause must be dropped prior changing
a table they refer to. So the Diff now does this.
Bug fixes
- With SQL2005 client installed, the Diff would permanently freeze
reading a database (whether SQL2005 or SQL2000 one) if any time before that you
happen to pull down the server selection combobox on the connection panel.
Apparently SQLDMO somehow messed up messaging or threading within the Diff,
so that any subsequent SendMessage call would lock it up. The issue has been
solved by removing SQLDMO calls as described above.
- A view WITH SCHEMABINDING must be dropped and re-created
to allow a table to which it refers to be modified. Previous Diff versions
ignored this dependency, this version resolves it correctly.
- No TRANS in side-by-side view: when the transaction scripting
is enabled, the BEGIN TRANS... COMMIT code appeared both in the SQL editor
(where it is needed) and in the side-by-side view (where it is not). Now the
code is not scripted in the side-by-side view.
Known issues
- All issues from Build33 are still there.
- The dropped server scan feature is to be restored, eventually, but in
a more civilized form: activated from a separate [Locate servers] button,
displaying the servers as they are found and allowing to cancel the search any
time during the scan
- The following is related to the schemabinding issue described above and
it is not clear whether is a feature or a bug. Suppose you have table T in each
database and a schemabound view V in the left-hand one. Suppose there is a change in
the table T to be synchronized. We select the table and synchronize from right
to left. The update script will drop view V, make changes to the table, but will
not re-create the view. From one point of view this is the expected behaviour,
because there is no view V in the right-hand DB and by dropping it from the
left-hand DB we move towards full synchronization. On the other hand, the view
is a separate object and you didn't tell the Diff to synchronize (drop) it,
only to sync the table. Your opinion on this would be appreciated.
|
| 03-Dec-2005 |
AdeptSQL Diff v. 1.90 Beta 33 |
Here is the long-awaited Diff update. During the last few months, the program has
suffered a bad case of feature creep, so instead of 1.80 Release, this
is again a Beta, but with significantly extended functionality. Adding some
level of SQL2005-compatibility has also contributed to the delay. Anyway, the
new version is finally here: with comparison document support, re-designed
configuration storage, lots of new options in the DataDiff and built-in reports.
What's next? Despite the "Beta" mark and a few known issues (see below),
this version should be quite usable, more so than the current "stable" 1.70.
It doesn't look like it will stabilize at 1.90, though. A lot of new stuff is on
the way, such as full Unicode support, new SQL editor, saving schema snapshots, full support for
new SQL2005 objects, to name just the major features. So in the near future you can expect
a sequence of "unofficial" interim releases where at least some of these new features
will appear, then the whole thing will be released as a major new version, AdeptSQL Diff 2.0.
Changes in our upgrade policy. The Diff has existed for 3 year already
and so far there has been no license upgrades. This is a long time for a software
product, so once Diff 2.0 is released, most of the existing customers will be expected
to pay, if they wish to upgrade to the new version. The exact upgrade prices for 2.0 are yet to
be defined, but recent customers will be able to pay less or even get the upgrade for
free, depending on how long ago they purchased the product.
So here is our free upgrade offer. If you have been considering buying the Diff,
but are unsure about its present "Beta" status, please wait no longer: we guarantee
the free upgrade to 2.0 for those who will be purchasing the Diff in December
2005 or later. The upgrade will also be free for those people to whom that has been
promised individually.
Quick links: comparison projects, XML table columns, MAX length columns, schema names
instead of owner names, reporting and exporting, option storage is re-written, command-line parameters, separate row filter expressions, server-to-server synchronization, throw away identical records, various scripting modes, case-sensitivity option, numeric tolerance option, data comparisons are saved, simultaneously load data
New features and changes
-
The Diff now works with "comparison projects", which can be saved
and opened later. The program also keeps a list of recent comparisons, so that
you can quickly re-compare any of them.
-
Implemented some basic SQL2005 compatibility. A number of changes has been made
in the Diff to ensure that it can read a database schema from MS SQL Server 2005
or MS SQLExpress. The Diff does not yet support most of the new SQL2005
features such as XML schemas, .NET integration or the new variants of SQL CREATE syntax.
However, if you have a database freshly ported from SQL2000 to SQL2005, you should be
able to use the Diff between them just as before. The only new features this
version of Diff does support are these:
- New XML table columns, both typed and un-typed, are recognized,
correctly scripted and synchronized. Typed XML columns are scripted with correct
XML schema names, but the XML schemas themselves are not kept as separate entities.
- The new syntax for MAX length columns is recognized for all character types
(CHAR|NCHAR|VARCHAR|NVARCHAR(MAX))
- According to the new rules in SQL2005, the Diff now uses schema names
instead of owner names. However, the "schemas" themselves are not kept as separate
entities in the schema tree nor are they scripted (that is, no CREATE/ALTER/DROP SCHEMA yet).
- The reporting and exporting functionality has been added. The Diff now
includes a 3rd-party reporting and exporting component, which allows comparison
reports to be previewed, printed or saved in any of the following formats:
HTML, PDF, RTF, Excel. Comparison reports (although rather basic ones) are
implemented for both schema- and data- comparisons. Cloning and limited
customization of the provided report templates is technically possible, but is
not documented yet.
- The option storage is re-written to allow keeping all program options
either in the Windows registry (as it was before) or in an .INI file. The latter
allows the Diff to run in "portable" mode: from a removable media like a flash drive,
without installation.
- You can now start the Diff with some command-line parameters, including a
comparison project's name and switches controlling where to take the program
options from (registry or a specific INI file) and where to save them back.
- New DataDiff options caused re-design of the column configuration
dialog. Now it has two separate tabs for table-level configuration and for the
column-level one. The new DataDiff options include:
-
Option to specify two separate row filter expressions for the two tables;
-
Option to use direct server-to-server synchronization, when the data
is passed between the servers or between databases on the same server,
as opposite to using the data loaded into the Diff. Therefore, you can
synchronize large BLOB data without actually keeping it all in memory
(in which case the Diff only needs to keep a 16-byte MD5 digest)
- Option to throw away identical records and reuse the memory. In this mode
only changed rows have to be kept in memory, which means the Diff can now
compare tables of practically unlimited size.
- There are now several comparison styles and various scripting modes that can be
changed for individual columns. Comparison styles include case-sensitivity option
for character columns and numeric tolerance option for the numeric ones. Scripting modes include
"client" (script using loaded values), "server" (script inserts/updates using
values directly from the opposite database), "skip" (exclude from the script)
and "literal" (to be used for INSERTs when one of the columns is missing).
- Details of data comparisons are saved
with the comparison project. This means that once you compare a pair of tables,
all table-level and column-level settings are preserved: filter expression(s),
ignored/compared/key columns, scripting specifics for each of the columns, etc.
- The DataDiff now uses separate threads to simultaneously load data from both tables.
For databases situated on different SQL servers such asynchronous operation may
result in significantly faster data loading.
- A new option page "Connection defaults" has been added. There you can specify
the server names, logins and connection timeouts you are likely to use for a
new comparison. There is also a new option causing the Diff to force certain
QUOTED_IDENTIFIERS and ANSI_NULL settings when a connection is being open.
Bug fixes
- A very serious problem was introduced in the last Beta: in
trial mode, even immediately after its installation, the program would display
the "Trial has expired" message and demand a key to run. This update not
only fixes this problem, but actually resets your trial period.
- There is a command in the popup menu of the built-in SQL editor which is
supposed to launch MS Query Analyzer from the Diff, passing to it the target
connection parameters and the selected SQL text to be edited or executed.
As it turned out, the menu item was disconnected from the actual code launching
MSQA, so the command was doing nothing. The functionality of the command is
now restored.
- Numerous minor corrections throughout the program
Known issues
- [Corrected in Beta 36] The logic for enabling/disabling column comparison and scripting controls
in the new DataDiff column selection dialog is not finalized. It is not always
clear what the new scripting modes (client/server/literal/skip) will do in each
particular situation.
- Reporting is not complete. The default schema report is supposed to include
some comments detalizing the differences (e.g. for a table it could be like
"columns added", "constraints removed", etc). This information is not yet
available.
- None of the new Diff features has been documented in the help file yet.
- Automation API has not been changed yet. It is supposed to support
the new "comparison documents" mechanism. At least it should be possible
to open programmatically a previously saved comparison document; ideally
the API should give access to individual project-level and general options.
|
| 23-May-2005 |
AdeptSQL Diff v. 1.80 Beta 32 |
New features and changes
- New "Recreate tables" checkbox on the 'Options/Scripting/Tables' page
tells the Diff to re-create tables (instead of altering individual columns)
whenever it is necessary to keep the correct column order. If you set this option,
the Diff will also consider changes in the column order as signficant, display
them in the tree and synchronize them. Regardless of this option, the Diff
will re-create a table if there is no other way to script a particular change
(e.g. making a column IDENTITY in a table with data)
- An option to recreate dependent views has been added (also on the Scripting/Tables page):
when columns in a table change, it may be necessary to re-submit all dependent views to the server,
so that it could update its internal column lists.
- Yet another new option allows to script the "CREATE if table doesn't exist" logic
before any table is created. Currently this feature is only implemented for
tables, scripting similar logic for other objects and for DROPs may be added later.
- A new type conversion matrix is now used to properly generate column type
changes: in some situations ALTER COLUMN can be used, in others a column must
be re-created and the data copied (such as TEXT to NTEXT conversions).
- When adding a NOT NULL column into a table with data, a special SQL
sequence is now used to ensure that there are correct default values for the new
columns. The Diff maintains a list of default values for each data type,
which you can customize on the 'Scripting/Tables/Default values' page.
- The Diff is now much better at resolving dependencies(FKs and other constraints),
although some situations can still confuse it.
- The Diff now closes connections after comparison. Previous versions used to keep
the database connections open during the whole session. If for any reason a
connection would expire or got broken while viewing the differences, you'd be
unable to run any scripts or refresh the comparison. As of ver. 1.80, both
connections are closed as soon as the schema data is loaded, then re-opened
as required when you start executing the scripts.
- The registration dialog is redesigned for easier activation and re-issuing
of the keys.
- The "Choose serial" dialog is also redesigned and some new methods of
license binding are added: low-level (format-resistant) IDE disk binding and
binding to a portable USB storage device (flash drive). NOTE that the flash drive binding
may or may not work with your particular flash drive device, depending on its
model and manufacturer.
Bug fixes
- Automation: The SelectNextDifference corrected. This method didn't work correctly
when several schema objects had been previously selected.
- DataDiff: in some unusual situations the program would try to synchronize
rows with changes in "hidden" columns. Although (correctly) no code would be
generated for such rows, all the extra checks and issuing of warnings for each
row would slow the scripting down tremendously. The new version doesn't have this
problem so that DataDiff scripting is very fast.
- In one of the recent updates, the Diff lost its ability to sort schema items
alphabetically. The correct ordering has been restored.
- In some situation, the same 'DROP INDEX' statement could be scripted twice.
This has been fixed.
- A few other minor corrections in various places.
|
| 03-Mar-2005 |
AdeptSQL Diff v. 1.70 [Build 29] |
Corrections in DataDiff automation interface
- SelectNextDifference() method did not work correctly when called
with Expand parameter (SelectNextDifference(True)): it selected the next
changed row starting from the first selected row, so it never went
further down than the second changed record. Fixed.
- GetRowIndex() function returned wrong value. Fixed.
Changes in DataDiff GUI
- You can now use Shift with "Select Next/Prior Changed Row" commands to
select multiple rows. This trick works both with toolbar buttons and with
keyboard shortcuts. That is, you can use Ctrl-Alt-Shift-DOWN|UP to select
the next or previous change, adding it to all previously selected rows.
- Tooltip texts for the "Show Difference script" commands incorrectly indicated
Ctrl-Shift-LEFT|RIGHT as shortcuts for these command. Actually, the shortcuts
are Ctrl-Alt-LEFT|RIGHT. The tooltips are now updated accordingly.
- DataDiff now opens SQL editor as an "owned" window, which means that the editor
window stays on top of DataDiff, but is not modal (you can freely move focus
between DataDiff and code). Together with the Ctrl-Alt-<Arrows> shortcuts
described above, this means you can conveniently traverse the dataset from one
change to another, instantly synchronizing records in either direction.
|
| 22-Feb-2005 |
AdeptSQL Diff v. 1.70 [Build 28] |
New features
- "SaveAs" in Unicode or UTF8. The "Save As" dialog in the SQL editor
now allows to specify saving in OEM (as before), Unicode or UTF8 formats. NOTE that
it does not make the program truly Unicode-enabled: it can only display and correctly
save scripts containing national character from a single code page. For example,
you can have Latin and Cyrillic letters, or Latin and Greek, but not Cyrillic and
Greek together.
- Changed some defaults in the Schema Options dialog. Now a freshly
installed copy of Diff will compare object- and statement permissions and will
check whether tables have data or not. Before, these two options had to be manually
enabled from the Schema Options dialog. These changes in initial setting don't
affect those who is upgrading their existing copy of AdeptSQL Diff.
Bug fixes
- xplog70.dll is no longer needed. That DLL is a part of standard MS SQL
Server distribution, but sometimes DBAs remove it for security reasons. With
xplog70.dll removed, the Diff could no longer access the schema, although it was only
needed to obtain server's version number. Now the version information is
fetched in a different way, so schema loading does not depend on that DLL.
|
| 05-Feb-2005 |
AdeptSQL Diff v. 1.70 [Build 27] |
New features
- "Hide LEFT-only objects" filter added to the schema tree filter menu.
For historical reasons, previous versions only had "Hide RIGHT-only objects" option
there.
- "Hide changed rows" filtering option is added to the DataDiff view.
It didn't look necessary until a user pointed out that sometimes he'd only be
interested in "left-only" and "right-only" records as it allows him to quickly
locate incorrectly entered primary keys.
- DataDiff filters can be persistent now. This is implemented in
exactly the same way as for the schema tree filters: there is now a new item
in the DataDiff filter menu, indicating whether the filters should be stored
in the registry.
Fixed bugs
|
| 28-Jan-2005 |
AdeptSQL Diff v. 1.70 [Build 26] |
New features
- Redesigned "Ignored Details" page: controls in this option page has
been rearranged in a (hopefully) more logical order.
- Added "Ignore collation" checkbox on the same option page. It allows
to ignore the differences in the COLLATE attributes of table columns and the entire
database. Both the comparison and the scripting code have been modified to take
into account the new setting.
- New "Summary collections": Previous versions would display copies of
all foreign keys and indexes (normally scattered throughout the schema tree) under a special
node at the bottom of the tree, called "Summary collections". This version adds
a new option page ("Display/Summary collections"), where you can choose which exactly
objects should end up in their special "summary collections". Besides FKs and indexes
supported before, you can now display there other constraints, triggers, permissions
and extended properties.
- For top-level objects that have different owners in the two databases, but
considered matched according to the specified "owner map" (see the "Schema Scan/Ownership"
option page), the program now displays both names in the schema tree (i.e.
"dbo.table1 / user1.table1" instead of just "dbo.table1")
- The help file has been updated according to the GUI changes described above
Fixed bugs
- Column collations not synchronized correctly: when the only difference
in a given character column was its collation, previous versions of the Diff would
display the columns as changed, but would be unable to produce the synchro script
for them. This is fixed now.
- Problem comparing encrypted procs: as described here,
previous versions would only respect the "consider changed" option when the unencrypted
DB is on the left-hand side of the comparison. In this version, the comparison works
correctly in both directions.
|
| 06-Jan-2005 |
AdeptSQL Diff v. 1.70 [Build 25] |
In this release we've added two new options for scripting of
encrypted objects and made some minor correction to the GUI.
The new options can be found on the "Options/Scripting/Procedures..." page
of the Schema Options dialog
Quick links:
New features
- One is "Script with SQLShield encryption", which is only useful for those
who have SQL Shield
server plugin installed. When this option is enabled, the Diff would generate
a special "magic" comment ("WITH /*sqlshield*/ ENCRYPTION") causing the
procedure to be encrypted in a special "unbreakable" way.
- The other option is "Protect from tracing" and it causes another "magic"
comment to be generated for encrypted procedures ("WITH ENCRYPTION /*sp_password*/").
When a procedure "WITH ENCRYPTION" is sent to the server, its full definition
can be caught in a MS SQL Profiler log, which creates a security risk. However,
if the profiler finds "sp_password" anywhere in the SQL (even in a comment), it
would not show the statement text in the log.
Fixed bugs
-
Cleaner startup and closing of the current comparison: previous versions
used to start-up with the empty schema panel visible, and leave visible
the side-by-side panel and the message panel after you close a comparison.
Now the program shows nothing but the connection dialog when there is no
connection open.
- There is an "Include owner name" group of options on the "Options/Schema scan/Ownership"
page of the Schema Option dialog. One of its settings -
"Don't include owner name" - was not correctly saved, so that after you
choose it and restart the program, it would be back to the "Only if different..."
setting. This version fixes the bug.
- In trial mode, the previous versions used to look up a license file on
removable disks (CDs or flash-memory). In some configurations it would cause
ths system to pop up a "No disk" error message box. This disk enumeration is
now removed.
Other changes
- The help file has been updated to reflect the changes and the new options appeared
in the recent releases.
Known issues
-
There is an option telling the Diff to consider any encrypted procedure
different from its open-text counterpart and therefore always generate update
script for such entities. However, this only works with the open-text SPs in
the left-hand DB and the encrypted ones in the right-hand DB. Compare it
the other way around, and the two procs would always be shown as identical.
This problem will be fixed in a future release to make the comparison logic
work same both ways. Meanwhile work around the problem by specifying the
DB with encrypted procedures as the right-hand one in the comparison.
|
Copyright (C) Adept SQL Tools, 2003-2005
|