Current Version: 3.0.25

Version 3.0.25
- fix in Rs.GetRowsWithHeaders - ColumnHeader-Names were not
  "reflected" correctly, when a reduced ColumnSet was
  specified in the appropriate Parameter.
- due to changes in the sqlite-engines behaviour, some
  additional checks were necessary in some UDFs of the wrappers
  builtin "VB-Function-Set", to not run into (now potentially)
  empty char-pointers (when using CDate(), CDbl(), etc. in
  SQL-expressions).
- new build of my (__stdcall) sqlite36_engine.dll against 
  version 3.7.5 again, since I've forgot to specify a __cdecl 
  in an FTS3-callback, which broke FTS3-functionality.
  
Version 3.0.24
- fix in GetADORsFromContent - Columns, marked as 
  "ColumnType NULL" were not properly respected in the 
  ADO-Rs-conversion process.
- "preventional fixes" in the XML-parser (cSimpleDOM)
  no bug-report so far, but potential buffer-overruns
  are now covered, thanks to a hint from Wolfgang Enzinger
  
Version 3.0.23
- fix for a cCollection-serialization-issue regarding 
  VB-persitable *Object*-Members within a cCollection,
  having a Count > 30.
- fixed an incorrect Type-Assignment for SQLite-TableSchemas,
  which defined ColumnTypes as 'TimeStamp' (meaning a
  "full Date + Time") - this was colliding with my normal
  detection of the ColumnType 'Time' (interpreting the
  fieldcontent as a "naked time-value"). So, 'TimeStamp'
  is now correctly detected and treated equally to the
  Field-Type-Specifier 'DateTime'.

Version 3.0.22
- small fix in the SAX-Parser, to not choke on Attribute-
  content, which contains additional quotes (rarely seen,
  but the fix is there now).
- added LZMA-compression/decompression-method to cCrypt
- added GZ-compression/decompression-method to cCrypt
  

Version 3.0.21
- changed the cSimpleDOM-Class, so that it works also,
  if multiple instances of a cSimpleDOM are used in 
  parallel - the old behaviour was, that only one
  single instance of cSimpleDOM was usable through-
  out a given Project (or process) - the old behaviour
  was due to performance-reasons (holding XML-structures
  publically in a *.bas) - but I've managed, to have the
  new version working only about 5-7% slower...
  

Version 3.0.20
- updated the Rs.UpdateBatch-Mode of the cRecordset-Class,
  to not fail on comparisons of Null-Fields (in single
  Field-Value-Update-Mode). That patch is of *no* relevance
  for those, who already include a Primary-Key-Field into
  their Rs-Selects (which is in either case highly recommended,
  if the Rs.UpdateBatch-feature is used).
- also included a dynamic Public-Key assignment-feature
  into the cRPCConnection.Password-Property - if given
  PasswordStrings are enhanced this way:
  cRPCConnection.Password = "ThePassword" & _
                            ":$Pub_Key$:" & _
							CStr(ByteArray_of_PubKeyContent)
  then the content of the (nonetheless required initial 
  RPCPublicKey.dh-File) is ignored and the dynamically 
  given Content is used instead of the FileContent.
  
  
Version 3.0.19
- the only change is, that shared_cache-mode is now
  enabled by default (for multiple connections, running
  in the same process) - the shared-cache codepaths are
  now enabled within the latest engine-compile (3.6.20)

Version 3.0.18
- fixed an issue with the general readout of Text-Columns
  in the cRecordSet-Class (thanks to Jeremiah for the pointer), 
  where a performance-optimized code-path was trying to 
  access memory potentially "outside bounds" - this worked 
  stable with earlier sqlite-engine-binaries, but apparently 
  not with the newer ones anymore.
 
Version 3.0.17
- fixed an issue with ColumnDefs of the type 'Time',
  in case these Time-Fields where filled from "foreign
  SQLite-Applications", not using the wrapper. In these
  cases the Time-Column may contain something as e.g.
  '12:00:00.123' as the Field-Value - and the Fix now
  correctly translates that into a VB-Date-Variable
  (in the former version this was resulting in an error,
   since the wrapper only understood TimeFields which
   didn't contain additional "fractional parts of a second").
  
Version 3.0.16
- added a bunch of additional "out-of-memory-checks"
  in the cRecordset-Class (especially in the AddNew-Method)
- also enhanced the cSelectCommand-Object, so that it is
  now able, to use named params in more than one single
  occurence in the SQL-String

Version 3.0.15
- fix in the Recordset-Serializer, only seen on updated
  Recordsets which got an Update in the TopLeft "Cell"
  (at RowIndex 0 and ColIndex 0)
  
Version 3.0.14
- fix in cReportPage.CalcDrawTextRows (which was 
  choking in case the given Text was starting with a 
  LineFeed
  
Version 3.0.13
- fixed an issue which (indirectly) led to an "anomaly" 
  in the Rs.Content serializer (only in smaller Selects,
  which started with smaller Integer-Field Values, hold
  in a ByteArray first, later on "elevated" to LongArray-
  allocations in the Rs-retrieving-process)

Version 3.0.12
- fixed an issue within GetADORsFromContent, not flagging
  Primary-Key-Fields correctly - some databound-controls
  had problems with such Fields (although contained in the 
  returned ADO-Rs)
- added an additional refresh, so that the builtin OLEDB-
  SimpleProvider is now reflecting RecordDeletes on a 
  Recordset correctly into a bound Control

Version 3.0.11
- fixed an issue with Cnn.DetachDatabase, this call was
  wrapped internally within a transaction and SQLite
  doesn't like that.
- hardening-efforts for the server- and clientside 
  Threadclasses, especially the server-class now is
  raising an Error-Event in case one puts more than
  64kByte into the serverside RaiseEvent-Parameters

  
Version 3.0.10
- added support for a generic Latin-Collation into SQLite,
  to support a better sort-conformance with other DB-engines
  usage:          "... Order By SomeTxtFld Collate Latin" 
  also available: "... Order By SomeTxtFld Collate Latin_NoCase" 
- also added First(NumericField, NumericSortExpression) as
  well as a Last(.., ..) aggregate-function into the wrapper.


Version 3.0.9
- This update ensures Win98 compatibility again, by testing 
  the OS-Version internally - and enforcing a proper fallback 
  of Functions as DrawTextW, TabbedTextOutW, etc. to the
  appropriate Unicode-Translation-functions in unicows.dll
  (in case this small Dll is placed either beside the 3-Dll-Set
  or beside your hosting Exe-Process in your Win98-deployment-
  packages). You can download unicows.dll from the official MS-
  download-site: 
  http://www.microsoft.com/downloads/details.aspx?FamilyId=73BA7BD7-ED06-4F0D-80A4-2A7EEAEE17E2&displaylang=en
  Please keep in mind, that this update does not (re)enable
  the full functionality of the RichClient on Win98 (e.g.
  the advanced, namedpipe-based threading functionality will
  not work - also the RPC-*Server*-functionality will only
  work when hosted on W2K or XP and above. But this advanced
  functionality is seldom required - the more interesting classes
  as for example the SQLite-wrapper or the Reporting-classes 
  should now work also in Win98 again.
  
  
Version 3.0.8
- only a small update inside cRecordset.GetADORsFromContent...
  It is now able to transport SQLite-NullValues - which can
  be checked with IsEmpty(Rs.Fields(SomeField).Value) - also
  into the derived ADO-Rs the above mentioned method delivers.


Version 3.0.7
- fixes, to increase Debug-Stability in the VB6-IDE (in case
  one was using the Debug-WatchWindows against RichClient-
  Obj-Variables)
  These were caused due to minimal-implementations of the
  IEnumVariant-Interface - now all related classes contain
  a full IEnumVariant-Implementation, which the WatchWindows
  expect (since they also cause .Reset and .Skip on Container-
  Classes who implement IEnumVariant). The related RichClient-
  Classes were cCollection, cSortedDictionary and the XML-
  Classes. And indirectly all other classes which internally
  use the cCollection as e.g. cFields, cTables, cDatabases, etc.
  In short - I don't see any crashes anymore in WatchWindow-
  Debug-Sessions.
- Rs.GetADORsFromContent now does not choke anymmore, when
  the unerlying Select of the SQLite-Rs contains Fields with
  identical Names (e.g. when derived from Joins).


Version 3.0.6
- speed-improvements on the cFormula-Evaluator-Class
  (it does lookup for its internal Vars in a cCollection now)
  cFormula now also understands VariableNames that contain an
  UnderScore.


Version 3.0.5
- as a consequence of the last cUDP-changes ... changes  
  in the RPC-Waitloop, to not interfer with parallel UDP
  Messaging (if on the same Port and on the same thread).


Version 3.0.4:
- Important enhancement (not a bugfix) on cRecordset
  (it now automatically reflects AutoID-Values back into 
  the Recordset after performing a successful UpdateBatch)
  + Changes inside the cUDP-SocketClass (to a window-based
  WSAAsync-Mode, sharing some routines from the proven stable
  cTCPClient-Class now)


Version 3.0.3:
- fixes for the Like-expression Optimization (in case the 
  NoCase-Collation was not defined in the TblColumn-Def of
  the Text-Column. cConnection.AttachDatabase restored to
  former behaviour again (didn't like wrapping the Attach-
  statement in an implicite transaction).


Version 3.0.2:
- additions and fixes in the schema-parsing-routines for the 
  SQLite-DB-Obj-Model-Classes (cTable, cColumn) to be
  able to handle Column-Constraints which are placed not
  inside a ColumnDef itself, but at the end of a Create-Table-
  Statement.


Version 3.0.1:
- Added the GetInstanceEx-Method to cRegFree, reflecting this 
  new unicode-capable instancing Call of DirectCOM.dll also
  inside the Class-Model
