From: <na...@us...> - 2009-08-16 17:39:04
|
Revision: 831 http://instantobjects.svn.sourceforge.net/instantobjects/revision/?rev=831&view=rev Author: nandod Date: 2009-08-16 17:38:57 +0000 (Sun, 16 Aug 2009) Log Message: ----------- * Fixed some "deprecated" warning in the DBX broker under D2007+. Modified Paths: -------------- trunk/Source/Brokers/DBX/InstantDBX.pas Modified: trunk/Source/Brokers/DBX/InstantDBX.pas =================================================================== --- trunk/Source/Brokers/DBX/InstantDBX.pas 2009-08-16 16:59:53 UTC (rev 830) +++ trunk/Source/Brokers/DBX/InstantDBX.pas 2009-08-16 17:38:57 UTC (rev 831) @@ -46,7 +46,7 @@ QControls, {$ENDIF} Classes, DB, - {$IFNDEF D11+}DBXpress,{$ENDIF} + {$IFNDEF D11+}DBXpress,{$ELSE}DBXCommon,{$ENDIF} SqlExpr, InstantPersistence, InstantCommand, InstantBrokers, InstantMetadata, InstantTypes; @@ -74,17 +74,21 @@ property VendorLib: string read FVendorLib write FVendorLib; end; + TInstantDBXTransaction = class; + TInstantDBXConnector = class(TInstantConnectionBasedConnector) private - FTransactionDesc: TTransactionDesc; + FTransaction: TInstantDBXTransaction; FOnLogin: TSQLConnectionLoginEvent; function GetConnection: TSQLConnection; procedure SetConnection(Value: TSQLConnection); function GetCanTransaction: Boolean; + function GetTransaction: TInstantDBXTransaction; + function CreateTransaction: TInstantDBXTransaction; + property Transaction: TInstantDBXTransaction read GetTransaction; protected - procedure AssignLoginOptions; override;//CB + procedure AssignLoginOptions; override; function CreateBroker: TInstantBroker; override; - procedure InitTransactionDesc(var ATransactionDesc: TTransactionDesc); virtual; procedure InternalCommitTransaction; override; procedure InternalRollbackTransaction; override; procedure InternalStartTransaction; override; @@ -92,6 +96,7 @@ procedure InternalBuildDatabase(Scheme: TInstantScheme); override; public class function ConnectionDefClass: TInstantConnectionDefClass; override; + destructor Destroy; override; property CanTransaction: Boolean read GetCanTransaction; published property Connection: TSQLConnection read GetConnection write SetConnection; @@ -221,6 +226,50 @@ function DataTypeToColumnType(DataType: TInstantDataType; Size: Integer): string; override; end; + { + Base class for handling transactions. Concrete descendants handle + transactions differently in different versions of DBX. + } + TInstantDBXTransaction = class + private + FConnector: TInstantDBXConnector; + protected + property Connector: TInstantDBXConnector read FConnector; + public + constructor Create(const AConnector: TInstantDBXConnector); virtual; + procedure Start; virtual; abstract; + procedure Commit; virtual; abstract; + procedure Rollback; virtual; abstract; + end; + + { + Handles transactions in DBX3. + } + {$IFNDEF D11+} + TInstantDBX3Transaction = class(TInstantDBXTransaction) + private + FTransactionDesc: TTransactionDesc; + public + procedure Start; override; + procedure Commit; override; + procedure Rollback; override; + end; + {$ENDIF} + + { + Handles transactions in DBX4. + } + {$IFDEF D11+} + TInstantDBX4Transaction = class(TInstantDBXTransaction) + private + FTransaction: TDBXTransaction; + public + procedure Start; override; + procedure Commit; override; + procedure Rollback; override; + end; + {$ENDIF} + implementation uses @@ -279,13 +328,28 @@ Result := inherited Connection as TSQLConnection; end; -procedure TInstantDBXConnector.InitTransactionDesc( - var ATransactionDesc: TTransactionDesc); +function TInstantDBXConnector.GetTransaction: TInstantDBXTransaction; begin - ATransactionDesc.TransactionID := 1; - ATransactionDesc.GlobalID := 0; + if not Assigned(FTransaction) then + FTransaction := CreateTransaction; + Result := FTransaction; end; +function TInstantDBXConnector.CreateTransaction: TInstantDBXTransaction; +begin + {$IFDEF D11+} + Result := TInstantDBX4Transaction.Create(Self); + {$ELSE} + Result := TInstantDBX3Transaction.Create(Self); + {$ENDIF} +end; + +destructor TInstantDBXConnector.Destroy; +begin + FreeAndNil(FTransaction); + inherited; +end; + procedure TInstantDBXConnector.InternalBuildDatabase(Scheme: TInstantScheme); begin StartTransaction; @@ -301,22 +365,19 @@ procedure TInstantDBXConnector.InternalCommitTransaction; begin if CanTransaction then - Connection.Commit(FTransactionDesc); + Transaction.Commit; end; procedure TInstantDBXConnector.InternalRollbackTransaction; begin if CanTransaction then - Connection.Rollback(FTransactionDesc); + Transaction.Rollback; end; procedure TInstantDBXConnector.InternalStartTransaction; begin if CanTransaction then - begin - InitTransactionDesc(FTransactionDesc); - Connection.StartTransaction(FTransactionDesc); - end; + Transaction.Start; end; function TInstantDBXConnector.ParamByName(const AName: string): string; @@ -807,6 +868,60 @@ Result := 'Firebird'; end; +{ TInstantDBXTransaction } + +constructor TInstantDBXTransaction.Create(const AConnector: TInstantDBXConnector); +begin + Assert(Assigned(AConnector)); + + inherited Create; + FConnector := AConnector; +end; + +{ TInstantDBX3Transaction } + +{$IFNDEF D11+} +procedure TInstantDBX3Transaction.Commit; +begin + Connector.Connection.Commit(FTransactionDesc); +end; + +procedure TInstantDBX3Transaction.Rollback; +begin + Connector.Connection.Rollback(FTransactionDesc); +end; + +procedure TInstantDBX3Transaction.Start; +begin + if FTransactionDesc.TransactionID = MAXLONG then + FTransactionDesc.TransactionID := 1 + else + FTransactionDesc.TransactionID := FTransactionDesc.TransactionID + 1; + FTransactionDesc.IsolationLevel := + TransIsolationLevelMap[Database.TransIsolation]; + Connector.Connection.StartTransaction(FTransactionDesc); +end; +{$ENDIF} + +{ TInstantDBX4Transaction } + +{$IFDEF D11+} +procedure TInstantDBX4Transaction.Commit; +begin + Connector.Connection.CommitFreeAndNil(FTransaction); +end; + +procedure TInstantDBX4Transaction.Rollback; +begin + Connector.Connection.RollbackFreeAndNil(FTransaction); +end; + +procedure TInstantDBX4Transaction.Start; +begin + FTransaction := Connector.Connection.BeginTransaction; +end; +{$ENDIF} + initialization RegisterClass(TInstantDBXConnectionDef); TInstantDBXConnector.RegisterClass; |
From: <car...@us...> - 2009-12-28 15:41:34
|
Revision: 882 http://instantobjects.svn.sourceforge.net/instantobjects/revision/?rev=882&view=rev Author: carlobar Date: 2009-12-28 15:41:25 +0000 (Mon, 28 Dec 2009) Log Message: ----------- Added support for Devart DbExpress Driver for Interbase/Firebird Modified Paths: -------------- trunk/Source/Brokers/DBX/InstantDBX.pas Modified: trunk/Source/Brokers/DBX/InstantDBX.pas =================================================================== --- trunk/Source/Brokers/DBX/InstantDBX.pas 2009-12-22 19:11:42 UTC (rev 881) +++ trunk/Source/Brokers/DBX/InstantDBX.pas 2009-12-28 15:41:25 UTC (rev 882) @@ -165,6 +165,13 @@ function GetDBMSName: string; override; end; + { Firebird/Interbase through the Devart dbX driver } + + TInstantDBXDevartInterbaseBroker = class(TInstantDBXInterBaseFirebirdBroker) + protected + function GetDBMSName: string; override; + end; + { MS SQL Server } TInstantDBXMSSQLSQLGenerator = class(TInstantSQLGenerator) @@ -314,6 +321,8 @@ Result := TInstantDBXMySQLBroker.Create(Self) else if SameText(Connection.DriverName, 'FirebirdUIB') then Result := TInstantDBXFirebirdUIBBroker.Create(Self) + else if SameText(Connection.DriverName, 'DevartInterbase') then + Result := TInstantDBXDevartInterbaseBroker.Create(Self) else raise Exception.CreateFmt('dbExpress driver "%s" not supported', [Connection.DriverName]); @@ -893,6 +902,13 @@ Result := 'Firebird'; end; +{ TInstantDBXDevartInterbaseBroker } + +function TInstantDBXDevartInterbaseBroker.GetDBMSName: string; +begin + Result := 'Interbase'; +end; + { TInstantDBXTransaction } constructor TInstantDBXTransaction.Create(const AConnector: TInstantDBXConnector); |
From: <na...@us...> - 2010-01-27 08:33:15
|
Revision: 891 http://instantobjects.svn.sourceforge.net/instantobjects/revision/?rev=891&view=rev Author: nandod Date: 2010-01-27 08:33:07 +0000 (Wed, 27 Jan 2010) Log Message: ----------- + Support for native D2010 Firebird DBX driver. Modified Paths: -------------- trunk/Source/Brokers/DBX/InstantDBX.pas Modified: trunk/Source/Brokers/DBX/InstantDBX.pas =================================================================== --- trunk/Source/Brokers/DBX/InstantDBX.pas 2010-01-03 04:02:13 UTC (rev 890) +++ trunk/Source/Brokers/DBX/InstantDBX.pas 2010-01-27 08:33:07 UTC (rev 891) @@ -172,6 +172,13 @@ function GetDBMSName: string; override; end; + { Firebird through the native D2010 driver } + + TInstantDBXFirebirdBroker = class(TInstantDBXInterBaseFirebirdBroker) + protected + function GetDBMSName: string; override; + end; + { MS SQL Server } TInstantDBXMSSQLSQLGenerator = class(TInstantSQLGenerator) @@ -321,6 +328,8 @@ Result := TInstantDBXMySQLBroker.Create(Self) else if SameText(Connection.DriverName, 'FirebirdUIB') then Result := TInstantDBXFirebirdUIBBroker.Create(Self) + else if SameText(Connection.DriverName, 'FIREBIRD') then + Result := TInstantDBXFirebirdBroker.Create(Self) else if SameText(Connection.DriverName, 'DevartInterbase') then Result := TInstantDBXDevartInterbaseBroker.Create(Self) else @@ -962,6 +971,13 @@ end; {$ENDIF} +{ TInstantDBXFirebirdBroker } + +function TInstantDBXFirebirdBroker.GetDBMSName: string; +begin + Result := 'Firebird'; +end; + initialization RegisterClass(TInstantDBXConnectionDef); TInstantDBXConnector.RegisterClass; |
From: <na...@us...> - 2010-09-17 07:46:08
|
Revision: 922 http://instantobjects.svn.sourceforge.net/instantobjects/revision/?rev=922&view=rev Author: nandod Date: 2010-09-17 07:45:58 +0000 (Fri, 17 Sep 2010) Log Message: ----------- * Database evolution: changed VARCHAR to VARCHAR2 for Oracle through DBX. + Support for Oracle and SQLServer Devart DBX drivers. Modified Paths: -------------- trunk/Source/Brokers/DBX/InstantDBX.pas Modified: trunk/Source/Brokers/DBX/InstantDBX.pas =================================================================== --- trunk/Source/Brokers/DBX/InstantDBX.pas 2010-09-17 07:34:46 UTC (rev 921) +++ trunk/Source/Brokers/DBX/InstantDBX.pas 2010-09-17 07:45:58 UTC (rev 922) @@ -172,7 +172,7 @@ function GetDBMSName: string; override; end; - { Firebird through the native D2010 driver } + { Firebird through the native D2010+ driver } TInstantDBXFirebirdBroker = class(TInstantDBXInterBaseFirebirdBroker) protected @@ -209,7 +209,7 @@ class function TranslatorClass: TInstantRelationalTranslatorClass; override; end; - { Oracle } + { Oracle through the native driver } TInstantDBXOracleBroker = class(TInstantDBXBroker) protected @@ -219,6 +219,14 @@ function GetSQLQuote: Char; override; end; + { Oracle through the Devart dbX driver } + + TInstantDBXDevartOracleBroker = class(TInstantDBXOracleBroker) + protected + procedure AssignParam(SourceParam, TargetParam: TParam); override; + function ColumnTypeByDataType(DataType: TInstantDataType): string; override; + end; + { IBM DB2 } TInstantDBXDB2Broker = class(TInstantDBXBroker) @@ -328,10 +336,14 @@ Result := TInstantDBXMySQLBroker.Create(Self) else if SameText(Connection.DriverName, 'FirebirdUIB') then Result := TInstantDBXFirebirdUIBBroker.Create(Self) - else if SameText(Connection.DriverName, 'FIREBIRD') then - Result := TInstantDBXFirebirdBroker.Create(Self) else if SameText(Connection.DriverName, 'DevartInterbase') then Result := TInstantDBXDevartInterbaseBroker.Create(Self) + else if SameText(Connection.DriverName, 'DevartOracle') then + Result := TInstantDBXDevartOracleBroker.Create(Self) + else if SameText(Connection.DriverName, 'DevartSQLServer') then + Result := TInstantDBXMSSQLBroker.Create(Self) + else if SameText(Connection.DriverName, 'Firebird') then + Result := TInstantDBXFirebirdBroker.Create(Self) else raise Exception.CreateFmt('dbExpress driver "%s" not supported', [Connection.DriverName]); @@ -787,7 +799,7 @@ 'FLOAT', 'DECIMAL(14,4)', 'NUMBER(1)', - 'VARCHAR', + 'VARCHAR2', 'CLOB', 'DATE', 'BLOB', @@ -808,6 +820,42 @@ Result := ''''; end; +{ TInstantDBXDevartOracleBroker } + +procedure TInstantDBXDevartOracleBroker.AssignParam(SourceParam, + TargetParam: TParam); +begin + { TODO : This may vary depending on DBX driver parameters. } + case SourceParam.DataType of + ftInteger: + TargetParam.AsInteger := SourceParam.AsInteger; + ftCurrency: + TargetParam.AsBCD := SourceParam.AsCurrency; + else + inherited; + end; +end; + +function TInstantDBXDevartOracleBroker.ColumnTypeByDataType( + DataType: TInstantDataType): string; +const + { TODO : This may vary depending on DBX driver parameters. } + Types: array[TInstantDataType] of string = ( + 'INTEGER', + 'NUMBER', + 'DECIMAL(14,4)', + 'NUMBER(1)', + 'VARCHAR', + 'CLOB', + 'DATE', + 'BLOB', + 'DATE', + 'DATE', + 'INTEGER'); +begin + Result := Types[DataType]; +end; + { TInstantDBXDB2Broker } function TInstantDBXDB2Broker.ColumnTypeByDataType( |