myscriptprocessoruni.pas

来自「CrLab UniDAC 1.0 include sources」· PAS 代码 · 共 77 行

PAS
77
字号
{$IFNDEF CLR}
{$I MyDac.inc}
unit MyScriptProcessorUni;
{$ENDIF}

interface

uses
  Classes, SysUtils, DBAccess, DAScript, CRParser;

type
  TMyScriptProcessor = class (TDAScriptProcessor)
  private
    FPrevCode, FCurrCode: integer;
  protected
    function GetParserClass: TParserClass; override;
    procedure CheckLexem(Code: Integer; var StatementType: integer; var Omit: boolean); override;
    function ExecuteNext: boolean; override;
    function CanOptimize(const SQL: string; const StatementType: integer): boolean; override;
    function IsBlankEndsDelimeter: boolean; override;
  end;

implementation

uses
{$IFNDEF UNIDACPRO}
  MyParser, MyClasses;
{$ELSE}
  MyParserUni, MyClassesUni;
{$ENDIF}

{ TMyScriptProcessor }

function TMyScriptProcessor.GetParserClass: TParserClass;
begin
  Result := TMyParser;
end;

function TMyScriptProcessor.ExecuteNext: boolean;
begin
  FCurrCode := 0;
  Result := inherited ExecuteNext;
end;

procedure TMyScriptProcessor.CheckLexem(Code: integer; var StatementType: integer; var Omit: boolean);
begin
  if (Code <> lcBlank) and (Code <> lcComment) then begin
    FPrevCode := FCurrCode;
    FCurrCode := Code;

    // Set statement types
    if FCurrCode = lxDELIMITER then begin
      FDelimiterState := dsDelimiter;
      StatementType := ST_DELIMETER;
    end;

    if FCurrDelimiter = ';' then
      if (FPrevCode = lxCREATE) and (FCurrCode in [lxPROCEDURE, lxFUNCTION, lxTRIGGER]) then
        StatementType := ST_SPECIFIC_SQL;
  end;
end;

function TMyScriptProcessor.CanOptimize(const SQL: string; const StatementType: integer): boolean;
var
  IConnection: TMySQLConnection;
begin
  IConnection := TDBAccessUtils.GetIConnection(UsedConnection) as TMySQLConnection;
  Result := IConnection.IsClient41 and IConnection.IsServer41 and inherited CanOptimize(SQL, StatementType);
end;

function TMyScriptProcessor.IsBlankEndsDelimeter: boolean;
begin
  Result := True;
end;

end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?