--------- IMPORTANT --------- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Dimeric Software Product Information Virtual Database (VDB) FULL Version * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Thank you for purchasing VDB -- we hope you will find it as useful and reliable as we do. If you have any questions or comments, please vist our website... http://www.Dimeric.com/ or visit our online support forums... http://www.Dimeric.com/DSWeb/support/index.php or send us an email... Support@Dimeric.com Release Notes ------------- 2.2.7 - Nov 30, 2004 -------------- Changes in VDB -------------- * We have added support for Delphi 2005 (Delphi for Win32 only; no C# or .NET support yet). * We have dropped support for Delphi 5. We plan to continue supporting Delphi 6, 7, and 2005 for a long time, but the RTL and language features in Delphi 5 became too difficult to support. For example, you can't put a Cardinal or an Int64 into a Variant in Delphi 5, but you can in Delphi 6 or later. * The method VDBEngines.NewDatabase has been removed. Applications must now use one of two global functions: NewDatabase and OpenDatabase. The difference between the two is that OpenDatabase always returns an open connection (if it came from the connection pool, it will ping it), while NewDatabase always returns a closed connection (it does not use the connection pool). For backward compatibility, there is an overloaded version of OpenDatabase that allows you to request the old behavior of VDBEngines.NewDatabase (that is, return a new connection without opening it, or a pooled connection without pinging it). * Fixed a bug in VDBRemoteDataMod: we now register and unregister dataset providers. * The Schema Explorer feature of VDB has been enhanced to display table schema information in full, vendor-specific CREATE TABLE SQL statements. * The Schema Explorer feature of VDB has been enhanced to include information about Informix synonyms. * ADO - Fixed some problems with parameters in prepared queries. * ADO - Support parameters in stored procedures. * ADO - Call CoInitializeEx with Multithreaded option. * IDataEngine can now return the database names (only works with BDE, FlashFiler, and DBISAM). * IBX - Include USER=SYSDBA in the default parameters. * IBX - Put in some IFDEFS for Delphi 2005 support. * VDBMiniCalc - Bug fix in @ParamValue. * Add ParamByName method, and ByName property, to IParamList. * New Feature: ISQLFilter is a utility for building a WHERE clause, without worrying about things like punctuation. * New Method: IDialect.CanCacheQuery indicates whether a SQL statement may be prepared and cached. For exmaple, Informix does not allow caching of DDL statements. * VDBParseStatements now handles comments, and also raises an error for unterminated strings, block comments, function escapes, etc. * New Methods in IDatabase: Added NewQueryNoCache, RunQueryNoCache, ExecSQLNoCache, and QueryValueNoCache. These methods bypass the query caching mechanism (good for ad-hoc queries that have little chance of executing again). * New Feature: When connection pooling is enabled, VDB will now spawn a new connection on a background thread whenever the pool is empty (when obtaining a new connection). * New Function: UnlinkProfiles - expands a string list containing one or more linked profiles, so that the profiles are no longer linked. * VDB now supports comments in SQL statements. The supported block comment is: /* ... */ and the supported line comments are: // and -- * Fixed a bug where the vdbQueryTimeout option was not appearing in profile strings in the correct circumstances. * Enhancement: The automatic, adaptive query preparing and caching feature has been enhanced as follows. Before, non-prepared queries were kept on an "incubator", to detect when the same statement was executed more than once. Now, the incubator only has a hash of the SQL statement, so it is much lighter-weight. The size of the query cache was reduced from 100 to 20 entries. ------------------ Changes in Utility ------------------ * DSPaintBox - Performance improvement for double-buffering: make the memory bitmap smaller (only as big as the invalidated region). * DSPropertyBagDB - Use an IStringCache object for all routines that read values from a dataset. This saves memory if the data contains repeated string values (which is very common). * DSClientDataUtil - New routine: RemoveUnderscoresInCDSFields. * DSClientDataUtil - Work-around for the MIDAS 31-character column name limitation. * DSDataUtil - New routines to copy datasets by column index (as opposed to column name): CopyDataSetByIndex and CopyCurrentRowByIndex. * DSList - New Function: ReverseList (reverses the order). * DSSmartRecListView: - Fix sorting when getting a value from the ListView's OnGetValue. - Found a way to override property default values. - Save old smart records in DestroyWnd; restore them in CreateWnd. This appears to be necessary when toggling ReadOnly. - Remove default from ReadOnly property. * DSMap: - New Type: IResourceManager - Manages a collection of resources which are created and destroyed on demand, based on application need. This gives the application a potentially unlimited pool of resources, with overhead proportional to the number of active resources at any given time. - Add routines and methods that make dealing with arrays of integers and strings easier. - Fix a data corruption problem with deleting from a map while enumerating. We don't call SetTableSize inside EnumSlot, because the caller, Enumerate, is counting on FTable staying the same. Instead, Enumerate itself calls SetTableSize, if appropriate. - IMap and IIntfMap now support iterators (IPairIterator and IIntfPairIterator). - Change IIntfMap.GetValues(IIntfList) into a function. Also, consolidate the no-agument version. Change IIntfMap.GetValuesForKey into a function. * DSSet: - Add routines and methods that make dealing with arrays of integers and strings easier. - Rename GetKeysAsIntArray and GetKeysAsStrArray as AsIntArray and AsStrArray. Add AsVariantArray. - Change IIntSet.GetKeys(IIntfList) into a function. Also, consolidate the no-agument version. - Bug fix in GetKeys. * DSLog: Improved (arguably) the format for LogError. * DSRSync: Bug fix - bypass compression when original file was smaller than MinBlockSize. * DSStringList: - Support LineBreak property of TStrings in Delphi 2005. - Custom sorting via new overloaded Sort method. * DSSmartRecord: - New Routines: AssignListItems, SetObjectState, SetExisting, InitProps, and CopySmartRecord. * DSExceptionStreams: New routines: DeepCloneException, ReadException, and WriteException. * DSContext: - Define CurrentStringCache, a global function that returns an IStringCache object managed by the context. Use this in DSPropertyBagDB so that ReadPropBag and related functions can use a string cache from the context. - Define StrCacheContextItem, to make it easy to build a context factory with string caching enabled. - Eliminate TDSTransKind and use TDSTransState instead. Adding an item with tsActive will automatically call PushTrans right away. * DSSocket: Define a new value for the TPeerThreadCloseMode enumeration: cmStopListening. This gives a way to tell the server socket to just stop listening. * DSMath: - New function: NormalizeArray. - Improved the performance of SwapEndian and provided overloads for other types. * DSMiniCalc: - Rename the PChar version of ParseCalcExpr to ParseCalcExprBuff. - Use ? instead of * for pass-by-expression. - Replace "foreach .. in" with "for .. in", to match the syntax of Delphi 2005. - In "for .. in", use iterators for vectors, maps, and strings (to avoid copying). - New functions: ChangeFileExt, DefaultFileExt. - Fix some calls to Args.CheckCount. * DSLaunchUtil: Add another launch option for ExecChild: loSkipInheritHandles. * DSFileUtil: - Make GetFileDetails a little more efficient, by not saving and restoring old file pointer unless necessary. - Make GetFileSize more robust by using CreateOSFile (allows the size to be determined even if the file could not have been opened for reading). - Define new functions GetFileSize64 and TryGetFileSize. - Overloaded version of TouchFile that allows timestamp to be specified. * DSStreams: - New routines: ReplaceCurrentFileWithNewFile, RecoverOldFile, GetNewFileName and GetOldFileName. - Overloaded version of SameStreamData that takes two IRandomInputStreams. - Always clear buffer after calling OutputRedirect, even if an exception was raised by call-back. * DSTypedStreams: - New type, IStreamableException, that descends from IException and also implements IPersistObject. - New overloaded versions of WriteObjectToFile and ReadObjectFromFile, that use a version number to prevent loading of data that was saved in a different format. * DSThreadPool: Overloaded versions of IThreadPool.Run, taking a TThreadEvent or TThreadProc. * DSGenUtil: - Make TExceptionWrapper public. - TExceptionWrapper now frees owned exceptions in SetError. * DSPropertyBag: - New function: ComparePropBagLists - New Function: PropBagToVariant. * DSStringUtil: - Call FindClose after FindFirst. - Bug fix: uninitialized local variable in DoParseCSV. - Added BoolYNStrs. - New functions: DSVarToStr, DSFormat. * DSThreadUtil: - Add overloaded versions of WaitFor that allow a timeout to be specified. - Allow TSyncThreads to set their return value as a variant (ReturnValueEx). IThread wrappers now use the old LongInt return value when a Variant return value has not been set. - New function, NewRunnable: creates an IRunnable given a TThreadEvent or TThreadProc. * Support for the new "for ... in" loop in Delphi 2005: - DSDataUtil: NewIterator. - DSList: IList, IIntfList. - DSMap: IMap, IIntfMap, IPairIterator, IIntfPairIterator. - DSSet: ISet, IIntfSet. - DSStringList: IStringList. - DSSmartRecord: ISmartRecordList. - DSStreams: NewIterator. - DSGenUtil: IIterator, IIntfIterator. - DSPropertyBag: IPropBagIterator. * New Units: - DSDiffFindFrm - DSDiffGoToFrm - DSDiffSelectBufferForm - DSExtraHighlighters - DSFTP - DSHighlighters - DSObjectCache - DSObjectManager - DSPersistGraphics Documentation ------------- This product includes context-sensitive help that integrates into the Delphi IDE, as well as three separate files: Streams and Persistence.rtf - Detailed introduction to the streaming sub-system of DSTools (DSStreams.pas and DSTypedStreams.pas). MiniCalc.pdf - Detailed reference for MiniCalc, the expression parser/evaluator offered by DSTools (the MiniCalc.pas unit). VDB-Tutorial.pdf - A detailed tutorial for VDB. This is the same information that can be found in the context- sensitive help (minus the reference section), but in a format that is more printer-friendly. This product also ships with a demo application, named VDBDemo. This program illustrates how to perform many common operations, all of which are implemented using both VDB and BDE (for comparison purposes). The demo application is a good place to get started with VDB. VDB Explorer ------------ VDB Explorer was inspired by Borland's SQL Explorer, but has a subset of its functionality. VDB Explorer works with any database that is supported by VDB (not just BDE). It also has a few features missing from SQL Explorer: *) Ability to cut-and-paste in the data-aware grid. *) Ability to export the contents of the data-aware grid to a comma-separated text file. VDB Explorer allows you to browse the tables in a database, and to execute SQL statements against a database. It comes in handy when you need to export data to a plain text file, or simply to test a VDB profile string. You may define new profile strings for use with VDB Explorer in the "VDBExplorer.ini" file. It is also possible to add and modify profile strings interactively within VDB Explorer, but the user interface for doing this is rather quirky (this will be addressed in an upcoming release). The file "VDBExplorer.ini" is only used by VDB Explorer -- your own VDB applications should use their own INI files (or the registry, or whatever other mechanism you prefer). Please make sure that VDBExplorer is not running when you edit the "VDBExplorer.ini" file. Deploying Applications Built With VDB ------------------------------------- VDB features royalty-free application deployment. You may distribute free of charge applications (EXE files) and libraries (DLL and BPL files) built with VDB and/or DSUtil. You may not distribute VDB or DSUtil source code (PAS, INT, DCU and DCP files). See the software license (License.txt) for more information.