--------- 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 send us an email... Support@Dimeric.com Release Notes ------------- 2.1.11 - June 18, 2003 -------------- Changes in VDB -------------- * VDBSmartRecord - New function SmartRecSQL that an IDatabase, a SQL string and a smartrecord and executes the SQL using the database, using the smartrecord as the source of any needed parameters. - New function LoadSmartRecParams takes an IQuery and a smartrecord and load parameters (with values) from the smartrecord. * VDB_ADO - Now calls CoInitializeEx(nil, COINIT_MULTITHREADED) instead of using the single threaded apartment. * VDB_Base - No longer breaks into the IDE when closing a connection due to a failure in Ping. This is nicer when using IBX which can raise an exception in Close if the underlying socket is stale. This only has an effect when running in the debugger. ------------------ Changes in Utility ------------------ * DSDataExport - fixed a bug related to exporting a dataset in delimited mode when a field contained the qualifier character (the quote character). * DSDeployUtil - The "shared folder" is now 'C:\Dimeric Software\Shared Files'. This can be configured on a user's workstation using the registry key 'HKLM\Software\Dimeric Software'. * DSGenUtil - new function OSFamily (for Windows only) that returns one item from the enumeration: TOSFamily = (os95, osNT). * DSList - Fixed a bug in IList.Delete and IList.Insert. * DSLock - Added access to the "spin count" of an ICriticalSection (in Windows only). * DSMiniCalc - Now uses IInputStream instead of TStream throughout. * DSNexus - In QueryInterface, raise a meaningful exception instead of simply returning E_NOINTERFACE when the sub-object registered for a particular interface does not support that interface. * DSNexusDataMod - Same change as in DSNexus. * DSObject - New functions AndFilter and OrFilter each take an open array of IFilter and return a new IFilter that, when evaluated, returns the result of and-ing or or-ing the results of the passed in filters using short-ciruit evaluation. - New function ReverseCompare takes an ICompare and returns a new ICompare that, when evaluated, evaluates the passed in ICompare and returns the inverse of its result. - New function MultiCompare takes an open array of ICompare objects and returns a new ICompare that combines the comparisons as you would expect. When evaluated, it evaluates the passed-in comparisons in order until it receives a non-zero response, which it returns. If all comparisons return 0, then it returns 0. - TrueFilter, FalseFilter, AssignedFilter and UnassignedFilter were renamed to TrueObjFilter, FalseObjFilter, AssignedObjFilter and UnassignedObjFilter. TrueFitler and FalseFilter now return IFilter instead of IObjectFilter. * DSPropertyBag - New function CompareExprSingle creates a new property bag comparison implemented by a MiniCalc expression (passed as either a string or an ICalcExpr). The expression has access to the properties of a property bag. The result of the expression is compared with VariantCompare which can be either case sensitive (default) or case insensitive. - New function MultiCompare takes an array of IPropBagCompare objects and creates a new property bag comparison that works just like the new MultiCompare in DSObject. That is, a tie in the first comparison passed in is broken by the second, a tie there is broken by the third, and so on. - New function ReverseCompare takes an IPropBagCompare and returns a new IPropBagCompare that, when evaluated returns the inverse of the result of evaluating the passed in comparison. * DSSmartRecListView - NEW UNIT - This unit is used with Rinse smart records to more easily display a smartlist. See the Rinse section below for details. * DSSmartRecStreams - NEW UNIT - This unit defines the ISmartRecordStreamer interface, which is used to load and save smart records and smart record lists to and from streams. This unit also provides a standard, plain-text implementation of ISmartRecordStreamer, but other implementations may be defined elsewhere (XML, for example). * DSStreams - Removed IFilterInStream, IFilterOutStream, IFilterRandomInStream and IFilterRandomStream. IInputStream, IRandomInputStream and IRandomStream have a new method GetInputStreams that returns a dynamic array of IInputStream. IOutputStream and IRandomStream have a new method GetOutputStreams that returns a dynamic array of IOutputStream. Streams that don't have a sub-stream simply return a zero-length array. - IInputStream and IOutputStream have new methods: CloseLayer and Closed. CloseLayer only closes the top-most stream but does not close underlying streams (i.e. those streams returned by GetInputStreams or GetOutputStreams, recursively). The Close method propagates the close operation to underlying streams, if any, as always. The Closed function returns a Boolean indicating whether the top-most stream is closed. - IOutputStream has a new method: FlushLayer. The Flush method still calls the underlying stream's Flush method, if any. FlushLayer simply flushes the top-most stream's buffers, if any, to the underlying streams, if any. If there isn't an underlying stream then this is the same as calling Flush. For example, the a file output stream on windows calls the Windows API routine FlushFileBuffers of the file handle. - Removed the FlushBuffer method from IBufOutStream. This functionality is provided by the new, inherited FlushLayer. - IStringStream and IMemoryStream implementations now also support IBufInStream. - IMemoryStream has new methods: DataPChar and DataString. DataPChar simply returns same pointer as the Memory method, typed as a PChar. DataString copies the contents of the stream into a string and returns it. - IByteCountOutStream is a new stream that keeps track of the number of bytes written to the stream, which can be cleared. - New interfaces IInputStreamVisitor and IOutputStreamVisitor allow traversal of stream layers via the global routines VisitInputStream and VisitOutputStream. Four standard visitors can be constructed with the new routines: NewInputStreamIIDVisitor, NewInputStreamIntfVisitor, NewOutputStreamIIDVisitor and NewOutputStreamIntfVisitor. The IID visitors terminate the traversal after encountering a particular IID. the Intf visitors stop after encountering a particular object. - New global functions CloseInputThrough, CloseOutputThrough and FlushOutputThrough use the visitors above to close or flush until a particular stream or IID is reached. - New global functions GetInputSubStream, GetOutputSubStream return the single nested sub-stream, if any. - New global functions GetInputMemoryStream and GetOutputMemoryStream look for a nested stream that supports IMemoryStream. * DSStringUtil - New routines StripChar and StripChars remove all occurrences of a character or characters from a string. * DSWebServer - Now supports automatic compression of responses using the deflate algorithm in the gzip format (gzip, zlib and deflate all use the deflate algorithm, but just have a different header and trailer). The CompressContent property of IWebResponse can be set to none, only if text (if the content-type is text) or always. It defaults to only compressing text. * DSWebUtil - When reading an HTTP request or response header, allow any number of initial blank lines to avoid a bug in Internet Explorer, which intermittently sends a blank line before a request header after receiving a compressed response on the same socket. * DSZLibStream - Now suports the raw deflate format and the gzip format in addition to the ZLib format (which just differ in what header and trailer are included). * Shipping with the latest zlib code (version 1.1.4) which has many bug fixes since the version shipped with Delphi 7 (which is an eight year old version). Version 1.1.4 fixes a well publicized double-free bug that is a potential security hole. For more information, including source, see: http://www.gzip.org/zlib/ 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.