This page lists all changes to the AbaPerls tools and documentation from the first public release L1.0.0009 and on. (OK, not all changes, but the level of detail is fairly high.) The horizontal lines divide external public releases from each other. For a compact history for the external releases, see this page.
The seventh public release of AbaPerls, label L1.0.0190.
AbaPerls now supports table types and XML schema collections. They can be defined in the file types .TBLTYP and .XMLSC respectively. These files resides in the TYPE directory. In DBBUILD and DBUPDGEN, XML schema collections are loaded before regular types (.TYP files), whereas table types are loaded after. You can also define a table type or an XML schema collection in a .SP or .SQLFUN file, if the type/schema is to be used by this procedure only. In this case the name must follow certain rules. See further in the section about the SP directory on the Structure page.
AbaPerls now supports CREATE TYPE to define type. EXEC sp_addtype
is still supported.
You can now create an assembly directly through a source file written in C# or Visual Basic .Net. To do this, you need to supply the $COMPILE directive in the .ASSEM file. You find more information on the CLR page. As a consequence of this change, version-checks now also include .ASSEM files.
If you run DBBUILD -rebuild
When you had expressions with .nodes(), AbaPerls could produce a internal error about too many iterations. This problem has been fixed.
I'm doing a minor overhaul of the design of the manual pages, and in a transitional period, the design between different pages will vary.
ABASQL now masks any password when printing the command-line options.
Added two new macros $DBPERM and $SERVERPERM that permits you to encapsulate permissions that can not be handled with regular ownership chaining. Examples include use of dynamic SQL and BULK INSERT. See the new topic Modules with Special Permissions for more details.
Added an argument to the $DLLINCLUDE macro where you can specify the permission set for the assembly. Using this directive, you can install unsafe assemblies on databases that are not marked as trustworthy. See the topic Privileged Assemblies on the CLR page for details.
Fixed bug in RUNSPS which caused RUNSPS to loop indefinitely if you did not supply any parameter definition at all, for instance because the procedure does not have any.
Added the option to
DBBUILD. This option specifies an alternate
build order where tables and views in all subsystem are built before any
functions or procedures are loaded.
Augmented the AbaPerls file-lookup order, so that AbaPerls now looks for the file in a subsystem directory before trying a an AbaPerls SQL directory structure on the same level.
AbaPerls now supports use of WHERE clauses in the definition of index and statistics, so-called filtered indexes.
RUNSPS is now able to read regular Excel books, and is not constraint to CSV files. Older CSV files still work with RUNSPS, as long as Excel can read them.
DBBUILD and DOBCP now use the option with BCP to set the setting
QUOTED_IDENTIFIER (which for some reason is not on by default with BCP.)
DBUPDGEN no longer complains if the option disagrees with the project in the file, if the only difference is that one of
them has /SQL and the other not.
The sixth public release of AbaPerls, label L1.0.0091.
The tool PREPRC has been dropped.
Fixed bug in aba_check_column, so that it now correctly returns 0 when is in effect.
DBUPDGEN now generate update scripts that sets an error status on DOS level (i.e. %ERRORLEVEL%) if there are objects with names starting in old_ before the update starts, or when the update has completed.
The rules for ABASQL in the version-check in the AbaPerls file-loading process have been modified. Previously AbaPerls required that when a file was loaded from SourceSafe that the path was the same as when the file was most recently loaded. This has been changed so that the check is now performed against the SourceSafe path the subsystem was most recently loaded from. The check is only effective if the ABAPERLS subsystem in the database is upgraded to label L1.0.0081. For older versions of the ABAPERLS subsystem, the old version check is retained.
-Anulls and -Apadding
have changed, so that ANSI_NULLS and ANSI_PADDING
are on by default.&SQL2008.Important note: to get the updated version of ap_scriptname, you need to run
an update script,
ABASQL now requires that you specify
also for .TBL files. (As
failing to do so when you create the table the first time, could buy problems
further down the road.)
INSFILGEN used to insert an extra
go after each 40th call. This has been removed. (It was a
workaround for problems with the tools in SQL 6.5)
Added support for synonyms. See the page Using Synonyms for details.
Bugfix: it was not possible to connect with AbaPerls to databases with space or other special characters in the name.
Because of changes in SQL 2005 SP2, LISTERRS failed to list calls to missing stored procedure. This has been fixed. Also, AbaPerls also correctly handles the same situations with SQL 2008.
The fifth external release, L1.0.0060.
When using SourceSafe 2005, DBUPDGEN could crash while reading the object histories. This has been addressed.
AbaPerls is now able to understand Common Table Expressions (CTEs). Support for the MERGE statement in SQL 2008 added.
There was a problem with SourceSafe that made it impossible to dates with
in various tools with SourceSafe 2005. AbaPerls
now has a workaround for this problem.
It is now possible to use the @ character as separator for site-specific files as an alternate to % which has been outlawed by SourceSafe since 6.0d.
ABASQL now has the options -noexec, and
ABASQL is now able to read SourceSafe
information from
AbaPerls no longer performs object checking for the pattern . Previously, AbaPerls attempted to verify
this as a scalar user-defined function with the database part of the name
included. However, in SQL 2005, there is no syntactical difference between the
call to a UDF and the invocation of a type method of an
XML or CLR UDT column. AbaPerls opts to validate two-part
names, but not three-part names, that looks like function calls. As a
consequence of this, you need to always use a table or alias prefix with your
XML and CLR UDT column when you need to
invoke a method, for instance .
A similar issue with the table-valued XML method .nodes has also been addressed. AbaPerls ignores three-part names that ends in nodes and are followed by a right parenthensis.
There was a bug with object checking, so that AbaPerls did not see a scalar function when it appear directly after a keyword. This bug has been fixed.
Thanks to Koen de Vos, the update scripts generated by DBUPDGEN will now correctly transfer ON DELETE/UPDATE CASCDE and also NOT FOR REPLICATION when moving foreign keys from one table to another.
DBBUILD and the update scripts
generated by DBUPDGEN now accepts an
option to permit you to specify a different SQL
login than sa. AbaPerls verifies that the login you use – SQL login
or Windows login – has dbo as the default schema. This applies to
ABASQL as well.
DBBUILD and the update scripts
generated by DBUPDGEN no longer sets
the database in simple recovery, nor do they set a read-only database in
read-write mode, but you need to cater for this yourself. As a consequence of
this, the update scripts are no longer generated with the
option.
DBBUILD now uses the option
with BCP to make sure
that constraints trusted. Also added the utility procedure
ap_zz_enable_constraints_sp to enable all constraints in a database. Added a
note the page for DOBCP about constraint
checking.
-force permitted you to override the
check between file name and object name for any type of object. You can now only
override this check for stored procedures and user-defined functions.-force permitted you to override the
check that the object agreed with the file type, so you could for instance
create a stored procedure from a .SQLFUN file. This possibility
has been removed.-bcp
option.&SQL2005. (And the page for Preppis has been corrected. It
listed &SQL8 as a predefined macro, but the correct name is
&SQL2000.)
-S "127.0.0.1,2093" .The tool SPTRITEST has been removed. It was a useful tool on SQL 6.5, but less so on later versions.
Changes to DOBCP:
-nativeout, DOBCP
automatically generates format files. When you import data,
DOBCP by default assumes that there is a
format file for each table. -nofmtfile-unicode-nounicode-421AbaPerls now reads the real SRCSAFE.INI for the SourceSafe database, and if there is a definition of a journal file, it is copied to the SRCSAFE.INI that AbaPerls creates so that actions from tools like SSREPLACE and NEWSUBSYSVER are journaled appropriately.
New feature in update scripts from DBUPDGEN: you can now have a final epilogue.
-environment ,
permits you to classify a database as development, test or production
database. For test and production databases, the AbaPerls file-loading
process performs checks to avoid that update scripts over-writes newer
versions. This also enforces rules when you load files with
ABASQL. See the file-load page for
details.Bugfix: ABASQL would incorrectly report file successfully loaded, when it in fact it could not even find the file in SourceSafe.
LISTERRS now knows how to filter
out messages about missing stored procedures that appear later in the script. As
a consequence of this DBBUILD no
longer by default loads stored procedures twice. There is a new option,
-sptwice
The Preppis directives $MACRO_LONG and $ENDMACRO are now implemented.
New option for SSGREP, ,
that causes SSGREP to print matches per
unique string. This is good if you are looking for references to a couple of
stored procedures or similar.
The AbaPerls File-Loading Process now also replaces user-defined data types in schema declarations for OPENXML.
LISTERRS no longer prints headers for subsystems in which there are no errors.
The AbaPerls
File-Loading Process now also checks for improper comparisons with
NULL, e.g. WHERE x = NULL.
When generating an update script, DBUPDGEN did not add code SET IDENTITY_INSERT ON, if the IDENTITY keyword followed NOT NULL in the table definition. This has been fixed.
Several checks added/enhanced for the AbaPerls File-Loading Process:
*= and =*) and emits an error or a
warning, depending on the tool in use. -force option.Added option to
ABASQL.
New tool PDREP95 for handling of reports generated by PowerDesigner 9.5.
The fourth public release, L1.0.0040.
-subsystem to ABASQL
when you load triggers, indexes and foreign keys.See more about this on the pages for the, AbaPerls structure, the file-loading process, DBUPDGEN and ABASQL.
Slight change in the table-updates
generated by DBUPDGEN: there is now a
variable $batchcol which makes a little easier to change the
control column for the INSERT-loop.
Two options for SSGREP and
SSREPLACE:
and that you can use to constrain the tools to
only work with files of certain types. For instance
will constraint the search to SQL files.
The AbaPerls file-loading process could incorrectly gave a style message for a computed column.
In the update scripts generated by DBUPDGEN, the table-updates now use RAISERROR WITH NOWAIT to print their messages, so that they are flushed to the log immediately. The first message for a table-update, which displays the number of rows to copy uses severity level 8, so that you can use LISTERRS to review the copying.
LISTERRS now supports reading logs from update scripts generated by DBUPDGEN. To this end, there are some minor changes to the logs from DBBUILD and the update scripts.
INSFILGEN and LANGINSGEN now wants to you declare maximum lengths for parameters with string data, to avoid truncation when you run the INSERT-files. You declare these lengths in a MAXLEN section on the Config sheet. To begin with MAXLEN is not mandatory, but the plan is that it will eventually be.See further the INSFILGEN page.
TBLFIX now formats computed columns nicely.
The third public release, L1.0.0030.
New features
Changes:
-rebuildBugfixes:
When running AbaPerls with Perl 5.8.3 (or ActivePerl Build 809), you could get a run-time error in Perl just as ABASQL and similar tools were about to exit. I believe the cause is a bug in Perl, but a workaround is now in place.
Bugfix in ap_sob_update_sp. When running an update script with name longer than 35 characters, the script failed with "binary or string data would be terminated". This has been fixed, so that the name is truncated to 35 characters when saved in abasubsystems. Since the change is in the stored procedure, you need to deploy this procedure to take benefit of the fix.
Changes in DBBUILD:
-[no]insert permits you
specify whether INSERT-files are to be loaded, independently of
the -bcp option. Thus, you can now load both
INSERT-files and BCP files in the same build. Default
is -insert , unless you specify -bcp ,
in which case -noinsert is the default.Changes in DBUPDGEN and for update scripts generated by DBUPDGEN:
aba_check_column() permits to easily check whether a table-update
may have been run by a previous update.
aba_tblfkey2() as alternative for foreign-key moves in
table-updates. See point 4 in the comments to the sample script.LANGINSGEN now supports multi-column keys.
When using a config-file, and searching for
the labels of the projects in the file where there is no explicit
version-designator, the default behaviour of AbaPerls is now to consider only
labels that match the standard AbaPerls label format
LetterMajor.Middle.Minor. To
permit you to override this behaviour, there are two new configuration options,
and
.
Bugfix: When DBUPDGEN was reading a table definition to generate a table-update, it failed to recognize CREATE TABLE if these words were in lowercase.
Big news for the AbaPerls file-loading process:
AbaPerls now replaces user-defined data types with their defintions in temp tables and table variables, and thereby relieving you of the need to have user-defined data types in the tempdb and model databases. As a consequence of this, DBBUILD no longer loads user-defined data types in these databases, and neither does DBUPDGEN generate code for loading types in tempdb and model.
AbaPerls now adds a COLLATE
clause for all character (char, varchar, nchar, nvarchar,
text and ntext) columns in temp tables and table variables for the default
collation of the database. This permits you to mix databases with
different collations on the same server, and freely move a database
from server to another, without thinking of collations issues.
(Obviously, to take benefit of this change you need run
DBBUILD -rebuild
AbaPerls now checks that the objects in a file agrees with the name of the and issues a warning, if they do not. Likewise, AbaPerls issues a warning if a file contains an object which does not match with the file extension according to the AbaPerls SQL Directory Structure.
The saved SQL files for ABASQL, DBBUILD and the update scripts generated by DBUPDGEN no longer includes the database name.
Object checking now also finds objects in other databases, albeit still with some restrictions. See Known Issues for details. You need to install the user defined function list_to_tbl and stored procedure ap_check_existance_sp in the database for the improved checking to work. Else object checking will revert to the old behaviour.
INSFILGEN: Added property Postlude to the Config sheet.
New tool NEWSUBSYSVER that packages the procedure to create new version-subprojects.
During file-load, AbaPerls now creates a temp
table #current$subsystem(subsystem varchar(80) NULL) which holds
the name of the current subsystem.
When DBUPDGEN generates code for a table-update, it now adds check that the number of rows in the new table is the same as in the old table. See further the section on table updates in the article on DBUPDGEN.
Fixed header generated by INSFILGEN, so that it does not include entry from check-in of INSFILGEN itself.
The second public release of AbaPerls, L1.0.0021. The changes down to 2003-11-03 are the changes since first public release. Pay particular attention to the changes 2003-01-22 and 2002-12-05, since they include significant functional changes.
The
option did not work properly when you used the keywords AFTER or
INSTEAD OF in a trigger declaration.
If a table file had been renamed, DBUPDGEN did not include that file in OBSOLETE-FILES. This had the effect that the objects in the file were not deleted from abasubsystems. Note that if a file is renamed, but the objects are not, this could lead to that the objects are dropped from the database entirely, if the file is loaded in a table-update that appears before OBSOLETE-FILES.
Documentation fix: if there is a site-specific version of a file, and the main file changes, DBUPDGEN includes all the site-specific versions in the file. This is not a new feature, but the page for DBUPDGEN failed to mention this.
The update scripts generated by DBUPDGEN now creates a temp table #update$script that you can test for in triggers, to disable parts of the triggers when running an update script. Use it like this:
IF object_id('tempdb..#update$script') IS NULL
There are several changes to the AbaPerls system tables. The main purpose of the changes is to permit two subsystems to have labels with the same Major, Middle and Minor, but have different letter and/or leading zeroes.
The new column abasubsystems.sortorder permits you define a sort order to that you can view abasubsystems and get the same order as in the config-file.
Other database changes are mainly of internal nature. See the database documentation for details.
To update the ABAPERLS subsystem to the new format, run the script ap_update_1.0.0020.pl which is in the SQL/SCRIPTS directory of the AbaPerls installation. You run this script as you run any other update script generated by DBUPDGEN.
The database update is not mandatory; that is, the tools will run against both the old format of the database (L1.0.0010) and the new format (L1.0.0020.)
-HTML-Adefaults-Anulls-Apadding-Aquoted-related-quoterepl[] or "", but there are still many
situations where this does not work. See this
known issue for details.sp_addmessage. Instead add the parameter @replace
to your calls to sp_addmessage. See Books Online for details.-quoterepl EXEC ('SELECT "Ciao!"')
That is, the inner string is delimited by double quotes. This statement will
fail if it appears in a stored procedure that was loaded with the default
settings in AbaPerls. Flipping quote style remedies the problem. This is
further discussed under the -quoterepl-get-label LATEST to DBBUILD, the first configuration option
for a subsystem was ignored, if it was on the same line as the subsystem
definition.-subscriberThe header is included in the output from LISTERRS
First public release of AbaPerls.
Copyright © 1996-2010,
Erland Sommarskog SQL
All rights reserved. AbaPerls is available under
Perl Artistic License
This page last updated 10-10-24 22:45