SQL Solution -- Change Log

Changes in Versions 5.0 and later
Version Changes
8.4 Change is_a() to instanceof to appease PHP 5.3.7.
8.3 Adjust test suite to be more robust and run under PHP 5.2.
8.2 Add @package tag to classes.
8.1 Add the following methods:
  • GetRecordSetAsList()
  • GetRecordSetAsTable()
  • GetRecordSetAsXML()
  • GetRecordSetAsTransform()
  • GetOptionListGenerator()
  • GetInputListGenerator()
  • GetRecordSetAsInput()
8.0
  • WARNING: renamed autoload.php to taasc_autoload.php to avoid conflicts. Update any include/require statements you have put in your code.
7.2
  • Improve efficiency of regular expressions in ParseSafeMarkup().
  • Minor fixes in how test suite runs.
7.1
  • Ensure SQLite3 record as array functions return null on data definition statements.
  • Minor documentation improvements.
7.0
  • Rename files and require autoload function.
  • Convert to PHP 5 syntax.
  • Add SQLite 3 support.
  • Eliminate reserved words.
  • Fix edge case mistakes parsing Safe Markup.
  • Provide PHPUnit tests.
6.6
  • Add the Escape() method.
  • Avoid potential notices by ensuring $php_errormsg is set.
  • Add ability to have Safe Markup not touch specified fields.
  • Add link text to Safe Markup capabilities.
6.5
  • Add support for PHP's mysqli extension.
  • ereg being deprecated in PHP 5.3, so change regexes to preg.
  • Move Safe Markup parsing into a centralized method: SQLSolution_General::ParseSafeMarkup().
  • Remove new_link parameter from mysql_pconnect() call.
  • In RecordSetAsTransform(), only make call to initial GoToRecord() call if rows exist.
6.4 Coding standards tweaks.
6.3 Improve XHTML compliance by using checked="checked" and selected="selected".
6.2 Use ini_set('track_errors', 1) in Connect() instead of making users set it and bugging them via TestTrackErrors() if it's not.
6.1 Use the new new_link and client_flags parameters to mysql_connect() if PHP is at 4.3.0 or greater. Improve docblocks in *-user.inc files.
6.0 Add PostgreSQL and SQLite support.
5.3 Minor efficiency tweaks.
5.2 OptionListGenerator() 'id' $Opt now only put into <select> element, easing use of labels to allow accesskeys. OptionListGenerator() and InputListGenerator(): added groupby key to $Opt, changed test on required $Opt keys to isset or =='' since some values may be 0. Added orderby to switch on $Opt key loop in InputListGenerator().
5.1 Changed line endings from CR LF to LF
5.0 SQLSolution_User and SQLSolution_Specifics renamed to denote type of database, eliminating phpDocumentor conflicts. Order of classes rearranged. SQLSolution_Customizations class moved to a separate file. Started adding phpDocumentor comments. A few minor efficiency tweaks, requiring the use of PHP 4.

Changes in Version 4

SQLSolution_EditionSpecifics

MySQL Edition
Version Changes
4.02 First public release.
4.03 SQLDbHandle was used in some places where SQLConnection should have been used.
4.04 Added GoToRecord() function. Decided that the program should not halt when calling ReleaseRecordSet() and Disconnect() on nonexistent record sets and connections.
4.05 Added @'s in front of a few mysql_error() calls just to play it safe.
4.06 Made the HTML Escaping process optional.
4.07 Internal release. All changes documented in next version.
4.08
  • InsertID() now has three optional arguments ($Table, $Field and $Where) for compliance with portability with the ODBC Edition.
  • Safe Markup operations now allow "_" in URL's.
  • Added the blockquote, pre, tt and em Paired Elements to the Safe Markup syntax.
  • The FieldLengthEnumArray() and FieldLengthAssocArray() functions were moved from the SQLSolution_EditionSpecifics class to the SQLSolution_General class.
  • Several uses of double quotes were converted to single quotes for a small performance improvement.
4.09 Various reformatting to make things easier to read. ErrorHandler and General sub classes moved to separate file.

ODBC Edition
Version Changes
4.02 First public release.
4.03 ObtainHandle() now forwards a call to Connect() rather than generating an error. This improves portability between MySQL and ODBC.
4.04 Added GoToRecord() function. Decided that the program should not halt when calling ReleaseRecordSet() and Disconnect() on nonexistent record sets and connections. Altered FieldLengthEnumArray() and FieldLengthAssocArray() functions so they'll avoid a bug in PHP 4.0.3.
4.05 Added @'s in front of two odbc function which didn't have them already, just to play it safe.
4.06 Made the HTML Escaping process optional.
4.07 Internal release. All changes documented in next version.
4.08
  • InsertID() now has three required arguments ($Table, $Field and $Where). This function now has the ability to find insert id's.
  • Safe Markup operations now allow "_" in URL's.
  • Added the blockquote, pre, tt and em Paired Elements to the Safe Markup syntax.
  • The FieldLengthEnumArray() and FieldLengthAssocArray() functions were moved from the SQLSolution_EditionSpecifics class to the SQLSolution_General class.
  • Several uses of double quotes were converted to single quotes for a small performance improvement.
4.09 RecordAsAssocArray() and RecordAsEnumArray() heavily reworked to handle changes in PHP. Various reformatting to make things easier to read. ErrorHandler and General sub classes moved to separate file.

SQLSolution_User

MySQL Edition
Version Changes
4.02 First public release.
4.03 Added two optional arguments to the Constructor Function, permitting users to turn on/off the HTML Escaping and Safe Markup Language conversion processes when creating the object.

ODBC Edition
Version Changes
4.02 First public release.
4.03 Class was inadvertently named UserSQLSolution. Name changed to SQLSolution_User.
4.04 Added two optional arguments to the Constructor Function, permitting users to turn on/off the HTML Escaping and Safe Markup Language conversion processes when creating the object.

SQLSolution_General

Version Changes
4.02 First public release.
4.03 Setting Wrap to N now makes sure cell contents don't wrap in very wide tables when using the RecordSetAsTable(), RecordAsTable() and RecordSetAsInput() functions. Also changed RecordAsTable() to place &nbsp; in blank cells to improve formatting in some browsers.
4.04 CopyObjectContentsToSQL() renamed CopyObjectContentsIntoSQL(). It's generally a bad idea to change function names, but since only a few copies have been distributed thus far and this is an obscure function, we figure it would be best to have name consistency with the Form Solution.
4.05 RecordSetAsInput() modified so hyperlinks don't have to be generated while making the KeyField visible.
4.06 The RecordSetAsUL(), RecordSetAsTable(), RecordSetAsTransform() and RecordSetAsInput() now call the GoToRecord() function before traversing the query results, permitting these functions to be called repeatedly without having to re-run the query. Error messages were made slightly more descriptive in some cases. Modified TimestampToUnix() and DatetimeToUnix() functions so they'll work around bugs in PHP 4.
4.07 RecordAsTable() and RecordAsInput() updated to return 1 on success, permitting use in a while() statement. If the most recent query has no results, displays message saying no records were found. If the result set's internal row pointer has moved beyond the last record, nothing is displayed and nothing is returned. Similarly, RecordIntoThis() returns 1 on success, permitting use in a while() statement. But, if the most recent query has no results or the internal row pointer moves beyond the last record, the variables are cleared and nothing is returned. RecordSetAsTable() and RecordSetAsTransform() now set the SQLCreditQueryString to blank upon finishing table display.
4.08 Internal release. All changes documented in next version.
4.09
  • Refined use of the $SQL->SQLTagStarted variable so it both needs to be set less frequently and better ensures error pages produce well-formed XML.
  • Added the RecordSetAsXML() function.
  • A function named FieldNameEnumArray() was added.
  • Performance of RecordSetAsTable(), RecordSetAsList(), and RecordSetAsInput() improved. The call to FieldName() for each field in each record has been substituted with placing the column names in an enumerated array only once.
  • The FieldLengthEnumArray() and FieldLengthAssocArray() functions were moved from the SQLSolution_EditionSpecifics class to the SQLSolution_General class.
  • Several uses of double quotes were converted to single quotes for a small performance improvement.
  • TestTrackErrors() now uses a non-database test so load on the database server will be reduced.
  • Error reporting for functions calling other functions made more descript.
  • Reworked argument format for the RecordAsTable(), RecordSetAsTable(), RecordSetAsTransform(), OptionListGenerator(), InputListGenerator(), RecordAsInput() and RecordSetAsInput() functions. Now uses one or two arrays as arguments rather than a multitude of individual agruments. This both eliminates the need to declare earlier arguments just to set an argument later in the list and eases adding new options. * Most of these new arguments get passed through PHP's htmlspecialchars() function to ensure clean HTML.
  • The RecordSetAsUL() function is being replaced by the RecordSetAsList() function. The delimiter option was added. *
  • Since RecordSetAsTransform() now uses array arguments, the following class variables were deleted: SQLTableTitle, SQLVerticalLabel, SQLHorizontalLabel and SQLBackground. *
  • All record display functions now have the ability to declare an HTML class in each element. This is useful for implementating Cascading Style Sheets.
  • InputListGenerator() properly displays columns and records for results that have a small number of rows.

* Where major modifications have been made, we've implemented interim measures which will convert old function calls to the new function calls. Such interim measures will be removed eventually, so please port your scripts to take advantage of the new syntax.

4.10 Removed interim measures to make old arguments work.
4.11
  • All functions which have the class argument can now use the new id argument. Handy with formatting via Cascading Style Sheets.
  • You can now add additional items to the output of the OptionListGenerator() and InputListGenerator() functions.
  • Improved column width formatting when InputListGenerator() contains lists with fewer items than columns.
  • Removed the class attribute for <br /> tags in InputListGenerator().
  • Table headers are now optional in the RecordAsTable(), RecordSetAsTable(), RecordAsInput() and RecordSetAsInput() functions.
4.12 Reworked things to eliminate Notices. Added is_object() test to CopyObjectContentsIntoSQL(). Made things more readable. ErrorHandler and General sub classes moved to a separate file.
4.13 RecordSetAsTable() RecordSetAsXML() RecordSetAsTansform() and RecordSetAsInput() tweaked to avoid Warnings.
4.14 Changed some empty() calls to isnull() and/or != '' to avoid problems with fields that return 0. Fine tuned the regular expressions in DatetimeToUnix() and TimestampToUnix().
4.15 Eliminated bug in RecordSetAsTable() and RecordSetAsInput() when the nohead option was selected.

SQLSolution_ErrorHandler

Version Changes
4.02 First public release.
4.03 Internal release. All changes documented in next version.
4.04 The process now runs a tad more efficiently. A default case has been added so any type of tag can be closed.
4.05 Added blank case so when $SQL->SQLTagStarted is set to "", no closing tag is generated rather than </>.
4.06 Tweaked for readability and quote reduction.

SQLSolution_Customizations

This class contains your customizations. We don't touch it.