From 49a97584e62f9362f4dae432bde53468c345c753 Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Thu, 17 Mar 2011 23:03:54 +0000 Subject: [PATCH] Code preparation for non-MySQL connections: Extract abstract stuff into a new TDBConnection class, and let TMySQLConnection derive from that. Same with TDBQuery / TMySQLQuery. See issue #1008. --- packages/delphiXE/heidisql.dpr | 2 +- packages/delphiXE/heidisql.dproj | 2 +- source/connections.pas | 13 +- source/copytable.pas | 2 +- source/createdatabase.pas | 4 +- ...{mysql_connection.pas => dbconnection.pas} | 443 +++++++++++------- source/editvar.pas | 2 +- source/event_editor.pas | 2 +- source/grideditlinks.pas | 2 +- source/helpers.pas | 24 +- source/insertfiles.pas | 4 +- source/loaddata.pas | 6 +- source/main.pas | 133 +++--- source/printlist.pas | 2 +- source/routine_editor.pas | 2 +- source/selectdbobject.pas | 2 +- source/sqlhelp.pas | 26 +- source/table_editor.pas | 4 +- source/tabletools.pas | 17 +- source/trigger_editor.pas | 6 +- source/usermanager.pas | 8 +- source/view.pas | 2 +- 22 files changed, 395 insertions(+), 313 deletions(-) rename source/{mysql_connection.pas => dbconnection.pas} (87%) diff --git a/packages/delphiXE/heidisql.dpr b/packages/delphiXE/heidisql.dpr index 0640a1cf..2a8b72fc 100644 --- a/packages/delphiXE/heidisql.dpr +++ b/packages/delphiXE/heidisql.dpr @@ -33,7 +33,7 @@ uses uVistaFuncs in '..\..\source\uVistaFuncs.pas', routine_editor in '..\..\source\routine_editor.pas' {frmRoutineEditor}, table_editor in '..\..\source\table_editor.pas' {frmTableEditor}, - mysql_connection in '..\..\source\mysql_connection.pas', + dbconnection in '..\..\source\dbconnection.pas', trigger_editor in '..\..\source\trigger_editor.pas' {frmTriggerEditor: TFrame}, searchreplace in '..\..\source\searchreplace.pas' {frmSearchReplace}, event_editor in '..\..\source\event_editor.pas' {frmEventEditor: TFrame}, diff --git a/packages/delphiXE/heidisql.dproj b/packages/delphiXE/heidisql.dproj index 7f2c840e..071f0654 100644 --- a/packages/delphiXE/heidisql.dproj +++ b/packages/delphiXE/heidisql.dproj @@ -194,7 +194,7 @@
frmTableEditor
- +
frmTriggerEditor
TFrame diff --git a/source/connections.pas b/source/connections.pas index 8204d729..4e006622 100644 --- a/source/connections.pas +++ b/source/connections.pas @@ -11,7 +11,7 @@ interface uses Windows, SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls, VirtualTrees, Menus, Graphics, - mysql_connection; + dbconnection; type Tconnform = class(TForm) @@ -214,7 +214,7 @@ end; procedure Tconnform.btnOpenClick(Sender: TObject); var - Connection: TMySQLConnection; + Connection: TDBConnection; begin // Connect to selected session Screen.Cursor := crHourglass; @@ -542,7 +542,7 @@ procedure Tconnform.ListSessionsNewText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; NewText: String); var SessionKey: String; - Connection: TMySQLConnection; + Connection: TDBConnection; begin // Rename session OpenRegistry; @@ -587,11 +587,12 @@ end; procedure Tconnform.comboDatabasesDropDown(Sender: TObject); var - Connection: TMySQLConnection; + Connection: TDBConnection; + Params: TConnectionParameters; begin // Try to connect and lookup database names - Connection := TMySQLConnection.Create(Self); - Connection.Parameters := CurrentParams; + Params := CurrentParams; + Connection := Params.CreateConnection(Self); Connection.Parameters.AllDatabases := ''; Connection.LogPrefix := '['+SelectedSession+'] '; Connection.OnLog := Mainform.LogSQL; diff --git a/source/copytable.pas b/source/copytable.pas index f0db6f3c..f9a6be81 100644 --- a/source/copytable.pas +++ b/source/copytable.pas @@ -5,7 +5,7 @@ interface uses Windows, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Contnrs, - mysql_connection, VirtualTrees, SynEdit, SynMemo, Menus; + dbconnection, VirtualTrees, SynEdit, SynMemo, Menus; type TCopyTableForm = class(TForm) diff --git a/source/createdatabase.pas b/source/createdatabase.pas index a1d79dc8..b80b9fa9 100644 --- a/source/createdatabase.pas +++ b/source/createdatabase.pas @@ -4,7 +4,7 @@ interface uses Windows, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, SynEdit, SynMemo, - mysql_connection; + dbconnection; type TCreateDatabaseForm = class(TForm) @@ -27,7 +27,7 @@ type function GetCreateStatement: String; private { Private declarations } - CollationTable: TMySQLQuery; + CollationTable: TDBQuery; defaultCharset : String; currentCollation : String; public diff --git a/source/mysql_connection.pas b/source/dbconnection.pas similarity index 87% rename from source/mysql_connection.pas rename to source/dbconnection.pas index e423239e..d2628ff6 100644 --- a/source/mysql_connection.pas +++ b/source/dbconnection.pas @@ -1,4 +1,4 @@ -unit mysql_connection; +unit dbconnection; interface @@ -196,12 +196,14 @@ type TListNodeType = (lntNone, lntDb, lntTable, lntView, lntFunction, lntProcedure, lntTrigger, lntEvent, lntColumn); TListNodeTypes = Set of TListNodeType; - TMySQLConnection = class; + TDBConnection = class; + TDBQuery = class; + TDBQueryList = TObjectList; TDBObject = class(TPersistent) private FCreateCode: String; FCreateCodeFetched: Boolean; - FConnection: TMySQLConnection; + FConnection: TDBConnection; function GetObjType: String; function GetImageIndex: Integer; function GetCreateCode: String; @@ -211,13 +213,13 @@ type Created, Updated, LastChecked: TDateTime; Rows, Size, Version, AvgRowLen, MaxDataLen, IndexLen, DataLen, DataFree, AutoInc, CheckSum: Int64; NodeType: TListNodeType; - constructor Create(OwnerConnection: TMySQLConnection); + constructor Create(OwnerConnection: TDBConnection); procedure Assign(Source: TPersistent); override; function IsSameAs(CompareTo: TDBObject): Boolean; property ObjType: String read GetObjType; property ImageIndex: Integer read GetImageIndex; property CreateCode: String read GetCreateCode write SetCreateCode; - property Connection: TMySQLConnection read FConnection; + property Connection: TDBConnection read FConnection; end; PDBObject = ^TDBObject; TDBObjectList = class(TObjectList) @@ -351,6 +353,8 @@ type FLoginPrompt: Boolean; public constructor Create; + function CreateConnection(AOwner: TComponent): TDBConnection; + function CreateQuery(AOwner: TComponent): TDBQuery; published property NetType: TNetType read FNetType write FNetType; property Hostname: String read FHostname write FHostname; @@ -375,17 +379,14 @@ type end; - { TMySQLConnection } + { TDBConnection } - TMySQLLogCategory = (lcInfo, lcSQL, lcUserFiredSQL, lcError, lcDebug); - TMySQLLogEvent = procedure(Msg: String; Category: TMySQLLogCategory=lcInfo; Connection: TMySQLConnection=nil) of object; - TMySQLDatabaseEvent = procedure(Connection: TMySQLConnection; Database: String) of object; + TDBLogCategory = (lcInfo, lcSQL, lcUserFiredSQL, lcError, lcDebug); + TDBLogEvent = procedure(Msg: String; Category: TDBLogCategory=lcInfo; Connection: TDBConnection=nil) of object; + TDBEvent = procedure(Connection: TDBConnection; Database: String) of object; - TMySQLQuery = class; - TMySQLQueryList = TObjectList; - TMySQLConnection = class(TComponent) + TDBConnection = class(TComponent) private - FHandle: PMYSQL; FActive: Boolean; FConnectionStarted: Integer; FServerStarted: Integer; @@ -395,9 +396,9 @@ type FDatabase: String; FAllDatabases: TStringList; FLogPrefix: String; - FOnLog: TMySQLLogEvent; - FOnDatabaseChanged: TMySQLDatabaseEvent; - FOnDBObjectsCleared: TMySQLDatabaseEvent; + FOnLog: TDBLogEvent; + FOnDatabaseChanged: TDBEvent; + FOnDBObjectsCleared: TDBEvent; FRowsFound: Int64; FRowsAffected: Int64; FServerOS: String; @@ -408,66 +409,62 @@ type FIsUnicode: Boolean; FTableEngines: TStringList; FTableEngineDefault: String; - FCollationTable: TMySQLQuery; - FCharsetTable: TMySQLQuery; + FCollationTable: TDBQuery; + FCharsetTable: TDBQuery; FInformationSchemaObjects: TStringList; FDatabases: TDatabaseList; FObjectNamesInSelectedDB: TStrings; - FPlinkProcInfo: TProcessInformation; - FLastResults: Array of PMYSQL_RES; FResultCount: Integer; FCurrentUserHostCombination: String; FLockedByThread: TThread; - procedure SetActive(Value: Boolean); - procedure AssignProc(var Proc: FARPROC; Name: PAnsiChar); - procedure ClosePlink; + procedure SetActive(Value: Boolean); virtual; abstract; procedure SetDatabase(Value: String); - function GetThreadId: Cardinal; - function GetCharacterSet: String; - procedure SetCharacterSet(CharsetName: String); - function GetLastError: String; - function GetServerVersionStr: String; - function GetServerVersionInt: Integer; - function GetAllDatabases: TStringList; - function GetTableEngines: TStringList; - function GetCollationTable: TMySQLQuery; + function GetThreadId: Cardinal; virtual; abstract; + function GetCharacterSet: String; virtual; abstract; + procedure SetCharacterSet(CharsetName: String); virtual; abstract; + function GetLastError: String; virtual; abstract; + function GetServerVersionStr: String; virtual; abstract; + function GetServerVersionInt: Integer; virtual; abstract; + function GetAllDatabases: TStringList; virtual; abstract; + function GetTableEngines: TStringList; virtual; abstract; + function GetCollationTable: TDBQuery; virtual; abstract; function GetCollationList: TStringList; - function GetCharsetTable: TMySQLQuery; + function GetCharsetTable: TDBQuery; virtual; abstract; function GetCharsetList: TStringList; - function GetInformationSchemaObjects: TStringList; + function GetInformationSchemaObjects: TStringList; virtual; abstract; function GetConnectionUptime: Integer; function GetServerUptime: Integer; function GetCurrentUserHostCombination: String; - function DecodeAPIString(a: AnsiString): String; - procedure Log(Category: TMySQLLogCategory; Msg: String); + function DecodeAPIString(a: AnsiString): String; virtual; abstract; + procedure Log(Category: TDBLogCategory; Msg: String); procedure ClearCache(IncludeDBObjects: Boolean); procedure SetObjectNamesInSelectedDB; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; - function Query(SQL: String; DoStoreResult: Boolean=False; LogCategory: TMySQLLogCategory=lcSQL): PMYSQL_RES; + procedure Query(SQL: String; DoStoreResult: Boolean=False; LogCategory: TDBLogCategory=lcSQL); virtual; abstract; function EscapeString(Text: String; ProcessJokerChars: Boolean=False): String; function escChars(const Text: String; EscChar, Char1, Char2, Char3, Char4: Char): String; function UnescapeString(Text: String): String; function ConvertServerVersion(Version: Integer): String; - function GetResults(SQL: String): TMySQLQuery; + function GetResults(SQL: String): TDBQuery; function GetCol(SQL: String; Column: Integer=0): TStringList; function GetVar(SQL: String; Column: Integer=0): String; overload; function GetVar(SQL: String; Column: String): String; overload; - function Ping: Boolean; + function Ping: Boolean; virtual; abstract; function RefreshAllDatabases: TStringList; - function GetDBObjects(db: String; Refresh: Boolean=False): TDBObjectList; + function GetDBObjects(db: String; Refresh: Boolean=False): TDBObjectList; virtual; abstract; function DbObjectsCached(db: String): Boolean; - function ParseDateTime(Str: String): TDateTime; - function GetKeyColumns(Columns: TTableColumnList; Keys: TTableKeyList): TStringList; - function ConnectionInfo: TStringList; - function GetLastResults: TMySQLQueryList; + function ParseDateTime(Str: String): TDateTime; virtual; abstract; + function GetKeyColumns(Columns: TTableColumnList; Keys: TTableKeyList): TStringList; virtual; abstract; + function ConnectionInfo: TStringList; virtual; abstract; + function GetLastResults: TDBQueryList; virtual; abstract; procedure ClearDbObjects(db: String); procedure ClearAllDbObjects; - procedure ParseTableStructure(CreateTable: String; Columns: TTableColumnList; Keys: TTableKeyList; ForeignKeys: TForeignKeyList); - procedure ParseViewStructure(CreateCode, ViewName: String; Columns: TTableColumnList; var Algorithm, Definer, CheckOption, SelectCode: String); + procedure ParseTableStructure(CreateTable: String; Columns: TTableColumnList; Keys: TTableKeyList; ForeignKeys: TForeignKeyList); virtual; abstract; + procedure ParseViewStructure(CreateCode, ViewName: String; Columns: TTableColumnList; var Algorithm, Definer, CheckOption, SelectCode: String); virtual; abstract; procedure ParseRoutineStructure(CreateCode: String; Parameters: TRoutineParamList; - var Deterministic: Boolean; var Definer, Returns, DataAccess, Security, Comment, Body: String); + var Deterministic: Boolean; var Definer, Returns, DataAccess, Security, Comment, Body: String); virtual; abstract; property SessionName: String read FSessionName write FSessionName; property Parameters: TConnectionParameters read FParameters write FParameters; property ThreadId: Cardinal read GetThreadId; @@ -487,9 +484,9 @@ type property AllDatabases: TStringList read GetAllDatabases; property TableEngines: TStringList read GetTableEngines; property TableEngineDefault: String read FTableEngineDefault; - property CollationTable: TMySQLQuery read GetCollationTable; + property CollationTable: TDBQuery read GetCollationTable; property CollationList: TStringList read GetCollationList; - property CharsetTable: TMySQLQuery read GetCharsetTable; + property CharsetTable: TDBQuery read GetCharsetTable; property CharsetList: TStringList read GetCharsetList; property InformationSchemaObjects: TStringList read GetInformationSchemaObjects; property ObjectNamesInSelectedDB: TStrings read FObjectNamesInSelectedDB write FObjectNamesInSelectedDB; @@ -500,20 +497,59 @@ type property Active: Boolean read FActive write SetActive default False; property Database: String read FDatabase write SetDatabase; property LogPrefix: String read FLogPrefix write FLogPrefix; - // Events - property OnLog: TMySQLLogEvent read FOnLog write FOnLog; - property OnDatabaseChanged: TMySQLDatabaseEvent read FOnDatabaseChanged write FOnDatabaseChanged; - property OnDBObjectsCleared: TMySQLDatabaseEvent read FOnDBObjectsCleared write FOnDBObjectsCleared; + property OnLog: TDBLogEvent read FOnLog write FOnLog; + property OnDatabaseChanged: TDBEvent read FOnDatabaseChanged write FOnDatabaseChanged; + property OnDBObjectsCleared: TDBEvent read FOnDBObjectsCleared write FOnDBObjectsCleared; end; - TMySQLConnectionList = TObjectList; + TDBConnectionList = TObjectList; - { TMySQLQuery } + { TMySQLConnection } - TMySQLQuery = class(TComponent) + TMySQLQuery = class; + TMySQLRawResults = Array of PMYSQL_RES; + TMySQLConnection = class(TDBConnection) + private + FHandle: PMYSQL; + FLastRawResults: TMySQLRawResults; + FPlinkProcInfo: TProcessInformation; + procedure SetActive(Value: Boolean); override; + procedure AssignProc(var Proc: FARPROC; Name: PAnsiChar); + procedure ClosePlink; + function GetThreadId: Cardinal;override; + function GetCharacterSet: String; override; + procedure SetCharacterSet(CharsetName: String); override; + function GetLastError: String; override; + function GetServerVersionStr: String; override; + function GetServerVersionInt: Integer; override; + function GetAllDatabases: TStringList; override; + function GetTableEngines: TStringList; override; + function GetCollationTable: TDBQuery; override; + function GetCharsetTable: TDBQuery; override; + function GetInformationSchemaObjects: TStringList; override; + function DecodeAPIString(a: AnsiString): String; override; + public + procedure Query(SQL: String; DoStoreResult: Boolean=False; LogCategory: TDBLogCategory=lcSQL); override; + function Ping: Boolean; override; + function GetDBObjects(db: String; Refresh: Boolean=False): TDBObjectList; override; + function ParseDateTime(Str: String): TDateTime; override; + function GetKeyColumns(Columns: TTableColumnList; Keys: TTableKeyList): TStringList; override; + function ConnectionInfo: TStringList; override; + function GetLastResults: TDBQueryList; override; + procedure ParseTableStructure(CreateTable: String; Columns: TTableColumnList; Keys: TTableKeyList; ForeignKeys: TForeignKeyList); override; + procedure ParseViewStructure(CreateCode, ViewName: String; Columns: TTableColumnList; var Algorithm, Definer, CheckOption, SelectCode: String); override; + procedure ParseRoutineStructure(CreateCode: String; Parameters: TRoutineParamList; + var Deterministic: Boolean; var Definer, Returns, DataAccess, Security, Comment, Body: String); override; + property LastRawResults: TMySQLRawResults read FLastRawResults; + end; + + + { TDBQuery } + + TDBQuery = class(TComponent) private FSQL: String; - FConnection: TMySQLConnection; + FConnection: TDBConnection; FRecNo, FRecordCount: Int64; FColumnNames: TStringList; @@ -521,9 +557,6 @@ type FColumnTypes: Array of TDatatype; FColumnLengths: TIntegerDynArray; FColumnFlags: TCardinalDynArray; - FResultList: Array of PMYSQL_RES; - FCurrentResults: PMYSQL_RES; - FCurrentRow: PMYSQL_ROW; FCurrentUpdateRow: TRowData; FEof: Boolean; FStoreResult: Boolean; @@ -532,8 +565,7 @@ type FForeignKeys: TForeignKeyList; FEditingPrepared: Boolean; FUpdateData: TUpdateData; - procedure SetSQL(Value: String); - procedure SetRecNo(Value: Int64); + procedure SetRecNo(Value: Int64); virtual; abstract; procedure SetColumnOrgNames(Value: TStringList); procedure CreateUpdateRow; function GetKeyColumns: TStringList; @@ -542,23 +574,23 @@ type public constructor Create(AOwner: TComponent); override; destructor Destroy; override; - procedure Execute(AddResult: Boolean=False; Res: PMYSQL_RES=nil); + procedure Execute(AddResult: Boolean=False; UseRawResult: Integer=-1); virtual; abstract; procedure First; procedure Next; function ColumnCount: Integer; - function Col(Column: Integer; IgnoreErrors: Boolean=False): String; overload; + function Col(Column: Integer; IgnoreErrors: Boolean=False): String; overload; virtual; abstract; function Col(ColumnName: String; IgnoreErrors: Boolean=False): String; overload; - function BinColAsHex(Column: Integer; IgnoreErrors: Boolean=False): String; + function BinColAsHex(Column: Integer; IgnoreErrors: Boolean=False): String; virtual; abstract; function DataType(Column: Integer): TDataType; function MaxLength(Column: Integer): Int64; function ValueList(Column: Integer): TStringList; function ColExists(Column: String): Boolean; - function ColIsPrimaryKeyPart(Column: Integer): Boolean; - function ColIsUniqueKeyPart(Column: Integer): Boolean; - function ColIsKeyPart(Column: Integer): Boolean; - function IsNull(Column: Integer): Boolean; overload; + function ColIsPrimaryKeyPart(Column: Integer): Boolean; virtual; abstract; + function ColIsUniqueKeyPart(Column: Integer): Boolean; virtual; abstract; + function ColIsKeyPart(Column: Integer): Boolean; virtual; abstract; + function IsNull(Column: Integer): Boolean; overload; virtual; abstract; function IsNull(Column: String): Boolean; overload; - function HasResult: Boolean; + function HasResult: Boolean; virtual; abstract; procedure CheckEditable; function DeleteRow: Boolean; function InsertRow: Cardinal; @@ -569,8 +601,8 @@ type function Modified: Boolean; overload; function Inserted: Boolean; function SaveModifications: Boolean; - function DatabaseName: String; - function TableName: String; + function DatabaseName: String; virtual; abstract; + function TableName: String; virtual; abstract; function QuotedDbAndTableName: String; procedure DiscardModifications; procedure PrepareEditing; @@ -581,10 +613,32 @@ type property StoreResult: Boolean read FStoreResult write FStoreResult; property ColumnOrgNames: TStringList read FColumnOrgNames write SetColumnOrgNames; published - property SQL: String read FSQL write SetSQL; - property Connection: TMySQLConnection read FConnection write FConnection; + property SQL: String read FSQL write FSQL; + property Connection: TDBConnection read FConnection write FConnection; + end; + PDBQuery = ^TDBQuery; + + { TMySQLQuery } + + TMySQLQuery = class(TDBQuery) + private + FResultList: Array of PMYSQL_RES; + FCurrentResults: PMYSQL_RES; + FCurrentRow: PMYSQL_ROW; + procedure SetRecNo(Value: Int64); override; + public + destructor Destroy; override; + procedure Execute(AddResult: Boolean=False; UseRawResult: Integer=-1); override; + function Col(Column: Integer; IgnoreErrors: Boolean=False): String; overload; override; + function BinColAsHex(Column: Integer; IgnoreErrors: Boolean=False): String; override; + function ColIsPrimaryKeyPart(Column: Integer): Boolean; override; + function ColIsUniqueKeyPart(Column: Integer): Boolean; override; + function ColIsKeyPart(Column: Integer): Boolean; override; + function IsNull(Column: Integer): Boolean; overload; override; + function HasResult: Boolean; override; + function DatabaseName: String; override; + function TableName: String; override; end; - PMySQLQuery = ^TMySQLQuery; function QuoteIdent(Identifier: String; AlwaysQuote: Boolean=True; Glue: Char=#0): String; function DeQuoteIdent(Identifier: String; Glue: Char=#0): String; @@ -645,10 +699,33 @@ begin end; +function TConnectionParameters.CreateConnection(AOwner: TComponent): TDBConnection; +begin + case FNetType of + ntTCPIP, ntNamedPipe, ntSSHTunnel: + Result := TMySQLConnection.Create(AOwner); + else + Raise Exception.Create('Unhandled connection type ('+IntToStr(Integer(FNetType))+')'); + end; + Result.Parameters := Self; +end; + + +function TConnectionParameters.CreateQuery(AOwner: TComponent): TDBQuery; +begin + case FNetType of + ntTCPIP, ntNamedPipe, ntSSHTunnel: + Result := TMySQLQuery.Create(AOwner); + else + Raise Exception.Create('Unhandled connection type ('+IntToStr(Integer(FNetType))+')'); + end; +end; + + { TMySQLConnection } -constructor TMySQLConnection.Create(AOwner: TComponent); +constructor TDBConnection.Create(AOwner: TComponent); begin inherited Create(AOwner); FSessionName := 'Unnamed'; @@ -666,7 +743,7 @@ begin end; -destructor TMySQLConnection.Destroy; +destructor TDBConnection.Destroy; begin if Active then Active := False; FOnDBObjectsCleared := nil; @@ -942,12 +1019,12 @@ end; {** Executes a query } -function TMySQLConnection.Query(SQL: String; DoStoreResult: Boolean=False; LogCategory: TMySQLLogCategory=lcSQL): PMYSQL_RES; +procedure TMySQLConnection.Query(SQL: String; DoStoreResult: Boolean=False; LogCategory: TDBLogCategory=lcSQL); var querystatus: Integer; NativeSQL: AnsiString; TimerStart: Cardinal; - NextResult: PMYSQL_RES; + QueryResult: PMYSQL_RES; begin if (FLockedByThread <> nil) and (FLockedByThread.ThreadID <> GetCurrentThreadID) then begin Log(lcDebug, 'Waiting for running query to finish ...'); @@ -967,7 +1044,7 @@ begin else NativeSQL := AnsiString(SQL); TimerStart := GetTickCount; - SetLength(FLastResults, 0); + SetLength(FLastRawResults, 0); FResultCount := 0; querystatus := mysql_real_query(FHandle, PAnsiChar(NativeSQL), Length(NativeSQL)); FLastQueryDuration := GetTickCount - TimerStart; @@ -981,39 +1058,33 @@ begin // See: http://dev.mysql.com/doc/refman/5.0/en/mysql-store-result.html FRowsAffected := mysql_affected_rows(FHandle); TimerStart := GetTickCount; - Result := mysql_store_result(FHandle); + QueryResult := mysql_store_result(FHandle); FLastQueryNetworkDuration := GetTickCount - TimerStart; - if (Result = nil) and (FRowsAffected = -1) then begin + if (QueryResult = nil) and (FRowsAffected = -1) then begin // Indicates a late error, e.g. triggered by mysql_store_result(), after selecting a stored // function with invalid SQL body. Also SHOW TABLE STATUS on older servers. Log(lcError, GetLastError); raise EDatabaseError.Create(GetLastError); end; - if Result <> nil then begin - FRowsFound := mysql_num_rows(Result); + if QueryResult <> nil then begin + FRowsFound := mysql_num_rows(QueryResult); FRowsAffected := 0; Log(lcDebug, IntToStr(RowsFound)+' rows found.'); - if DoStoreResult then begin - SetLength(FLastResults, 1); - FLastResults[0] := Result; - end else begin - mysql_free_result(Result); - Result := nil; - end; - - // No support for real multi results yet, throw them away, so mysql_ping() does not crash on the *next* query. - while mysql_next_result(FHandle) = 0 do begin - NextResult := mysql_store_result(FHandle); - if NextResult <> nil then begin + while true do begin + if QueryResult <> nil then begin if DoStoreResult then begin - SetLength(FLastResults, Length(FLastResults)+1); - FLastResults[Length(FLastResults)-1] := NextResult; - end else - mysql_free_result(NextResult); + SetLength(FLastRawResults, Length(FLastRawResults)+1); + FLastRawResults[Length(FLastRawResults)-1] := QueryResult; + end else begin + mysql_free_result(QueryResult); + end; end; + if mysql_next_result(FHandle) <> 0 then + break; + QueryResult := mysql_store_result(FHandle); end; - FResultCount := Length(FLastResults); + FResultCount := Length(FLastRawResults); end else begin // Query did not return a result @@ -1031,17 +1102,17 @@ begin end; -function TMySQLConnection.GetLastResults: TMySQLQueryList; +function TMySQLConnection.GetLastResults: TDBQueryList; var - r: TMySQLQuery; + r: TDBQuery; i: Integer; begin - Result := TMySQLQueryList.Create(False); - for i:=Low(FLastResults) to High(FLastResults) do begin - r := TMySQLQuery.Create(nil); + Result := TDBQueryList.Create(False); + for i:=Low(FLastRawResults) to High(FLastRawResults) do begin + r := Parameters.CreateQuery(nil); r.Connection := Self; r.SQL := FLastQuerySQL; - r.Execute(True, FLastResults[i]); + r.Execute(True, i); Result.Add(r); end; end; @@ -1050,7 +1121,7 @@ end; {** Set "Database" property and select that db if connected } -procedure TMySQLConnection.SetDatabase(Value: String); +procedure TDBConnection.SetDatabase(Value: String); begin if Value <> FDatabase then begin if Value = '' then begin @@ -1193,7 +1264,7 @@ begin end; -function TMySQLConnection.RefreshAllDatabases: TStringList; +function TDBConnection.RefreshAllDatabases: TStringList; begin FreeAndNil(FAllDatabases); Result := AllDatabases; @@ -1203,7 +1274,7 @@ end; {** Convert integer version to real version string } -function TMySQLConnection.ConvertServerVersion(Version: Integer): String; +function TDBConnection.ConvertServerVersion(Version: Integer): String; var v : String; v1, v2 : Byte; @@ -1215,9 +1286,9 @@ begin end; -function TMySQLConnection.GetResults(SQL: String): TMySQLQuery; +function TDBConnection.GetResults(SQL: String): TDBQuery; begin - Result := TMySQLQuery.Create(Self); + Result := Parameters.CreateQuery(Self); Result.Connection := Self; Result.SQL := SQL; try @@ -1232,7 +1303,7 @@ end; {** Call log event if assigned to object } -procedure TMySQLConnection.Log(Category: TMySQLLogCategory; Msg: String); +procedure TDBConnection.Log(Category: TDBLogCategory; Msg: String); begin if Assigned(FOnLog) then FOnLog(FLogPrefix+Msg, Category, Self); @@ -1251,7 +1322,7 @@ end; @param boolean Escape text so it can be used in a LIKE-comparison @return string } -function TMySQLConnection.EscapeString(Text: String; ProcessJokerChars: Boolean=false): String; +function TDBConnection.EscapeString(Text: String; ProcessJokerChars: Boolean=false): String; var c1, c2, c3, c4, EscChar: Char; begin @@ -1287,7 +1358,7 @@ end; {*** Attempt to do string replacement faster than StringReplace } -function TMySQLConnection.escChars(const Text: String; EscChar, Char1, Char2, Char3, Char4: Char): String; +function TDBConnection.escChars(const Text: String; EscChar, Char1, Char2, Char3, Char4: Char): String; const // Attempt to match whatever the CPU cache will hold. block: Cardinal = 65536; @@ -1335,7 +1406,7 @@ begin end; -function TMySQLConnection.UnescapeString(Text: String): String; +function TDBConnection.UnescapeString(Text: String): String; begin // Return text with MySQL special sequences turned back to normal characters Result := StringReplace(Text, '\r', #13, [rfReplaceAll]); @@ -1390,9 +1461,9 @@ begin end; -function TMySQLConnection.GetCol(SQL: String; Column: Integer=0): TStringList; +function TDBConnection.GetCol(SQL: String; Column: Integer=0): TStringList; var - Results: TMySQLQuery; + Results: TDBQuery; begin Results := GetResults(SQL); Result := TStringList.Create; @@ -1407,9 +1478,9 @@ end; {** Get single cell value via SQL query, identified by column number } -function TMySQLConnection.GetVar(SQL: String; Column: Integer=0): String; +function TDBConnection.GetVar(SQL: String; Column: Integer=0): String; var - Results: TMySQLQuery; + Results: TDBQuery; begin Results := GetResults(SQL); if Results.RecordCount > 0 then @@ -1423,9 +1494,9 @@ end; {** Get single cell value via SQL query, identified by column name } -function TMySQLConnection.GetVar(SQL: String; Column: String): String; +function TDBConnection.GetVar(SQL: String; Column: String): String; var - Results: TMySQLQuery; + Results: TDBQuery; begin Results := GetResults(SQL); if Results.RecordCount > 0 then @@ -1438,7 +1509,7 @@ end; function TMySQLConnection.GetTableEngines: TStringList; var - ShowEngines, HaveEngines: TMySQLQuery; + ShowEngines, HaveEngines: TDBQuery; engineName, engineSupport: String; PossibleEngines: TStringList; begin @@ -1490,7 +1561,7 @@ begin end; -function TMySQLConnection.GetCollationTable: TMySQLQuery; +function TMySQLConnection.GetCollationTable: TDBQuery; begin Log(lcDebug, 'Fetching list of collations ...'); Ping; @@ -1502,9 +1573,9 @@ begin end; -function TMySQLConnection.GetCollationList: TStringList; +function TDBConnection.GetCollationList: TStringList; var - c: TMySQLQuery; + c: TDBQuery; begin c := CollationTable; Result := TStringList.Create; @@ -1515,7 +1586,7 @@ begin end; -function TMySQLConnection.GetCharsetTable: TMySQLQuery; +function TMySQLConnection.GetCharsetTable: TDBQuery; begin Log(lcDebug, 'Fetching charset list ...'); Ping; @@ -1525,9 +1596,9 @@ begin end; -function TMySQLConnection.GetCharsetList: TStringList; +function TDBConnection.GetCharsetList: TStringList; var - c: TMySQLQuery; + c: TDBQuery; begin c := CharsetTable; Result := TStringList.Create; @@ -1555,7 +1626,7 @@ begin end; -function TMySQLConnection.GetConnectionUptime: Integer; +function TDBConnection.GetConnectionUptime: Integer; begin // Return seconds since last connect if not FActive then @@ -1565,14 +1636,14 @@ begin end; -function TMySQLConnection.GetServerUptime: Integer; +function TDBConnection.GetServerUptime: Integer; begin // Return server uptime in seconds Result := Integer(GetTickCount div 1000) - FServerStarted; end; -function TMySQLConnection.GetCurrentUserHostCombination: String; +function TDBConnection.GetCurrentUserHostCombination: String; begin // Return current user@host combination, used by various object editors for DEFINER clauses Log(lcDebug, 'Fetching user@host ...'); @@ -1583,7 +1654,7 @@ begin end; -procedure TMySQLConnection.ClearCache(IncludeDBObjects: Boolean); +procedure TDBConnection.ClearCache(IncludeDBObjects: Boolean); begin // Free cached lists and results. Called when the connection was closed and/or destroyed FreeAndNil(FCollationTable); @@ -1597,7 +1668,7 @@ begin end; -procedure TMySQLConnection.ClearDbObjects(db: String); +procedure TDBConnection.ClearDbObjects(db: String); var i: Integer; begin @@ -1613,7 +1684,7 @@ begin end; -procedure TMySQLConnection.ClearAllDbObjects; +procedure TDBConnection.ClearAllDbObjects; var i: Integer; begin @@ -1622,7 +1693,7 @@ begin end; -function TMySQLConnection.DbObjectsCached(db: String): Boolean; +function TDBConnection.DbObjectsCached(db: String): Boolean; var i: Integer; begin @@ -1664,7 +1735,7 @@ end; function TMySQLConnection.GetDbObjects(db: String; Refresh: Boolean=False): TDBObjectList; var obj: TDBObject; - Results: TMySQLQuery; + Results: TDBQuery; rx: TRegExpr; i: Integer; begin @@ -1694,6 +1765,7 @@ begin try Results := GetResults('SHOW TABLE STATUS FROM '+QuoteIdent(db)); except + on E:EDatabaseError do; end; if Assigned(Results) then begin while not Results.Eof do begin @@ -1740,6 +1812,7 @@ begin if ServerVersionInt >= 50000 then try Results := GetResults('SHOW FUNCTION STATUS WHERE '+QuoteIdent('Db')+'='+EscapeString(db)); except + on E:EDatabaseError do; end; if Assigned(Results) then begin while not Results.Eof do begin @@ -1760,6 +1833,7 @@ begin if ServerVersionInt >= 50000 then try Results := GetResults('SHOW PROCEDURE STATUS WHERE '+QuoteIdent('Db')+'='+EscapeString(db)); except + on E:EDatabaseError do; end; if Assigned(Results) then begin while not Results.Eof do begin @@ -1780,6 +1854,7 @@ begin if ServerVersionInt >= 50010 then try Results := GetResults('SHOW TRIGGERS FROM '+QuoteIdent(db)); except + on E:EDatabaseError do; end; if Assigned(Results) then begin while not Results.Eof do begin @@ -1799,6 +1874,7 @@ begin if ServerVersionInt >= 50100 then try Results := GetResults('SHOW EVENTS FROM '+QuoteIdent(db)); except + on E:EDatabaseError do; end; if Assigned(Results) then begin while not Results.Eof do begin @@ -1827,7 +1903,7 @@ begin end; -procedure TMySQLConnection.SetObjectNamesInSelectedDB; +procedure TDBConnection.SetObjectNamesInSelectedDB; var i: Integer; Objects: TDBObjectList; @@ -1948,7 +2024,7 @@ var Col: TTableColumn; Key: TTableKey; ForeignKey: TForeignKey; - Collations: TMySQLQuery; + Collations: TDBQuery; begin if Assigned(Columns) then Columns.Clear; if Assigned(Keys) then Keys.Clear; @@ -2176,7 +2252,7 @@ procedure TMySQLConnection.ParseViewStructure(CreateCode, ViewName: String; Colu var rx: TRegExpr; Col: TTableColumn; - Results: TMySQLQuery; + Results: TDBQuery; DbName, DbAndViewName: String; begin if CreateCode <> '' then begin @@ -2354,7 +2430,7 @@ end; { TMySQLQuery } -constructor TMySQLQuery.Create(AOwner: TComponent); +constructor TDBQuery.Create(AOwner: TComponent); begin inherited Create(AOwner); FRecNo := -1; @@ -2367,6 +2443,12 @@ begin end; +destructor TDBQuery.Destroy; +begin + inherited Destroy; +end; + + destructor TMySQLQuery.Destroy; var i: Integer; @@ -2388,13 +2470,7 @@ begin end; -procedure TMySQLQuery.SetSQL(Value: String); -begin - FSQL := Value; -end; - - -procedure TMySQLQuery.Execute(AddResult: Boolean=False; Res: PMYSQL_RES=nil); +procedure TMySQLQuery.Execute(AddResult: Boolean=False; UseRawResult: Integer=-1); var i, j, NumFields: Integer; NumResults: Int64; @@ -2402,10 +2478,15 @@ var IsBinary: Boolean; FLastResult: PMYSQL_RES; begin - if Res <> nil then - FLastResult := Res + // Execute a query, or just take over one of the last result pointers + if UseRawResult = -1 then begin + Connection.Query(FSQL, FStoreResult); + UseRawResult := 0; + end; + if Connection.ResultCount > UseRawResult then + FLastResult := TMySQLConnection(Connection).LastRawResults[UseRawResult] else - FLastResult := Connection.Query(FSQL, FStoreResult); + FLastResult := nil; if AddResult and (Length(FResultList) = 0) then AddResult := False; if AddResult then @@ -2474,20 +2555,20 @@ begin end; -procedure TMySQLQuery.SetColumnOrgNames(Value: TStringList); +procedure TDBQuery.SetColumnOrgNames(Value: TStringList); begin // Retrieve original column names from caller FColumnOrgNames.Text := Value.Text; end; -procedure TMySQLQuery.First; +procedure TDBQuery.First; begin RecNo := 0; end; -procedure TMySQLQuery.Next; +procedure TDBQuery.Next; begin RecNo := RecNo + 1; end; @@ -2551,7 +2632,7 @@ begin end; -function TMySQLQuery.ColumnCount: Integer; +function TDBQuery.ColumnCount: Integer; begin Result := ColumnNames.Count; end; @@ -2578,7 +2659,7 @@ begin end; -function TMySQLQuery.Col(ColumnName: String; IgnoreErrors: Boolean=False): String; +function TDBQuery.Col(ColumnName: String; IgnoreErrors: Boolean=False): String; var idx: Integer; begin @@ -2604,7 +2685,7 @@ begin end; -function TMySQLQuery.DataType(Column: Integer): TDataType; +function TDBQuery.DataType(Column: Integer): TDataType; var Col: TTableColumn; begin @@ -2616,7 +2697,7 @@ begin end; -function TMySQLQuery.MaxLength(Column: Integer): Int64; +function TDBQuery.MaxLength(Column: Integer): Int64; var ColAttr: TTableColumn; begin @@ -2636,7 +2717,7 @@ begin end; -function TMySQLQuery.ValueList(Column: Integer): TStringList; +function TDBQuery.ValueList(Column: Integer): TStringList; var ColAttr: TTableColumn; begin @@ -2649,7 +2730,7 @@ begin end; -function TMySQLQuery.ColAttributes(Column: Integer): TTableColumn; +function TDBQuery.ColAttributes(Column: Integer): TTableColumn; var i: Integer; begin @@ -2667,7 +2748,7 @@ begin end; -function TMySQLQuery.ColExists(Column: String): Boolean; +function TDBQuery.ColExists(Column: String): Boolean; begin Result := (ColumnNames <> nil) and (ColumnNames.IndexOf(Column) > -1); end; @@ -2700,7 +2781,7 @@ begin end; -function TMySQLQuery.IsNull(Column: String): Boolean; +function TDBQuery.IsNull(Column: String): Boolean; begin Result := IsNull(FColumnNames.IndexOf(Column)); end; @@ -2712,9 +2793,9 @@ begin end; -procedure TMySQLQuery.PrepareEditing; +procedure TDBQuery.PrepareEditing; var - Res: TMySQLQuery; + Res: TDBQuery; CreateCode, Dummy: String; begin // Try to fetch column names and keys @@ -2737,7 +2818,7 @@ begin end; -function TMySQLQuery.DeleteRow: Boolean; +function TDBQuery.DeleteRow: Boolean; var sql: String; IsVirtual: Boolean; @@ -2757,7 +2838,7 @@ begin end; -function TMySQLQuery.InsertRow: Cardinal; +function TDBQuery.InsertRow: Cardinal; var Row, OtherRow: TRowData; c: TCellData; @@ -2800,7 +2881,7 @@ begin end; -procedure TMySQLQuery.SetCol(Column: Integer; NewText: String; Null: Boolean); +procedure TDBQuery.SetCol(Column: Integer; NewText: String; Null: Boolean); begin PrepareEditing; if not Assigned(FCurrentUpdateRow) then begin @@ -2817,7 +2898,7 @@ begin end; -procedure TMySQLQuery.CreateUpdateRow; +procedure TDBQuery.CreateUpdateRow; var i: Integer; c: TCellData; @@ -2840,11 +2921,11 @@ begin end; -function TMySQLQuery.EnsureFullRow: Boolean; +function TDBQuery.EnsureFullRow: Boolean; var i: Integer; sql: String; - Data: TMySQLQuery; + Data: TDBQuery; begin // Load full column values Result := True; @@ -2874,7 +2955,7 @@ begin end; -function TMySQLQuery.HasFullData: Boolean; +function TDBQuery.HasFullData: Boolean; var Val: String; i: Integer; @@ -2892,7 +2973,7 @@ begin end; -function TMySQLQuery.SaveModifications: Boolean; +function TDBQuery.SaveModifications: Boolean; var i: Integer; Row: TRowData; @@ -2969,7 +3050,7 @@ begin end; -procedure TMySQLQuery.DiscardModifications; +procedure TDBQuery.DiscardModifications; var x: Integer; c: TCellData; @@ -2988,7 +3069,7 @@ begin end; -function TMySQLQuery.Modified(Column: Integer): Boolean; +function TDBQuery.Modified(Column: Integer): Boolean; begin Result := False; if FEditingPrepared and Assigned(FCurrentUpdateRow) then try @@ -3000,7 +3081,7 @@ begin end; -function TMySQLQuery.Modified: Boolean; +function TDBQuery.Modified: Boolean; var x, y: Integer; begin @@ -3017,7 +3098,7 @@ begin end; -function TMySQLQuery.Inserted: Boolean; +function TDBQuery.Inserted: Boolean; begin // Check if current row was inserted and not yet posted to the server Result := False; @@ -3088,7 +3169,7 @@ begin end; -function TMySQLQuery.QuotedDbAndTableName: String; +function TDBQuery.QuotedDbAndTableName: String; var db: String; begin @@ -3100,7 +3181,7 @@ begin end; -function TMySQLQuery.GetKeyColumns: TStringList; +function TDBQuery.GetKeyColumns: TStringList; var NeededCols: TStringList; i: Integer; @@ -3122,7 +3203,7 @@ begin end; -procedure TMySQLQuery.CheckEditable; +procedure TDBQuery.CheckEditable; var i: Integer; begin @@ -3136,7 +3217,7 @@ begin end; -function TMySQLQuery.GetWhereClause: String; +function TDBQuery.GetWhereClause: String; var i, j: Integer; NeededCols: TStringList; @@ -3212,7 +3293,7 @@ end; { TDBObject } -constructor TDBObject.Create(OwnerConnection: TMySQLConnection); +constructor TDBObject.Create(OwnerConnection: TDBConnection); begin NodeType := lntNone; Name := ''; diff --git a/source/editvar.pas b/source/editvar.pas index e6006529..77b0d88a 100644 --- a/source/editvar.pas +++ b/source/editvar.pas @@ -4,7 +4,7 @@ interface uses Windows, SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, - mysql_connection; + dbconnection; type TfrmEditVariable = class(TForm) diff --git a/source/event_editor.pas b/source/event_editor.pas index 3a1b7235..f47abfc3 100644 --- a/source/event_editor.pas +++ b/source/event_editor.pas @@ -5,7 +5,7 @@ interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, SynEdit, SynMemo, SynRegExpr, ComCtrls, ExtCtrls, WideStrUtils, - helpers, mysql_connection; + helpers, dbconnection; type TFrame = TDBObjectEditor; diff --git a/source/grideditlinks.pas b/source/grideditlinks.pas index 9d08f01f..b303607d 100644 --- a/source/grideditlinks.pas +++ b/source/grideditlinks.pas @@ -7,7 +7,7 @@ interface uses Windows, Forms, Graphics, Messages, VirtualTrees, ComCtrls, SysUtils, Classes, StdCtrls, ExtCtrls, CheckLst, Controls, Types, Dialogs, Mask, DateUtils, Math, - mysql_connection, mysql_structures, helpers, texteditor, bineditor; + dbconnection, mysql_structures, helpers, texteditor, bineditor; type // Radio buttons and checkboxes which do not pass key to their parent control diff --git a/source/helpers.pas b/source/helpers.pas index b90877c3..6321fea4 100644 --- a/source/helpers.pas +++ b/source/helpers.pas @@ -12,7 +12,7 @@ uses Classes, SysUtils, Graphics, GraphUtil, ClipBrd, Dialogs, Forms, Controls, ComCtrls, ShellApi, CheckLst, Windows, Contnrs, ShlObj, ActiveX, VirtualTrees, SynRegExpr, Messages, Math, Registry, SynEditHighlighter, DateUtils, Generics.Collections, StrUtils, AnsiStrings, TlHelp32, Types, - mysql_connection, mysql_structures; + dbconnection, mysql_structures; type @@ -74,7 +74,7 @@ type // Threading stuff TQueryThread = class(TThread) private - FConnection: TMySQLConnection; + FConnection: TDBConnection; FBatch: TSQLBatch; FBatchInOneGo: Boolean; FStopOnErrors: Boolean; @@ -86,16 +86,16 @@ type FQueryNetTime: Cardinal; FRowsAffected: Int64; FRowsFound: Int64; - FResults: TMySQLQueryList; + FResults: TDBQueryList; private procedure BeforeQuery; procedure AfterQuery; procedure BatchFinished; public - property Connection: TMySQLConnection read FConnection; + property Connection: TDBConnection read FConnection; property Batch: TSQLBatch read FBatch; property BatchPosition: Integer read FBatchPosition; - property Results: TMySQLQueryList read FResults; + property Results: TDBQueryList read FResults; property QueriesInPacket: Integer read FQueriesInPacket; property QueryTime: Cardinal read FQueryTime; property QueryNetTime: Cardinal read FQueryNetTime; @@ -103,7 +103,7 @@ type property RowsFound: Int64 read FRowsFound; property Aborted: Boolean read FAborted write FAborted; property ErrorMessage: String read FErrorMessage; - constructor Create(Connection: TMySQLConnection; Batch: TSQLBatch); + constructor Create(Connection: TDBConnection; Batch: TSQLBatch); procedure Execute; override; end; @@ -122,7 +122,7 @@ type function decrypt(str: String): String; function htmlentities(str: String): String; procedure GridExport(Grid: TVirtualStringTree; S: TStream; ExportFormat: TGridExportFormat); - function BestTableName(Data: TMySQLQuery): String; + function BestTableName(Data: TDBQuery): String; function urlencode(url: String): String; procedure StreamWrite(S: TStream; Text: String = ''); procedure ToggleCheckListBox(list: TCheckListBox; state: Boolean); Overload; @@ -493,7 +493,7 @@ var Col: TColumnIndex; Header, Data, tmp, Encloser, Separator, Terminator, TableName: String; Node: PVirtualNode; - GridData: TMySQLQuery; + GridData: TDBQuery; SelectionOnly: Boolean; NodeCount: Cardinal; RowNum: PCardinal; @@ -755,7 +755,7 @@ end; -function BestTableName(Data: TMySQLQuery): String; +function BestTableName(Data: TDBQuery): String; begin // Get table name from result if possible. Used by GridToXYZ() functions. try @@ -2880,7 +2880,7 @@ end; { Threading stuff } -constructor TQueryThread.Create(Connection: TMySQLConnection; Batch: TSQLBatch); +constructor TQueryThread.Create(Connection: TDBConnection; Batch: TSQLBatch); begin inherited Create(False); FConnection := Connection; @@ -2894,7 +2894,7 @@ begin FErrorMessage := ''; FBatchInOneGo := MainForm.actBatchInOneGo.Checked; FStopOnErrors := MainForm.actQueryStopOnErrors.Checked; - FResults := TMySQLQueryList.Create; + FResults := TDBQueryList.Create; FConnection.LockedByThread := Self; FreeOnTerminate := True; Priority := tpNormal; @@ -2906,7 +2906,7 @@ var SQL: String; i, BatchStartOffset: Integer; PacketSize, MaxAllowedPacket: Int64; - QueryResult: TMySQLQuery; + QueryResult: TDBQuery; begin inherited; diff --git a/source/insertfiles.pas b/source/insertfiles.pas index a4ee2a21..e1113298 100644 --- a/source/insertfiles.pas +++ b/source/insertfiles.pas @@ -5,7 +5,7 @@ interface uses Windows, Messages, SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ImgList, ShellApi, Math, - mysql_connection; + dbconnection; type TCol = record Name : String; // for displaying in lists @@ -108,7 +108,7 @@ end; { Show Columns from selected table } procedure TfrmInsertFiles.ComboBoxTablesChange(Sender: TObject); var - Results: TMySQLQuery; + Results: TDBQuery; begin setlength(cols, 0); if ComboBoxTables.ItemIndex > -1 then begin diff --git a/source/loaddata.pas b/source/loaddata.pas index 0156ed47..da0a2588 100644 --- a/source/loaddata.pas +++ b/source/loaddata.pas @@ -11,7 +11,7 @@ interface uses Windows, SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, ComCtrls, CheckLst, SynRegExpr, Buttons, ExtCtrls, ToolWin, ExtDlgs, Math, - mysql_connection, mysql_structures; + dbconnection, mysql_structures; type Tloaddataform = class(TForm) @@ -143,7 +143,7 @@ var ServerWillParse: Boolean; Charset, DefCharset, dbcreate: String; v: Integer; - CharsetTable: TMySQLQuery; + CharsetTable: TDBQuery; rx: TRegExpr; begin ServerWillParse := grpParseMethod.ItemIndex = 0; @@ -255,7 +255,7 @@ procedure Tloaddataform.btnImportClick(Sender: TObject); var StartTickCount: Cardinal; i: Integer; - Warnings: TMySQLQuery; + Warnings: TDBQuery; begin Screen.Cursor := crHourglass; StartTickCount := GetTickCount; diff --git a/source/main.pas b/source/main.pas index 1b5dd5f2..4808f1dd 100644 --- a/source/main.pas +++ b/source/main.pas @@ -17,14 +17,14 @@ uses SynHighlighterSQL, Tabs, SynUnicode, SynRegExpr, WideStrUtils, ExtActns, IOUtils, Types, CommCtrl, Contnrs, Generics.Collections, SynEditExport, SynExportHTML, Math, ExtDlgs, Registry, AppEvnts, routine_editor, trigger_editor, event_editor, options, EditVar, helpers, createdatabase, table_editor, - TableTools, View, Usermanager, SelectDBObject, connections, sqlhelp, mysql_connection, + TableTools, View, Usermanager, SelectDBObject, connections, sqlhelp, dbconnection, insertfiles, searchreplace, loaddata, copytable, VTHeaderPopup, Cromis.DirectoryWatch; type TQueryTab = class; TResultTab = class(TObject) - Results: TMySQLQuery; + Results: TDBQuery; Grid: TVirtualStringTree; FilterText: String; public @@ -52,7 +52,7 @@ type ResultTabs: TResultTabs; DoProfile: Boolean; QueryRunning: Boolean; - QueryProfile: TMySQLQuery; + QueryProfile: TDBQuery; ProfileTime, MaxProfileTime: Extended; LeftOffsetInMemo: Integer; function GetActiveResultTab: TResultTab; @@ -596,7 +596,7 @@ type procedure ValidateQueryControls(Sender: TObject); procedure DataGridBeforePaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas); - procedure LogSQL(Msg: String; Category: TMySQLLogCategory=lcInfo; Connection: TMySQLConnection=nil); + procedure LogSQL(Msg: String; Category: TDBLogCategory=lcInfo; Connection: TDBConnection=nil); procedure KillProcess(Sender: TObject); procedure SynMemoQueryStatusChange(Sender: TObject; Changes: TSynStatusChanges); procedure TimerHostUptimeTimer(Sender: TObject); @@ -868,7 +868,7 @@ type FSearchReplaceExecuted: Boolean; FDataGridColumnWidthsCustomized: Boolean; FSnippetFilenames: TStringList; - FConnections: TMySQLConnectionList; + FConnections: TDBConnectionList; FTreeClickHistory: TNodeArray; FOperationTicker: Cardinal; FOperatingGrid: TBaseVirtualTree; @@ -877,10 +877,10 @@ type procedure SetDelimiter(Value: String); procedure DisplayRowCountStats(Sender: TBaseVirtualTree); procedure insertFunction(Sender: TObject); - function GetRootNode(Tree: TBaseVirtualTree; Connection: TMySQLConnection): PVirtualNode; - function GetActiveConnection: TMySQLConnection; + function GetRootNode(Tree: TBaseVirtualTree; Connection: TDBConnection): PVirtualNode; + function GetActiveConnection: TDBConnection; function GetActiveDatabase: String; - procedure SetActiveDatabase(db: String; Connection: TMySQLConnection); + procedure SetActiveDatabase(db: String; Connection: TDBConnection); function GetActiveDBObj: TDBObject; procedure SetActiveDBObj(Obj: TDBObject); procedure ToggleFilterPanel(ForceVisible: Boolean = False); @@ -889,8 +889,8 @@ type procedure SetTabCaption(PageIndex: Integer; Text: String); function ConfirmTabClose(PageIndex: Integer): Boolean; procedure UpdateFilterPanel(Sender: TObject); - procedure DBObjectsCleared(Connection: TMySQLConnection; Database: String); - procedure DatabaseChanged(Connection: TMySQLConnection; Database: String); + procedure DBObjectsCleared(Connection: TDBConnection; Database: String); + procedure DatabaseChanged(Connection: TDBConnection; Database: String); procedure DoSearchReplace; procedure UpdateLineCharPanel; procedure PaintColorBar(Value, Max: Extended; TargetCanvas: TCanvas; CellRect: TRect); @@ -899,7 +899,7 @@ type procedure OperationRunning(Runs: Boolean); function FindQueryTabByThread(Thread: TQueryThread): TQueryTab; public - AllDatabasesDetails: TMySQLQuery; + AllDatabasesDetails: TDBQuery; btnAddTab: TSpeedButton; QueryTabs: TObjectList; DBObjectsMaxSize: Int64; @@ -968,7 +968,7 @@ type DataGridFocusedCell: TStringList; DataGridFocusedNodeIndex: Int64; DataGridFocusedColumnName: String; - DataGridResult: TMySQLQuery; + DataGridResult: TDBQuery; DataGridFullRowMode: Boolean; SelectedTableColumns: TTableColumnList; SelectedTableKeys: TTableKeyList; @@ -988,7 +988,7 @@ type DirnameUserAppData: String; DirnameSnippets: String; - property Connections: TMySQLConnectionList read FConnections; + property Connections: TDBConnectionList read FConnections; property Delimiter: String read FDelimiter write SetDelimiter; procedure CallSQLHelpWithKeyword( keyword: String ); procedure AddOrRemoveFromQueryLoadHistory(Filename: String; AddIt: Boolean; CheckIfFileExists: Boolean); @@ -998,11 +998,11 @@ type procedure PopupQueryLoadRemoveAllFiles(Sender: TObject); procedure SessionConnect(Sender: TObject); function InitConnection(Params: TConnectionParameters; Session: String; - ActivateMe: Boolean; var Connection: TMySQLConnection): Boolean; - procedure ConnectionsNotify(Sender: TObject; const Item: TMySQLConnection; Action: TCollectionNotification); + ActivateMe: Boolean; var Connection: TDBConnection): Boolean; + procedure ConnectionsNotify(Sender: TObject; const Item: TDBConnection; Action: TCollectionNotification); function ActiveGrid: TVirtualStringTree; - function GridResult(Grid: TBaseVirtualTree): TMySQLQuery; - property ActiveConnection: TMySQLConnection read GetActiveConnection; + function GridResult(Grid: TBaseVirtualTree): TDBQuery; + property ActiveConnection: TDBConnection read GetActiveConnection; property ActiveDatabase: String read GetActiveDatabase; property ActiveDbObj: TDBObject read GetActiveDbObj write SetActiveDBObj; procedure TestVTreeDataArray( P: PVTreeDataArray ); @@ -1195,7 +1195,7 @@ procedure TMainForm.FormDestroy(Sender: TObject); var WinState, OpenSessions: String; i: Integer; - Connection: TMySQLConnection; + Connection: TDBConnection; begin // Destroy editors and dialogs. Must be done before connection gets closed, as some destructors do SQL stuff. FreeAndNil(ActiveObjectEditor); @@ -1592,7 +1592,7 @@ begin SelectedTableForeignKeys := TForeignKeyList.Create; // Set up connections list - FConnections := TMySQLConnectionList.Create; + FConnections := TDBConnectionList.Create; FConnections.OnNotify := ConnectionsNotify; // Load database filter items. Was previously bound to sessions before multi connections were implemented @@ -1614,7 +1614,7 @@ end; procedure TMainForm.Startup; var CmdlineParameters, LastSessions: TStringlist; - Connection: TMySQLConnection; + Connection: TDBConnection; LoadedParams: TConnectionParameters; LastUpdatecheck, LastStatsCall, LastConnect: TDateTime; UpdatecheckInterval, i: Integer; @@ -1835,7 +1835,7 @@ end; procedure TMainForm.actDisconnectExecute(Sender: TObject); var - Connection: TMySQLConnection; + Connection: TDBConnection; Node: PVirtualNode; DlgResult: Integer; begin @@ -1857,9 +1857,9 @@ begin end; -procedure TMainForm.ConnectionsNotify(Sender: TObject; const Item: TMySQLConnection; Action: TCollectionNotification); +procedure TMainForm.ConnectionsNotify(Sender: TObject; const Item: TDBConnection; Action: TCollectionNotification); var - Results: TMySQLQuery; + Results: TDBQuery; Tab: TQueryTab; begin // Connection removed or added @@ -2058,7 +2058,7 @@ var i: integer; item: TMenuItem; SessionNames: TStringList; - Connection: TMySQLConnection; + Connection: TDBConnection; begin // Delete dynamically added connection menu items. menuConnections.Items.Clear; @@ -2238,7 +2238,7 @@ var NewTab: TResultTab; col: TVirtualTreeColumn; TabCaption: String; - Results: TMySQLQuery; + Results: TDBQuery; i: Integer; begin // Single query or query packet has finished @@ -2508,7 +2508,7 @@ end; procedure TMainForm.UpdatePreviewPanel; var Grid: TVirtualStringTree; - Results: TMySQLQuery; + Results: TDBQuery; RowNum: PCardinal; ImgType: String; Content, Header: AnsiString; @@ -2610,7 +2610,7 @@ end; procedure TMainForm.actDataSaveBlobToFileExecute(Sender: TObject); var Grid: TVirtualStringTree; - Results: TMySQLQuery; + Results: TDBQuery; RowNum: PCardinal; Content: AnsiString; FileStream: TFileStream; @@ -2666,7 +2666,7 @@ var DBObject: TDBObject; ObjectList: TDBObjectList; Editor: TDBObjectEditor; - Conn: TMySQLConnection; + Conn: TDBConnection; begin Conn := ActiveConnection; @@ -2776,7 +2776,7 @@ end; procedure TMainForm.SessionConnect(Sender: TObject); var Session: String; - Connection: TMySQLConnection; + Connection: TDBConnection; Params: TConnectionParameters; Node, SessionNode: PVirtualNode; DBObj: PDBObject; @@ -2821,7 +2821,7 @@ end; Paremeters are either sent by connection-form or by commandline. } function TMainform.InitConnection(Params: TConnectionParameters; Session: String; - ActivateMe: Boolean; var Connection: TMySQLConnection): Boolean; + ActivateMe: Boolean; var Connection: TDBConnection): Boolean; var i: Integer; SessionExists, RestoreLastActiveDatabase: Boolean; @@ -2829,13 +2829,12 @@ var StartupBatch: TSQLBatch; SessionNode, DBNode: PVirtualNode; begin - Connection := TMySQLConnection.Create(Self); + Connection := Params.CreateConnection(Self); Connection.OnLog := LogSQL; Connection.OnDBObjectsCleared := DBObjectsCleared; Connection.OnDatabaseChanged := DatabaseChanged; Connection.ObjectNamesInSelectedDB := SynSQLSyn1.TableNames; Connection.SessionName := Session; - Connection.Parameters := Params; try Connection.Active := True; except @@ -2911,7 +2910,7 @@ var Grid: TVirtualStringTree; Node, FocusAfterDelete: PVirtualNode; RowNum: PCardinal; - Results: TMySQLQuery; + Results: TDBQuery; Nodes: TNodeArray; i: Integer; begin @@ -3627,7 +3626,7 @@ procedure TMainForm.actDataInsertExecute(Sender: TObject); var DupeNode, NewNode: PVirtualNode; Grid: TVirtualStringTree; - Results: TMySQLQuery; + Results: TDBQuery; RowNum: Cardinal; DupeNum: PCardinal; i: Integer; @@ -3688,7 +3687,7 @@ end; procedure TMainForm.actDataPostChangesExecute(Sender: TObject); var Grid: TVirtualStringTree; - Results: TMySQLQuery; + Results: TDBQuery; begin if Sender is TVirtualStringTree then Grid := Sender as TVirtualStringTree @@ -3712,7 +3711,7 @@ end; procedure TMainForm.actDataCancelChangesExecute(Sender: TObject); var Grid: TVirtualStringTree; - Results: TMySQLQuery; + Results: TDBQuery; RowNum: PCardinal; Node, FocNode: PVirtualNode; begin @@ -3753,7 +3752,7 @@ end; {** Add a SQL-command or comment to SynMemoSQLLog } -procedure TMainForm.LogSQL(Msg: String; Category: TMySQLLogCategory=lcInfo; Connection: TMySQLConnection=nil); +procedure TMainForm.LogSQL(Msg: String; Category: TDBLogCategory=lcInfo; Connection: TDBConnection=nil); var snip, IsSQL: Boolean; Len: Integer; @@ -3857,7 +3856,7 @@ end; function TMainForm.AnyGridEnsureFullRow(Grid: TVirtualStringTree; Node: PVirtualNode): Boolean; var RowNum: PCardinal; - Data: TMySQLQuery; + Data: TDBQuery; begin // Load remaining data on a partially loaded row in data grid Result := True; @@ -3873,7 +3872,7 @@ end; procedure TMainForm.DataGridEnsureFullRows(Grid: TVirtualStringTree; SelectedOnly: Boolean); var Node: PVirtualNode; - Results: TMySQLQuery; + Results: TDBQuery; RowNum: PCardinal; begin // Load remaining data of all grid rows @@ -4029,7 +4028,7 @@ begin try ShowStatusMsg('Fetching rows ...'); if not Assigned(DataGridResult) then - DataGridResult := TMySQLQuery.Create(Self); + DataGridResult := ActiveConnection.Parameters.CreateQuery(Self); DataGridResult.Connection := ActiveConnection; DataGridResult.SQL := Select; DataGridResult.Execute(Offset > 0); @@ -4397,7 +4396,7 @@ procedure TMainForm.ValidateControls(Sender: TObject); var inDataTab, inDataOrQueryTab, inDataOrQueryTabNotEmpty, inGrid, GridHasChanges: Boolean; Grid: TVirtualStringTree; - Results: TMySQLQuery; + Results: TDBQuery; RowNum: PCardinal; begin Grid := ActiveGrid; @@ -4530,7 +4529,7 @@ procedure TMainForm.SynCompletionProposalExecute(Kind: SynCompletionType; var CanExecute: Boolean); var i,j: Integer; - Results: TMySQLQuery; + Results: TDBQuery; DBObjects: TDBObjectList; sql, TableClauses, tablename, PrevShortToken, PrevLongToken, Token: String; Tables: TStringList; @@ -4553,7 +4552,7 @@ var procedure addColumns( tablename: String ); var dbname : String; - Columns: TMySQLQuery; + Columns: TDBQuery; begin dbname := ActiveDatabase; if Pos( '.', tablename ) > -1 then @@ -5394,7 +5393,7 @@ end; procedure TMainForm.popupDataGridPopup(Sender: TObject); var Grid: TVirtualStringTree; - Results: TMySQLQuery; + Results: TDBQuery; i: Integer; Col, Value: String; CellFocused, InDataGrid, HasNullValue, HasNotNullValue: Boolean; @@ -5523,7 +5522,7 @@ end; procedure TMainForm.QFvaluesClick(Sender: TObject); var - Data: TMySQLQuery; + Data: TDBQuery; Col: String; Item: TMenuItem; i: Integer; @@ -5593,7 +5592,7 @@ begin end; -function TMainForm.GetRootNode(Tree: TBaseVirtualTree; Connection: TMySQLConnection): PVirtualNode; +function TMainForm.GetRootNode(Tree: TBaseVirtualTree; Connection: TDBConnection): PVirtualNode; var SessionNode: PVirtualNode; SessionObj: PDBObject; @@ -5611,7 +5610,7 @@ begin end; -function TMainForm.GetActiveConnection: TMySQLConnection; +function TMainForm.GetActiveConnection: TDBConnection; begin Result := nil; if Assigned(ActiveDbObj) then @@ -5628,7 +5627,7 @@ begin end; -procedure TMainForm.SetActiveDatabase(db: String; Connection: TMySQLConnection); +procedure TMainForm.SetActiveDatabase(db: String; Connection: TDBConnection); var SessionNode, DBNode: PVirtualNode; DBObj: PDBObject; @@ -6971,7 +6970,7 @@ begin end; -procedure TMainForm.DBObjectsCleared(Connection: TMySQLConnection; Database: String); +procedure TMainForm.DBObjectsCleared(Connection: TDBConnection; Database: String); var Node: PVirtualNode; begin @@ -6997,7 +6996,7 @@ begin end; -procedure TMainForm.DatabaseChanged(Connection: TMySQLConnection; Database: String); +procedure TMainForm.DatabaseChanged(Connection: TDBConnection; Database: String); begin // Immediately force db icons to repaint, so the user sees the active db state DBtree.Repaint; @@ -7199,7 +7198,7 @@ procedure TMainForm.AnyGridGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; var EditingAndFocused: Boolean; RowNumber: PCardinal; - Results: TMySQLQuery; + Results: TDBQuery; begin if Column = -1 then Exit; @@ -7250,7 +7249,7 @@ procedure TMainForm.AnyGridPaintText(Sender: TBaseVirtualTree; const TargetCanva Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType); var cl: TColor; - r: TMySQLQuery; + r: TDBQuery; RowNumber: PCardinal; begin if Column = NoColumn then @@ -7280,7 +7279,7 @@ end; procedure TMainForm.AnyGridAfterCellPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; CellRect: TRect); var - Results: TMySQLQuery; + Results: TDBQuery; RowNum: PCardinal; begin // Don't waist time @@ -7357,7 +7356,7 @@ procedure TMainForm.actDataSetNullExecute(Sender: TObject); var RowNum: PCardinal; Grid: TVirtualStringTree; - Results: TMySQLQuery; + Results: TDBQuery; begin // Set cell to NULL value Grid := ActiveGrid; @@ -7401,7 +7400,7 @@ end; } procedure TMainForm.AnyGridNewText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; NewText: String); var - Results: TMySQLQuery; + Results: TDBQuery; RowNum: PCardinal; begin Results := GridResult(Sender); @@ -7425,7 +7424,7 @@ procedure TMainForm.AnyGridFocusChanging(Sender: TBaseVirtualTree; OldNode, NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex; var Allowed: Boolean); var - Results: TMySQLQuery; + Results: TDBQuery; RowNum: PCardinal; begin // Detect changed focus and update row @@ -7528,7 +7527,7 @@ var Columns: TTableColumnList; Keys: TTableKeyList; ForeignKeys: TForeignKeyList; - ForeignResults, Results: TMySQLQuery; + ForeignResults, Results: TDBQuery; RowNum: PCardinal; begin VT := Sender as TVirtualStringTree; @@ -7698,7 +7697,7 @@ procedure TMainForm.AnyGridBeforeCellPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect); var - r: TMySQLQuery; + r: TDBQuery; cl: TColor; RowNumber: PCardinal; begin @@ -7854,7 +7853,7 @@ procedure TMainForm.AnyGridMouseUp(Sender: TObject; Button: TMouseButton; var Grid: TVirtualStringTree; Hit: THitInfo; - Results: TMySQLQuery; + Results: TDBQuery; begin // Detect mouse hit in grid whitespace and apply changes. Grid := Sender as TVirtualStringTree; @@ -8036,7 +8035,7 @@ procedure TMainForm.ListVariablesBeforePaint(Sender: TBaseVirtualTree; TargetCan var i : Integer; vt: TVirtualStringTree; - Results: TMySQLQuery; + Results: TDBQuery; OldOffset: TPoint; begin // Display server variables @@ -8078,7 +8077,7 @@ var i: Integer; valcount: Int64; tmpval: Double; - Results: TMySQLQuery; + Results: TDBQuery; val, avg_perhour, avg_persec: String; valIsBytes, valIsNumber: Boolean; vt: TVirtualStringTree; @@ -8154,7 +8153,7 @@ end; procedure TMainForm.ListProcessesBeforePaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas); var i, j: Integer; - Results: TMySQLQuery; + Results: TDBQuery; vt: TVirtualStringTree; Text: String; OldOffset: TPoint; @@ -8251,7 +8250,7 @@ procedure TMainForm.ListCommandStatsBeforePaint(Sender: TBaseVirtualTree; Target var i: Integer; questions: Int64; - Results: TMySQLQuery; + Results: TDBQuery; vt: TVirtualStringTree; OldOffset: TPoint; begin @@ -9141,7 +9140,7 @@ begin end; -function TMainForm.GridResult(Grid: TBaseVirtualTree): TMySQLQuery; +function TMainForm.GridResult(Grid: TBaseVirtualTree): TDBQuery; var QueryTab: TQueryTab; CurrentTab: TTabSheet; @@ -9618,7 +9617,7 @@ end; procedure TMainForm.WMCopyData(var Msg: TWMCopyData); var i: Integer; - Connection: TMySQLConnection; + Connection: TDBConnection; begin // Probably a second instance is posting its command line parameters here if (Msg.CopyDataStruct.dwData = SecondInstMsgId) and (SecondInstMsgId <> 0) then begin @@ -9726,7 +9725,7 @@ end; procedure TMainForm.actCancelOperationExecute(Sender: TObject); var - Killer: TMySQLConnection; + Killer: TDBConnection; KillCommand: String; Tab: TQueryTab; begin @@ -9738,7 +9737,7 @@ begin for Tab in QueryTabs do begin if Tab.QueryRunning then begin Tab.ExecutionThread.Aborted := True; - Killer := TMySQLConnection.Create(Self); + Killer := ActiveConnection.Parameters.CreateConnection(Self); Killer.Parameters := ActiveConnection.Parameters; Killer.LogPrefix := '[HelperConnection] '; Killer.OnLog := LogSQL; diff --git a/source/printlist.pas b/source/printlist.pas index cfdba2ea..dafe0e06 100644 --- a/source/printlist.pas +++ b/source/printlist.pas @@ -34,7 +34,7 @@ type implementation -uses main, helpers, table_editor, mysql_connection; +uses main, helpers, table_editor, dbconnection; {$R *.DFM} diff --git a/source/routine_editor.pas b/source/routine_editor.pas index 6ab7fabf..74472dec 100644 --- a/source/routine_editor.pas +++ b/source/routine_editor.pas @@ -5,7 +5,7 @@ interface uses Windows, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, SynEdit, SynMemo, StdCtrls, ComCtrls, ToolWin, VirtualTrees, SynRegExpr, WideStrUtils, - mysql_connection, helpers; + dbconnection, helpers; type TFrame = TDBObjectEditor; diff --git a/source/selectdbobject.pas b/source/selectdbobject.pas index 5e7e87a1..c9036ad5 100644 --- a/source/selectdbobject.pas +++ b/source/selectdbobject.pas @@ -4,7 +4,7 @@ interface uses Windows, Classes, Controls, Forms, StdCtrls, VirtualTrees, Graphics, - mysql_connection; + dbconnection; type TfrmSelectDBObject = class(TForm) diff --git a/source/sqlhelp.pas b/source/sqlhelp.pas index 260093b5..a06e6ec9 100644 --- a/source/sqlhelp.pas +++ b/source/sqlhelp.pas @@ -6,7 +6,7 @@ uses Windows, SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls, Buttons, SynMemo, SynEditHighlighter, SynHighlighterURI, SynURIOpener, SynEdit, VirtualTrees, Graphics, - mysql_connection; + dbconnection; type TfrmSQLhelp = class(TForm) @@ -53,8 +53,8 @@ type private { Private declarations } FKeyword: String; - FRootTopics: TMySQLQuery; - function GetHelpResult(Node: PVirtualNode): TMySQLQuery; + FRootTopics: TDBQuery; + function GetHelpResult(Node: PVirtualNode): TDBQuery; procedure SetKeyword(Value: String); public { Public declarations } @@ -101,7 +101,7 @@ end; procedure TfrmSQLhelp.treeTopicsFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex); var - Results: TMySQLQuery; + Results: TDBQuery; VT: TVirtualStringTree; begin // Topic selected @@ -137,7 +137,7 @@ end; procedure TfrmSQLhelp.treeTopicsFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode); var - Results: PMySQLQuery; + Results: PDBQuery; begin // Node gets destroyed - free memory used for bound SQL result Results := Sender.GetNodeData(Node); @@ -165,14 +165,14 @@ end; procedure TfrmSQLhelp.treeTopicsGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer); begin - // We bind one TMySQLQuery to a node - NodeDataSize := SizeOf(TMySQLQuery); + // We bind one TDBQuery to a node + NodeDataSize := SizeOf(TDBQuery); end; -function TfrmSQLhelp.GetHelpResult(Node: PVirtualNode): TMySQLQuery; +function TfrmSQLhelp.GetHelpResult(Node: PVirtualNode): TDBQuery; var - P: PMySQLQuery; + P: PDBQuery; begin // Find right result set for given node if treeTopics.GetNodeLevel(Node) = 0 then @@ -187,7 +187,7 @@ end; procedure TfrmSQLhelp.treeTopicsGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: string); var - Results: TMySQLQuery; + Results: TDBQuery; begin // Ask result set for node text Results := GetHelpResult(Node); @@ -199,7 +199,7 @@ end; procedure TfrmSQLhelp.treeTopicsInitChildren(Sender: TBaseVirtualTree; Node: PVirtualNode; var ChildCount: Cardinal); var - Results: PMySQLQuery; + Results: PDBQuery; VT: TVirtualStringTree; begin // Return number of children for folder @@ -213,7 +213,7 @@ end; procedure TfrmSQLhelp.treeTopicsInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates); var - Results: TMySQLQuery; + Results: TDBQuery; ThisFolder, PrevFolder: String; N: PVirtualNode; VT: TVirtualStringTree; @@ -283,7 +283,7 @@ procedure TfrmSQLhelp.SetKeyword(Value: string); var VT: TVirtualStringTree; Node: PVirtualNode; - Results: TMySQLQuery; + Results: TDBQuery; SearchNoInit: Boolean; begin // Find keyword in tree diff --git a/source/table_editor.pas b/source/table_editor.pas index 71e5bbcb..6c364dba 100644 --- a/source/table_editor.pas +++ b/source/table_editor.pas @@ -6,7 +6,7 @@ uses Windows, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ToolWin, VirtualTrees, SynRegExpr, ActiveX, ExtCtrls, SynEdit, SynMemo, Menus, Contnrs, Clipbrd, Math, - grideditlinks, mysql_structures, mysql_connection, helpers; + grideditlinks, mysql_structures, dbconnection, helpers; type TFrame = TDBObjectEditor; @@ -447,7 +447,7 @@ var ColSpec, IndexSQL: String; Query: TSQLSentence; i: Integer; - Results: TMySQLQuery; + Results: TDBQuery; Col, PreviousCol: PTableColumn; Node: PVirtualNode; diff --git a/source/tabletools.pas b/source/tabletools.pas index 2934cdd5..7ef37337 100644 --- a/source/tabletools.pas +++ b/source/tabletools.pas @@ -11,7 +11,7 @@ interface uses Windows, SysUtils, Classes, Controls, Forms, StdCtrls, ComCtrls, Buttons, Dialogs, StdActns, VirtualTrees, ExtCtrls, Contnrs, Graphics, SynRegExpr, Math, Generics.Collections, - mysql_connection, helpers; + dbconnection, helpers; type TToolMode = (tmMaintenance, tmFind, tmSQLExport, tmBulkTableEdit); @@ -114,7 +114,7 @@ type ExportStream: TStream; ExportStreamStartOfQueryPos: Int64; ExportLastDatabase: String; - FTargetConnection: TMySQLConnection; + FTargetConnection: TDBConnection; FLastOutputSelectedIndex: Integer; FModifiedDbs: TStringList; FHeaderCreated: Boolean; @@ -125,7 +125,7 @@ type procedure Output(SQL: String; IsEndOfQuery, ForFile, ForDir, ForDb, ForServer: Boolean); procedure AddResults(SQL: String); procedure AddNotes(Col1, Col2, Col3, Col4: String); - procedure SetupResultGrid(Results: TMySQLQuery=nil); + procedure SetupResultGrid(Results: TDBQuery=nil); procedure UpdateResultGrid; procedure DoMaintenance(DBObj: TDBObject); procedure DoFind(DBObj: TDBObject); @@ -652,7 +652,7 @@ procedure TfrmTableTools.AddResults(SQL: String); var i: Integer; Row: TStringList; - Results: TMySQLQuery; + Results: TDBQuery; Value: String; begin // Execute query and append results into grid @@ -699,7 +699,7 @@ begin end; -procedure TfrmTableTools.SetupResultGrid(Results: TMySQLQuery=nil); +procedure TfrmTableTools.SetupResultGrid(Results: TDBQuery=nil); var ColCount, i: Integer; Col: TVirtualTreeColumn; @@ -816,6 +816,7 @@ var NewIdx: Integer; DBNode: PVirtualNode; SessionName: String; + Params: TConnectionParameters; begin // Target type (file, directory, ...) selected OldItem := comboExportOutputTarget.Text; @@ -861,8 +862,8 @@ begin btnExportOutputTargetSelect.ImageIndex := 27; SessionName := Copy(comboExportOutputType.Text, Length(OUTPUT_SERVER)+1, Length(comboExportOutputType.Text)); FreeAndNil(FTargetConnection); - FTargetConnection := TMySQLConnection.Create(Self); - FTargetConnection.Parameters := LoadConnectionParams(SessionName); + Params := LoadConnectionParams(SessionName); + FTargetConnection := Params.CreateConnection(Self); FTargetConnection.LogPrefix := '['+SessionName+'] '; FTargetConnection.OnLog := Mainform.LogSQL; Screen.Cursor := crHourglass; @@ -1028,7 +1029,7 @@ var i: Integer; RowCount, Limit, Offset, ResultCount: Int64; StartTime: Cardinal; - StrucResult, Data: TMySQLQuery; + StrucResult, Data: TDBQuery; rx: TRegExpr; ColumnList: TTableColumnList; Column: TTableColumn; diff --git a/source/trigger_editor.pas b/source/trigger_editor.pas index 76aadf09..69bd0b5a 100644 --- a/source/trigger_editor.pas +++ b/source/trigger_editor.pas @@ -5,7 +5,7 @@ interface uses Windows, SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, SynEdit, SynMemo, SynCompletionProposal, VirtualTrees, - mysql_connection, mysql_structures, helpers; + dbconnection, mysql_structures, helpers; type TFrame = TDBObjectEditor; @@ -77,7 +77,7 @@ end; procedure TfrmTriggerEditor.Init(Obj: TDBObject); var - Definitions: TMySQLQuery; + Definitions: TDBQuery; DBObjects: TDBObjectList; i: Integer; Found: Boolean; @@ -211,7 +211,7 @@ procedure TfrmTriggerEditor.SynCompletionProposalStatementExecute(Kind: SynCompl var Proposal: TSynCompletionProposal; Token: String; - Columns: TMySQLQuery; + Columns: TDBQuery; begin // Propose column names from referencing table Proposal := Sender as TSynCompletionProposal; diff --git a/source/usermanager.pas b/source/usermanager.pas index 70248f98..c04c06ee 100644 --- a/source/usermanager.pas +++ b/source/usermanager.pas @@ -6,7 +6,7 @@ interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, ExtCtrls, ToolWin, ClipBrd, Generics.Collections, Generics.Defaults, SynRegExpr, - mysql_connection, helpers, VirtualTrees, Menus; + dbconnection, helpers, VirtualTrees, Menus; {$I const.inc} @@ -203,7 +203,7 @@ end; procedure TUserManagerForm.FormShow(Sender: TObject); var Version: Integer; - Users: TMySQLQuery; + Users: TDBQuery; U: TUser; function InitPrivList(Values: String): TStringList; @@ -903,7 +903,7 @@ end; procedure TUserManagerForm.btnSaveClick(Sender: TObject); var - Conn: TMySQLConnection; + Conn: TDBConnection; UserHost, OrgUserHost, Create, Table, Revoke, Grant, OnObj: String; User: TUser; FocusedUser: PUser; @@ -1049,7 +1049,7 @@ end; procedure TUserManagerForm.btnDeleteUserClick(Sender: TObject); var UserHost: String; - Conn: TMySQLConnection; + Conn: TDBConnection; User: PUser; begin // Delete user diff --git a/source/view.pas b/source/view.pas index fcfe79f3..d4e308ad 100644 --- a/source/view.pas +++ b/source/view.pas @@ -5,7 +5,7 @@ interface uses Windows, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, SynEdit, SynMemo, ExtCtrls, SynRegExpr, - mysql_connection, mysql_structures, helpers; + dbconnection, mysql_structures, helpers; type TFrame = TDBObjectEditor;