From: <dav...@us...> - 2009-08-18 08:09:44
|
Revision: 845 http://instantobjects.svn.sourceforge.net/instantobjects/revision/?rev=845&view=rev Author: davidvtaylor Date: 2009-08-18 08:09:33 +0000 (Tue, 18 Aug 2009) Log Message: ----------- AnyDAC broker enhancements - Add support for UseNull feature - Finalize Firebird database creation logic (tested embedded DB only) - Add support for setting PageSize for Firebird database creation - Changed default Firebird CharacterSet from ISO8859_1 to UTF8 Modified Paths: -------------- trunk/Source/Brokers/AnyDAC/InstantAnyDAC.pas Modified: trunk/Source/Brokers/AnyDAC/InstantAnyDAC.pas =================================================================== --- trunk/Source/Brokers/AnyDAC/InstantAnyDAC.pas 2009-08-18 08:03:27 UTC (rev 844) +++ trunk/Source/Brokers/AnyDAC/InstantAnyDAC.pas 2009-08-18 08:09:33 UTC (rev 845) @@ -35,7 +35,7 @@ {$I '..\..\InstantDefines.inc'} {$ENDIF} -// Supported databases (only MSSQL has been tested as of 3/21/2009) +// Supported databases (only MSSQL and Firebird have been tested as of 8/18/2009) {$DEFINE SYBASE_SUPPORT} {$DEFINE MSSQL_SUPPORT} @@ -50,8 +50,8 @@ uses Classes, Db, InstantPersistence, InstantCommand, InstantDBBuild, InstantBrokers, InstantMetadata, InstantTypes, uADCompClient, - uADStanOption, uADStanParam, uADStanIntf, uADStanConst - {$IFDEF D10+}, DBCommonTypes{$ENDIF}; + uADStanOption, uADStanParam, uADStanIntf, uADStanConst, + {$IFDEF D10+}DBCommonTypes{$ENDIF}; type TInstantAnyDACConnectionDef = class(TInstantRelationalConnectionDef) @@ -307,6 +307,9 @@ InstantConsts, InstantClasses, InstantAnyDACConnectionDefEdit, InstantAnyDACCatalog, InstantUtils; +resourcestring + SInvalidDatabasePageSize = 'Invalid database PageSize value: "%s"'; + {$IFDEF SQLITE_SUPPORT} const STmpTableSuffix = '_IOTmp_'; @@ -698,6 +701,12 @@ else TargetParam.Assign(SourceParam); end; + + if (SourceParam.IsNull) then + begin + TargetParam.Clear; + TargetParam.Bound := true; + end; end; function TInstantAnyDACBroker.CreateCatalog(const AScheme: TInstantScheme): TInstantCatalog; @@ -936,8 +945,11 @@ var OldProperties : string; CharacterSet : string; + PageSizeStr : string; + PageSize : integer; +const + DEFAULT_DB_PAGESIZE = 8192; begin - // TODO Quick first pass at using built-in AnyDAC database creation logic (not tested) // do not call inherited with Connector do begin @@ -945,13 +957,29 @@ try CharacterSet := trim(Connection.Params.Values['CharacterSet']); + PageSizeStr := trim(Connection.Params.Values['PageSize']); if (CharacterSet = '') then - CharacterSet := 'ISO8859_1'; + CharacterSet := 'UTF8'; + if (PageSizeStr <> '') then + begin + PageSize := StrToIntDef(PageSizeStr,-1); + if (PageSize <> 1024) and // Deprecated for FB 2.1+ + (PageSize <> 2048) and // Deprecated for FB 2.1+ + (PageSize <> 4096) and + (PageSize <> 8192) and + (PageSize <> 16384) then // Available FB 2.0 and later + raise EInstantError.CreateFmt(SInvalidDatabasePageSize, [PageSizeStr]); + end else + begin + PageSize := DEFAULT_DB_PAGESIZE; + end; + Connection.Params.Values['CharacterSet'] := CharacterSet; Connection.Params.Values['CreateDatabase'] := 'Yes'; - Connection.Params.Values['PageSize'] := '4096'; + Connection.Params.Values['SQLDialect'] := '3'; + Connection.Params.Values['PageSize'] := IntToStr(PageSize); Connect; Disconnect; finally |