Revision History for AbaPerls – Details

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 ninth public release of AbaPerls.


Bugfix for SSREPLACE with TFS: The rule that we should primarily pick a workspace that matched the computer name was incorrectly implemented. This has been fixed.


AbaPerls now supports TFS 2012, both server and client.


Bugfix: when loading files, the comments before CREATE PROCEDURE or corresponding were stripped before the batch was sent to SQL Server.


In SYSTEM.DEFINITION you can now use options to define which subsystems references that are permitted and which are not. Default is that references must respect the build order, but you can override that to be more restrictive – or less. See further the section Sysdef-file Options.

Improvements and changes in Object Checking:

The option ‑sptwice for DBBUILD is now obsolete. Previously you would use ‑sptwice to ensure that you got complete dependency information. DBBUILD now employs a buffering scheme, and buffers all SPs in a subsystem. If an SP depends on a procedure to be loaded later, the SP is loaded, but requeued. In this way, a procedure is only loaded twice if there is no need to. See further the section Loading Stored Procedures on the DBBUILD page.

For a table with an IDENTITY column, DBUPDGEN now generates code to transfer the current IDENTITY value from the old table to the new table.

The manual page Known Issues has been dropped as it was not very well-maintained. Most of the restrictions are now listed on the Introduction page.


AbaPerls did not inspect grant.template for permissions on assemblies, scalar types, rules and defaults. This has been corrected.

When looking for SET ROWCOUNT, EXECUTE AS and the AS that concludes the of CREATE PROCEDURE, AbaPerls failed to consider lowercase or mixed case, and only looked at uppercase. This has been corrected.


Added support for storage properties and indexes, e.g. compression and filegroup placement that you specify with the WITH and ON clauses and in case of tables in some cases also with EXEC sp_tableoption and ALTER TABLE. You can mention these explicitly in the source file. If not, AbaPerls will preserve the database setting which may have been configured locally. See the page Storage Settings for Tables and Indexes for details. To make use of these changes, the database must have at least version L1.0.0280 of the ABAPERLS subsystem.

AbaPerls now supports columnstore indexes. AbaPerls now also understands XML and spatial indexes, but the support is very rudimentary and it is only practically useful for small development databases as XML and spatial indexes are dropped and recreated every time a .ix file is loaded. Previous, although it was not documented, AbaPerls would not start a transaction when it loaded an index file. This has been changed, so that there is a transaction for index files as well.

Previously, when you loaded an .ix file, AbaPerls would drop indexes not in the .ix file but belonging to the same subsystem. Now AbaPerls also drops indexes not in abasysobjects at all (which is what the documentation has said all the time). Indexes in other subsystems are not touched.

A few changes to update scripts generated by DBUPDGEN:

Bugfix: When a .tbl file was reloaded, it could happen that for some of the constraints the most recent row in abahistsysobjects would say that the object was deleted, and this could later cause an error message with DBBUILD ‑restruct, particular for objects in the ABAPERLS subsystem. This problem arose due to a collision on loadtime, and it has been solved by adding a small delay when required.


Bugfix for DBUPDGEN: when DBUPDGEN compared the paths for two versions of the same TFS item, it considered the path as different if there was a difference in lower/uppercase only, why DBDUPGEN compared contents instead of changeset ids. If two versions of a file was identical, DBUPDGEN could fail to include the file, even if you wanted to.


Bugfix in SSREPLACE: if you specified neither ‑lang nor ‑type, it would not search anything.


Bugfix in SSREPLACE: ‑lang and ‑type had incorrectly become mutually exclusive, so that no files would be processed. This has been fixed.


LISTERRS now applies the default for the min-severity argument for each log in the log file, so that if your log file has a mix of logs from DBBUILD and update scripts from DBUPDGEN, the default is 10 for the logs from DBBUILD and 9 for the logs from the update scripts.


Bugfix (sort of): when requesting data from TFS for the current user, AbaPerls now asks TFS what it thinks is the current user, rather than relying on Windows, as they could disagree, for instance in a workgroup. This affects several tools.


New versions of TBLFIX and PDREP to support PowerDesigner16. This also includes a new report template to use with PDREP. PDREP was previously knowns as PDREP95, but it has been renamed as now also supports PowerDesigner 16. The older PDREPDIV has been removed.


Bugfix: when print the command-line to the log file, AbaPerls could fail to include options with no arguments.

ABASQL now prints a dotted line when it has completed accessing all files, to prevent error message from drowning in that noise. This line is not printed when you use the ‑log option.


Bugfix in DBUPDGEN: If an assembly-related file such as a .dll file in SourceSafe had changed, but the .assem file was unchanged, the .assem file would always be included in all lowercase in the update script, even if the file name included uppercase. This has been fixed. This bug did not appear with files in TFS.


Improvement: DBUPDGEN now makes use of the new capabilities when loading a table and generate update scripts that first attempts to load the table with abasqlfile, and only if this fails it enters the long table-update code, which now is known as fallback code. The update scripts now includes a section INCLUDE which lists all changed include files. They are commented out, but serve as reference.

Behavioural change: AbaPerls now adds an initial ^ and a closing $ to the regular expression in grant.template, so that the regexp must match the object from start to end. Previously the pattern zz_.* matched fuzz_sp, but it no longer does. (And this is in agreement with that the examples for grant.template have said all through the years.) If you want this match, you need to the change regexp to .*zz_.*.



Bugfixes: 1) Reloading a user-defined aggregate did not work, because AbaPerls tried to use the non-existing command ALTER AGGREGATE. 2) Trigger files did not work if the name was quoted, for instance [My Table].


Changes to the AbaPerls file-loading process. Now when you load a .xmlsc, .typ or .tbltyp file and the type/schema is in use, AbaPerls will load the definition in a temp schema and compare the new definition with the definition in the database, and raise an error if they are different. The same applies to .tbl files for tables that have data, with the difference that AbaPerls will investigate whether it is possible to bring the existing definition up-to-date with ALTER TABLE, and in such case attempt such commands. See further the section Pre-SQL Analysis: Reloading a Table on the file-load page.

There are two new options to DBBUILD, ‑restruct and ‑revokeall and a change in behaviour for ‑rebuild. ‑restruct permits you to rebuild the database and change your subsystem structure. With ‑revokeall (which only can be used with ‑rebuild and ‑restruct), DBBUILD revokes all permissions to objects in abasysobjects. DBBUILD ‑rebuild now reloads all files and does not skip files for types and tables. This is possible, thanks to the changes in the previous paragraph. For more information on the new options, see the section Using the ‑rebuild and -restruct options in the topic for DBBUILD.

All these changes require that the ABAPERLS subsystem is at least of version L1.0.0270. For lower versions, the old behaviour is retained.



Bugfix: the code to move referring foreign keys failed to consider that the referring table may be in a different schema. Specifically this broke the update script which itself also has been changed to work with the side schema introduced 2012-02-20.


Bugfix: when loading an index file, AbaPerls could under some circumstances mistakenly recreate an index, even if the index definition in the file agreed in the database. This has been fixed.

More improvements to SSGREP. SSGREP can now store the output in a database with the ‑database option. When storing the output in a database, you can resume an interrupted search with the ‑resume option.


Added the option ‑input to SSGREP to permit SSGREP to read search strings from an input file.


Changes in supplemental SQL checks.

When AbaPerls adds a COLLATE clause to a temp table, AbaPerls now uses COLLATE database_default, rather than hardcoding a collation.

Bugfix in Preppis: macros with one-letter names, for instance &a were not permitted. This has been fixed.



The eighth public release of AbaPerls.



Bugfix in LISTERRS: When a procedure was missing because it had failed to load previously, the message incorrecty said that it was missing.


Completely rewritten LISTERRS, for a number of enhancements:

To support these changes, there are a few more changes in AbaPerls:

Finally, two unrelated changes:


If two developers used different paths to the same repository, this could cause the version checks for production and test databases to raise false alarams. AbaPerls addresses this by introducing repository IDs which are stored in the new table abarepositorymappings. AbaPerls accepts different repository paths, as long as the repository IDs are the same. The repository IDs are derived from within the version-control databases; both SourceSafe and TFS have a GUID that identifies the database. When the an SQL database upgraded to this version of AbaPerls (L1.0.0250), the repository ID is initially set to NULL, and it will be filled up by time as you run upgrade scripts or ABASQL on the database. If the ID missing, AbaPerls only checks the path within the repository.

As a consequence of the previous change, the tables abasysobjects, abahistsysobjects and abainstallhistory have been changed, so that the path to the repository and the path within the repository are stored in separate columns.

The format of the files SS‑FILES.LIS and SUBSYSTEMS.LIS has changed to accomodate the repository IDs. The new versions of the format is 1.1 and 1.3. They are designed so that older versions of AbaPerls are able to read this flies and act correctly. ...or at least the most recent versions of AbaPerls. For the future, AbaPerls how checks the version number of the format, and terminates with an error if the format is not supported.

AbaPerls has changed its philosophy with regards to changeset-ids in TFS. Previously, if you asked for changeset 7634 of a file, and that file was not part of that changeset, AbaPerls would report the file as missing.. Nevertheless, TFS returns the version of the file that was current when that changeset was checked in. AbaPerls now goes with the version returned by TFS, as the original rule made it impossible to use changeset numbers with ABASQL.


INSFILGEN now generates an error message when there is a duplicate entry in any of the sheets, and no file is generated.


INSFILGEN how handles the extensions .xlsx and .xml on equal footing with .xls. This also applies to the sorting in DBUPDGEN.

There was a bug in INSFILGEN, so you would get an error about missing MAXLEN for a parameter with an uppercase character in the name.


Four fixes/changes with DBUPDGEN:


DBUPDGEN now understands to strip out ASC and DESC from the definition of PRIMARY KEY and UNIQUE constraints. (DBUPDGEN already handled ASC and DESC in the definition of clustered indexes in .ix files.)


The path to the help file in the welcome message was incorrect. This has been fixed.


Added support for Service Broker to AbaPerls. You defined a collection of Server Broker objects in .sb files (new extension in AbaPerls) int the SERVICEBROKER directory in the AbaPerls SQL directory structure. See further the page Service Broker in AbaPerls. There are also two new Preppis directives, $PRELUDE and $ENDPRELUDE. While generic in nature, they are currently only permitted in Service Broker files.


If the input file is a 8-bit file, SSREPLACE now retains the encoding. If the file is a Unicode file, SSREPLACE retains the encoding only if you have Perl 5.14 or later. With Perl 5.12, SSREPLACE always write Unicode files as UTF-8, since a bug in Perl prevents writing UTF-16 files.

Bugfix in DBUPDGEN: if the path to a SourceSafe database is a UNC name, DBUPDGEN failed to observe that the leading \\ in the path must appear as \\\\ in the Perl script, because the way Perl interprets \\.

INSFILGEN produced a sporious message Missing Index for an Excel book which does not have all four possible sheets. This has been fixed, and the message no longer appears.


Bugfix: Object checking of Service Broker objects incorrectly flagged objects if there were more than one of the same kind referenced in the same file.


CREATE XML SCHEMA COLLECTION is now permitted in .sql files to permit schema collections to be used with Service Broker (which typically are defined in .sql file.)


AbaPerls now supports two version control systems: SourceSafe and Team Foundation Server (TFS). This has required a major overhaul of ABASQL, DBBUILD, DBUPDGEN, NEWSUBSYSVER, SSGREP and SSREPLACE and all code that supports these commands. You use TFS with AbaPerls very much in the same you work with SourceSafe – at least for now. Since TFS has a quite a different mindset, it is conceivable that AbaPerls will add further support for the TFS mindset later on. The support for TFS requires TFS 2010 SP1.

The page Version-control Concepts includes important information about general concepts how AbaPerls approaches version-control systems and particularly how you specify the repository for a SourceSafe database or a TFS project collection.

As a result of these changes, AbaPerls now requires Perl 5.12. It also requires the present of one more extra module, Win32::CLR. Furthermore, AbaPerls now requires the Perl installation to be on a local disk; it cannot be on a network disk. (Because of the reference to the CLR.) This applies even if you only work with SourceSafe.

There are two new commands NEWLABEL, a command that sets a label on the AbaPerls format LetterMajor.Middle.Minor and which can compute the label for you. TFSLABELFIX, which is a TFS-specific command that re-scopes TFS labels to fit with AbaPerls.

The general overhaul of the code has also lead to a number of other improvements and behavioural changes:

The following applies with regards to compatibility. Keep in mind that there are changes both to the AbaPerls client and the ABAPERLS subsystem, the database part:


LISTERRS could fail to list errors in an assembly created from a source file in VB .Net, because of the special way VB .Net displays the erroneous code.


Added support to grant permissions on types and XML schemas.


aba_tblfkey(), used in update scripts generated by DBUPDGEN, did not transfer the FK options SET NULL or SET DEFAULT. This has been fixed. (But note that if you are running with any of the ANSI options off, the issue remains.)


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 reside 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 page The AbaPerls Subsystem Structure.

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 for a single subsystem, AbaPerls now clears the settings configuration settings only for that subsystem, and leaves global settings and settings for other subsystems unchanged. Note also that the subsystem is rebuilt using the global configuration settings.

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 ‑tablesfirst 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 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 ‑q 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 ‑VSS 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 ‑noexec 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.


Important note: to get the updated version of ap_scriptname, you need to run an update script, However, this script does not run on SQL 2005 RTM and SP1. The script runs on SQL 2000 and earlier, SQL 2005 SP2 and SQL 2008. The reason is that sp_rename SQL 2005 RTM/SP1 checks for referencing stored procedures when you rename a type, and ap_scriptname is used by the procedure that loads objects into abasysobjects, resulting in a catch-22 situation.


ABASQL now requires that you specify ‑subsystem 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.


Bug fix: 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 ‑label 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 ‑get, and ABASQL is now able to read SourceSafe information from SS‑FILES.LIS, permitting using ABASQL to install files at customer sites to which you have no direct connection.


AbaPerls no longer performs object checking for the pattern ident1.ident2.ident3(. 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 look 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 t.item.value().

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 parenthesis.

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 ‑User 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 ‑trunctrue option.


DBBUILD now uses the option ‑h "CHECK_CONSTRAINTS" 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.




The tool SPTRITEST has been removed. It was a useful tool on SQL 6.5, but less so on later versions.


Changes to DOBCP:



AbaPerls 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.



Bug fix: 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, to request this in case you want full dependency information. Note that this is only possible to achieve on SQL 2005, due to flaws in SQL 2000 and earlier versions.


The Preppis directives $MACRO_LONG and $ENDMACRO are now implemented.


New option for SSGREP, ‑crossref, 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:


Added ‑log option to ABASQL.


New tool PDREP95 for handling of reports generated by PowerDesigner 9.5.


The fourth public release, L1.0.0040.


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: ‑type and ‑lang that you can use to constrain the tools to only work with files of certain types. For instance ‑lang SQL 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 want 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


Bug fixes:


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.


Bug fix 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:


Changes in DBUPDGEN and for update scripts generated by DBUPDGEN:


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 specification, 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, ‑onlylabel and ‑notlabel.


Bug fix: 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:


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_existence_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 directories.


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 ‑crypt 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.


Two changes for ABASQL, DBBUILD and the update scripts generated by DBUPDGEN:


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


Database changes

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 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.)

Bug fixes


TBLFIX now gives UNIQUE constraints unique names.




Bug fix in INSFILGEN: when more than one single quote appeared in a value, the generated SQL would be syntactically incorrect.


Some minor changes were made to TBLFIX so that it would handle scripts from PowerDesigner 9.5 without flaws.


New or changed features

Database changes

Compatibility issues

Documentation issues

Bug fixes


DBBUILD and the update scripts generated by DBUPDGEN now write a header to the log file with information about who and when and which command-line options that were in use. (Old update scripts will not print command-line options, though. Regenerate them to get this information.)

The header is included in the output from LISTERRS


First public release of AbaPerls.