From d69d875d2a5f418ed9bad8afcadb69fde1a14a6a Mon Sep 17 00:00:00 2001 From: blikblum Date: Thu, 19 Feb 2009 13:32:54 +0000 Subject: [PATCH] * Refactor InternalInitFieldDefs to allow retrieve the FieldDefs without opening the dataset (Fix InitFieldDefs) git-svn-id: trunk@12750 - --- packages/fcl-db/src/sqlite/customsqliteds.pas | 35 +++++++++++-------- packages/fcl-db/src/sqlite/sqlite3ds.pas | 4 +-- packages/fcl-db/src/sqlite/sqliteds.pas | 4 +-- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/packages/fcl-db/src/sqlite/customsqliteds.pas b/packages/fcl-db/src/sqlite/customsqliteds.pas index b2f84e2176..7791713586 100644 --- a/packages/fcl-db/src/sqlite/customsqliteds.pas +++ b/packages/fcl-db/src/sqlite/customsqliteds.pas @@ -149,6 +149,7 @@ type function GetMasterSource: TDataSource; procedure SetFileName(const Value: String); function GetRowsAffected: Integer; virtual; abstract; + procedure RetrieveFieldDefs; virtual; abstract; //TDataSet overrides function AllocRecordBuffer: PChar; override; function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; override; @@ -169,6 +170,7 @@ type procedure InternalEdit; override; procedure InternalFirst; override; procedure InternalGotoBookmark(ABookmark: Pointer); override; + procedure InternalInitFieldDefs; override; procedure InternalInitRecord(Buffer: PChar); override; procedure InternalLast; override; procedure InternalOpen; override; @@ -817,6 +819,25 @@ begin FCurrentItem := PDataRecord(ABookmark^); end; +procedure TCustomSqliteDataset.InternalInitFieldDefs; +begin + //todo: retrieve only necessary fields + if FMasterLink.DataSource <> nil then + FSQL := 'Select * from ' + FTableName + ';'; //forced to obtain all fields + + if FSQL = '' then + begin + if FTablename = '' then + DatabaseError('Tablename not set', Self); + FSQL := 'Select * from ' + FTableName + ';'; + end; + + if FSqliteHandle = nil then + GetSqliteHandle; + + RetrieveFieldDefs; +end; + procedure TCustomSqliteDataset.InternalInitRecord(Buffer: PChar); var TempStr: String; @@ -840,20 +861,6 @@ procedure TCustomSqliteDataset.InternalOpen; var i: Integer; begin - //todo: retrieve only necessary fields - if FMasterLink.DataSource <> nil then - FSQL := 'Select * from ' + FTableName + ';'; //forced to obtain all fields - - if FSQL = '' then - begin - if FTablename = '' then - DatabaseError('Tablename not set',Self); - FSQL := 'Select * from '+FTableName+';'; - end; - - if FSqliteHandle = nil then - GetSqliteHandle; - InternalInitFieldDefs; //todo: move this to InitFieldDefs FSelectSqlStr := 'SELECT '; diff --git a/packages/fcl-db/src/sqlite/sqlite3ds.pas b/packages/fcl-db/src/sqlite/sqlite3ds.pas index 888e9aa9d2..87cea922e6 100644 --- a/packages/fcl-db/src/sqlite/sqlite3ds.pas +++ b/packages/fcl-db/src/sqlite/sqlite3ds.pas @@ -51,8 +51,8 @@ type procedure InternalCloseHandle; override; procedure BuildLinkedList; override; protected - procedure InternalInitFieldDefs; override; function GetRowsAffected:Integer; override; + procedure RetrieveFieldDefs; override; public procedure ExecuteDirect(const ASQL: String); override; function ReturnString: String; override; @@ -151,7 +151,7 @@ begin sqlite3_finalize(vm); end; -procedure TSqlite3Dataset.InternalInitFieldDefs; +procedure TSqlite3Dataset.RetrieveFieldDefs; const FieldSizeMap: array[Boolean] of Integer = (0, dsMaxStringSize); var diff --git a/packages/fcl-db/src/sqlite/sqliteds.pas b/packages/fcl-db/src/sqlite/sqliteds.pas index 3013e7c895..a220e7f656 100644 --- a/packages/fcl-db/src/sqlite/sqliteds.pas +++ b/packages/fcl-db/src/sqlite/sqliteds.pas @@ -52,7 +52,7 @@ type procedure InternalCloseHandle; override; procedure BuildLinkedList; override; protected - procedure InternalInitFieldDefs; override; + procedure RetrieveFieldDefs; override; function GetRowsAffected:Integer; override; public procedure ExecuteDirect(const ASQL: String); override; @@ -108,7 +108,7 @@ begin end; end; -procedure TSqliteDataset.InternalInitFieldDefs; +procedure TSqliteDataset.RetrieveFieldDefs; var ColumnCount, i:Integer; AType: TFieldType;