Changes in SynCommons.pas unit:
  - now compiles under CrossKylix, and tested under Linux
  - new JSONEncodeArray procedures, to create JSON array content from supplied Delphi arrays (handle RawUTF8 text, double or integer arrays)
  - new AddCSV methods in TTextWriter handling Delphi arrays to be added as Comma-Separated-Values (handle RawUTF8 text, double or integer arrays)
  - new definition of PtrInt/PtrUInt, to match NativeInt/NativeUInt types, available since Delphi 2007 - some code rewrite in order to avoid any implicit conversion from/to integer/cardinal

Changes in SynCrtSock.pas unit:
  - avoid some GPF during client deconnection when the server shut down
  - rewrite HTTP Server handle request loop keep alive timing
  - HTTP Server now use a Thread Pool to speed up multi-connections: this speed up a lot HTTP/1.0 requests, by creating a Thread only if necessary

Changes in SynCrypto.pas unit:
   - now use direct Windows threads, since we don't need any exception handling nor memory usage inside the AES encryption Thread handler
     -> avoid classes.TThread and system.BeginThread() use
     -> application is still "officialy" mono-threaded (i.e. IsMultiThread=false), for faster System.pas and FastMM4 (prevent CPU locking - see about Delphi & multi-core)
   - some other minor fixes and enhancements

Changes in SynZip.pas unit:
   - crc32 is now coded in inlined fast asm (crc32.obj is no longer necessary)
   - crc32 hashing is performed using 8 tables, for better CPU pipelining and faster execution
   - crc32 tables are created on the fly during unit initialization, therefore save 8 KB of code size from standard crc32.obj, with no speed penalty

Changes in SynSelfTests.pas unit:
  - test multi-threaded AES encryption/decryption of 4 MB blocks
  - added crc32 tests

Changes in SynGdiPlus.pas unit:
   - small enhancements for framework Main Demo release (RectNotBiggerThan and MaxPixelsForBiggestSide parameter in SaveAs function e.g.)

Changes in SQLite3.pas unit:
    - database engine updated to 3.7.1
    - fix issue in TSQLRestServerDB.CreateMissingTables when an exception occured
    - handle now RowID as a valid alias to the ID field (needed for TSQLRecordFTS3)
    - handle TSQLRecordFTS3 record, for using FTS3 virtual tables, i.e. implementing full-text search (including dedicated regression tests)

Changes in SQLite3Commons.pas unit:
    - update engine to version 3.7.1
    - fixed error calling a TSQLRestServerCallBack with both record & parameters
    - TSQLRecordSigned must now be signed with a specified content (content was formerly a fixed field of type RawUTF8, but it didn't apply in all cases, e.g. if content field is defined as TSQLRawBlob)
    - new TSQLRestClientURI.ForceBlobTransfert property which enable to get and set BLOB fields values with usual Add/Update/Retrieve methods
    - new TSQLRestClientURI.RetrieveBlobFields/UpdateBlobFields methods for retrieving/updating all BLOB fields of a record at once
    - better handling of sftID in the User Interface and database use (e.g. creates a dedicated index for the TSQLRecord published fields)
    - some code rewrite in order to avoid any implicit conversion from/to integer/cardinal after new definition of PtrInt/PtrUInt (matching NativeInt/NativeUInt types, available since Delphi 2007)
    - updated TSQLRibbonTabParameters object, with some new fields dedicated to the automatic edition of records, via the new SQLite3UIEdit unit
    - new sftSet SQL field kind, handling a TSQLRecord published property with a set of enumeration as Delphi type (stored as bit-mapped INTEGER)
    - handle now RowID as a valid alias to the ID field (needed for TSQLRecordFTS3)
    - defines a new TSQLRecordFTS3 type, for defining a FTS3 virtual table, i.e. implementing full-text search

Changes in SQLite3UILogin.pas unit:
    - improved Delphi 2009/2010 UnicodeString compatibility
    - new PassWord method to enter a password e.g. for Cypher (i.e. with no UserName)

Changes in SQLite3ToolBar.pas unit:
    - improved Delphi 2009/2010 UnicodeString compatibility
    - add TMS components stylers coherency update
    - added TSQLRibbon to factorize most used Ribbon-related User Interface data, functions and events in one class

Changes in SQLite3UIQuery.pas unit:
  - custom queries can now handle standard operators, following a specified set
  - TSQLQueryEvent() usage has therefore been modified for custom queries

Changes in SQLite3UI.pas unit:
    - improved Delphi 2009/2010 UnicodeString compatibility
    - fix some issues, and complete implementation of marking from time elapsed

New SQLite3UIEdit.pas unit:
  - Initial Release, handling most common kind of SQL field (sftRecord, sftTimeLog, sftCurrency, sftDateTime, sftFloat and sftBlob) are not handled yet, because is not needed; perhaps sftTimeLog, sftCurrency, sftDateTime and sftFloat should be handled in the future (using TDateTimePicker or a to be written TSynExtendedLabeledEdit components)
  - all user interface (fields, layout, etc...) is created from RTTI data and some custom parameters

Changes in SQLite3Pages.pas unit:
  - new AppendRichEdit method to draw RichEdit content
  - new WordWrapLeftCols property used to optionaly word wrap caLeft columns into multiple lines, i.e. if the text is wider than the column width, its content is wrapped to the next line (set to false by default) - this also will handle #13/#10 in column text as a "go to next line" command

Changes in SQLite3i18n.pas unit:
  - new TLanguageFile.BooleanToString method, returning 'No' or 'Yes'
  - new TLanguageFile.PropToString method to convert a TSQLRecord published property value into ready to be displayed text

Changes in SQLite3UIOptions.pas unit:
    - some code refactoring to share code with the new SQLite3UIEdit unit
    - minor fixes and enhancements

Last minute update:
Main version updated to 1.9.1:

We had to update the SQLite3 internal engine to version 3.7.2: an obscure but very old bug makes SQLite authors recommend to use 3.7.2 for all new development.
Upgrading from all prior SQLite versions is also recommended. See

So we do. And increase our version number to 1.9.1.

Don't forget to consult the draft version of the documentation of this framework!

The full source code from the framework is available to download from licensed under a MPL/GPL/LGPL tri-license.
Compatible with Delphi 7 to Delphi 2010.

Comments and feedback are welcome on our forum: