|
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
|