You can subscribe to this list here.
2004 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(13) |
Sep
(25) |
Oct
(10) |
Nov
(19) |
Dec
(20) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
|
Feb
(206) |
Mar
(43) |
Apr
(25) |
May
(20) |
Jun
(69) |
Jul
(121) |
Aug
(95) |
Sep
(122) |
Oct
(213) |
Nov
(46) |
Dec
(39) |
2006 |
Jan
(28) |
Feb
(57) |
Mar
(21) |
Apr
(7) |
May
(11) |
Jun
(2) |
Jul
(8) |
Aug
(13) |
Sep
(2) |
Oct
(2) |
Nov
(20) |
Dec
(16) |
2007 |
Jan
(9) |
Feb
(15) |
Mar
|
Apr
(4) |
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
2008 |
Jan
|
Feb
(2) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(3) |
Aug
(1) |
Sep
(9) |
Oct
|
Nov
(1) |
Dec
|
2009 |
Jan
|
Feb
|
Mar
(8) |
Apr
(1) |
May
|
Jun
|
Jul
(11) |
Aug
(57) |
Sep
(2) |
Oct
(6) |
Nov
|
Dec
(7) |
2010 |
Jan
(11) |
Feb
(1) |
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
(1) |
Aug
(2) |
Sep
(27) |
Oct
(3) |
Nov
(7) |
Dec
(1) |
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(10) |
Oct
|
Nov
|
Dec
|
2012 |
Jan
(8) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
(3) |
Nov
(1) |
Dec
(1) |
2013 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(3) |
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
(4) |
Dec
|
2015 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
(1) |
Sep
(1) |
Oct
|
Nov
|
Dec
|
2016 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(3) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2017 |
Jan
|
Feb
|
Mar
(1) |
Apr
(4) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2018 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
(3) |
Oct
|
Nov
(4) |
Dec
|
2022 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
From: Steven M. <sr...@us...> - 2005-08-26 06:51:58
|
Update of /cvsroot/instantobjects/Source/Catalogs/BDE In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20103/BDE Log Message: Directory /cvsroot/instantobjects/Source/Catalogs/BDE added to the repository |
From: Steven M. <sr...@us...> - 2005-08-26 06:50:54
|
Update of /cvsroot/instantobjects/Docs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19938 Modified Files: IdDataType_and_IdDataSize.txt Log Message: Fix minor typo Index: IdDataType_and_IdDataSize.txt =================================================================== RCS file: /cvsroot/instantobjects/Docs/IdDataType_and_IdDataSize.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** IdDataType_and_IdDataSize.txt 25 Feb 2005 15:34:07 -0000 1.1 --- IdDataType_and_IdDataSize.txt 26 Aug 2005 06:50:45 -0000 1.2 *************** *** 16,20 **** Just set a data type (I have only tested dtString and dtInteger, and some datatypes like dtBlob and dtBoolean just don't make sense), a DataSize where applicable and build the database. Don't forget to have the same settings when you connect to the database. ! If you use a datatype different than string[32], you might also need to override the default key generation mechanism (otherwise IO will generate 32-character GUIDS that might not fit into your key fields), which you do by handling the connector's OnGenerateId event. Here is the even declaration: type --- 16,20 ---- Just set a data type (I have only tested dtString and dtInteger, and some datatypes like dtBlob and dtBoolean just don't make sense), a DataSize where applicable and build the database. Don't forget to have the same settings when you connect to the database. ! If you use a datatype different than string[32], you might also need to override the default key generation mechanism (otherwise IO will generate 32-character GUIDS that might not fit into your key fields), which you do by handling the connector's OnGenerateId event. Here is the event declaration: type |
From: Steven M. <sr...@us...> - 2005-08-16 23:38:41
|
Update of /cvsroot/instantobjects/Source/Design In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2928 Modified Files: InstantModelExplorer.pas Log Message: Fix to allow database evolve feature to recognise deleted attributes in class edits with out need for manual Model Explorer refresh or close and re-open. Index: InstantModelExplorer.pas =================================================================== RCS file: /cvsroot/instantobjects/Source/Design/InstantModelExplorer.pas,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** InstantModelExplorer.pas 24 Jul 2005 16:34:58 -0000 1.10 --- InstantModelExplorer.pas 16 Aug 2005 23:38:33 -0000 1.11 *************** *** 25,29 **** * * Contributor(s): ! * Carlo Barazzetta, Adrea Petrelli, Nando Dessena * * ***** END LICENSE BLOCK ***** *) --- 25,29 ---- * * Contributor(s): ! * Carlo Barazzetta, Adrea Petrelli, Nando Dessena, Steven Mitchell * * ***** END LICENSE BLOCK ***** *) *************** *** 363,367 **** begin if EditClass(FocusedClass, False) then ! UpdateModel; end; --- 363,367 ---- begin if EditClass(FocusedClass, False) then ! Refresh; end; |
From: Steven M. <sr...@us...> - 2005-08-15 06:56:30
|
Update of /cvsroot/instantobjects/Source/Design In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18730 Modified Files: InstantAttributeEditor.pas InstantAttributeEditor.dfm Log Message: Update InstantAttributeEditor to; 1. disallow spaces in attribute names. It now substitutes an underscore when a space character is typed in the NameEdit editbox; 2. disallow closing dialog without a size entry when the size entry editbox is enabled (ie for string and memo attributes); 3. refocus the NameEdit editbox when a duplicate attribute name exception is raised. Index: InstantAttributeEditor.dfm =================================================================== RCS file: /cvsroot/instantobjects/Source/Design/InstantAttributeEditor.dfm,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** InstantAttributeEditor.dfm 24 Jul 2005 16:34:57 -0000 1.8 --- InstantAttributeEditor.dfm 15 Aug 2005 06:56:20 -0000 1.9 *************** *** 88,91 **** --- 88,92 ---- TabOrder = 0 OnChange = NameEditChange + OnKeyPress = NameEditKeyPress end object TypeEdit: TDBComboBox Index: InstantAttributeEditor.pas =================================================================== RCS file: /cvsroot/instantobjects/Source/Design/InstantAttributeEditor.pas,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** InstantAttributeEditor.pas 24 Jul 2005 16:34:57 -0000 1.17 --- InstantAttributeEditor.pas 15 Aug 2005 06:56:20 -0000 1.18 *************** *** 95,98 **** --- 95,99 ---- StorageKindLabel: TLabel; AutoExternalStorageNameCheckBox: TCheckBox; + procedure NameEditKeyPress(Sender: TObject; var Key: Char); procedure FormCreate(Sender: TObject); procedure NameEditChange(Sender: TObject); *************** *** 288,291 **** --- 289,300 ---- end; + procedure TInstantAttributeEditorForm.NameEditKeyPress(Sender: TObject; + var Key: Char); + begin + inherited; + if Key = ' ' then + Key := '_'; + end; + procedure TInstantAttributeEditorForm.NumericFieldGetText(Sender: TField; var Text: string; Display: Boolean); *************** *** 321,328 **** --- 330,345 ---- begin ModalResult := mrNone; + NameEdit.SetFocus; raise Exception.Create('Name already used'); end; end; + if SizeEdit.Enabled and (SizeEdit.Text = '') then + begin + ModalResult := mrNone; + SizeEdit.SetFocus; + raise Exception.Create('Attribute size not set'); + end; + if not Assigned(FModel) then // Do not do SubjectExposer.PostChanges when called from |
From: Nando D. <na...@us...> - 2005-08-12 16:54:04
|
Update of /cvsroot/instantobjects/Source/Brokers/ADO/D2005 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9165/Brokers/ADO/D2005 Removed Files: DclIOADO.bdsproj IOADO.bdsproj Log Message: removed unused files --- IOADO.bdsproj DELETED --- --- DclIOADO.bdsproj DELETED --- |
From: Nando D. <na...@us...> - 2005-08-11 17:36:47
|
Update of /cvsroot/instantobjects/Source/Brokers/XML In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21468/Brokers/XML Removed Files: InstantXML_Release_notes_ita.txt Log Message: moved file to docs --- InstantXML_Release_notes_ita.txt DELETED --- |
From: Steven M. <sr...@us...> - 2005-08-11 00:36:17
|
Update of /cvsroot/instantobjects/Source/Brokers/NexusDb/D7 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32196 Added Files: DclIONexusDB.dpk IONexusDB.dpk Log Message: Changes for NexusDB broker: 1. Major cleanup of naming consistency, including renaming of folder, source, and package files and classes. 2. Fix for 'DROP INDEX..' SQL generation in database evolve handling. 3. Fix for handling of Index names with included space characters. These names are now delimited. 4. The Catalog now ignores the 'Sequential Access Index' in database evolve handling. --- NEW FILE: IONexusDB.dpk --- package IONexusDB; {$I '../../../InstantVersion.inc'} {$ALIGN 8} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO ON} {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} {$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} {$OPTIMIZATION ON} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$REFERENCEINFO ON} {$SAFEDIVIDE OFF} {$STACKFRAMES OFF} {$TYPEDADDRESS ON} {$VARSTRINGCHECKS ON} {$WRITEABLECONST OFF} {$MINENUMSIZE 1} {$IMAGEBASE $400000} {$DESCRIPTION 'InstantObjects NexusDB Run-Time Support (Delphi 7)'} {$LIBSUFFIX '_D7'} {$RUNONLY} {$IMPLICITBUILD OFF} requires vcl, vclx, dbrtl, rtl, vcldb, IOCore, IONexusDBCatalog, NexusDB108ll70, NexusDB1081x70, NexusDB108sr70, NexusDB108sd70, NexusDB108sq70, NexusDB108re70, NexusDB108st70, NexusDB108tn70, NexusDB108pt70, NexusDB108tw70, NexusDB108db70, NexusDB108ch70; contains InstantNexusDBConnectionDefEdit in '..\InstantNexusDBConnectionDefEdit.pas' {InstantNexusDBConnectionDefEditForm}, InstantNexusDB in '..\InstantNexusDB.pas', InstantNexusDBConsts in '..\InstantNexusDBConsts.pas', InstantNexusDBEmbeddedConnectionDefEdit in '..\InstantNexusDBEmbeddedConnectionDefEdit.pas' {InstantNexusDBEmbeddedConnectionDefEditForm}, InstantNexusDBEmbedded in '..\InstantNexusDBEmbedded.pas'; end. --- NEW FILE: DclIONexusDB.dpk --- package DclIONexusDB; {$I '../../../InstantVersion.inc'} {$R '../InstantNexusDB.dcr'} {$ALIGN 8} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO ON} {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} {$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} {$OPTIMIZATION ON} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$REFERENCEINFO ON} {$SAFEDIVIDE OFF} {$STACKFRAMES OFF} {$TYPEDADDRESS ON} {$VARSTRINGCHECKS ON} {$WRITEABLECONST OFF} {$MINENUMSIZE 1} {$IMAGEBASE $400000} {$DESCRIPTION 'InstantObjects NexusDB Design-Time Support (Delphi 7)'} {$LIBSUFFIX '_D7'} {$DESIGNONLY} {$IMPLICITBUILD OFF} requires vcl, vcldb, IOCore, IONexusDB; contains InstantNexusDBReg in '..\InstantNexusDBReg.pas'; end. |
From: Steven M. <sr...@us...> - 2005-08-11 00:35:02
|
Update of /cvsroot/instantobjects/Source/Brokers/NexusDb/D6 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31880/D6 Added Files: DclIONexusDB.dpk IONexusDB.dpk Log Message: Changes for NexusDB broker: 1. Major cleanup of naming consistency, including renaming of folder, source, and package files and classes. 2. Fix for 'DROP INDEX..' SQL generation in database evolve handling. 3. Fix for handling of Index names with included space characters. These names are now delimited. 4. The Catalog now ignores the 'Sequential Access Index' in database evolve handling. --- NEW FILE: IONexusDB.dpk --- package IONexusDB; {$I '../../../InstantVersion.inc'} {$ALIGN 8} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO ON} {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} {$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} {$OPTIMIZATION ON} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$REFERENCEINFO ON} {$SAFEDIVIDE OFF} {$STACKFRAMES OFF} {$TYPEDADDRESS ON} {$VARSTRINGCHECKS ON} {$WRITEABLECONST OFF} {$MINENUMSIZE 1} {$IMAGEBASE $400000} {$DESCRIPTION 'InstantObjects NexusDB Run-Time Support (Delphi 6)'} {$LIBSUFFIX '_D6'} {$RUNONLY} {$IMPLICITBUILD OFF} requires rtl, vcl, vcldb, IOCore, IONexusDBCatalog; contains InstantNexusDBConnectionDefEdit in '..\InstantNexusDBConnectionDefEdit.pas' {InstantNexusDBConnectionDefEditForm}, InstantNexusDB in '..\InstantNexusDB.pas', InstantNexusDBConsts in '..\InstantNexusDBConsts.pas', InstantNexusDBEmbeddedConnectionDefEdit in '..\InstantNexusDBEmbeddedConnectionDefEdit.pas' {InstantNexusDBEmbeddedConnectionDefEditForm}, InstantNexusDBEmbedded in '..\InstantNexusDBEmbedded.pas'; end. --- NEW FILE: DclIONexusDB.dpk --- package DclIONexusDB; {$I '../../../InstantVersion.inc'} {$R '../InstantNexusDB.dcr'} {$ALIGN 8} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO ON} {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} {$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} {$OPTIMIZATION ON} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$REFERENCEINFO ON} {$SAFEDIVIDE OFF} {$STACKFRAMES OFF} {$TYPEDADDRESS ON} {$VARSTRINGCHECKS ON} {$WRITEABLECONST ON} {$MINENUMSIZE 1} {$IMAGEBASE $400000} {$DESCRIPTION 'InstantObjects NexusDB Design-Time Support (Delphi 6)'} {$LIBSUFFIX '_D6'} {$DESIGNONLY} {$IMPLICITBUILD OFF} requires vcl, vcldb, IOCore, IONexusDB; contains InstantNexusDBReg in '..\InstantNexusDBReg.pas'; end. |
From: Steven M. <sr...@us...> - 2005-08-11 00:35:02
|
Update of /cvsroot/instantobjects/Source/Brokers/NexusDb/D2005 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31880/D2005 Added Files: DclIONexusDB.dpk IONexusDB.dpk Log Message: Changes for NexusDB broker: 1. Major cleanup of naming consistency, including renaming of folder, source, and package files and classes. 2. Fix for 'DROP INDEX..' SQL generation in database evolve handling. 3. Fix for handling of Index names with included space characters. These names are now delimited. 4. The Catalog now ignores the 'Sequential Access Index' in database evolve handling. --- NEW FILE: IONexusDB.dpk --- package IONexusDB; {$I '../../../InstantVersion.inc'} {$ALIGN 8} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO ON} {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} {$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} {$OPTIMIZATION ON} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$REFERENCEINFO ON} {$SAFEDIVIDE OFF} {$STACKFRAMES OFF} {$TYPEDADDRESS ON} {$VARSTRINGCHECKS ON} {$WRITEABLECONST OFF} {$MINENUMSIZE 1} {$IMAGEBASE $400000} {$DESCRIPTION 'InstantObjects NexusDB Run-Time Support (Delphi 2005)'} {$LIBSUFFIX '_D9'} {$RUNONLY} {$IMPLICITBUILD OFF} requires vcl, vclx, dbrtl, rtl, vcldb, IOCore, IONexusDBCatalog, NexusDB201se90, NexusDB201sr90, NexusDB201sq90, NexusDB201re90, NexusDB201tn90, NexusDB201tw90, NexusDB201db90, NexusDB201ch90, NexusDB201ll90, NexusDB201sd90, NexusDB201st90, NexusDB201pt90; contains InstantNexusDBConnectionDefEdit in '..\InstantNexusDBConnectionDefEdit.pas' {InstantNexusDBConnectionDefEditForm}, InstantNexusDB in '..\InstantNexusDB.pas', InstantNexusDBConsts in '..\InstantNexusDBConsts.pas', InstantNexusDBEmbeddedConnectionDefEdit in '..\InstantNexusDBEmbeddedConnectionDefEdit.pas' {InstantNexusDBEmbeddedConnectionDefEditForm}, InstantNexusDBEmbedded in '..\InstantNexusDBEmbedded.pas'; end. --- NEW FILE: DclIONexusDB.dpk --- package DclIONexusDB; {$I '../../../InstantVersion.inc'} {$R '../InstantNexusDB.dcr'} {$ALIGN 8} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO ON} {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} {$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} {$OPTIMIZATION ON} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$REFERENCEINFO ON} {$SAFEDIVIDE OFF} {$STACKFRAMES OFF} {$TYPEDADDRESS ON} {$VARSTRINGCHECKS ON} {$WRITEABLECONST OFF} {$MINENUMSIZE 1} {$IMAGEBASE $400000} {$DESCRIPTION 'InstantObjects NexusDB Design-Time Support (Delphi 2005)'} {$LIBSUFFIX '_D9'} {$DESIGNONLY} {$IMPLICITBUILD OFF} requires vcl, vcldb, IOCore, IONexusDB; contains InstantNexusDBReg in '..\InstantNexusDBReg.pas'; end. |
From: Steven M. <sr...@us...> - 2005-08-11 00:35:01
|
Update of /cvsroot/instantobjects/Source/Brokers/NexusDb/D5 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31880/D5 Added Files: DclIONexusDB_D5.dpk IONexusDB_D5.dpk Log Message: Changes for NexusDB broker: 1. Major cleanup of naming consistency, including renaming of folder, source, and package files and classes. 2. Fix for 'DROP INDEX..' SQL generation in database evolve handling. 3. Fix for handling of Index names with included space characters. These names are now delimited. 4. The Catalog now ignores the 'Sequential Access Index' in database evolve handling. --- NEW FILE: DclIONexusDB_D5.dpk --- package DclIONexusDB_D5; {$I '../../../InstantVersion.inc'} {$R '../InstantNexusDB.dcr'} {$ALIGN ON} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO ON} {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} {$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} {$OPTIMIZATION ON} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$REFERENCEINFO ON} {$SAFEDIVIDE OFF} {$STACKFRAMES OFF} {$TYPEDADDRESS ON} {$VARSTRINGCHECKS ON} {$WRITEABLECONST ON} {$MINENUMSIZE 1} {$IMAGEBASE $400000} {$DESCRIPTION 'InstantObjects NexusDB Design-Time Support (Delphi 5)'} {$DESIGNONLY} {$IMPLICITBUILD OFF} requires vcl50, IOCore, IONexusDB_D5; contains InstantNexusDBReg in '..\InstantNexusDBReg.pas'; end. --- NEW FILE: IONexusDB_D5.dpk --- package IONexusDB_D5; {$I '../../../InstantVersion.inc'} {$ALIGN ON} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO ON} {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} {$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} {$OPTIMIZATION ON} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$REFERENCEINFO ON} {$SAFEDIVIDE OFF} {$STACKFRAMES OFF} {$TYPEDADDRESS ON} {$VARSTRINGCHECKS ON} {$WRITEABLECONST OFF} {$MINENUMSIZE 1} {$IMAGEBASE $400000} {$DESCRIPTION 'InstantObjects NexusDB Run-Time Support (Delphi 5)'} {$RUNONLY} {$IMPLICITBUILD OFF} requires vcl50, vclx50, IOCore, IONexusDBCatalog_D5; contains InstantNexusDBConnectionDefEdit in '..\InstantNexusDBConnectionDefEdit.pas' {InstantNexusDBConnectionDefEditForm}, InstantNexusDB in '..\InstantNexusDB.pas', InstantNexusDBConsts in '..\InstantNexusDBConsts.pas', InstantNexusDBEmbeddedConnectionDefEdit in '..\InstantNexusDBEmbeddedConnectionDefEdit.pas' {InstantNexusDBEmbeddedConnectionDefEditForm}, InstantNexusDBEmbedded in '..\InstantNexusDBEmbedded.pas'; end. |
From: Steven M. <sr...@us...> - 2005-08-11 00:35:01
|
Update of /cvsroot/instantobjects/Source/Brokers/NexusDb In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31880 Added Files: InstantNexusDB.dcr InstantNexusDB.pas InstantNexusDBConnectionDefEdit.dfm InstantNexusDBConnectionDefEdit.pas InstantNexusDBConsts.pas InstantNexusDBDefines.inc InstantNexusDBEmbedded.pas InstantNexusDBEmbeddedConnectionDefEdit.dfm InstantNexusDBEmbeddedConnectionDefEdit.pas InstantNexusDBReg.pas Readme.txt Log Message: Changes for NexusDB broker: 1. Major cleanup of naming consistency, including renaming of folder, source, and package files and classes. 2. Fix for 'DROP INDEX..' SQL generation in database evolve handling. 3. Fix for handling of Index names with included space characters. These names are now delimited. 4. The Catalog now ignores the 'Sequential Access Index' in database evolve handling. --- NEW FILE: InstantNexusDBEmbedded.pas --- (* * InstantObjects * NexusDB Support *) (* ***** 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: Bert Moorthaemer * * The Initial Developer of the Original Code is: Bert Moorthaemer * * Portions created by the Initial Developer are Copyright (C) 2004 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Steven Mitchell * * ***** END LICENSE BLOCK ***** *) unit InstantNexusDBEmbedded; {$I ../../InstantDefines.inc} {$I InstantNexusDBDefines.inc} interface uses {$IFDEF MSWINDOWS} Windows, {$ENDIF} Classes, DB, InstantPersistence, InstantCommand, InstantNexusDB; type { SQL based (Embedded) ------------------------------------------------------- } TInstantNexusDBEmbeddedConnectionDef = class(TInstantNexusDBBaseConnectionDef) private class procedure CheckServerEngine; protected procedure InitConnector(Connector: TInstantConnector); override; public class function ConnectionTypeName: string; override; class function ConnectorClass: TInstantConnectorClass; override; function Edit: Boolean; override; class procedure LoadAliasList(aList: TStrings); end; TInstantNexusDBEmbConnector = class(TInstantNexusDBConnector) protected function GetDBMSName: string; override; public class function ConnectionDefClass: TInstantConnectionDefClass; override; end; implementation uses SysUtils, Controls, Forms, InstantConsts, InstantUtils, InstantNexusDBEmbeddedConnectionDefEdit, nxllTypes, nxsdTypes, {$IFDEF NX1} nx1xAllEngines, {$ELSE} nxseAllEngines, {$ENDIF} nxsrServerEngine, nxchCommandHandler, nxSqlEngine, nxdb; var __EmbeddedServer: TnxServerEngine = nil; function CreateEmbeddedServer: TnxServerEngine; begin Result := TnxServerEngine.Create(nil); with Result do try ServerName := '(Embedded)'; Options := [seoForceFailSafe, seoCloseInactiveFolders, seoCloseInactiveTables]; SqlEngine := TnxSqlEngine.Create(Result); Active := True; SqlEngine.Active := True; except FreeAndNil(Result); raise; end; end; { SQL based (Embedded) ------------------------------------------------------- } class procedure TInstantNexusDBEmbeddedConnectionDef.CheckServerEngine; begin if not Assigned(__EmbeddedServer) then __EmbeddedServer := CreateEmbeddedServer; end; class function TInstantNexusDBEmbeddedConnectionDef.ConnectionTypeName: string; begin Result := 'NexusDB (Embedded/SQL)'; end; class function TInstantNexusDBEmbeddedConnectionDef.ConnectorClass: TInstantConnectorClass; begin Result := TInstantNexusDBEmbConnector; end; function TInstantNexusDBEmbeddedConnectionDef.Edit: Boolean; begin with TInstantNexusDBEmbeddedConnectionDefEditForm.Create(nil) do try LoadData(Self); Result := ShowModal = mrOk; if Result then SaveData(Self); finally Free; end; end; procedure TInstantNexusDBEmbeddedConnectionDef.InitConnector(Connector: TInstantConnector); var Session: TnxSession; Database: TnxDatabase; begin CheckServerEngine; Session := CreateSession(Connector, __EmbeddedServer); try Database := CreateDatabase(Connector, Session, Alias, AliasIsPath); try TInstantNexusDBEmbConnector(Connector).Session := Session; TInstantNexusDBEmbConnector(Connector).Database := Database; except Database.Free; raise; end; except Session.Free; raise; end; end; class procedure TInstantNexusDBEmbeddedConnectionDef.LoadAliasList(aList: TStrings); var Session: TnxSession; begin CheckServerEngine; Session := CreateSession(nil, __EmbeddedServer); try aList.Clear; Session.GetAliasNames(aList); finally Session.Free; end; end; function TInstantNexusDBEmbConnector.GetDBMSName: string; begin Result := 'NexusDB (Embedded/SQL)'; end; class function TInstantNexusDBEmbConnector.ConnectionDefClass: TInstantConnectionDefClass; begin Result := TInstantNexusDBEmbeddedConnectionDef; end; initialization RegisterClass(TInstantNexusDBEmbeddedConnectionDef); TInstantNexusDBEmbConnector.RegisterClass; finalization TInstantNexusDBEmbConnector.UnregisterClass; if Assigned(__EmbeddedServer) then FreeAndNil(__EmbeddedServer); end. --- NEW FILE: InstantNexusDB.pas --- (* * InstantObjects * NexusDB Support *) (* ***** 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: Bert Moorthaemer * * The Initial Developer of the Original Code is: Bert Moorthaemer * * Portions created by the Initial Developer are Copyright (C) 2004 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Steven Mitchell * * ***** END LICENSE BLOCK ***** *) unit InstantNexusDB; {$I ../../InstantDefines.inc} {$I InstantNexusDBDefines.inc} interface uses {$IFDEF MSWINDOWS} Windows, {$ENDIF} Classes, DB, InstantPersistence, InstantCommand, nxllTransport, nxsdServerEngine, nxdb, nxsdDataDictionary ; type TNexusDBTable = class(TnxTable) end; TNexusDBQuery = class(TnxQuery) protected procedure SetRecNo(Value: Integer); override; end; TInstantNexusDBProtocolType = (ptTCPIP, ptNamedPipes); TInstantNexusDBBaseConnectionDef = class(TInstantRelationalConnectionDef) private FAlias: string; FAliasIsPath: Boolean; protected class function CreateSession(aOwner: TComponent; aServerEngine: TnxBaseServerEngine): TnxSession; class function CreateDatabase(aOwner: TComponent; aSession: TnxSession; const aAlias: string; aAliasIsPath: Boolean): TnxDatabase; published property Alias: string read FAlias write FAlias; property AliasIsPath: Boolean read FAliasIsPath write FAliasIsPath; end; { SQL based (Remote) --------------------------------------------------------- } TInstantNexusDBConnectionDef = class(TInstantNexusDBBaseConnectionDef) private FPort: Integer; FProtocolType: TInstantNexusDBProtocolType; FServerName: string; protected class function CreateServerEngine(aOwner: TComponent; const aServerName: string; aTransport: TnxBaseTransport): TnxBaseServerEngine; class function CreateTransport(aOwner: TComponent; aProtocolType: TInstantNexusDBProtocolType; const aServerName: string; aPort: Integer): TnxBaseTransport; procedure InitConnector(Connector: TInstantConnector); override; public constructor Create(Collection: TCollection); override; class function ConnectionTypeName: string; override; class function ConnectorClass: TInstantConnectorClass; override; function Edit: Boolean; override; class procedure LoadAliasList(aProtocolType: TInstantNexusDBProtocolType; const aServerName: string; aPort: Integer; aList: TStrings); class procedure LoadServerList(aProtocolType: TInstantNexusDBProtocolType; aPort: Integer; aList: TStrings); published property Port: Integer read FPort write FPort default 16000; property ProtocolType: TInstantNexusDBProtocolType read FProtocolType write FProtocolType default ptTCPIP; property ServerName: string read FServerName write FServerName; end; TInstantNexusDBConnector = class(TInstantRelationalConnector) private FSession: TnxSession; FDatabase: TnxDatabase; {$IFDEF NX1} procedure DatabaseBuildFixup; procedure FillFieldMap(aTbl: TNexusDBTable; aList: TStrings); function CreateFixedPrimaryIndexDef(aTbl: TNexusDBTable; aDict: TnxDataDictionary; var aOldIdx: Integer): TnxIndexDescriptor; procedure DoTableFix(aTbl: TNexusDBTable); {$ENDIF} procedure SetSession(Value: TnxSession); procedure SetDatabase(Value: TnxDatabase); protected procedure Notification(aComponent: TComponent; Operation: TOperation); override; function CreateBroker: TInstantBroker; override; function GetConnected: Boolean; override; function GetDatabaseExists: Boolean; override; function GetDatabaseName: string; override; function GetDBMSName: string; override; function GetDDLTransactionSupported: Boolean; override; procedure InternalBuildDatabase(Scheme: TInstantScheme); override; procedure InternalCommitTransaction; override; procedure InternalConnect; override; procedure InternalDisconnect; override; procedure InternalRollbackTransaction; override; procedure InternalStartTransaction; override; public class function ConnectionDefClass: TInstantConnectionDefClass; override; published property Session: TnxSession read FSession write SetSession; property Database: TnxDatabase read FDatabase write SetDatabase; end; TInstantNexusDBBroker = class(TInstantSQLBroker) private function GetConnector: TInstantNexusDBConnector; protected function CreateResolver(Map: TInstantAttributeMap): TInstantSQLResolver; override; function GetDBMSName: string; override; function GetSQLDelimiters: string; override; function GetSQLQuote: Char; override; function InternalCreateQuery: TInstantQuery; override; procedure AssignDataSetParams(DataSet: TDataSet; aParams: TParams); override; function CreateCatalog(const AScheme: TInstantScheme): TInstantCatalog; override; public function CreateDataSet(const aStatement: string; aParams: TParams = nil): TDataSet; override; function CreateDBBuildCommand(const CommandType: TInstantDBBuildCommandType): TInstantDBBuildCommand; override; function DataTypeToColumnType(DataType: TInstantDataType; Size: Integer): string; override; function Execute(const aStatement: string; aParams: TParams = nil): Integer; override; class function GeneratorClass: TInstantSQLGeneratorClass; override; property Connector: TInstantNexusDBConnector read GetConnector; end; TInstantNexusDBResolver = class(TInstantSQLResolver) end; TInstantNexusDBTranslator = class(TInstantRelationalTranslator) protected function GetDelimiters: string; override; function GetQuote: Char; override; function IncludeOrderFields: Boolean; override; end; TInstantNexusDBQuery = class(TInstantSQLQuery) protected class function TranslatorClass: TInstantRelationalTranslatorClass; override; end; TInstantNexusDBSQLGenerator = class(TInstantSQLGenerator) protected function EmbraceIndex(const IndexName: string): string; virtual; function InternalGenerateCreateIndexSQL(Metadata: TInstantIndexMetadata): string; override; function InternalGenerateDropIndexSQL(Metadata: TInstantIndexMetadata): string; override; end; implementation uses SysUtils, Controls, Forms, InstantConsts, InstantUtils, InstantNexusDBConnectionDefEdit, nxllTypes, nxsdTypes, nxdbBase, nxtwWinsockTransport, nxtnNamedPipeTransport, nxreRemoteServerEngine, InstantNexusDBCatalog, InstantDBBuild; const SUndefined = 'Undefined'; { common code } { TNexusDBQuery } procedure TNexusDBQuery.SetRecNo(Value: Integer); begin inherited; if Value = Succ(RecNo) then Next else if Value = Pred(RecNo) then Prior; end; { TTInstantNexusDBBaseConnectionDef } class function TInstantNexusDBBaseConnectionDef.CreateSession(aOwner: TComponent; aServerEngine: TnxBaseServerEngine): TnxSession; begin Result := TnxSession.Create(aOwner); with Result do try ServerEngine := aServerEngine; Active := True; except if Assigned(Result) then FreeAndNil(Result); raise; end; end; class function TInstantNexusDBBaseConnectionDef.CreateDatabase(aOwner: TComponent; aSession: TnxSession; const aAlias: string; aAliasIsPath: Boolean): TnxDatabase; begin Result := TnxDatabase.Create(aOwner); with Result do try Session := aSession; Timeout := -1; if aAliasIsPath then begin AliasName := ''; AliasPath := aAlias; end else begin AliasPath := ''; AliasName := aAlias; end; // Result.Active := True; except if Assigned(Result) then FreeAndNil(Result); raise; end; end; { TInstantNexusDBConnectionDef } constructor TInstantNexusDBConnectionDef.Create(Collection: TCollection); begin inherited; FServerName := 'NexusDB@localhost'; FPort := 16000; FProtocolType := ptTCPIP; end; { SQL Based ------------------------------------------------------------------ } { TInstantNexusDBSQLConnectionDef } class function TInstantNexusDBConnectionDef.ConnectionTypeName: string; begin Result := 'NexusDB (Remote/SQL)'; end; class function TInstantNexusDBConnectionDef.ConnectorClass: TInstantConnectorClass; begin Result := TInstantNexusDBConnector; end; class function TInstantNexusDBConnectionDef.CreateServerEngine(aOwner: TComponent; const aServerName: string; aTransport: TnxBaseTransport): TnxBaseServerEngine; begin Result := TnxRemoteServerEngine.Create(aOwner); with TnxRemoteServerEngine(Result) do try Transport := aTransport; Active := True; except if Assigned(Result) then FreeAndNil(Result); raise; end; end; class function TInstantNexusDBConnectionDef.CreateTransport(aOwner: TComponent; aProtocolType: TInstantNexusDBProtocolType; const aServerName: string; aPort: Integer): TnxBaseTransport; begin case aProtocolType of ptTCPIP: begin Result := TnxWinsockTransport.Create(aOwner); with TnxWinsockTransport(Result) do try ServerName := aServerName; Port := aPort; Active := True; except if Assigned(Result) then FreeAndNil(Result); raise; end; end; ptNamedPipes: begin Result := TnxNamedPipeTransport.Create(aOwner); with TnxNamedPipeTransport(Result) do try ServerName := aServerName; Port := aPort; Active := True; except if Assigned(Result) then FreeAndNil(Result); raise; end; end; end; end; function TInstantNexusDBConnectionDef.Edit: Boolean; begin with TInstantNexusDBConnectionDefEditForm.Create(nil) do try LoadData(Self); Result := ShowModal = mrOk; if Result then SaveData(Self); finally Free; end; end; procedure TInstantNexusDBConnectionDef.InitConnector(Connector: TInstantConnector); var SavedCursor: TCursor; Transport: TnxBaseTransport; ServerEngine: TnxBaseServerEngine; Session: TnxSession; Database: TnxDatabase; begin SavedCursor := Screen.Cursor; try Screen.Cursor := crHourGlass; Transport := CreateTransport(Connector, ProtocolType, ServerName, Port); try ServerEngine := CreateServerEngine(Connector, ServerName, Transport); try Session := CreateSession(Connector, ServerEngine); try Database := CreateDatabase(Connector, Session, Alias, AliasIsPath); try TInstantNexusDBConnector(Connector).Session := Session; TInstantNexusDBConnector(Connector).Database := Database; except Database.Free; raise; end; except Session.Free; raise; end; except ServerEngine.Free; raise; end; except Transport.Free; raise; end; finally Screen.Cursor := SavedCursor; end; end; class procedure TInstantNexusDBConnectionDef.LoadAliasList(aProtocolType: TInstantNexusDBProtocolType; const aServerName: string; aPort: Integer; aList: TStrings); var Transport: TnxBaseTransport; ServerEngine: TnxBaseServerEngine; Session: TnxSession; begin Transport := CreateTransport(nil, aProtocolType, aServerName, aPort); try ServerEngine := CreateServerEngine(nil, aServerName, Transport); try Session := CreateSession(nil, ServerEngine); try aList.Clear; Session.GetAliasNames(aList); finally Session.Free; end; finally ServerEngine.Free; end; finally Transport.Free; end; end; class procedure TInstantNexusDBConnectionDef.LoadServerList(aProtocolType: TInstantNexusDBProtocolType; aPort: Integer; aList: TStrings); var Transport: TnxBaseTransport; begin Transport := CreateTransport(nil, aProtocolType, '', aPort); try aList.Clear; Transport.GetServerNames(aList, 5000); finally Transport.Free; end; end; { TInstantNexusDBSQLConnector } procedure TInstantNexusDBConnector.SetSession(Value: TnxSession); begin if Value <> FSession then begin FSession := Value; if Value <> nil then Value.FreeNotification(Self); end; end; procedure TInstantNexusDBConnector.SetDatabase(Value: TnxDatabase); begin if Value <> FDatabase then begin FDatabase := Value; if Value <> nil then Value.FreeNotification(Self); end; end; class function TInstantNexusDBConnector.ConnectionDefClass: TInstantConnectionDefClass; begin Result := TInstantNexusDBConnectionDef; end; procedure TInstantNexusDBConnector.Notification( aComponent: TComponent; Operation: TOperation); begin inherited Notification(AComponent, Operation); if (Operation = opRemove) then if (aComponent = Session) then Session := nil else if (aComponent = Database) then Database := nil; end; function TInstantNexusDBConnector.CreateBroker: TInstantBroker; begin Result := TInstantNexusDBBroker.Create(Self); end; {$IFDEF NX1} { The CreateFixedPrimaryIndexDef function finds the primary index created in SQL and returns its index number in the aOldIdx param. The function returns a suitably named TnxIndexDescriptor that is used to replace the SQL generated primary index. } function TInstantNexusDBConnector.CreateFixedPrimaryIndexDef(aTbl: TNexusDBTable; aDict: TnxDataDictionary; var aOldIdx: Integer): TnxIndexDescriptor; var k: Integer; j: Integer; lKeyFieldDef: TnxCompKeyDescriptor; begin result := nil; aOldIdx := 0; try for j := 0 to aDict.IndexCount - 1 do begin if aDict.IndexDescriptor[j].Name = 'key0' then begin result := TnxIndexDescriptor.CreateStandAlone(0, aTbl.TableName + '_ID', 0, TnxCompKeyDescriptor); lKeyFieldDef := aDict.IndexDescriptor[j].KeyDescriptor as TnxCompKeyDescriptor; for k := 0 to lKeyFieldDef.KeyFieldCount - 1 do begin TnxCompKeyDescriptor(result.KeyDescriptor).Add( lKeyFieldDef.KeyFields[k].FieldNumber); end; { for } aOldIdx := j; Break; end; { if } end; { for } except result := nil; end; { try/except } end; procedure TInstantNexusDBConnector.DatabaseBuildFixup; var I: Integer; lTblList: TStrings; lTbl: TNexusDBTable; begin lTblList := nil; lTbl := nil; try lTblList := TStringList.Create; Database.Session.CloseInactiveTables; Database.GetTableNames(lTblList); lTbl := TNexusDBTable.Create(nil); lTbl.Database := Database; for I := 0 to lTblList.Count - 1 do begin lTbl.TableName := lTblList[I]; DoTableFix(lTbl); end; { for } finally lTbl.Free; lTblList.Free; end; { try/finally } end; procedure TInstantNexusDBConnector.DoTableFix(aTbl: TNexusDBTable); var lOldIdx: Integer; lFieldMap: TStrings; lCompleted: boolean; lStatus: TnxTaskStatus; lDict: TnxDataDictionary; lTaskInfo: TnxAbstractTaskInfo; lIdxDef: TnxIndexDescriptor; begin lDict := nil; lFieldMap := TStringList.Create; try FillFieldMap(aTbl, lFieldMap); aTbl.UpdateIndexDefs; if aTbl.IndexDefs.Count = 0 then Abort; aTbl.dsUpdateDataDictionary; lDict := TnxDataDictionary.Create; lDict.Assign(aTbl.Dictionary); lIdxDef := CreateFixedPrimaryIndexDef(aTbl, lDict, lOldIdx); if Assigned(lIdxDef) then begin lDict.RemoveIndex(lOldIdx); lIdxDef := lDict.AddIndex(lIdxDef); lDict.DefaultIndex := lIdxDef.Number; Check(Database.RestructureTable(aTbl.TableName, lDict, lFieldMap, lTaskInfo)); if Assigned(lTaskInfo) then begin repeat Sleep(250); lTaskInfo.GetStatus(lCompleted, lStatus); until lCompleted; end; { if } aTbl.FieldDefs.Clear; aTbl.IndexDefs.Clear; end; { if } finally lDict.Free; lFieldMap.Free; end; { try/finally } end; procedure TInstantNexusDBConnector.FillFieldMap(aTbl: TNexusDBTable; aList: TStrings); var j: Integer; begin aList.Clear; for j := 0 to aTbl.FieldDefs.Count - 1 do begin aList.Add(aTbl.FieldDefs[j].Name); end; { for } end; {$ENDIF} function TInstantNexusDBConnector.GetConnected: Boolean; begin Result := Assigned(Database) and Database.Connected; end; function TInstantNexusDBConnector.GetDatabaseExists: Boolean; begin Result := False; try Connect; Result := True; except // eat exceptions end; Disconnect; end; function TInstantNexusDBConnector.GetDatabaseName: string; begin if Assigned(Database) then Result := Database.AliasName else Result := SUndefined; end; function TInstantNexusDBConnector.GetDBMSName: string; begin Result := 'NexusDB (Remote/SQL)'; end; function TInstantNexusDBConnector.GetDDLTransactionSupported: Boolean; begin Result := False; end; procedure TInstantNexusDBConnector.InternalBuildDatabase(Scheme: TInstantScheme); begin Session.CloseInactiveTables; Session.CloseInactiveFolders; // No transaction wrapper as DDL actions cannot be rolled back in // accordance with advice from NexusDB ng. - SRM 09 Oct 2004 inherited; {$IFDEF NX1} DatabaseBuildFixup; // Hopefully NexusDB V2 will not need this! {$ENDIF} end; procedure TInstantNexusDBConnector.InternalStartTransaction; begin if not Database.InTransaction then Database.StartTransaction; end; procedure TInstantNexusDBConnector.InternalCommitTransaction; begin if Database.InTransaction then Database.Commit; end; procedure TInstantNexusDBConnector.InternalRollbackTransaction; begin if Database.InTransaction then Database.Rollback; end; procedure TInstantNexusDBConnector.InternalConnect; begin Database.Open; end; procedure TInstantNexusDBConnector.InternalDisconnect; begin Database.Close; end; { TInstantNexusDBSQLBroker } function TInstantNexusDBBroker.GetConnector: TInstantNexusDBConnector; begin Result := inherited Connector as TInstantNexusDBConnector; end; function TInstantNexusDBBroker.CreateResolver( Map: TInstantAttributeMap): TInstantSQLResolver; begin Result := TInstantNexusDBResolver.Create(Self, Map); end; function TInstantNexusDBBroker.GetDBMSName: string; begin Result := 'NexusDB (SQL)'; end; function TInstantNexusDBBroker.GetSQLDelimiters: string; begin Result := '""'; end; function TInstantNexusDBBroker.GetSQLQuote: Char; begin Result := ''''; end; function TInstantNexusDBBroker.InternalCreateQuery: TInstantQuery; begin Result := TInstantNexusDBQuery.Create(Connector); end; procedure TInstantNexusDBBroker.AssignDataSetParams(DataSet: TDataSet; aParams: TParams); var I: Integer; TargetParams: TParams; SourceParam, TargetParam: TParam; begin TargetParams := TNexusDBQuery(DataSet).Params; for I := 0 to Pred(AParams.Count) do begin SourceParam := AParams[I]; TargetParam := TargetParams.FindParam(SourceParam.Name); if Assigned(TargetParam) then TargetParam.Assign(SourceParam); end; end; function TInstantNexusDBBroker.CreateCatalog(const AScheme: TInstantScheme): TInstantCatalog; begin Result := TInstantNexusDBCatalog.Create(AScheme, Self); end; function TInstantNexusDBBroker.CreateDataSet( const aStatement: string; aParams: TParams = nil): TDataSet; var Query: TNexusDBQuery; begin Query := TNexusDBQuery.Create(nil); with Query do begin Database := Connector.Database; SQL.Text := aStatement; if Assigned(aParams) then AssignDataSetParams(Query, aParams); end; Result := Query; end; function TInstantNexusDBBroker.CreateDBBuildCommand(const CommandType: TInstantDBBuildCommandType): TInstantDBBuildCommand; begin if CommandType = ctAddTable then Result := TInstantDBBuildAddTableSQLCommand.Create(CommandType, Connector) else if CommandType = ctDropTable then Result := TInstantDBBuildDropTableSQLCommand.Create(CommandType, Connector) else if CommandType = ctAddField then Result := TInstantDBBuildAddFieldSQLCommand.Create(CommandType, Connector) else if CommandType = ctAlterField then Result := TInstantDBBuildAlterFieldSQLCommand.Create(CommandType, Connector) else if CommandType = ctDropField then Result := TInstantDBBuildDropFieldSQLCommand.Create(CommandType, Connector) else if CommandType = ctAddIndex then Result := TInstantDBBuildAddIndexSQLCommand.Create(CommandType, Connector) else if CommandType = ctAlterIndex then Result := TInstantDBBuildAlterIndexSQLCommand.Create(CommandType, Connector) else if CommandType = ctDropIndex then Result := TInstantDBBuildDropIndexSQLCommand.Create(CommandType, Connector) else Result := inherited CreateDBBuildCommand(CommandType); end; function TInstantNexusDBBroker.DataTypeToColumnType( DataType: TInstantDataType; Size: Integer): string; const Types: array[TInstantDataType] of string = ( 'INTEGER', 'REAL', 'MONEY', 'BOOLEAN', 'VARCHAR', 'TEXT', 'DATETIME', 'BLOB'); begin Result := Types[DataType]; if (DataType = dtString) and (Size > 0) then Result := Result + InstantEmbrace(IntToStr(Size), '()'); end; function TInstantNexusDBBroker.Execute( const aStatement: string; aParams: TParams = nil): Integer; var DataSet: TNexusDBQuery; begin Result := 0; if aStatement = '' then Exit; DataSet := AcquireDataSet(aStatement, aParams) as TNexusDBQuery; try DataSet.ExecSQL; Result := DataSet.RowsAffected; finally ReleaseDataSet(DataSet); end; end; class function TInstantNexusDBBroker.GeneratorClass: TInstantSQLGeneratorClass; begin Result := TInstantNexusDBSQLGenerator; end; { TInstantNexusDBSQLTranslator } function TInstantNexusDBTranslator.GetDelimiters: string; begin Result := '""'; end; function TInstantNexusDBTranslator.GetQuote: Char; begin Result := ''''; end; function TInstantNexusDBTranslator.IncludeOrderFields: Boolean; begin Result := True; end; { TInstantNexusDBSQLQuery } class function TInstantNexusDBQuery.TranslatorClass: TInstantRelationalTranslatorClass; begin Result := TInstantNexusDBTranslator; end; function TInstantNexusDBSQLGenerator.EmbraceIndex(const IndexName: string): string; begin Result := InstantEmbrace(IndexName, Delimiters); end; function TInstantNexusDBSQLGenerator.InternalGenerateCreateIndexSQL(Metadata: TInstantIndexMetadata): string; var Modifier, Columns, TableName: string; begin if ixUnique in Metadata.Options then Modifier := 'UNIQUE ' else Modifier := ''; if ixDescending in Metadata.Options then Modifier := Modifier + 'DESCENDING '; Columns := BuildFieldList(Metadata.Fields); TableName := Metadata.TableMetadata.Name; Result := Format('CREATE %sINDEX %s ON %s (%s)', [Modifier, EmbraceIndex(Metadata.Name), EmbraceTable(TableName), Columns]); end; function TInstantNexusDBSQLGenerator.InternalGenerateDropIndexSQL(Metadata: TInstantIndexMetadata): string; begin Result := Format('DROP INDEX %s.%s', [EmbraceTable(Metadata.TableMetadata.Name), EmbraceIndex(Metadata.Name)]); end; initialization RegisterClass(TInstantNexusDBConnectionDef); TInstantNexusDBConnector.RegisterClass; finalization TInstantNexusDBConnector.UnregisterClass; end. --- NEW FILE: InstantNexusDBConnectionDefEdit.dfm --- object InstantNexusDBConnectionDefEditForm: TInstantNexusDBConnectionDefEditForm Left = 1622 Top = 49 BorderStyle = bsDialog Caption = 'NexusDB Connection' ClientHeight = 340 ClientWidth = 506 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = True Position = poScreenCenter OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object BottomBevel: TBevel [...1452 lines suppressed...] Height = 25 Anchors = [akTop, akRight] Caption = 'OK' Default = True ModalResult = 1 TabOrder = 0 end object CancelButton: TButton Left = 428 Top = 6 Width = 75 Height = 25 Anchors = [akTop, akRight] Cancel = True Caption = 'Cancel' ModalResult = 2 TabOrder = 1 end end end --- NEW FILE: InstantNexusDB.dcr --- (This appears to be a binary file; contents omitted.) --- NEW FILE: InstantNexusDBReg.pas --- (* * InstantObjects * NexusDB Support *) (* ***** 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: Bert Moorthaemer * * The Initial Developer of the Original Code is: Bert Moorthaemer * * Portions created by the Initial Developer are Copyright (C) 2004 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Steven Mitchell * * ***** END LICENSE BLOCK ***** *) unit InstantNexusDBReg; {$I ../../InstantDefines.inc} {$I InstantNexusDBDefines.inc} interface procedure Register; implementation uses Classes, InstantNexusDB, InstantNexusDBEmbedded; procedure Register; begin RegisterComponents('InstantObjects', [TInstantNexusDBConnector, TInstantNexusDBEmbConnector]); end; end. --- NEW FILE: InstantNexusDBEmbeddedConnectionDefEdit.pas --- (* * InstantObjects * NexusDb Support *) (* ***** 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: Bert Moorthaemer * * The Initial Developer of the Original Code is: Bert Moorthaemer * * Portions created by the Initial Developer are Copyright (C) 2004 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Steven Mitchell * * ***** END LICENSE BLOCK ***** *) unit InstantNexusDBEmbeddedConnectionDefEdit; {$I ../../InstantDefines.inc} {$I InstantNexusDBDefines.inc} interface uses Forms, StdCtrls, Controls, ExtCtrls, Classes, InstantNexusDBEmbedded, ComCtrls, Graphics, Buttons; type TInstantNexusDBEmbeddedConnectionDefEditForm = class(TForm) BottomBevel: TBevel; BottomPanel: TPanel; CancelButton: TButton; ClientPanel: TPanel; OkButton: TButton; DatabaseRadGrp: TRadioGroup; AliasesLabel: TLabel; PathLabel: TLabel; PathEdit: TEdit; NexusDBLogo: TImage; AliasesCbx: TComboBox; LoadAliasesButton: TSpeedButton; BrowseButton: TSpeedButton; StreamFormatLabel: TLabel; StreamFormatComboBox: TComboBox; IDGroupBox: TGroupBox; lblIdDataType: TLabel; IdDataTypeComboBox: TComboBox; lblIdSize: TLabel; IdSizeEdit: TEdit; procedure LoadAliasesButtonClick(Sender: TObject); procedure BrowseButtonClick(Sender: TObject); procedure FormCreate(Sender: TObject); private function GetAlias: string; function GetAliasIsPath: Boolean; procedure SetAlias(const Value: string); procedure SetAliasIsPath(Value: Boolean); procedure LoadAliases(aList: TStrings); property Alias: string read GetAlias write SetAlias; property AliasIsPath: Boolean read GetAliasIsPath write SetAliasIsPath; protected procedure UpdateActions; override; public procedure LoadData(ConnectionDef: TInstantNexusDBEmbeddedConnectionDef); procedure SaveData(ConnectionDef: TInstantNexusDBEmbeddedConnectionDef); end; implementation {$R *.DFM} uses SysUtils, {$IFNDEF LINUX} {$IFDEF D6+} {$WARN UNIT_PLATFORM OFF} {$ENDIF} FileCtrl, // for SelectDirectory() {$IFDEF D6+} {$WARN UNIT_PLATFORM ON} {$ENDIF} {$ENDIF} InstantClasses, InstantPersistence, InstantConsts, InstantNexusDBConsts; { TInstantNexusDBEmbeddedConnectionDefEditForm } procedure TInstantNexusDBEmbeddedConnectionDefEditForm.UpdateActions; begin inherited; AliasesCbx.Enabled := not AliasIsPath; LoadAliasesButton.Enabled := AliasesCbx.Enabled; PathEdit.Enabled := AliasIsPath; BrowseButton.Enabled := PathEdit.Enabled; OkButton.Enabled := not AliasIsPath or (AliasIsPath and DirectoryExists(Alias)); end; type TConnectionDefCast = class(TInstantNexusDBEmbeddedConnectionDef); function TInstantNexusDBEmbeddedConnectionDefEditForm.GetAlias: string; begin if AliasIsPath then Result := PathEdit.Text else if AliasesCbx.ItemIndex < 0 then Result := '' else Result := AliasesCbx.Items.Strings[AliasesCbx.ItemIndex]; end; function TInstantNexusDBEmbeddedConnectionDefEditForm.GetAliasIsPath: Boolean; begin if DatabaseRadGrp.ItemIndex < 0 then Result := False else Result := Boolean(DatabaseRadGrp.ItemIndex); end; procedure TInstantNexusDBEmbeddedConnectionDefEditForm.SetAlias(const Value: string); begin if Value <> Alias then begin if AliasIsPath then PathEdit.Text := Trim(Value) else AliasesCbx.ItemIndex := AliasesCbx.Items.IndexOf(Value); end; end; procedure TInstantNexusDBEmbeddedConnectionDefEditForm.SetAliasIsPath(Value: Boolean); begin if Value <> AliasIsPath then begin Alias := ''; DatabaseRadGrp.ItemIndex := Ord(Value); Alias := ''; end; end; procedure TInstantNexusDBEmbeddedConnectionDefEditForm.LoadAliases(aList: TStrings); begin try TInstantNexusDBEmbeddedConnectionDef.LoadAliasList(aList); except // eat it end; end; procedure TInstantNexusDBEmbeddedConnectionDefEditForm.LoadData(ConnectionDef: TInstantNexusDBEmbeddedConnectionDef); var SavedCursor: TCursor; begin SavedCursor := Screen.Cursor; try Screen.Cursor := crHourGlass; with ConnectionDef do begin Self.LoadAliases(AliasesCbx.Items); Self.AliasIsPath := AliasIsPath; Self.Alias := Alias; // Begin SRM - 14 Mar 2005 StreamFormatComboBox.ItemIndex := Ord(ConnectionDef.BlobStreamFormat); IdDataTypeComboBox.ItemIndex := Ord(ConnectionDef.IdDataType); IdSizeEdit.Text := IntToStr(ConnectionDef.IdSize); // End SRM - 14 Mar 2005 end; finally Screen.Cursor := SavedCursor; end; end; procedure TInstantNexusDBEmbeddedConnectionDefEditForm.SaveData(ConnectionDef: TInstantNexusDBEmbeddedConnectionDef); begin with ConnectionDef do begin Alias := Self.Alias; AliasIsPath := Self.AliasIsPath; // Begin SRM - 14 Mar 2005 ConnectionDef.BlobStreamFormat := TInstantStreamFormat(StreamFormatComboBox.ItemIndex); ConnectionDef.IdDataType := TInstantDataType(IdDataTypeComboBox.ItemIndex); ConnectionDef.IdSize := StrToInt(IdSizeEdit.Text); // End SRM - 14 Mar 2005 end; end; procedure TInstantNexusDBEmbeddedConnectionDefEditForm.LoadAliasesButtonClick( Sender: TObject); begin LoadAliases(AliasesCbx.Items); with AliasesCbx, Items do ItemIndex := IndexOf(Alias); end; procedure TInstantNexusDBEmbeddedConnectionDefEditForm.BrowseButtonClick( Sender: TObject); var AliasDir: string; begin AliasDir := Alias; if SelectDirectory(SSelectAnAliasPathPlease, '', AliasDir) then Alias := AliasDir; end; procedure TInstantNexusDBEmbeddedConnectionDefEditForm.FormCreate(Sender: TObject); begin // Begin SRM - 14 Mar 2005 AssignInstantStreamFormat(StreamFormatComboBox.Items); AssignInstantDataTypeStrings(IdDataTypeComboBox.Items); IdDataTypeComboBox.ItemIndex := Ord(dtString); IdSizeEdit.Text := IntToStr(InstantDefaultFieldSize); // End SRM - 14 Mar 2005 end; end. --- NEW FILE: InstantNexusDBConnectionDefEdit.pas --- (* * InstantObjects * NexusDB Support *) (* ***** 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: Bert Moorthaemer * * The Initial Developer of the Original Code is: Bert Moorthaemer * * Portions created by the Initial Developer are Copyright (C) 2004 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Steven Mitchell * * ***** END LICENSE BLOCK ***** *) unit InstantNexusDBConnectionDefEdit; {$I ../../InstantDefines.inc} {$I InstantNexusDBDefines.inc} interface uses Forms, StdCtrls, Controls, ExtCtrls, Classes, InstantNexusDB, ComCtrls, Graphics, Buttons; type TInstantNexusDbConnectionDefEditForm = class(TForm) BottomBevel: TBevel; BottomPanel: TPanel; CancelButton: TButton; ClientPanel: TPanel; OkButton: TButton; DatabaseRadGrp: TRadioGroup; ServersCbx: TComboBox; AliasesLabel: TLabel; PathLabel: TLabel; PathEdit: TEdit; ServerLabel: TLabel; TransportTypeRadGrp: TRadioGroup; PortLabel: TLabel; PortEdit: TEdit; PortUpDown: TUpDown; NexusDBLogo: TImage; LoadServersButton: TSpeedButton; AliasesCbx: TComboBox; LoadAliasesButton: TSpeedButton; BrowseButton: TSpeedButton; StreamFormatLabel: TLabel; StreamFormatComboBox: TComboBox; IDGroupBox: TGroupBox; lblIdDataType: TLabel; IdDataTypeComboBox: TComboBox; lblIdSize: TLabel; IdSizeEdit: TEdit; procedure LoadServersButtonClick(Sender: TObject); procedure LoadAliasesButtonClick(Sender: TObject); procedure BrowseButtonClick(Sender: TObject); procedure FormCreate(Sender: TObject); private function GetAlias: string; function GetAliasIsPath: Boolean; function GetPort: Integer; function GetProtocolType: TInstantNexusDBProtocolType; function GetServerName: string; procedure SetAlias(const Value: string); procedure SetAliasIsPath(Value: Boolean); procedure SetPort(Value: Integer); procedure SetProtocolType(Value: TInstantNexusDBProtocolType); procedure SetServerName(const Value: string); procedure LoadServers(aList: TStrings); procedure LoadAliases(aList: TStrings); property Alias: string read GetAlias write SetAlias; property AliasIsPath: Boolean read GetAliasIsPath write SetAliasIsPath; property Port: Integer read GetPort write SetPort; property ProtocolType: TInstantNexusDBProtocolType read GetProtocolType write SetProtocolType; property ServerName: string read GetServerName write SetServerName; protected procedure UpdateActions; override; public procedure LoadData(ConnectionDef: TInstantNexusDBConnectionDef); procedure SaveData(ConnectionDef: TInstantNexusDBConnectionDef); end; implementation {$R *.DFM} uses SysUtils, {$IFNDEF LINUX} {$IFDEF D6+} {$WARN UNIT_PLATFORM OFF} {$ENDIF} FileCtrl, // for SelectDirectory() {$IFDEF D6+} {$WARN UNIT_PLATFORM ON} {$ENDIF} {$ENDIF} InstantClasses, InstantPersistence, InstantConsts, InstantNexusDBConsts; { TInstantNexusDBConnectionDefEditForm } procedure TInstantNexusDBConnectionDefEditForm.UpdateActions; begin inherited; LoadServersButton.Enabled := TransportTypeRadGrp.Enabled; AliasesCbx.Enabled := not AliasIsPath; LoadAliasesButton.Enabled := AliasesCbx.Enabled; PathEdit.Enabled := AliasIsPath; BrowseButton.Enabled := PathEdit.Enabled; OkButton.Enabled := (not AliasIsPath or (AliasIsPath and DirectoryExists(Alias))) and (ServerName > '') and (Alias > ''); end; type TConnectionDefCast = class(TInstantNexusDBConnectionDef); function TInstantNexusDBConnectionDefEditForm.GetAlias: string; begin if AliasIsPath then Result := PathEdit.Text else if AliasesCbx.ItemIndex < 0 then Result := '' else Result := AliasesCbx.Items.Strings[AliasesCbx.ItemIndex]; end; function TInstantNexusDBConnectionDefEditForm.GetAliasIsPath: Boolean; begin if DatabaseRadGrp.ItemIndex < 0 then Result := False else Result := Boolean(DatabaseRadGrp.ItemIndex); end; function TInstantNexusDBConnectionDefEditForm.GetPort: Integer; begin Result := PortUpDown.Position; end; function TInstantNexusDBConnectionDefEditForm.GetProtocolType: TInstantNexusDBProtocolType; begin if TransportTypeRadGrp.ItemIndex < 0 then Result := ptTCPIP else Result := TInstantNexusDBProtocolType(TransportTypeRadGrp.ItemIndex); end; function TInstantNexusDBConnectionDefEditForm.GetServerName: string; begin if ServersCbx.ItemIndex < 0 then Result := '' else Result := ServersCbx.Items.Strings[ServersCbx.ItemIndex]; end; procedure TInstantNexusDBConnectionDefEditForm.SetAlias(const Value: string); begin if Value <> Alias then begin if AliasIsPath then PathEdit.Text := Trim(Value) else AliasesCbx.ItemIndex := AliasesCbx.Items.IndexOf(Value); end; end; procedure TInstantNexusDBConnectionDefEditForm.SetAliasIsPath(Value: Boolean); begin if Value <> AliasIsPath then begin Alias := ''; DatabaseRadGrp.ItemIndex := Ord(Value); Alias := ''; end; end; procedure TInstantNexusDBConnectionDefEditForm.SetPort(Value: Integer); begin if Value <> PortUpDown.Position then begin PortUpDown.Position := Value; ServersCbx.Items.Clear; ServerName := ''; AliasesCbx.Items.Clear; Alias := ''; end; end; procedure TInstantNexusDBConnectionDefEditForm.SetProtocolType(Value: TInstantNexusDBProtocolType); begin if Value <> ProtocolType then begin TransportTypeRadGrp.ItemIndex := Ord(Value); ServersCbx.Items.Clear; ServerName := ''; AliasesCbx.Items.Clear; Alias := ''; end; end; procedure TInstantNexusDBConnectionDefEditForm.SetServerName(const Value: string); begin if Value <> ServerName then begin ServersCbx.ItemIndex := ServersCbx.Items.IndexOf(Value); AliasesCbx.Items.Clear; Alias := ''; end; end; procedure TInstantNexusDBConnectionDefEditForm.LoadServers(aList: TStrings); var SavedCursor: TCursor; begin try SavedCursor := Screen.Cursor; try Screen.Cursor := crHourGlass; TInstantNexusDBConnectionDef.LoadServerList( ProtocolType, Port, aList); finally Screen.Cursor := SavedCursor; end; except // eat it end; end; procedure TInstantNexusDBConnectionDefEditForm.LoadAliases(aList: TStrings); var SavedCursor: TCursor; begin try SavedCursor := Screen.Cursor; try Screen.Cursor := crHourGlass; TInstantNexusDBConnectionDef.LoadAliasList( ProtocolType, ServerName, Port, aList); finally Screen.Cursor := SavedCursor; end; except // eat it end; end; procedure TInstantNexusDBConnectionDefEditForm.LoadData(ConnectionDef: TInstantNexusDBConnectionDef); var SavedCursor: TCursor; begin SavedCursor := Screen.Cursor; try Screen.Cursor := crHourGlass; with ConnectionDef do begin Self.ProtocolType := ProtocolType; Self.Port := Port; Self.LoadServers(ServersCbx.Items); if ServerName <> '' then begin Self.ServerName := ServerName; Self.LoadAliases(AliasesCbx.Items); Self.AliasIsPath := AliasIsPath; Self.Alias := Alias; end; // Begin SRM - 14 Mar 2005 StreamFormatComboBox.ItemIndex := Ord(ConnectionDef.BlobStreamFormat); IdDataTypeComboBox.ItemIndex := Ord(ConnectionDef.IdDataType); IdSizeEdit.Text := IntToStr(ConnectionDef.IdSize); // End SRM - 14 Mar 2005 end; finally Screen.Cursor := SavedCursor; end; end; procedure TInstantNexusDBConnectionDefEditForm.SaveData(ConnectionDef: TInstantNexusDBConnectionDef); begin with ConnectionDef do begin ProtocolType := Self.ProtocolType; ServerName := Self.ServerName; Port := Self.Port; Alias := Self.Alias; AliasIsPath := Self.AliasIsPath; // Begin SRM - 14 Mar 2005 ConnectionDef.BlobStreamFormat := TInstantStreamFormat(StreamFormatComboBox.ItemIndex); ConnectionDef.IdDataType := TInstantDataType(IdDataTypeComboBox.ItemIndex); ConnectionDef.IdSize := StrToInt(IdSizeEdit.Text); // End SRM - 14 Mar 2005 end; end; procedure TInstantNexusDBConnectionDefEditForm.LoadServersButtonClick( Sender: TObject); begin LoadServers(ServersCbx.Items); with ServersCbx, Items do ItemIndex := IndexOf(ServerName); end; procedure TInstantNexusDBConnectionDefEditForm.LoadAliasesButtonClick( Sender: TObject); begin LoadAliases(AliasesCbx.Items); with AliasesCbx, Items do ItemIndex := IndexOf(Alias); end; procedure TInstantNexusDBConnectionDefEditForm.BrowseButtonClick( Sender: TObject); var AliasDir: string; begin AliasDir := Alias; if SelectDirectory(SSelectAnAliasPathPlease, '', AliasDir) then Alias := AliasDir; end; procedure TInstantNexusDBConnectionDefEditForm.FormCreate(Sender: TObject); begin // Begin SRM - 14 Mar 2005 AssignInstantStreamFormat(StreamFormatComboBox.Items); AssignInstantDataTypeStrings(IdDataTypeComboBox.Items); IdDataTypeComboBox.ItemIndex := Ord(dtString); IdSizeEdit.Text := IntToStr(InstantDefaultFieldSize); // End SRM - 14 Mar 2005 end; end. --- NEW FILE: InstantNexusDBConsts.pas --- (* * InstantObjects * NexusDb Support *) (* ***** 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: Bert Moorthaemer * * The Initial Developer of the Original Code is: Bert Moorthaemer * * Portions created by the Initial Developer are Copyright (C) 2004 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * * ***** END LICENSE BLOCK ***** *) unit InstantNexusDBConsts; {$I ../../InstantDefines.inc} {$I InstantNexusDBDefines.inc} interface resourcestring SSelectAnAliasPathPlease = 'Select an alias path please ...'; implementation end. --- NEW FILE: InstantNexusDBDefines.inc --- { InstantNexusDBDefines.inc } // Enable this compiler condition to // build the broker for use with NexusDB V1 {.$DEFINE NX1} --- NEW FILE: Readme.txt --- NexusDb Brokers for InstantObjects Steven Mitchell - 29 Jul 2005 To use these brokers with NexusDB V1 set the compiler conditional define of "NX1" in the 'InstantNexusDBDefines.inc' file and (re)build all of the NexusDB related broker packages. To use these brokers with NexusDB V2 comment the compiler conditional define of "NX1" in the 'InstantNexusDBDefines.inc' file and (re)build all of the NexusDB related broker packages. The current default is to compile for NexusDB V2. Note: Minimal testing has been done with NexusDB V2 as this version has only recently been released. --- NEW FILE: InstantNexusDBEmbeddedConnectionDefEdit.dfm --- object InstantNexusDBEmbeddedConnectionDefEditForm: TInstantNexusDBEmbeddedConnectionDefEditForm Left = 1633 Top = 436 BorderStyle = bsDialog Caption = 'NexusDB Embedded Connection' ClientHeight = 275 ClientWidth = 506 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = True Position = poScreenCenter OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object BottomBevel: TBevel [...1336 lines suppressed...] Height = 25 Anchors = [akTop, akRight] Caption = 'OK' Default = True ModalResult = 1 TabOrder = 0 end object CancelButton: TButton Left = 428 Top = 6 Width = 75 Height = 25 Anchors = [akTop, akRight] Cancel = True Caption = 'Cancel' ModalResult = 2 TabOrder = 1 end end end |
From: Steven M. <sr...@us...> - 2005-08-10 06:11:52
|
Update of /cvsroot/instantobjects/Source/Catalogs/NexusDB In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18599/NexusDB Added Files: InstantNexusDBCatalog.pas Log Message: Changes for NexusDB broker: 1. Major cleanup of naming consistency, including renaming of folder, source, and package files and classes. 2. Fix for 'DROP INDEX..' SQL generation in database evolve handling. 3. Fix for handling of Index names with included space characters. These names are now delimited. 4. The Catalog now ignores the 'Sequential Access Index' in database evolve handling. --- NEW FILE: InstantNexusDBCatalog.pas --- unit InstantNexusDBCatalog; {$I ../../InstantDefines.inc} {$I ../../Brokers/NexusDB/InstantNexusDBDefines.inc} interface uses InstantPersistence; type // A TInstantCatalog that reads catalog information from a NexusDb // database. Can be used with a NexusDb broker. TInstantNexusDBCatalog = class(TInstantSQLBrokerCatalog) private procedure AddFieldMetadatas(TableMetadata: TInstantTableMetadata); procedure AddIndexMetadatas(TableMetadata: TInstantTableMetadata); procedure AddTableMetadatas(TableMetadatas: TInstantTableMetadatas); function ColumnTypeToDataType(const ColumnType: string; const NexusType, FieldScale: Integer): TInstantDataType; function GetSelectFieldsSQL(const ATableName: string): string; function GetSelectIndexesSQL(const ATableName: string): string; function GetSelectIndexFieldsSQL(const AIndexName: string): string; function GetSelectTablesSQL: string; public procedure InitTableMetadatas(ATableMetadatas: TInstantTableMetadatas); override; end; implementation uses SysUtils, Classes, DB; { TInstantNexusDBCatalog } procedure TInstantNexusDBCatalog.AddIndexMetadatas( TableMetadata: TInstantTableMetadata); var Indexes: TDataSet; IndexMetadata: TInstantIndexMetadata; function GetIndexFields(const IndexName: string): string; var IndexFieldList: TStrings; IndexFields: TDataSet; begin IndexFieldList := TStringList.Create; try IndexFields := Broker.AcquireDataSet(GetSelectIndexFieldsSQL(IndexName)); try IndexFields.Open; try while not IndexFields.Eof do begin IndexFieldList.Add(Trim(IndexFields.FieldByName('SEGMENT_FIELD').AsString)); IndexFields.Next; end; finally IndexFields.Close; end; finally Broker.ReleaseDataSet(IndexFields); end; Result := StringReplace(IndexFieldList.CommaText, ',', ';', [rfReplaceAll]); finally IndexFieldList.Free; end; end; begin Indexes := Broker.AcquireDataSet(GetSelectIndexesSQL(TableMetadata.Name)); try Indexes.Open; try while not Indexes.Eof do begin IndexMetadata := TableMetadata.IndexMetadatas.Add; IndexMetadata.Name := Trim(Indexes.FieldByName('INDEX_NAME').AsString); // Ignore automatically generated 'Sequential Access Index' if SameText('Sequential Access Index', IndexMetadata.Name) then begin TableMetadata.IndexMetadatas.Remove(IndexMetadata); Indexes.Next; Continue; end; IndexMetadata.Fields := GetIndexFields(IndexMetadata.Name); IndexMetadata.Options := []; if {$IFDEF NX1} (SameText('key0', Indexes.FieldByName('INDEX_NAME').AsString)) {$ELSE} (Pos('$SQL$PRIMARYKEY$', Indexes.FieldByName('INDEX_NAME').AsString) = 1) {$ENDIF} then IndexMetadata.Options := IndexMetadata.Options + [ixPrimary, ixUnique] else if not Indexes.FieldByName('INDEX_ALLOWSDUPS').AsBoolean then IndexMetadata.Options := IndexMetadata.Options + [ixUnique]; { TODO : support other Options? } Indexes.Next; end; finally Indexes.Close; end; finally Broker.ReleaseDataSet(Indexes); end; end; procedure TInstantNexusDBCatalog.AddFieldMetadatas( TableMetadata: TInstantTableMetadata); var Fields: TDataSet; FieldMetadata: TInstantFieldMetadata; begin Fields := Broker.AcquireDataSet(GetSelectFieldsSQL(TableMetadata.Name)); try Fields.Open; try while not Fields.Eof do begin FieldMetadata := TableMetadata.FieldMetadatas.Add; FieldMetadata.Name := Trim(Fields.FieldByName('FIELD_NAME').AsString); FieldMetadata.DataType := ColumnTypeToDataType( {$IFDEF NX1} Trim(Fields.FieldByName('FIELD_TYPE').AsString), {$ELSE} Trim(Fields.FieldByName('FIELD_TYPE_NEXUS').AsString), {$ENDIF} 0,// No need for 'FIELD_SUB_TYPE' here Fields.FieldByName('FIELD_DECIMALS').AsInteger); FieldMetadata.Options := []; if Fields.FieldByName('FIELD_REQUIRED').AsBoolean then FieldMetadata.Options := FieldMetadata.Options + [foRequired]; if TableMetadata.IndexMetadatas.IsFieldIndexed(FieldMetadata) then FieldMetadata.Options := FieldMetadata.Options + [foIndexed]; { TODO : support ExternalTableName? } if FieldMetadata.DataType = dtString then FieldMetadata.Size := Fields.FieldByName('FIELD_UNITS').AsInteger else FieldMetadata.Size := Fields.FieldByName('FIELD_LENGTH').AsInteger; Fields.Next; end; finally Fields.Close; end; finally Broker.ReleaseDataSet(Fields); end; end; procedure TInstantNexusDBCatalog.AddTableMetadatas( TableMetadatas: TInstantTableMetadatas); var Tables: TDataSet; TableMetadata: TInstantTableMetadata; begin Tables := Broker.AcquireDataSet(GetSelectTablesSQL()); try Tables.Open; try while not Tables.Eof do begin TableMetadata := TableMetadatas.Add; TableMetadata.Name := Trim(Tables.FieldByName('TABLE_NAME').AsString); // Call AddIndexMetadatas first, so that AddFieldMetadatas can see what // indexes are defined to correctly set the foIndexed option. AddIndexMetadatas(TableMetadata); AddFieldMetadatas(TableMetadata); Tables.Next; end; finally Tables.Close; end; finally Broker.ReleaseDataSet(Tables); end; end; function TInstantNexusDBCatalog.ColumnTypeToDataType(const ColumnType: string; const NexusType, FieldScale: Integer): TInstantDataType; begin { TODO : How to use FieldScale? } {$IFDEF NX1} if SameText(ColumnType, 'ShortString') or SameText(ColumnType, 'NullString') then Result := dtString else if SameText(ColumnType, 'Int8') or SameText(ColumnType, 'Int16') or SameText(ColumnType, 'Int32') then //or SameText(ColumnType, 'nxtAutoInc') then // is unsigned 32 bit Result := dtInteger else if SameText(ColumnType, 'Single') or SameText(ColumnType, 'Double') or SameText(ColumnType, 'Extended') then Result := dtFloat else if SameText(ColumnType, 'Currency') then Result := dtCurrency else if SameText(ColumnType, 'Boolean') then Result := dtBoolean else if SameText(ColumnType, 'DateTime') or SameText(ColumnType, 'Date') or SameText(ColumnType, 'Time')then Result := dtDateTime else if SameText(ColumnType, 'BLOB') then Result := dtBlob else if SameText(ColumnType, 'BLOB Memo') then Result := dtMemo {$ELSE} if SameText(ColumnType, 'nxtNullString') or SameText(ColumnType, 'nxtShortString') then Result := dtString else if SameText(ColumnType, 'nxtInt8') or SameText(ColumnType, 'nxtInt16') or SameText(ColumnType, 'nxtInt32') then //or SameText(ColumnType, 'nxtAutoInc') then // is unsigned 32 bit Result := dtInteger else if SameText(ColumnType, 'nxtSingle') or SameText(ColumnType, 'nxtDouble') or SameText(ColumnType, 'nxtExtended') then Result := dtFloat else if SameText(ColumnType, 'nxtCurrency') then Result := dtCurrency else if SameText(ColumnType, 'nxtBoolean') then Result := dtBoolean else if SameText(ColumnType, 'nxtDateTime') or SameText(ColumnType, 'nxtDate') or SameText(ColumnType, 'nxtTime')then Result := dtDateTime else if SameText(ColumnType, 'nxtBlob') then Result := dtBlob else if SameText(ColumnType, 'nxtBlobMemo') then Result := dtMemo {$ENDIF} else raise Exception.CreateFmt('ColumnType %s not supported.', [ColumnType]); end; function TInstantNexusDBCatalog.GetSelectFieldsSQL( const ATableName: string): string; begin Result := 'select ' + ' FIELD_NAME, FIELD_REQUIRED, ' + {$IFDEF NX1} ' FIELD_TYPE, ' + {$ELSE} ' FIELD_TYPE_NEXUS, ' + {$ENDIF} ' FIELD_LENGTH, FIELD_UNITS, ' + ' FIELD_DECIMALS, FIELD_INDEX ' + 'from ' + ' "#FIELDS" ' + 'where ' + ' TABLE_NAME = ''' + ATableName + ''' ' + 'order by ' + ' FIELD_INDEX'; end; function TInstantNexusDBCatalog.GetSelectIndexesSQL( const ATableName: string): string; begin Result := 'select ' + ' INDEX_NAME, INDEX_ALLOWSDUPS, INDEX_INDEX ' + 'from ' + ' "#INDICES" ' + 'where ' + ' TABLE_NAME = ''' + ATableName + ''' ' + 'order by ' + ' INDEX_INDEX'; end; function TInstantNexusDBCatalog.GetSelectIndexFieldsSQL( const AIndexName: string): string; begin Result := 'select ' + ' SEGMENT_FIELD, SEGMENT_INDEX ' + 'from ' + ' "#INDEXFIELDS" ' + 'where ' + ' INDEX_NAME = ''' + AIndexName + ''' ' + 'order by ' + ' SEGMENT_INDEX'; end; function TInstantNexusDBCatalog.GetSelectTablesSQL: string; begin Result := 'select ' + ' TABLE_NAME ' + 'from ' + ' "#TABLES" ' + 'order by ' + ' TABLE_NAME'; end; procedure TInstantNexusDBCatalog.InitTableMetadatas( ATableMetadatas: TInstantTableMetadatas); begin ATableMetadatas.Clear; AddTableMetadatas(ATableMetadatas); end; end. |
From: Steven M. <sr...@us...> - 2005-08-10 06:11:51
|
Update of /cvsroot/instantobjects/Source/Catalogs/NexusDB/D2005 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18599/NexusDB/D2005 Added Files: IONexusDBCatalog.dpk Log Message: Changes for NexusDB broker: 1. Major cleanup of naming consistency, including renaming of folder, source, and package files and classes. 2. Fix for 'DROP INDEX..' SQL generation in database evolve handling. 3. Fix for handling of Index names with included space characters. These names are now delimited. 4. The Catalog now ignores the 'Sequential Access Index' in database evolve handling. --- NEW FILE: IONexusDBCatalog.dpk --- package IONexusDBCatalog; {$I ../../../InstantVersion.inc} {$ALIGN 8} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO ON} {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} {$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} {$OPTIMIZATION ON} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$REFERENCEINFO ON} {$SAFEDIVIDE OFF} {$STACKFRAMES OFF} {$TYPEDADDRESS ON} {$VARSTRINGCHECKS ON} {$WRITEABLECONST OFF} {$MINENUMSIZE 1} {$IMAGEBASE $400000} {$DESCRIPTION 'InstantObjects Catalog for NexusDB SQL (Delphi 2005)'} {$LIBSUFFIX '_D9'} {$RUNONLY} {$IMPLICITBUILD OFF} requires rtl, IOCore; contains InstantNexusDBCatalog in '..\InstantNexusDBCatalog.pas'; end. |
From: Steven M. <sr...@us...> - 2005-08-10 06:11:51
|
Update of /cvsroot/instantobjects/Source/Catalogs/NexusDbSQL/D5 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18599/NexusDbSQL/D5 Removed Files: IONxCatalog_D5.dpk Log Message: Changes for NexusDB broker: 1. Major cleanup of naming consistency, including renaming of folder, source, and package files and classes. 2. Fix for 'DROP INDEX..' SQL generation in database evolve handling. 3. Fix for handling of Index names with included space characters. These names are now delimited. 4. The Catalog now ignores the 'Sequential Access Index' in database evolve handling. --- IONxCatalog_D5.dpk DELETED --- |
From: Steven M. <sr...@us...> - 2005-08-10 06:11:51
|
Update of /cvsroot/instantobjects/Source/Catalogs/NexusDB/D5 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18599/NexusDB/D5 Added Files: IONexusDBCatalog_D5.dpk Log Message: Changes for NexusDB broker: 1. Major cleanup of naming consistency, including renaming of folder, source, and package files and classes. 2. Fix for 'DROP INDEX..' SQL generation in database evolve handling. 3. Fix for handling of Index names with included space characters. These names are now delimited. 4. The Catalog now ignores the 'Sequential Access Index' in database evolve handling. --- NEW FILE: IONexusDBCatalog_D5.dpk --- package IONexusDBCatalog_D5; {$I ../../../InstantVersion.inc} {$ALIGN ON} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO ON} {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} {$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} {$OPTIMIZATION ON} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$REFERENCEINFO ON} {$SAFEDIVIDE OFF} {$STACKFRAMES OFF} {$TYPEDADDRESS ON} {$VARSTRINGCHECKS ON} {$WRITEABLECONST OFF} {$MINENUMSIZE 1} {$IMAGEBASE $400000} {$DESCRIPTION 'InstantObjects Catalog for NexusDB SQL (Delphi 5)'} {$RUNONLY} {$IMPLICITBUILD OFF} requires IOCore; contains InstantNexusDBCatalog in '..\InstantNexusDBCatalog.pas'; end. |
From: Steven M. <sr...@us...> - 2005-08-10 06:11:51
|
Update of /cvsroot/instantobjects/Source/Catalogs/NexusDbSQL/D2005 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18599/NexusDbSQL/D2005 Removed Files: IONxCatalog.dpk Log Message: Changes for NexusDB broker: 1. Major cleanup of naming consistency, including renaming of folder, source, and package files and classes. 2. Fix for 'DROP INDEX..' SQL generation in database evolve handling. 3. Fix for handling of Index names with included space characters. These names are now delimited. 4. The Catalog now ignores the 'Sequential Access Index' in database evolve handling. --- IONxCatalog.dpk DELETED --- |
From: Steven M. <sr...@us...> - 2005-08-10 06:11:51
|
Update of /cvsroot/instantobjects/Source/Catalogs/NexusDbSQL/D6 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18599/NexusDbSQL/D6 Removed Files: IONxCatalog.dpk Log Message: Changes for NexusDB broker: 1. Major cleanup of naming consistency, including renaming of folder, source, and package files and classes. 2. Fix for 'DROP INDEX..' SQL generation in database evolve handling. 3. Fix for handling of Index names with included space characters. These names are now delimited. 4. The Catalog now ignores the 'Sequential Access Index' in database evolve handling. --- IONxCatalog.dpk DELETED --- |
From: Steven M. <sr...@us...> - 2005-08-10 06:11:51
|
Update of /cvsroot/instantobjects/Source/Catalogs/NexusDB/D7 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18599/NexusDB/D7 Added Files: IONexusDBCatalog.dpk Log Message: Changes for NexusDB broker: 1. Major cleanup of naming consistency, including renaming of folder, source, and package files and classes. 2. Fix for 'DROP INDEX..' SQL generation in database evolve handling. 3. Fix for handling of Index names with included space characters. These names are now delimited. 4. The Catalog now ignores the 'Sequential Access Index' in database evolve handling. --- NEW FILE: IONexusDBCatalog.dpk --- package IONexusDBCatalog; {$I '../../../InstantVersion.inc'} {$ALIGN 8} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO ON} {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} {$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} {$OPTIMIZATION ON} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$REFERENCEINFO ON} {$SAFEDIVIDE OFF} {$STACKFRAMES OFF} {$TYPEDADDRESS ON} {$VARSTRINGCHECKS ON} {$WRITEABLECONST OFF} {$MINENUMSIZE 1} {$IMAGEBASE $400000} {$DESCRIPTION 'InstantObjects Catalog for NexusDB SQL (Delphi 7)'} {$LIBSUFFIX '_D7'} {$RUNONLY} {$IMPLICITBUILD OFF} requires rtl, IOCore; contains InstantNexusDBCatalog in '..\InstantNexusDBCatalog.pas'; end. |
From: Steven M. <sr...@us...> - 2005-08-10 06:11:50
|
Update of /cvsroot/instantobjects/Source/Catalogs/NexusDbSQL/D7 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18599/NexusDbSQL/D7 Removed Files: IONxCatalog.dpk Log Message: Changes for NexusDB broker: 1. Major cleanup of naming consistency, including renaming of folder, source, and package files and classes. 2. Fix for 'DROP INDEX..' SQL generation in database evolve handling. 3. Fix for handling of Index names with included space characters. These names are now delimited. 4. The Catalog now ignores the 'Sequential Access Index' in database evolve handling. --- IONxCatalog.dpk DELETED --- |
From: Steven M. <sr...@us...> - 2005-08-10 06:11:50
|
Update of /cvsroot/instantobjects/Source/Catalogs/NexusDB/D6 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18599/NexusDB/D6 Added Files: IONexusDBCatalog.dpk Log Message: Changes for NexusDB broker: 1. Major cleanup of naming consistency, including renaming of folder, source, and package files and classes. 2. Fix for 'DROP INDEX..' SQL generation in database evolve handling. 3. Fix for handling of Index names with included space characters. These names are now delimited. 4. The Catalog now ignores the 'Sequential Access Index' in database evolve handling. --- NEW FILE: IONexusDBCatalog.dpk --- package IONexusDBCatalog; {$I ../../../InstantVersion.inc} {$ALIGN 8} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO ON} {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} {$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} {$OPTIMIZATION ON} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$REFERENCEINFO ON} {$SAFEDIVIDE OFF} {$STACKFRAMES OFF} {$TYPEDADDRESS ON} {$VARSTRINGCHECKS ON} {$WRITEABLECONST OFF} {$MINENUMSIZE 1} {$IMAGEBASE $400000} {$DESCRIPTION 'InstantObjects Catalog for NexusDB SQL (Delphi 6)'} {$LIBSUFFIX '_D6'} {$RUNONLY} {$IMPLICITBUILD OFF} requires rtl, IOCore; contains InstantNexusDBCatalog in '..\InstantNexusDBCatalog.pas'; end. |
From: Steven M. <sr...@us...> - 2005-08-10 06:11:50
|
Update of /cvsroot/instantobjects/Source/Catalogs/NexusDbSQL In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18599/NexusDbSQL Removed Files: InstantNxCatalog.pas Log Message: Changes for NexusDB broker: 1. Major cleanup of naming consistency, including renaming of folder, source, and package files and classes. 2. Fix for 'DROP INDEX..' SQL generation in database evolve handling. 3. Fix for handling of Index names with included space characters. These names are now delimited. 4. The Catalog now ignores the 'Sequential Access Index' in database evolve handling. --- InstantNxCatalog.pas DELETED --- |
From: Steven M. <sr...@us...> - 2005-08-10 06:08:36
|
Update of /cvsroot/instantobjects/Source/Catalogs/NexusDB/D7 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18023/D7 Log Message: Directory /cvsroot/instantobjects/Source/Catalogs/NexusDB/D7 added to the repository |
From: Steven M. <sr...@us...> - 2005-08-10 06:06:04
|
Update of /cvsroot/instantobjects/Source/Catalogs/NexusDB/D6 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17448/D6 Log Message: Directory /cvsroot/instantobjects/Source/Catalogs/NexusDB/D6 added to the repository |
From: Steven M. <sr...@us...> - 2005-08-10 06:03:31
|
Update of /cvsroot/instantobjects/Source/Catalogs/NexusDB/D5 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17034/D5 Log Message: Directory /cvsroot/instantobjects/Source/Catalogs/NexusDB/D5 added to the repository |
From: Steven M. <sr...@us...> - 2005-08-10 06:02:41
|
Update of /cvsroot/instantobjects/Source/Catalogs/NexusDB/D2005 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16871/D2005 Log Message: Directory /cvsroot/instantobjects/Source/Catalogs/NexusDB/D2005 added to the repository |