From: <sr...@us...> - 2006-08-09 01:04:02
|
Revision: 702 Author: srmitch Date: 2006-08-08 18:02:16 -0700 (Tue, 08 Aug 2006) ViewCVS: http://svn.sourceforge.net/instantobjects?rev=702&view=rev Log Message: ----------- - Merged Refactor_InstantPersistenceUnit branch changes r696:701 into the trunk. Modified Paths: -------------- trunk/Demos/Intro/Intro.dpr trunk/Demos/Intro/Intro.mdr trunk/Demos/PrimerCross/BasicBrowse.pas trunk/Demos/PrimerCross/BasicEdit.pas trunk/Demos/PrimerCross/BasicView.pas trunk/Demos/PrimerCross/CategoryBrowse.pas trunk/Demos/PrimerCross/CompanyBrowse.pas trunk/Demos/PrimerCross/CompanyEdit.pas trunk/Demos/PrimerCross/ContactBrowse.pas trunk/Demos/PrimerCross/ContactEdit.dfm trunk/Demos/PrimerCross/ContactEdit.pas trunk/Demos/PrimerCross/ContactFilterEdit.pas trunk/Demos/PrimerCross/ContactSort.pas trunk/Demos/PrimerCross/ContactView.dfm trunk/Demos/PrimerCross/ContactView.pas trunk/Demos/PrimerCross/CountryBrowse.pas trunk/Demos/PrimerCross/DemoData.pas trunk/Demos/PrimerCross/DemoDataRequest.pas trunk/Demos/PrimerCross/HelpView.pas trunk/Demos/PrimerCross/Main.pas trunk/Demos/PrimerCross/MainData.pas trunk/Demos/PrimerCross/PerformanceView.pas trunk/Demos/PrimerCross/PersonBrowse.pas trunk/Demos/PrimerCross/PersonEdit.pas trunk/Demos/PrimerCross/Primer.dpr trunk/Demos/PrimerCross/PrimerExternal.dpr trunk/Demos/PrimerCross/QueryView.pas trunk/Demos/PrimerCross/RandomData.pas trunk/Demos/PrimerCross/Stopwatch.pas trunk/Demos/PrimerCross/Utility.pas trunk/Demos/PrimerCross/Welcome.pas trunk/Source/Brokers/ADO/InstantADO.pas trunk/Source/Brokers/BDE/InstantBDE.pas trunk/Source/Brokers/BDE/InstantBDECatalog.pas trunk/Source/Brokers/BDE/InstantBDEConnectionDefEdit.pas trunk/Source/Brokers/DBX/InstantDBX.pas trunk/Source/Brokers/IBX/InstantIBX.pas trunk/Source/Brokers/IBX/InstantIBXConnectionDefEdit.pas trunk/Source/Brokers/NexusDb/InstantNexusDB.pas trunk/Source/Brokers/NexusDb/InstantNexusDBCatalog.pas trunk/Source/Brokers/NexusDb/InstantNexusDBConnectionDefEdit.pas trunk/Source/Brokers/XML/InstantXML.pas trunk/Source/Brokers/XML/InstantXMLCatalog.pas trunk/Source/Catalogs/IBFb/InstantIBFbCatalog.pas trunk/Source/Catalogs/MSSql/InstantMSSqlCatalog.pas trunk/Source/Core/D2006/IOCore.dpk trunk/Source/Core/D5/IOCore_D5.dpk trunk/Source/Core/D6/IOCore.dpk trunk/Source/Core/D7/IOCore.dpk trunk/Source/Core/InstantAccessors.pas trunk/Source/Core/InstantClasses.pas trunk/Source/Core/InstantCode.pas trunk/Source/Core/InstantCommand.pas trunk/Source/Core/InstantConnectionManager.pas trunk/Source/Core/InstantConnectionManagerFormUnit.pas trunk/Source/Core/InstantCustomDBEvolverFormUnit.pas trunk/Source/Core/InstantDBBuild.pas trunk/Source/Core/InstantDBEvolution.pas trunk/Source/Core/InstantExplorer.pas trunk/Source/Core/InstantPersistence.pas trunk/Source/Core/InstantPresentation.pas trunk/Source/Core/InstantPump.pas trunk/Source/Core/K3/IOCore.dpk trunk/Source/Design/InstantAttributeEditor.pas trunk/Source/Design/InstantClassEditor.pas trunk/Source/Design/InstantCommandEditor.pas trunk/Source/ObjectFoundry/OFClasses.pas trunk/Source/ObjectFoundry/OFExpert.pas trunk/Source/Tests/InstantMock.pas trunk/Source/Tests/MinimalModel.pas trunk/Source/Tests/TestIO.mdr trunk/Source/Tests/TestIO.mdx trunk/Source/Tests/TestInstantAttribute.pas trunk/Source/Tests/TestInstantAttributeMap.pas trunk/Source/Tests/TestInstantAttributeMetadata.pas trunk/Source/Tests/TestInstantClassMetadata.pas trunk/Source/Tests/TestInstantFieldMetadata.pas trunk/Source/Tests/TestInstantIndexMetadata.pas trunk/Source/Tests/TestInstantMetadata.pas trunk/Source/Tests/TestInstantObject.pas trunk/Source/Tests/TestInstantObjectStore.pas trunk/Source/Tests/TestInstantPart.pas trunk/Source/Tests/TestInstantParts.pas trunk/Source/Tests/TestInstantReference.pas trunk/Source/Tests/TestInstantReferences.pas trunk/Source/Tests/TestInstantScheme.pas trunk/Source/Tests/TestInstantTableMetadata.pas trunk/Source/Tests/TestMinimalModel.pas trunk/Source/Tests/TestMockBroker.pas Added Paths: ----------- trunk/Source/Core/InstantBrokers.pas trunk/Source/Core/InstantMetadata.pas trunk/Source/Core/InstantTypes.pas Modified: trunk/Demos/Intro/Intro.dpr =================================================================== --- trunk/Demos/Intro/Intro.dpr 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/Intro/Intro.dpr 2006-08-09 01:02:16 UTC (rev 702) @@ -2,8 +2,8 @@ uses Forms, + Model in 'Model.pas', Main in 'Main.pas' {MainForm}, - Model in 'Model.pas', ContactEdit in 'ContactEdit.pas' {ContactEditForm}, PersonEdit in 'PersonEdit.pas' {PersonEditForm}, CompanyEdit in 'CompanyEdit.pas' {CompanyEditForm}; Modified: trunk/Demos/Intro/Intro.mdr =================================================================== (Binary files differ) Modified: trunk/Demos/PrimerCross/BasicBrowse.pas =================================================================== --- trunk/Demos/PrimerCross/BasicBrowse.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/BasicBrowse.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -1,7 +1,13 @@ unit BasicBrowse; interface -{$IFDEF VER130}{$DEFINE MSWINDOWS}{$ENDIF} + +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + uses SysUtils, Classes, DB, {$IFDEF MSWINDOWS} Modified: trunk/Demos/PrimerCross/BasicEdit.pas =================================================================== --- trunk/Demos/PrimerCross/BasicEdit.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/BasicEdit.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -1,7 +1,13 @@ unit BasicEdit; interface -{$IFDEF VER130}{$DEFINE MSWINDOWS}{$ENDIF} + +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + uses SysUtils, Classes, DB, {$IFDEF MSWINDOWS} Modified: trunk/Demos/PrimerCross/BasicView.pas =================================================================== --- trunk/Demos/PrimerCross/BasicView.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/BasicView.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -2,7 +2,11 @@ interface -{$IFDEF VER130}{$DEFINE MSWINDOWS}{$ENDIF} +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} uses SysUtils, Classes, Modified: trunk/Demos/PrimerCross/CategoryBrowse.pas =================================================================== --- trunk/Demos/PrimerCross/CategoryBrowse.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/CategoryBrowse.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -2,6 +2,12 @@ interface +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + uses SysUtils, Classes, {$IFDEF MSWINDOWS} Modified: trunk/Demos/PrimerCross/CompanyBrowse.pas =================================================================== --- trunk/Demos/PrimerCross/CompanyBrowse.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/CompanyBrowse.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -2,6 +2,12 @@ interface +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + uses SysUtils, Classes, {$IFDEF MSWINDOWS} Modified: trunk/Demos/PrimerCross/CompanyEdit.pas =================================================================== --- trunk/Demos/PrimerCross/CompanyEdit.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/CompanyEdit.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -1,7 +1,13 @@ unit CompanyEdit; interface -{$IFDEF VER130}{$DEFINE MSWINDOWS}{$ENDIF} + +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + uses SysUtils, Classes, {$IFDEF MSWINDOWS} Modified: trunk/Demos/PrimerCross/ContactBrowse.pas =================================================================== --- trunk/Demos/PrimerCross/ContactBrowse.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/ContactBrowse.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -2,6 +2,12 @@ interface +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + uses SysUtils, Classes, {$IFDEF MSWINDOWS} Modified: trunk/Demos/PrimerCross/ContactEdit.dfm =================================================================== --- trunk/Demos/PrimerCross/ContactEdit.dfm 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/ContactEdit.dfm 2006-08-09 01:02:16 UTC (rev 702) @@ -197,7 +197,6 @@ end end object PhonesExposer: TInstantExposer [2] - Options = [] ContainerName = 'Phones' MasterSource = SubjectSource Mode = amContent Modified: trunk/Demos/PrimerCross/ContactEdit.pas =================================================================== --- trunk/Demos/PrimerCross/ContactEdit.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/ContactEdit.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -1,7 +1,13 @@ unit ContactEdit; interface -{$IFDEF VER130}{$DEFINE MSWINDOWS}{$ENDIF} + +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + uses SysUtils, Classes, {$IFDEF MSWINDOWS} Modified: trunk/Demos/PrimerCross/ContactFilterEdit.pas =================================================================== --- trunk/Demos/PrimerCross/ContactFilterEdit.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/ContactFilterEdit.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -1,7 +1,13 @@ unit ContactFilterEdit; interface -{$IFDEF VER130}{$DEFINE MSWINDOWS}{$ENDIF} + +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + uses SysUtils, Classes, {$IFDEF MSWINDOWS} Modified: trunk/Demos/PrimerCross/ContactSort.pas =================================================================== --- trunk/Demos/PrimerCross/ContactSort.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/ContactSort.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -1,7 +1,13 @@ unit ContactSort; interface -{$IFDEF VER130}{$DEFINE MSWINDOWS}{$ENDIF} + +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + uses SysUtils, Classes, {$IFDEF MSWINDOWS} @@ -40,7 +46,8 @@ implementation uses - Model, TypInfo, InstantRtti, InstantPresentation; + Model, TypInfo, InstantRtti, InstantPresentation, InstantMetadata, + InstantTypes; {$R *.dfm} Modified: trunk/Demos/PrimerCross/ContactView.dfm =================================================================== --- trunk/Demos/PrimerCross/ContactView.dfm 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/ContactView.dfm 2006-08-09 01:02:16 UTC (rev 702) @@ -70,8 +70,6 @@ Height = 28 Align = alLeft BorderWidth = 1 - EdgeBorders = [] - Flat = True Images = ActionImages ParentShowHint = False ShowHint = True Modified: trunk/Demos/PrimerCross/ContactView.pas =================================================================== --- trunk/Demos/PrimerCross/ContactView.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/ContactView.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -1,11 +1,11 @@ unit ContactView; interface -{$IFDEF VER130}{$DEFINE MSWINDOWS}{$ENDIF} -{$IFDEF VER150} -{$WARN UNSAFE_TYPE OFF} -{$WARN UNSAFE_CAST OFF} -{$WARN UNSAFE_CODE OFF} + +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} {$ENDIF} uses Modified: trunk/Demos/PrimerCross/CountryBrowse.pas =================================================================== --- trunk/Demos/PrimerCross/CountryBrowse.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/CountryBrowse.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -2,6 +2,12 @@ interface +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + uses SysUtils, Classes, BasicBrowse, DB, {$IFDEF MSWINDOWS} Modified: trunk/Demos/PrimerCross/DemoData.pas =================================================================== --- trunk/Demos/PrimerCross/DemoData.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/DemoData.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -2,6 +2,12 @@ interface +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + uses Classes, Model, InstantPersistence, RandomData; Modified: trunk/Demos/PrimerCross/DemoDataRequest.pas =================================================================== --- trunk/Demos/PrimerCross/DemoDataRequest.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/DemoDataRequest.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -1,7 +1,13 @@ unit DemoDataRequest; interface -{$IFDEF VER130}{$DEFINE MSWINDOWS}{$ENDIF} + +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + uses SysUtils, {$IFDEF MSWINDOWS} Modified: trunk/Demos/PrimerCross/HelpView.pas =================================================================== --- trunk/Demos/PrimerCross/HelpView.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/HelpView.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -2,6 +2,12 @@ interface +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, BasicView, OleCtrls, SHDocVw, StdCtrls, ExtCtrls, ComCtrls; Modified: trunk/Demos/PrimerCross/Main.pas =================================================================== --- trunk/Demos/PrimerCross/Main.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/Main.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -1,11 +1,11 @@ unit Main; interface -{$IFDEF VER130}{$DEFINE MSWINDOWS}{$ENDIF} -{$IFDEF VER150} -{$WARN UNSAFE_TYPE OFF} -{$WARN UNSAFE_CAST OFF} -{$WARN UNSAFE_CODE OFF} + +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} {$ENDIF} uses @@ -108,7 +108,8 @@ procedure Connect; procedure Disconnect; procedure Reset; - property ActiveSubView: TBasicViewForm read FActiveSubView write SetActiveSubView; + property ActiveSubView: TBasicViewForm read FActiveSubView + write SetActiveSubView; property Connector: TInstantConnector read FConnector; property ConnectionName: string read GetConnectionName; property IsConnected: Boolean read GetIsConnected; @@ -124,7 +125,8 @@ implementation uses - Contnrs, Model, Welcome, MainData, RandomData, DemoData, Utility, ContactView, PerformanceView, + Contnrs, Model, Welcome, MainData, RandomData, DemoData, Utility, ContactView, + PerformanceView, {$IFDEF MSWINDOWS} HelpView, JPeg, {$ENDIF} @@ -132,7 +134,7 @@ HelpViewK3, {$ENDIF} DemoDataRequest, InstantPresentation, InstantClasses, - QueryView, InstantImageUtils, + QueryView, InstantImageUtils, InstantTypes, { Note: This demo attempts to include brokers for the data access layers supported natively by Delphi. To include additional brokers, Modified: trunk/Demos/PrimerCross/MainData.pas =================================================================== --- trunk/Demos/PrimerCross/MainData.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/MainData.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -1,7 +1,13 @@ unit MainData; interface -{$IFDEF VER130}{$DEFINE MSWINDOWS}{$ENDIF} + +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + uses SysUtils, Classes, {$IFDEF MSWINDOWS} Modified: trunk/Demos/PrimerCross/PerformanceView.pas =================================================================== --- trunk/Demos/PrimerCross/PerformanceView.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/PerformanceView.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -1,11 +1,11 @@ unit PerformanceView; interface -{$IFDEF VER130}{$DEFINE MSWINDOWS}{$ENDIF} -{$IFDEF VER150} -{$WARN UNSAFE_TYPE OFF} -{$WARN UNSAFE_CAST OFF} -{$WARN UNSAFE_CODE OFF} + +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} {$ENDIF} uses @@ -173,7 +173,7 @@ {$R *.dfm} uses - Model, DemoData, IniFiles, Utility; + InstantBrokers, Model, DemoData, IniFiles, Utility; { TTestResult } Modified: trunk/Demos/PrimerCross/PersonBrowse.pas =================================================================== --- trunk/Demos/PrimerCross/PersonBrowse.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/PersonBrowse.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -2,6 +2,12 @@ interface +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + uses SysUtils, Classes, {$IFDEF MSWINDOWS} Modified: trunk/Demos/PrimerCross/PersonEdit.pas =================================================================== --- trunk/Demos/PrimerCross/PersonEdit.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/PersonEdit.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -1,7 +1,13 @@ unit PersonEdit; interface -{$IFDEF VER130}{$DEFINE MSWINDOWS}{$ENDIF} + +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + uses SysUtils, Classes, {$IFDEF MSWINDOWS} Modified: trunk/Demos/PrimerCross/Primer.dpr =================================================================== --- trunk/Demos/PrimerCross/Primer.dpr 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/Primer.dpr 2006-08-09 01:02:16 UTC (rev 702) @@ -32,8 +32,13 @@ program Primer; +{$IFDEF LINUX} {$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + uses Forms, Main in 'Main.pas' {MainForm}, Modified: trunk/Demos/PrimerCross/PrimerExternal.dpr =================================================================== --- trunk/Demos/PrimerCross/PrimerExternal.dpr 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/PrimerExternal.dpr 2006-08-09 01:02:16 UTC (rev 702) @@ -31,8 +31,13 @@ program PrimerExternal; -{$I '../../InstantDefines.inc'} +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + uses Forms, Main in 'Main.pas' {MainForm}, Modified: trunk/Demos/PrimerCross/QueryView.pas =================================================================== --- trunk/Demos/PrimerCross/QueryView.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/QueryView.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -1,7 +1,13 @@ unit QueryView; interface -{$IFDEF VER130}{$DEFINE MSWINDOWS}{$ENDIF} + +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + uses SysUtils, Classes, {$IFDEF MSWINDOWS} Modified: trunk/Demos/PrimerCross/RandomData.pas =================================================================== --- trunk/Demos/PrimerCross/RandomData.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/RandomData.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -2,10 +2,10 @@ interface -{$IFDEF VER150} -{$WARN UNSAFE_TYPE OFF} -{$WARN UNSAFE_CAST OFF} -{$WARN UNSAFE_CODE OFF} +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} {$ENDIF} type Modified: trunk/Demos/PrimerCross/Stopwatch.pas =================================================================== --- trunk/Demos/PrimerCross/Stopwatch.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/Stopwatch.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -2,7 +2,11 @@ interface -{$IFDEF VER130}{$DEFINE MSWINDOWS}{$ENDIF} +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} uses SysUtils, Modified: trunk/Demos/PrimerCross/Utility.pas =================================================================== --- trunk/Demos/PrimerCross/Utility.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/Utility.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -1,7 +1,13 @@ unit Utility; interface -{$IFDEF VER130}{$DEFINE MSWINDOWS}{$ENDIF} + +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} +{$ENDIF} + procedure BeginBusy; procedure EndBusy; function Confirm(const Text: string): Boolean; Modified: trunk/Demos/PrimerCross/Welcome.pas =================================================================== --- trunk/Demos/PrimerCross/Welcome.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Demos/PrimerCross/Welcome.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -1,9 +1,11 @@ unit Welcome; interface -{$IFDEF VER130}{$DEFINE MSWINDOWS}{$ENDIF} -{$IFDEF VER150} -{$WARN UNSAFE_TYPE OFF} + +{$IFDEF LINUX} +{$I '../../Source/InstantDefines.inc'} +{$ELSE} +{$I '..\..\Source\InstantDefines.inc'} {$ENDIF} uses Modified: trunk/Source/Brokers/ADO/InstantADO.pas =================================================================== --- trunk/Source/Brokers/ADO/InstantADO.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Source/Brokers/ADO/InstantADO.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -40,7 +40,7 @@ uses Classes, Db, ADODB, SysUtils, InstantPersistence, InstantClasses, - InstantCommand; + InstantCommand, InstantBrokers, InstantMetadata, InstantTypes; type TInstantADOProviderType = (ptUnknown, ptMSJet, ptMSSQLServer, ptOracle, ptMySQL, ptIBMDB2); Modified: trunk/Source/Brokers/BDE/InstantBDE.pas =================================================================== --- trunk/Source/Brokers/BDE/InstantBDE.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Source/Brokers/BDE/InstantBDE.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -44,7 +44,7 @@ uses Classes, Db, DBTables, SysUtils, InstantPersistence, InstantCommand, - InstantConsts; + InstantBrokers, InstantMetadata, InstantTypes, InstantConsts; type TInstantBDEDriverType = (dtUnknown, dtStandard, dtInterBase, dtMSAccess, Modified: trunk/Source/Brokers/BDE/InstantBDECatalog.pas =================================================================== --- trunk/Source/Brokers/BDE/InstantBDECatalog.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Source/Brokers/BDE/InstantBDECatalog.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -38,7 +38,8 @@ interface uses - InstantPersistence, DB, DBTables; + InstantPersistence, DB, DBTables, InstantMetadata, InstantBrokers, + InstantTypes; type // A TInstantCatalog that reads catalog information from a BDE Modified: trunk/Source/Brokers/BDE/InstantBDEConnectionDefEdit.pas =================================================================== --- trunk/Source/Brokers/BDE/InstantBDEConnectionDefEdit.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Source/Brokers/BDE/InstantBDEConnectionDefEdit.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -40,7 +40,7 @@ uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - InstantBDE, StdCtrls, ExtCtrls; + InstantBDE, StdCtrls, ExtCtrls, InstantMetadata; type TInstantBDEConnectionDefEditForm = class(TForm) @@ -84,7 +84,7 @@ {$R *.DFM} uses - DbTables, InstantPersistence, InstantClasses, InstantConsts; + DbTables, InstantPersistence, InstantClasses, InstantTypes, InstantConsts; const NoAlias = '(None)'; Modified: trunk/Source/Brokers/DBX/InstantDBX.pas =================================================================== --- trunk/Source/Brokers/DBX/InstantDBX.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Source/Brokers/DBX/InstantDBX.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -45,7 +45,8 @@ {$IFDEF LINUX} QControls, {$ENDIF} - Classes, DB, DBXpress, SqlExpr, InstantPersistence, InstantCommand; + Classes, DB, DBXpress, SqlExpr, InstantPersistence, InstantCommand, + InstantBrokers, InstantMetadata, InstantTypes; type TInstantDBXConnectionDef = class(TInstantConnectionBasedConnectionDef) Modified: trunk/Source/Brokers/IBX/InstantIBX.pas =================================================================== --- trunk/Source/Brokers/IBX/InstantIBX.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Source/Brokers/IBX/InstantIBX.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -40,7 +40,7 @@ uses Classes, Db, IBDatabase, IBTable, IBQuery, SysUtils, InstantPersistence, - InstantClasses, InstantCommand; + InstantBrokers, InstantClasses, InstantCommand, InstantMetadata, InstantTypes; type TInstantIBXOption = (ibxUseDelimitedIdents); Modified: trunk/Source/Brokers/IBX/InstantIBXConnectionDefEdit.pas =================================================================== --- trunk/Source/Brokers/IBX/InstantIBXConnectionDefEdit.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Source/Brokers/IBX/InstantIBXConnectionDefEdit.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -89,7 +89,7 @@ {$R *.DFM} uses - IB, InstantPersistence, InstantClasses, InstantConsts; + IB, InstantPersistence, InstantClasses, InstantTypes, InstantConsts; { TInstantIBXConnectionDefEditForm } Modified: trunk/Source/Brokers/NexusDb/InstantNexusDB.pas =================================================================== --- trunk/Source/Brokers/NexusDb/InstantNexusDB.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Source/Brokers/NexusDb/InstantNexusDB.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -43,7 +43,8 @@ {$IFDEF MSWINDOWS} Windows, {$ENDIF} - Classes, DB, InstantPersistence, InstantCommand, + Classes, DB, InstantPersistence, InstantBrokers, InstantCommand, + InstantMetadata, InstantTypes, nxptBasePooledTransport, nxsdServerEngine, nxdb, nxsdDataDictionary; type @@ -842,7 +843,7 @@ end; {$ENDIF} -{ TInstantNexusDBSQLQuery } +{ TInstantNexusDBQuery } class function TInstantNexusDBQuery.TranslatorClass: TInstantRelationalTranslatorClass; Modified: trunk/Source/Brokers/NexusDb/InstantNexusDBCatalog.pas =================================================================== --- trunk/Source/Brokers/NexusDb/InstantNexusDBCatalog.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Source/Brokers/NexusDb/InstantNexusDBCatalog.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -39,7 +39,7 @@ interface uses - InstantPersistence; + InstantPersistence, InstantBrokers, InstantMetadata, InstantTypes; type // A TInstantCatalog that reads catalog information from a NexusDb Modified: trunk/Source/Brokers/NexusDb/InstantNexusDBConnectionDefEdit.pas =================================================================== --- trunk/Source/Brokers/NexusDb/InstantNexusDBConnectionDefEdit.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Source/Brokers/NexusDb/InstantNexusDBConnectionDefEdit.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -124,9 +124,7 @@ {$WARN UNIT_PLATFORM ON} {$ENDIF} {$ENDIF} - InstantClasses, - InstantPersistence, - InstantConsts, + InstantClasses, InstantPersistence, InstantTypes, InstantConsts, InstantNexusDBConsts; { TInstantNexusDBConnectionDefEditForm } Modified: trunk/Source/Brokers/XML/InstantXML.pas =================================================================== --- trunk/Source/Brokers/XML/InstantXML.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Source/Brokers/XML/InstantXML.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -42,7 +42,8 @@ interface uses - Classes, DB, InstantPersistence, InstantCommand, Contnrs; + Classes, DB, Contnrs, InstantPersistence, InstantBrokers, InstantCommand, + InstantMetadata, InstantTypes; const XML_UTF8_HEADER = '<?xml version="1.0" encoding="UTF-8"?>'; Modified: trunk/Source/Brokers/XML/InstantXMLCatalog.pas =================================================================== --- trunk/Source/Brokers/XML/InstantXMLCatalog.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Source/Brokers/XML/InstantXMLCatalog.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -45,7 +45,7 @@ {$IFDEF MSWINDOWS} FileCtrl, {$ENDIF} - InstantPersistence; + InstantPersistence, InstantBrokers, InstantMetadata, InstantTypes; type // A TInstantCatalog that reads catalog information from a XML Modified: trunk/Source/Catalogs/IBFb/InstantIBFbCatalog.pas =================================================================== --- trunk/Source/Catalogs/IBFb/InstantIBFbCatalog.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Source/Catalogs/IBFb/InstantIBFbCatalog.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -39,7 +39,7 @@ interface uses - InstantPersistence; + InstantPersistence, InstantBrokers, InstantMetadata, InstantTypes; type // A TInstantCatalog that reads catalog information from an InterBase Modified: trunk/Source/Catalogs/MSSql/InstantMSSqlCatalog.pas =================================================================== --- trunk/Source/Catalogs/MSSql/InstantMSSqlCatalog.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Source/Catalogs/MSSql/InstantMSSqlCatalog.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -38,7 +38,7 @@ interface uses - InstantPersistence; + InstantPersistence, InstantBrokers, InstantMetadata, InstantTypes; type // A TInstantCatalog that reads catalog information from an MS-SQL server database. Modified: trunk/Source/Core/D2006/IOCore.dpk =================================================================== --- trunk/Source/Core/D2006/IOCore.dpk 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Source/Core/D2006/IOCore.dpk 2006-08-09 01:02:16 UTC (rev 702) @@ -54,6 +54,9 @@ InstantDBEvolution in '..\InstantDBEvolution.pas', InstantCustomDBEvolverFormUnit in '..\InstantCustomDBEvolverFormUnit.pas' {InstantCustomDBEvolverForm}, InstantDBEvolverFormUnit in '..\InstantDBEvolverFormUnit.pas' {InstantDBEvolverForm}, - InstantDBBuilderFormUnit in '..\InstantDBBuilderFormUnit.pas' {InstantDBBuilderForm}; + InstantDBBuilderFormUnit in '..\InstantDBBuilderFormUnit.pas' {InstantDBBuilderForm}, + InstantTypes in '..\InstantTypes.pas', + InstantBrokers in '..\InstantBrokers.pas', + InstantMetadata in '..\InstantMetadata.pas'; end. Modified: trunk/Source/Core/D5/IOCore_D5.dpk =================================================================== --- trunk/Source/Core/D5/IOCore_D5.dpk 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Source/Core/D5/IOCore_D5.dpk 2006-08-09 01:02:16 UTC (rev 702) @@ -52,6 +52,9 @@ InstantCustomDBEvolverFormUnit in '..\InstantCustomDBEvolverFormUnit.pas' {InstantCustomDBEvolverForm}, InstantDBEvolverFormUnit in '..\InstantDBEvolverFormUnit.pas' {InstantDBEvolverForm}, InstantDBEvolution in '..\InstantDBEvolution.pas', - InstantDBBuild in '..\InstantDBBuild.pas'; + InstantDBBuild in '..\InstantDBBuild.pas', + InstantTypes in '..\InstantTypes.pas', + InstantBrokers in '..\InstantBrokers.pas', + InstantMetadata in '..\InstantMetadata.pas'; end. Modified: trunk/Source/Core/D6/IOCore.dpk =================================================================== --- trunk/Source/Core/D6/IOCore.dpk 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Source/Core/D6/IOCore.dpk 2006-08-09 01:02:16 UTC (rev 702) @@ -54,6 +54,9 @@ InstantConnectionManagerFormUnit in '..\InstantConnectionManagerFormUnit.pas' {InstantConnectionManagerForm}, InstantCustomDBEvolverFormUnit in '..\InstantCustomDBEvolverFormUnit.pas' {InstantCustomDBEvolverForm}, InstantDBBuilderFormUnit in '..\InstantDBBuilderFormUnit.pas' {InstantDBBuilderForm}, - InstantDBEvolverFormUnit in '..\InstantDBEvolverFormUnit.pas' {InstantDBEvolverForm}; + InstantDBEvolverFormUnit in '..\InstantDBEvolverFormUnit.pas' {InstantDBEvolverForm}, + InstantTypes in '..\InstantTypes.pas', + InstantBrokers in '..\InstantBrokers.pas', + InstantMetadata in '..\InstantMetadata.pas'; end. Modified: trunk/Source/Core/D7/IOCore.dpk =================================================================== --- trunk/Source/Core/D7/IOCore.dpk 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Source/Core/D7/IOCore.dpk 2006-08-09 01:02:16 UTC (rev 702) @@ -55,6 +55,9 @@ InstantDBEvolution in '..\InstantDBEvolution.pas', InstantCustomDBEvolverFormUnit in '..\InstantCustomDBEvolverFormUnit.pas' {InstantCustomDBEvolverForm}, InstantDBEvolverFormUnit in '..\InstantDBEvolverFormUnit.pas' {InstantDBEvolverForm}, - InstantDBBuilderFormUnit in '..\InstantDBBuilderFormUnit.pas' {InstantDBBuilderForm}; + InstantDBBuilderFormUnit in '..\InstantDBBuilderFormUnit.pas' {InstantDBBuilderForm}, + InstantTypes in '..\InstantTypes.pas', + InstantBrokers in '..\InstantBrokers.pas', + InstantMetadata in '..\InstantMetadata.pas'; end. Modified: trunk/Source/Core/InstantAccessors.pas =================================================================== --- trunk/Source/Core/InstantAccessors.pas 2006-08-09 00:04:12 UTC (rev 701) +++ trunk/Source/Core/InstantAccessors.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -158,6 +158,7 @@ else Result := InternalObjectCount; end; + function TInstantObjectAccessor.GetSubject: TInstantObject; begin Result := inherited Subject as TInstantObject; Copied: trunk/Source/Core/InstantBrokers.pas (from rev 701, branches/Refactor_InstantPersistenceUnit/Source/Core/InstantBrokers.pas) =================================================================== --- trunk/Source/Core/InstantBrokers.pas (rev 0) +++ trunk/Source/Core/InstantBrokers.pas 2006-08-09 01:02:16 UTC (rev 702) @@ -0,0 +1,5954 @@ +(* + * InstantObjects + * Broker and Connector Classes + *) + +(* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is: Seleqt InstantObjects + * + * The Initial Developer of the Original Code is: Seleqt + * + * Portions created by the Initial Developer are Copyright (C) 2001-2003 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Carlo Barazzetta, Andrea Petrelli, Nando Dessena, Steven Mitchell, + * Joao Morais, Cesar Coll, Uberto Barbini, David Taylor, Hanedi Salas, + * Riceball Lee, David Moorhouse + * + * ***** END LICENSE BLOCK ***** *) + +unit InstantBrokers; + +{$IFDEF LINUX} +{$I '../InstantDefines.inc'} +{$ELSE} +{$I '..\InstantDefines.inc'} +{$ENDIF} + +interface + +uses SysUtils, Classes, Db, InstantPersistence, InstantTypes, InstantMetadata, + InstantConsts, InstantClasses, Contnrs, InstantCommand; + +type + TInstantBrokerCatalog = class; + TInstantConnectionBasedConnector = class; + TInstantCustomRelationalBroker = class; + TInstantCustomRelationalQuery = class; + TInstantCustomRelationalQueryClass = class of TInstantCustomRelationalQuery; + TInstantCustomResolver = class; + TInstantLinkResolver = class; + TInstantNavigationalBroker = class; + TInstantNavigationalLinkResolver = class; + TInstantNavigationalResolver = class; + TInstantNavigationalResolverClass = class of TInstantNavigationalResolver; + TInstantRelationalConnector = class; + TInstantRelationalTranslator = class; + TInstantRelationalTranslatorClass = class of TInstantRelationalTranslator; + TInstantSQLBroker = class; + TInstantSQLBrokerCatalog = class; + TInstantSQLGenerator = class; + TInstantSQLGeneratorClass = class of TInstantSQLGenerator; + TInstantSQLLinkResolver = class; + TInstantSQLResolver = class; + TInstantStatementCache = class; + + PObjectRow = ^TObjectRow; + TObjectRow = record + Row: Integer; + Instance: TObject; + end; + + PInstantOperationInfo = ^TInstantOperationInfo; + TInstantOperationInfo = record + Success: Boolean; + Conflict: Boolean; + end; + + TInstantBrokerOperation = procedure(AObject: TInstantObject; + const AObjectId: string; Map: TInstantAttributeMap; + ConflictAction: TInstantConflictAction = caFail; + Info: PInstantOperationInfo = nil) of object; + TInstantGetDataSetEvent = procedure(Sender: TObject; + const CommandText: string; var DataSet: TDataset) of object; + TInstantInitDataSetEvent = procedure(Sender: TObject; + const CommandText: string; DataSet: TDataSet) of object; + TInstantNavigationalResolverOperation = procedure(AObject: TInstantObject; + AttributeMetadata: TInstantAttributeMetadata) of object; + + + TInstantCustomRelationalBroker = class(TInstantBroker) + private + FStatementCache: TInstantStatementCache; + FStatementCacheCapacity: Integer; + procedure DisposeMap(AObject: TInstantObject; const AObjectId: string; + Map: TInstantAttributeMap; ConflictAction: TInstantConflictAction; + Info: PInstantOperationInfo); + function GetConnector: TInstantRelationalConnector; + function PerformOperation(AObject: TInstantObject; const AObjectId: string; + OperationType: TInstantOperationType; Operation: TInstantBrokerOperation; + ConflictAction: TInstantConflictAction): Boolean; + procedure RetrieveMap(AObject: TInstantObject; const AObjectId: string; + Map: TInstantAttributeMap; ConflictAction: TInstantConflictAction; + Info: PInstantOperationInfo); + procedure StoreMap(AObject: TInstantObject; const AObjectId: string; + Map: TInstantAttributeMap; ConflictAction: TInstantConflictAction; + Info: PInstantOperationInfo); + function GetStatementCache: TInstantStatementCache; + procedure SetStatementCacheCapacity(const Value: Integer); + protected + property StatementCache: TInstantStatementCache read GetStatementCache; + function EnsureResolver(Map: TInstantAttributeMap): TInstantCustomResolver; + virtual; abstract; + function GetDBMSName: string; virtual; + function GetSQLDelimiters: string; virtual; + function GetSQLQuote: Char; virtual; + function GetSQLWildcard: string; virtual; + function InternalDisposeObject(AObject: TInstantObject; + ConflictAction: TInstantConflictAction): Boolean; override; + function InternalRetrieveObject(AObject: TInstantObject; + const AObjectId: string; ConflictAction: TInstantConflictAction): Boolean; + override; + function InternalStoreObject(AObject: TInstantObject; + ConflictAction: TInstantConflictAction): Boolean; override; + public + constructor Create(AConnector: TInstantConnector); override; + destructor Destroy; override; + function Execute(const AStatement: string; AParams: TParams = nil): Integer; + virtual; + property Connector: TInstantRelationalConnector read GetConnector; + property DBMSName: string read GetDBMSName; + property SQLDelimiters: string read GetSQLDelimiters; + property SQLQuote: Char read GetSQLQuote; + property SQLWildcard: string read GetSQLWildCard; + property StatementCacheCapacity: Integer read FStatementCacheCapacity + write SetStatementCacheCapacity; + end; + + TInstantNavigationalBroker = class(TInstantCustomRelationalBroker) + private + FResolverList: TObjectList; + function GetResolverCount: Integer; + function GetResolverList: TObjectList; + function GetResolvers(Index: Integer): TInstantnavigationalResolver; + property ResolverList: TObjectList read GetResolverList; + protected + function CreateResolver(const TableName: string): + TInstantNavigationalResolver; virtual; abstract; + function EnsureResolver(Map: TInstantAttributeMap): TInstantCustomResolver; + override; + function FindResolver(const TableName: string): + TInstantNavigationalResolver; + property ResolverCount: Integer read GetResolverCount; + property Resolvers[Index: Integer]: TInstantNavigationalResolver + read GetResolvers; + public + destructor Destroy; override; + end; + + //Backwards compatibility + TInstantRelationalBroker = TInstantNavigationalBroker; + + TInstantSQLBroker = class(TInstantCustomRelationalBroker) + private + FGenerator: TInstantSQLGenerator; + FResolverList: TObjectList; + function GetResolverList: TObjectList; + function GetResolverCount: Integer; + function GetResolvers(Index: Integer): TInstantSQLResolver; + function GetGenerator: TInstantSQLGenerator; + protected + function CreateResolver(Map: TInstantAttributeMap): TInstantSQLResolver; + virtual; abstract; + function EnsureResolver(AMap: TInstantAttributeMap): TInstantCustomResolver; + override; + procedure InternalBuildDatabase(Scheme: TInstantScheme); override; + property ResolverList: TObjectList read GetResolverList; + procedure AssignDataSetParams(DataSet : TDataSet; AParams: TParams); + virtual; + function CreateDataSet(const AStatement: string; AParams: TParams = nil): + TDataSet; virtual; abstract; + public + destructor Destroy; override; + function AcquireDataSet(const AStatement: string; AParams: TParams = nil): + TDataSet; virtual; + procedure ReleaseDataSet(const ADataSet: TDataSet); virtual; + function DataTypeToColumnType(DataType: TInstantDataType; + Size: Integer): string; virtual; abstract; + function FindResolver(AMap: TInstantAttributeMap): TInstantSQLResolver; + class function GeneratorClass: TInstantSQLGeneratorClass; virtual; + property Generator: TInstantSQLGenerator read GetGenerator; + property ResolverCount: Integer read GetResolverCount; + property Resolvers[Index: Integer]: TInstantSQLResolver read GetResolvers; + end; + + TInstantRelationalConnector = class(TInstantConnector) + private + FOnGetDataSet: TInstantGetDataSetEvent; + FOnInitDataSet: TInstantInitDataSetEvent; + protected + procedure DoGetDataSet(const CommandText: string; var DataSet: TDataSet); + procedure DoInitDataSet(const CommandText: string; DataSet: TDataSet); + function GetBroker: TInstantCustomRelationalBroker; + procedure GetDataSet(const CommandText: string; var DataSet: TDataSet); + virtual; + function GetDBMSName: string; virtual; + procedure InitDataSet(const CommandText: string; DataSet: TDataSet); + virtual; + function InternalCreateScheme(Model: TInstantModel): TInstantScheme; + override; + public + property Broker: TInstantCustomRelationalBroker read GetBroker; + property DBMSName: string read GetDBMSName; + published + property OnGetDataSet: TInstantGetDataSetEvent read FOnGetDataSet + write FOnGetDataSet; + property OnInitDataSet: TInstantInitDataSetEvent read FOnInitDataSet + write FOnInitDataSet; + end; + + TInstantConnectionBasedConnector = class(TInstantRelationalConnector) + private + FConnection: TCustomConnection; + FLoginPrompt: Boolean; + procedure DoAfterConnectionChange; + procedure DoBeforeConnectionChange; + function GetConnection: TCustomConnection; + function GetLoginPrompt: Boolean; + procedure SetConnection(Value: TCustomConnection); + procedure SetLoginPrompt(const Value: Boolean); + protected + procedure AssignLoginOptions; virtual; + procedure AfterConnectionChange; virtual; + procedure BeforeConnectionChange; virtual; + procedure CheckConnection; + function GetConnected: Boolean; override; + procedure InternalConnect; override; + procedure InternalDisconnect; override; + procedure Notification(AComponent: TComponent; Operation: TOperation); + override; + public + property Connection: TCustomConnection read GetConnection + write SetConnection; + function HasConnection: Boolean; + constructor Create(AOwner: TComponent); override; + published + property LoginPrompt: Boolean read GetLoginPrompt write SetLoginPrompt + default True; + end; + + TInstantCustomResolver = class(TInstantStreamable) + private + FBroker: TInstantCustomRelationalBroker; + protected + function KeyViolation(AObject: TInstantObject; const AObjectId: string; + E: Exception): EInstantKeyViolation; + procedure InternalDisposeMap(AObject: TInstantObject; + Map: TInstantAttributeMap; ConflictAction: TInstantConflictAction; + Info: PInstantOperationInfo); virtual; + procedure InternalRetrieveMap(AObject: TInstantObject; + const AObjectId: string; Map: TInstantAttributeMap; + ConflictAction: TInstantConflictAction; Info: PInstantOperationInfo); + virtual; + procedure InternalStoreMap(AObject: TInstantObject; + Map: TInstantAttributeMap; ConflictAction: TInstantConflictAction; + Info: PInstantOperationInfo); virtual; + public + constructor Create(ABroker: TInstantCustomRelationalBroker); + procedure DisposeMap(AObject: TInstantObject; Map: TInstantAttributeMap; + ConflictAction: TInstantConflictAction; Info: PInstantOperationInfo); + procedure DisposeObject(AObject: TInstantObject; Conflict: + TInstantConflictAction); + procedure RetrieveMap(AObject: TInstantObject; const AObjectId: string; + Map: TInstantAttributeMap; ConflictAction: TInstantConflictAction; + Info: PInstantOperationInfo); + procedure StoreMap(AObject: TInstantObject; Map: TInstantAttributeMap; + ConflictAction: TInstantConflictAction; Info: PInstantOperationInfo); + procedure StoreObject(AObject: TInstantObject; Conflict: + TInstantConflictAction); + property Broker: TInstantCustomRelationalBroker read FBroker; + end; + + TInstantNavigationalResolver = class(TInstantCustomResolver) + private + FDataSet: TDataSet; + FFreeDataSet: Boolean; + FNavigationalLinkResolvers: TObjectList; + FTableName: string; + function CheckConflict(AObject: TInstantObject; const AObjectId: string; + ConflictAction: TInstantConflictAction): Boolean; + procedure ClearAttribute(AObject: TInstantObject; + AttributeMetadata: TInstantAttributeMetadata); + function FieldByName(const FieldName: string): TField; + procedure FreeDataSet; + function GetBroker: TInstantNavigationalBroker; + function GetDataSet: TDataSet; + function GetNavigationalLinkResolvers: TObjectList; + function GetObjectClassName: string; + function GetObjectId: string; + procedure PerformOperation(AObject: TInstantObject; + Map: TInstantAttributeMap; Operation: + TInstantNavigationalResolverOperation); + procedure ReadAttribute(AObject: TInstantObject; + AttributeMetadata: TInstantAttributeMetadata); + procedure ResetAttribute(AObject: TInstantObject; + AttributeMetadata: TInstantAttributeMetadata); + procedure SetDataSet(Value: TDataset); + procedure WriteAttribute(AObject: TInstantObject; + AttributeMetadata: TInstantAttributeMetadata); + protected + procedure Append; virtual; + procedure Cancel; virtual; + procedure ClearBlob(Attribute: TInstantBlob); virtual; + procedure ClearBoolean(Attribute: TInstantBoolean); virtual; + procedure ClearDateTime(Attribute: TInstantDateTime); virtual; + procedure ClearInteger(Attribute: TInstantInteger); virtual; + procedure ClearFloat(Attribute: TInstantFloat); virtual; + procedure ClearCurrency(Attribute: TInstantCurrency); virtual; + procedure ClearMemo(Attribute: TInstantMemo); virtual; + procedure ClearPart(Attribute: TInstantPart); virtual; + procedure ClearParts(Attribute: TInstantParts); virtual; + procedure ClearReference(Attribute: TInstantReference); virtual; + procedure ClearReferences(Attribute: TInstantReferences); virtual; + procedure ClearString(Attribute: TInstantString); virtual; + procedure Close; virtual; + function CreateDataSet: TDataSet; virtual; abstract; + function CreateNavigationalLinkResolver(const ATableName: string): + TInstantNavigationalLinkResolver; virtual; abstract; + function CreateLocateVarArray(const AObjectClassName, AObjectId: string): + Variant; + procedure Delete; virtual; + procedure Edit; virtual; + function GetLinkDatasetResolver(const ATableName: string): + TInstantNavigationalLinkResolver; + function FieldHasObjects(Field: TField): Boolean; virtual; + function FindLinkDatasetResolver(const ATableName: string): + TInstantNavigationalLinkResolver; + procedure InternalDisposeMap(AObject: TInstantObject; + Map: TInstantAttributeMap; ConflictAction: TInstantConflictAction; + Info: PInstantOperationInfo); override; + procedure InternalRetrieveMap(AObject: TInstantObject; + const AObjectId: string; Map: TInstantAttributeMap; + ConflictAction: TInstantConflictAction; + Info: PInstantOperationInfo); override; + procedure InternalStoreMap(AObject: TInstantObject; + Map: TInstantAttributeMap; + ConflictAction: TInstantConflictAction; Info: PInstantOperationInfo); + override; + function Locate(const AObjectClassName, AObjectId: string): Boolean; + virtual; abstract; + procedure Open; virtual; + procedure Post; virtual; + procedure ReadBlob(Attribute: TInstantBlob); virtual; + procedure ReadBoolean(Attribute: TInstantBoolean); virtual; + procedure ReadDateTime(Attribute: TInstantDateTime); virtual; + procedure ReadInteger(Attribute: TInstantInteger); virtual; + procedure ReadFloat(Attribute: TInstantFloat); virtual; + procedure ReadCurrency(Attribute: TInstantCurrency); virtual; + procedure ReadMemo(Attribute: TInstantMemo); virtual; + procedure ReadPart(Attribute: TInstantPart); virtual; + procedure ReadParts(Attribute: TInstantParts); virtual; + procedure ReadReference(Attribute: TInstantReference); virtual; + procedure ReadReferences(Attribute: TInstantReferences); virtual; + procedure ReadString(Attribute: TInstantString); virtual; + procedure ResetAttributes(AObject: TInstantObject; + Map: TInstantAttributeMap); + procedure SetObjectUpdateCount(AObject: TInstantObject; Value: Integer); + function TranslateError(AObject: TInstantObject; E: Exception): Exception; + virtual; + procedure WriteBlob(Attribute: TInstantBlob); virtual; + procedure WriteBoolean(Attribute: TInstantBoolean); virtual; + procedure WriteDateTime(Attribute: TInstantDateTime); virtual; + procedure WriteFloat(Attribute: TInstantFloat); virtual; + procedure WriteCurrency(Attribute: TInstantCurrency); virtual; + procedure WriteInteger(Attribute: TInstantInteger); virtual; + procedure WriteMemo(Attribute: TInstantMemo); virtual; + procedure WritePart(Attribute: TInstantPart); virtual; + procedure WriteParts(Attribute: TInstantParts); virtual; + procedure WriteReference(Attribute: TInstantReference); virtual; + procedure WriteReferences(Attribute: TInstantReferences); virtual; + procedure WriteString(Attribute: TInstantString); virtual; + property DataSet: TDataset read GetDataSet write SetDataSet; + property NavigationalLinkResolvers: TObjectList read + GetNavigationalLinkResolvers; + public + constructor Create(ABroker: TInstantNavigationalBroker; + const ATableName: string); + destructor Destroy; override; + property Broker: TInstantNavigationalBroker read GetBroker; + property ObjectClassName: string read GetObjectClassName; + property ObjectId: string read GetObjectId; + property TableName: string read FTableName; + end; + + //Backwards compatibility + TInstantResolver = TInstantNavigationalResolver; + + TInstantSQLResolver = class(TInstantCustomResolver) + private + FMap: TInstantAttributeMap; + FDeleteSQL: string; + FDeleteConcurrentSQL: string; + FInsertSQL: string; + FSelectSQL: string; + FUpdateSQL: string; + FUpdateConcurrentSQL: string; + FSelectExternalSQL: string; + FSelectExternalPartSQL: string; + FDeleteExternalSQL: string; + FInsertExternalSQL: string; + procedure AddIntegerParam(Params: TParams; const ParamName: string; + Value: Integer); + procedure AddStringParam(Params: TParams; const ParamName, Value: string); + // Adds an "Id" param, whose data type and size depends on connector + // settings. + procedure AddIdParam(Params: TParams; const ParamName, Value: string); + procedure CheckConflict(Info: PInstantOperationInfo; + AObject: TInstantObject); + function ExecuteStatement(const AStatement: string; AParams: TParams; + Info: PInstantOperationInfo; ConflictAction: TInstantConflictAction; + AObject: TInstantObject): Integer; + function GetDeleteConcurrentSQL: string; + function GetDeleteSQL: string; + function GetInsertSQL: string; + function GetSelectSQL: string; + function GetUpdateConcurrentSQL: string; + function GetUpdateSQL: string; + function GetBroker: TInstantSQLBroker; + function GetSelectExternalSQL: string; + function GetSelectExternalPartSQL: string; + function GetDeleteExternalSQL: string; + function GetInsertExternalSQL: string; + protected + procedure AddAttributeParam(Attribute: TInstantAttribute; + Params: TParams); virtual; + procedure AddAttributeParams(Params: TParams; AObject: TInstantObject; + Map: TInstantAttributeMap); + procedure AddBaseParams(Params: TParams; AClassName, AObjectId: string; + AUpdateCount: Integer = -1); + procedure AddConcurrencyParam(Params: TParams; AUpdateCount: Integer); + function AddParam(Params: TParams; const ParamName: string; + ADataType: TFieldType): TParam; + procedure AddPersistentIdParam(Params: TParams; APersistentId: string); + procedure InternalDisposeMap(AObject: TInstantObject; + Map: TInstantAttributeMap; ConflictAction: TInstantConflictAction; + Info: PInstantOperationInfo); override; + procedure InternalRetrieveMap(AObject: TInstantObject; + const AObjectId: string; Map: TInstantAttributeMap; + ConflictAction: TInstantConflictAction; Info: PInstantOperationInfo); + override; + procedure InternalStoreMap(AObject: TInstantObject; + Map: TInstantAttributeMap; ConflictAction: TInstantConflictAction; + Info: PInstantOperationInfo); override; + procedure ReadAttribute(AObject: TInstantObject; const AObjectId: string; + AttributeMetadata: TInstantAttributeMetadata; DataSet: TDataSet); virtual; + procedure ReadAttributes(AObject: TInstantObject; const AObjectId: string; + Map: TInstantAttributeMap; DataSet: TDataSet); + function ReadBlobField(DataSet: TDataSet; const FieldName: string): string; + virtual; + function ReadBooleanField(DataSet: TDataSet; const FieldName: string): + Boolean; virtual; + function ReadDateTimeField(DataSet: TDataSet; const FieldName: string): + TDateTime; virtual; + function ReadFloatField(DataSet: TDataSet; const FieldName: string): Double; + virtual; + function ReadCurrencyField(DataSet: TDataSet; const FieldName: string): + Currency; virtual; + function ReadIntegerField(DataSet: TDataSet; const FieldName: string): + Integer; virtual; + function ReadMemoField(DataSet: TDataSet; const FieldName: string): string; + virtual; + function ReadStringField(DataSet: TDataSet; const FieldName: string): + string; virtual; + procedure RemoveConcurrencyParam(Params: TParams); + procedure RemovePersistentIdParam(Params: TParams); + function TranslateError(AObject: TInstantObject; + E: Exception): Exception; virtual; + public + constructor Create(ABroker: TInstantSQLBroker; AMap: TInstantAttributeMap); + property Broker: TInstantSQLBroker read GetBroker; + property DeleteConcurrentSQL: string read GetDeleteConcurrentSQL write FDeleteConcurrentSQL; + property DeleteSQL: string read GetDeleteSQL write FDeleteSQL; + property DeleteExternalSQL: string read GetDeleteExternalSQL write FDeleteExternalSQL; + property InsertSQL: string read GetInsertSQL write FInsertSQL; + property InsertExternalSQL: string read GetInsertExternalSQL + write FInsertExternalSQL; + property Map: TInstantAttributeMap read FMap; + property SelectSQL: string read GetSelectSQL write FSelectSQL; + property SelectExternalSQL: string read GetSelectExternalSQL + write FSelectExternalSQL; + property SelectExternalPartSQL: string read GetSelectExternalPartSQL + write FSelectExternalPartSQL; + property UpdateConcurrentSQL: string read GetUpdateConcurrentSQL + write FUpdateConcurrentSQL; + property UpdateSQL: string read GetUpdateSQL write FUpdateSQL; + end; + + // TInstantLinkResolver class defines common interface for handling + // access to container attributes with external storage + TInstantLinkResolver = class(TInstantStreamable) + private + FResolver: TInstantCustomResolver; + function GetBroker: TInstantCustomRelationalBroker; + function GetResolver: TInstantCustomResolver; + protected + procedure InternalStoreAttributeObjects(Attribute: TInstantContainer); + virtual; + procedure InternalClearAttributeLinkRecords; virtual; + procedure InternalDisposeDeletedAttributeObjects( + Attribute: TInstantContainer); virtual; + procedure InternalReadAttributeObjects(Attribute: TInstantContainer; + const AObjectId: string); virtual; + public + constructor Create(AResolver: TInstantCustomResolver); + procedure StoreAttributeObjects(Attribute: TInstantContainer); + procedure ClearAttributeLinkRecords; + procedure DisposeDeletedAttributeObjects(Attribute: TInstantContainer); + procedure ReadAttributeObjects(Attribute: TInstantContainer; + const AObjectId: string); + property Broker: TInstantCustomRelationalBroker read GetBroker; + property Resolver: TInstantCustomResolver read GetResolver; + end; + + // TInstantNavigationalLinkResolver is an abstract class that + // defines the interface for handling access to container attributes + // with external storage for navigational brokers. + // Each navigational broker needs to provide a concrete class descendent. + // See the BDE broker as an example. + TInstantNavigationalLinkResolver = class(TInstantLinkResolver) + private + FDataSet: TDataSet; + FFreeDataSet: Boolean; + FTableName: string; + function FieldByName(const FieldName: string): TField; + procedure FreeDataSet; + function GetBroker: TInstantNavigationalBroker; + function GetDataSet: TDataSet; + function GetResolver: TInstantNavigationalResolver; + procedure SetDataSet(Value: TDataset); + protected + procedure Append; virtual; + procedure Cancel; virtual; + procedure Close; virtual; + function CreateDataSet: TDataSet; virtual; abstract; + procedure Delete; virtual; + procedure Edit; virtual; + function Eof: Boolean; virtual; + procedure First; virtual; + procedure InternalStoreAttributeObjects(Attribute: TInstantContainer); override; + procedure InternalClearAttributeLinkRecords; override; + procedure InternalDisposeDeletedAttributeObjects( + Attribute: TInstantContainer); override; + procedure InternalReadAttributeObjects(Attribute: TInstantContainer; + const AObjectId: string); override; + procedure Next; virtual; + procedure Open; virtual; + procedure Post; virtual; + procedure SetDatasetParentRange(const AParentClass, AParentId: string); + virtual; abstract; + property DataSet: TDataset read GetDataSet write SetDataSet; + public + constructor Create(AResolver: TInstantNavigationalResolver; + const ATableName: string); + destructor Destroy; override; + property Broker: TInstantNavigationalBroker read GetBroker; + property Resolver: TInstantNavigationalResolver read GetResolver; + property TableName: string read FTableName; + end; + + // TInstantSQLLinkResolver class defines interface for handling + // access to container attributes with external storage for + // SQL brokers. Due to the generic nature of SQL this class is used + // directly and no descendant classes are needed for SQL brokers. + TInstantSQLLinkResolver = class(TInstantLinkResolver) + private + FAttributeOwner: TInstantObject; + FTableName: string; +... [truncated message content] |