⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mysqluniprovider.pas

📁 CrLab UniDAC 1.0 include sources
💻 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 + -