From: Steven M. <sr...@us...> - 2005-07-30 06:40:59
|
Update of /cvsroot/instantobjects/Source/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26206 Modified Files: InstantDBBuild.pas InstantPersistence.pas Log Message: Update to allow Command Sequence to execute in transaction or outside of transaction by checking new DDLTransactionSupp readonly property of InstantConnector that defaults to true. Index: InstantPersistence.pas =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/InstantPersistence.pas,v retrieving revision 1.50 retrieving revision 1.51 diff -C2 -d -r1.50 -r1.51 *** InstantPersistence.pas 26 Jul 2005 07:54:34 -0000 1.50 --- InstantPersistence.pas 30 Jul 2005 06:40:50 -0000 1.51 *************** *** 1437,1440 **** --- 1437,1441 ---- function GetDatabaseExists: Boolean; virtual; function GetDatabaseName: string; virtual; + function GetDDLTransactionSupp: Boolean; virtual; procedure InternalBuildDatabase(Scheme: TInstantScheme); virtual; procedure InternalConnect; virtual; abstract; *************** *** 1476,1479 **** --- 1477,1481 ---- property DatabaseExists: Boolean read GetDatabaseExists; property DatabaseName: string read GetDatabaseName; + property DDLTransactionSupp: Boolean read GetDDLTransactionSupp; property InTransaction: Boolean read GetInTransaction; property InUse: Boolean read GetInUse; *************** *** 9083,9086 **** --- 9085,9093 ---- end; + function TInstantConnector.GetDDLTransactionSupp: Boolean; + begin + Result := True; + end; + function TInstantConnector.GetInTransaction: Boolean; begin Index: InstantDBBuild.pas =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/InstantDBBuild.pas,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** InstantDBBuild.pas 24 Jul 2005 16:34:55 -0000 1.4 --- InstantDBBuild.pas 30 Jul 2005 06:40:50 -0000 1.5 *************** *** 25,28 **** --- 25,29 ---- * * Contributor(s): + * Steven Mitchell * * ***** END LICENSE BLOCK ***** *) *************** *** 188,191 **** --- 189,194 ---- procedure DoCommandExecuteError(const ACommand: TInstantDBBuildCommand; const Error: Exception; var RaiseError: Boolean); + procedure DoExecute; + procedure DoExecuteInTransaction; function GetCount: Integer; function GetItem(const Index: Integer): TInstantDBBuildCommand; *************** *** 673,677 **** end; ! procedure TInstantDBBuildCommandSequence.Execute; var i: Integer; --- 676,680 ---- end; ! procedure TInstantDBBuildCommandSequence.DoExecute; var i: Integer; *************** *** 679,705 **** RaiseError: Boolean; begin ! DoBeforeExecute; ! Connector.StartTransaction; ! try ! for i := 0 to FCommands.Count - 1 do ! begin ! CurrentCommand := FCommands[i] as TInstantDBBuildCommand; ! DoBeforeCommandExecute(CurrentCommand); ! try ! if CurrentCommand.Enabled then ! CurrentCommand.Execute; ! except ! on E: Exception do ! begin ! RaiseError := True; ! DoCommandExecuteError(CurrentCommand, E, RaiseError); ! if RaiseError then ! raise; ! end; end; - DoAfterCommandExecute(CurrentCommand); end; Connector.CommitTransaction; - DoAfterExecute; except Connector.RollbackTransaction; --- 682,711 ---- RaiseError: Boolean; begin ! for i := 0 to FCommands.Count - 1 do ! begin ! CurrentCommand := FCommands[i] as TInstantDBBuildCommand; ! DoBeforeCommandExecute(CurrentCommand); ! try ! if CurrentCommand.Enabled then ! CurrentCommand.Execute; ! except ! on E: Exception do ! begin ! RaiseError := True; ! DoCommandExecuteError(CurrentCommand, E, RaiseError); ! if RaiseError then ! raise; end; end; + DoAfterCommandExecute(CurrentCommand); + end; + end; + + procedure TInstantDBBuildCommandSequence.DoExecuteInTransaction; + begin + Connector.StartTransaction; + try + DoExecute; Connector.CommitTransaction; except Connector.RollbackTransaction; *************** *** 708,711 **** --- 714,740 ---- end; + procedure TInstantDBBuildCommandSequence.Execute; + var + ConnState: Boolean; + begin + ConnState := Connector.Connected; + if not ConnState then + Connector.Connect; + + DoBeforeExecute; + + try + if Connector.DDLTransactionSupp then + DoExecuteInTransaction + else + DoExecute; + + DoAfterExecute; + finally + if not ConnState then + Connector.Disconnect; + end; + end; + function TInstantDBBuildCommandSequence.GetConnector: TInstantConnector; begin |