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:
‑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
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
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
‑type, it would not
Bugfix in SSREPLACE:
‑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
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
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
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_.*.
goor blank lines, AbaPerls did not see the subsequent CREATE INDEX statements, why it would only save information about the first index to abasysobjects. On an initial load, all index would be saved to the database, but on subsequent loads, changes or additions of indexes (still without a blank line) would not be loaded as long as the first index was unchanged. This bug was introduced with the changes of 2010-02-26.
‑get, AbaPerls failed to find the files in the OBSOLETE-FILES section. This bug was introduced with the changes of 2012-06-13.
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
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,
‑revokeall and a change
in behaviour for
‑restruct permits you to rebuild the database and
change your subsystem structure. With
‑revokeall (which only can be used with
‑restruct), DBBUILD revokes all permissions to objects in
‑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
‑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.
‑VCwith ABASQL, DBBUILD and DBUPDGEN, but your current Windows directory is mapped to a TFS directory in some TFS workspace, AbaPerls will implicitly set the
‑VCoption to the TFS directory. This feature is not available for SourceSafe (because SourceSafe does not expose this information through an API like TFS.)
‑VCor mapped implicitly through TFS – to a subsystem. That is, in many cases developers that uses TFS never have to worry about specifying VC-path and subsystem, but get it for free.
‑nouse_disk, AbaPerls never reads from disk.)
‑use_diskover several subsystems for experimental builds.
‑config, AbaPerls would not stop directly if CONFIG.CFG was missing.
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 ap_up_1-0-0170-0230.pl 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
‑database option. When storing the output in a database, you can resume
an interrupted search with the
Added the option
‑input to SSGREP to permit SSGREP to read search strings
from an input file.
Changes in supplemental SQL checks.
=*as an error. (SQL Server 2005 and 2008 only permit these operators in compatibility level 80 for outer joins, and
*=is a perfectly legit operator in SQL 2008 for combined multiplication and assignment.)
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,
&a were not permitted. This has been fixed.
aba_tblrenameto name starting with old_, DBUPDGEN now generates a call to
aba_move_aside, which moves the current definition of the table to a special side schema, AbaPerls$SideSchema. Update scripts check when starting and terminating that the side schema is empty, or else they abort with an error. Existing update scripts will pick up the changes automatically, as all code handling the side schema are in library routines called by the update scripts.
aba_tblrenamehas been reimplemented as a wrapper on
aba_move_aside. Use of it is deprecated, and it will be removed further afield. To retain compatibility with old scripts, update script still checks for objects with a name starting with old_. This check will be removed eventually. The version level for update scripts has been changed to 3.5.
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:
‑laxthat permits you to match a message about a missing stored procedure, even when the stored procedure is loaded from a diifferent subsystem.
To support these changes, there are a few more changes in AbaPerls:
‑logoption (ABASQL, DBBUILD and update scripts from DBUPDGEN) with ++, an existing file is appended to.
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
\\\\ 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:
‑VSSis now officially
‑VCin the documentation and usage messages.
‑VSScan still be used as a synonym for the foreseeable future. However, the very old switch
‑project, which has been undocumented for many years, have been discontinued.
‑rebuildnow checks that you rebuild all subsystems against the same label.
‑fromswitches make sense relative each other.
‑checkedoutare now mutually exclusive.
%errorlevel%in BAT files.
‑charsethas been dropped, as it proved to not be needed any more, but only served to produce garbage. The config-options for ANSI settings are now deprecated, and this is also true for the
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
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.
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
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.
‑Apaddinghave changed, so that ANSI_NULLS and ANSI_PADDING are on by default.
Important note: to get the updated version of ap_scriptname, you need to run an update script, ap_up_1-0052-0080.pl. 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
ABASQL is now able to read SourceSafe
information from SS‑FILES.LIS, permitting using
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
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
‑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
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
‑forcepermitted 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.
‑forcepermitted 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.
&SQL2005. (And the page for Preppis has been corrected. It listed
&SQL8as a predefined macro, but the correct name is
The tool SPTRITEST has been removed. It was a useful tool on SQL 6.5, but less so on later versions.
Changes to DOBCP:
‑nativeis now default.
out, DOBCP automatically generates format files. When you import data, DOBCP by default assumes that there is a format file for each table.
‑nofmtfileinstructs DOBCP to not use format files.
‑unicodeto force Unicode format for all character data. The default is
‑421has been dropped.
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.
‑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.
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
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.
File-Loading Process now also checks for improper comparisons with
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 emits an error or a warning, depending on the tool in use.
‑log option to
New tool PDREP95 for handling of reports generated by PowerDesigner 9.5.
The fourth public release, L1.0.0040.
‑subsystemto 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
$batchcol which makes a little easier to change the
control column for the INSERT-loop.
Two options for SSGREP and
‑lang 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 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.
‑rebuildnow also reloads index files, both for tables and for views.
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:
‑[no]insertpermits you specify whether INSERT-files are to be loaded, independently of the
‑bcpoption. 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
‑noinsertis 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 specification, the default behaviour of AbaPerls is now to consider only
labels that match the standard AbaPerls label format
permit you to override this behaviour, there are two new configuration options,
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:
AbaPerls now replaces user-defined data types with their definitions 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
for the database.) See the
file-load page for an example.
AbaPerls now checks that the objects in a file agrees with the name of the object 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.
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
#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.
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.)
‑HTMLswitch with SSGREP, SSGREP did not escape characters such as <. > and &, that have a specific meaning in HTML. The same problem still exists in SSREPLACE.
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.
‑Aquoted– permit you to control the ANSI
‑relatedsettings. By default all such settings are on, except ANSI_NULLS and ANSI_PADDING.
‑quotereplwhich causes AbaPerls to replace double quotes with single quotes as string delimiters before passing the code to SQL Sever. It is on by default.
"", but there are still many situations where this does not work. See this known issue for details.
sp_addmessage. Instead add the parameter
@replaceto your calls to
sp_addmessage. See Books Online for details.
‑quotereplalso being on by default. However, if you have dynamic SQL strings like this:
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
‑getoption with DBBUILD and the update scripts generated by DBUPDGEN, the file was not fetched from SourceSafe, if it already was on disk, even if this was a different version than the one that should be in the install kit.
‑label LATESTto DBBUILD, the first configuration option for a subsystem was ignored, if it was on the same line as the subsystem definition.
‑subscriberoption in the database was ignored, and the command-line took precedence.
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.
Copyright © 1996-2012,
Erland Sommarskog SQL-Konsult AB.
All rights reserved. AbaPerls is available under Perl Artistic License
This page last updated 13-06-14 18:07