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