📄 mysqluniprovider.pas
字号:
{$IFNDEF CLR}
{$I MyDac.inc}
unit MySQLUniProvider;
{$ENDIF}
interface
uses
SysUtils, Classes, Variants, DB, MemData, CRAccess, CRConnectionPool, DBAccess, MemDS,
UniProvider, DAScript, CRParser;
type
TMySQLUniProvider = class(TUniProvider)
public
class function GetProviderName: string; override;
function IsDatabaseSupported: boolean; override;
function IsPortSupported: boolean; override;
function GetParserClass: TParserClass; override;
function GetConnectionParametersClass: TCRConnectionParametersClass; override;
function GetConnectionPoolingManagerClass: TCRConnectionPoolManagerClass; override;
function GetConnectionClass: TCRConnectionClass; override;
function GetServerEnumeratorClass: TCRServerEnumeratorClass; override;
function GetTransactionClass: TCRTransactionClass; override;
function GetCommandClass: TCRCommandClass; override;
function GetRecordSetClass: TCRRecordSetClass; override;
function GetDataSetServiceClass: TDADataSetServiceClass; override;
function GetScriptProcessorClass: TDAScriptProcessorClass; override;
function GetMetaDataClass: TCRMetaDataClass; override;
function GetConnectDialogServiceClass: TConnectDialogServiceClass; override;
function GetDataTypesMap: TDataTypesMapClass; override;
procedure SetObjectProps(Obj: TObject; Options: TStrings; SetAllProps: boolean); override;
function GetConnectionOptions: TOptionsList; override;
function GetSQLOptions: TOptionsList; override;
function GetDataSetOptions: TOptionsList; override;
function GetScriptOptions: TOptionsList; override;
end;
TMyConnectDialogService = class (TConnectDialogService)
end;
procedure RegisterComponent;
implementation
uses
DAConsts,
{$IFNDEF UNIDACPRO}
MyServices, MyClasses, MyConnectionPool, MyScriptProcessor, MyParser;
{$ELSE}
MyServicesUni, MyClassesUni, MyConnectionPoolUni, MyScriptProcessorUni, MyParserUni;
{$ENDIF}
{ TMySQLUniProvider }
class function TMySQLUniProvider.GetProviderName: string;
begin
Result := 'MySQL';
end;
function TMySQLUniProvider.IsDatabaseSupported: boolean;
begin
Result := True;
end;
function TMySQLUniProvider.IsPortSupported: boolean;
begin
Result := True;
end;
function TMySQLUniProvider.GetParserClass: TParserClass;
begin
Result := TMyParser;
end;
function TMySQLUniProvider.GetConnectionParametersClass: TCRConnectionParametersClass;
begin
Result := TMyConnectionParameters;
end;
function TMySQLUniProvider.GetConnectionPoolingManagerClass: TCRConnectionPoolManagerClass;
begin
Result := TMyConnectionPoolManager;
end;
function TMySQLUniProvider.GetConnectionClass: TCRConnectionClass;
begin
Result := TMySQLConnection;
end;
function TMySQLUniProvider.GetServerEnumeratorClass: TCRServerEnumeratorClass;
begin
Result := TMyServerEnumerator;
end;
function TMySQLUniProvider.GetTransactionClass: TCRTransactionClass;
begin
Result := TMySQLTransaction;
end;
function TMySQLUniProvider.GetCommandClass: TCRCommandClass;
begin
Result := TMySQLCommand;
end;
function TMySQLUniProvider.GetRecordSetClass: TCRRecordSetClass;
begin
Result := TMySQLRecordset;
end;
function TMySQLUniProvider.GetDataSetServiceClass: TDADataSetServiceClass;
begin
Result := TCustomMyDataSetService;
end;
function TMySQLUniProvider.GetScriptProcessorClass: TDAScriptProcessorClass;
begin
Result := TMyScriptProcessor;
end;
function TMySQLUniProvider.GetMetaDataClass: TCRMetaDataClass;
begin
Result := TMySQLMetaData;
end;
function TMySQLUniProvider.GetConnectDialogServiceClass: TConnectDialogServiceClass;
begin
Result := TMyConnectDialogService;
end;
function TMySQLUniProvider.GetDataTypesMap: TDataTypesMapClass;
begin
Result := TCustomMyDataTypesMap;
end;
procedure TMySQLUniProvider.SetObjectProps(Obj: TObject; Options: TStrings; SetAllProps: boolean);
begin
if Obj.ClassType = TMySQLConnection then begin
TMySQLConnection(Obj).SetProp(prCheckPrecision, True);
GetConnectionOptions.ImportOptions(Options, Obj, TMySQLConnection(Obj).SetProp, SetAllProps);
end
else
if Obj.ClassType = TMyConnectionParameters then
GetConnectionOptions.ImportOptions(Options, Obj, TMyConnectionParameters(Obj).SetProp, SetAllProps)
else
if Obj.ClassType = TMySQLCommand then
GetSQLOptions.ImportOptions(Options, Obj, TMySQLCommand(Obj).SetProp, SetAllProps)
else
if Obj.ClassType = TMySQLRecordset then begin
GetDataSetOptions.ImportOptions(Options, Obj, TMySQLRecordset(Obj).SetProp, SetAllProps);
GetDataSetOptions.ImportOptions(Options, TMySQLRecordset(Obj).GetCommand, TMySQLRecordset(Obj).GetCommand.SetProp, SetAllProps);
end
else
if Obj.ClassType = TCustomMyDataSetService then
GetDataSetOptions.ImportOptions(Options, Obj, TCustomMyDataSetService(Obj).SetProp, SetAllProps)
else
if Obj.ClassType = TMyScriptProcessor then
GetScriptOptions.ImportOptions(Options, Obj, TMyScriptProcessor(Obj).SetProp, SetAllProps);
end;
function TMySQLUniProvider.GetConnectionOptions: TOptionsList;
begin
if FConnectionOptions = nil then begin
FConnectionOptions := TOptionsList.Create(GetProviderName);
FConnectionOptions.Add(TIntegerOption.Create('ConnectionTimeout', prConnectionTimeout, [TMySQLConnection, TMyConnectionParameters], 15));
FConnectionOptions.Add(TStringOption.Create('Charset', prCharset, [TMySQLConnection, TMyConnectionParameters], ''));
FConnectionOptions.Add(TBooleanOption.Create('UseUnicode', prUseUnicode, [TMySQLConnection, TMyConnectionParameters], False));
FConnectionOptions.Add(TBooleanOption.Create('OptimizedBigint', prOptimizedBigint, [TMySQLConnection], False));
FConnectionOptions.Add(TBooleanOption.Create('Compress', prCompress, [TMySQLConnection, TMyConnectionParameters], False));
FConnectionOptions.Add(TEnumeratorOption.Create('Protocol', prProtocol, [TMySQLConnection, TMyConnectionParameters], Variant(mpDefault), TypeInfo(TMyProtocol)));
FConnectionOptions.Add(TBooleanOption.Create('Embedded', prEmbedded, [TMySQLConnection, TMyConnectionParameters], False));
FConnectionOptions.Add(TBooleanOption.Create('Direct', prDirect, [TMySQLConnection, TMyConnectionParameters], True));
// SSL
FConnectionOptions.Add(TStringOption.Create('SSLChipherList', prSSL_Chipher, [TMySQLConnection, TMyConnectionParameters], ''));
FConnectionOptions.Add(TStringOption.Create('SSLCACert', prSSL_CA, [TMySQLConnection, TMyConnectionParameters], ''));
FConnectionOptions.Add(TStringOption.Create('SSLKey', prSSL_Key, [TMySQLConnection, TMyConnectionParameters], ''));
FConnectionOptions.Add(TStringOption.Create('SSLCert', prSSL_Cert, [TMySQLConnection, TMyConnectionParameters], ''));
end;
Result := FConnectionOptions;
end;
function TMySQLUniProvider.GetSQLOptions: TOptionsList;
begin
if FSQLOptions = nil then begin
FSQLOptions := TOptionsList.Create(GetProviderName);
FSQLOptions.Add(TIntegerOption.Create('CommandTimeout', prCommandTimeout, [TMySQLCommand], 0));
end;
Result := FSQLOptions;
end;
function TMySQLUniProvider.GetDataSetOptions: TOptionsList;
begin
if FDataSetOptions = nil then begin
FDataSetOptions := TOptionsList.Create(GetProviderName);
FDataSetOptions.Add(TBooleanOption.Create('FetchAll', prFetchAll, [TMySQLRecordSet], True));
FDataSetOptions.Add(TIntegerOption.Create('CommandTimeout', prCommandTimeout, [TMySQLRecordSet], 0));
FDataSetOptions.Add(TBooleanOption.Create('FieldsAsString', prFieldsAsString, [TMySQLRecordSet], False));
FDataSetOptions.Add(TBooleanOption.Create('NullForZeroDate', prNullForZeroDate, [TMySQLRecordSet], True));
FDataSetOptions.Add(TBooleanOption.Create('CheckRowVersion', prCheckRowVersion, [TCustomMyDataSetService], False));
FDataSetOptions.Add(TBooleanOption.Create('EnableBoolean', prEnableBoolean, [TMySQLRecordSet], True));
FDataSetOptions.Add(TBooleanOption.Create('CreateConnection', prCreateConnection, [TMySQLRecordSet], True));
FDataSetOptions.Add(TBooleanOption.Create('BinaryAsString', prBinaryAsString, [TMySQLRecordSet], True));
end;
Result := FDataSetOptions;
end;
function TMySQLUniProvider.GetScriptOptions: TOptionsList;
begin
if FScriptOptions = nil then begin
FScriptOptions := TOptionsList.Create(GetProviderName);
end;
Result := FScriptOptions;
end;
procedure RegisterComponent;
begin
RegisterComponents('UniDAC', [TMySQLUniProvider]);
end;
initialization
UniProviders.RegisterProvider(TMySQLUniProvider);
finalization
UniProviders.UnRegisterProvider(TMySQLUniProvider);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -