亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gaupdatestm.pas

?? 一個sql語法分析程序
?? PAS
字號:
{*******************************************************}
{                                                       }
{       Advanced SQL statement parser                   }
{       Copyright (c) 2001 AS Gaiasoft                  }
{       Created by Gert Kello                           }
{                                                       }
{*******************************************************}

unit gaUpdateStm;

interface

uses
  gaBasicSQLParser, gaAdvancedSQLParser, gaSQLParserHelperClasses;

type
  TUpdateStatementState = (ussNone, ussUpdateTable, ussFieldList, ussWhereClause,
    ussStatementComplete);

  TUpdateStatementStates = set of TUpdateStatementState;

  TgaUpdateSQLStatement = class (TgaCustomSQLStatement)
  private
    FStatementState: TUpdateStatementState;
    FStatementTable: TgaSQLTable;
    FUpdateExpressions: TgaListOfSQLTokenLists;
    FWhereClause: TgaSQLWhereExpression;
    procedure SetStatementState(const Value: TUpdateStatementState);
  protected
    procedure DoAfterStatementStateChange; override;
    procedure DoBeforeStatementStateChange(const NewStateOrd: LongInt); 
            override;
    function GetNewStatementState: TUpdateStatementState;
    function GetStatementType: TSQLStatementType; override;
    procedure ModifyStatementInNormalState(Sender: TObject; AToken: 
            TgaSQLTokenObj); override;
    procedure ParseUpdateExpressionList;
    procedure ParseUpdateTable;
    property StatementState: TUpdateStatementState read FStatementState write 
            SetStatementState;
  public
    constructor Create(AOwner: TgaAdvancedSQLParser); override;
    constructor CreateFromStatement(AOwner: TgaAdvancedSQLParser; AStatement: 
            TgaNoSQLStatement); override;
    destructor Destroy; override;
    property StatementTable: TgaSQLTable read FStatementTable;
    property UpdateExpressions: TgaListOfSQLTokenLists read FUpdateExpressions;
    property WhereClause: TgaSQLWhereExpression read FWhereClause;
  end;
  

const
  UpdateAllowedNextState: array[TUpdateStatementState] of TUpdateStatementStates =
   ({ussNone} [ussUpdateTable],
    {ussUpdateTable} [ussFieldList],
    {ussFieldList} [ussWhereClause, ussStatementComplete],
    {ussWhereClause} [ussStatementComplete],
    {ussStatementComplete} []
   );

implementation

uses
  SysUtils, TypInfo, gaSQLParserConsts;

{
**************************** TgaUpdateSQLStatement *****************************
}
constructor TgaUpdateSQLStatement.Create(AOwner: TgaAdvancedSQLParser);
begin
  inherited Create(AOwner);
  FStatementTable := TgaSQLTable.Create(Self);
  FStatementTable.IsAliasAllowed := False;
end;

constructor TgaUpdateSQLStatement.CreateFromStatement(AOwner: 
        TgaAdvancedSQLParser; AStatement: TgaNoSQLStatement);
begin
  inherited CreateFromStatement(AOwner, AStatement);
  FStatementTable := TgaSQLTable.Create(Self);
  FStatementTable.IsAliasAllowed := False;
end;

destructor TgaUpdateSQLStatement.Destroy;
begin
  FStatementTable.Free;
  FWhereClause.Free;
  inherited Destroy;
end;

procedure TgaUpdateSQLStatement.DoAfterStatementStateChange;
begin
  inherited;
  case StatementState of
    ussFieldList:
      UpdateExpressions.Add(TgaSQLExpression.Create(Self));
  end;
  if (StatementState > ussFieldList) and (not Assigned(FWhereClause)) then
  begin
    if StatementState = ussWhereClause then
      FWhereClause := TgaSQLWhereExpression.Create(Self)
    else begin
      CurrentSQL.Previous;
      CurrentSQL.InsertAfterCurrent(TgaSQLTokenObj.CreatePlaceHolder, True);
      FWhereClause := TgaSQLWhereExpression.Create(Self);
      FWhereClause.ParseComplete := True;
      CurrentSQL.Next;
    end;
  end;
end;

procedure TgaUpdateSQLStatement.DoBeforeStatementStateChange(const NewStateOrd: 
        LongInt);
begin
  inherited;
  case StatementState of
    ussFieldList:
      (UpdateExpressions.LastItem as TgaSQLStatementPart).ParseComplete := True;
    ussWhereClause: begin
      WhereClause.Last;
      WhereClause.Previous;
      WhereClause.ParseComplete := True;
    end;
  end;
end;

function TgaUpdateSQLStatement.GetNewStatementState: TUpdateStatementState;
var
  TokenStr: string;
begin
  Result := StatementState;
  TokenStr := UpperCase(OwnerParser.TokenString);
  if OwnerParser.TokenType = stSymbol then
  begin
    if TokenStr = 'UPDATE' then
      Result := ussUpdateTable
    else if TokenStr = 'SET' then
      Result := ussFieldList
    else if TokenStr = 'WHERE' then
      Result := ussWhereClause
  end else
  if OwnerParser.TokenType = stEnd then
    Result := ussStatementComplete;
end;

function TgaUpdateSQLStatement.GetStatementType: TSQLStatementType;
begin
  Result := sstUpdate;
end;

procedure TgaUpdateSQLStatement.ModifyStatementInNormalState(Sender: TObject; 
        AToken: TgaSQLTokenObj);
begin
  inherited;
  StatementState := GetNewStatementState;
  if InternalStatementState > 0 then
    case StatementState of
      ussNone:
        {the statement starts with comment or whitespace};
      ussUpdateTable:
        StatementTable.ExecuteTokenAdded(Sender, AToken);
      ussFieldList:
        ParseUpdateExpressionList;
      ussWhereClause:
        WhereClause.ExecuteTokenAdded(Sender, AToken);
      ussStatementComplete:
        DoStatementComplete;
      else
        raise Exception.CreateFmt(SUnknownStatementState,
          [ClassName, GetEnumName(TypeInfo(TUpdateStatementState), Ord(StatementState))]);
    end
  else
    InternalStatementState := 1;
end;

procedure TgaUpdateSQLStatement.ParseUpdateExpressionList;
begin
  
end;

procedure TgaUpdateSQLStatement.ParseUpdateTable;
begin
end;

procedure TgaUpdateSQLStatement.SetStatementState(const Value: 
        TUpdateStatementState);
begin
  if StatementState <> Value then
  begin
    if StatusCode = 0 then
      if Value in UpdateAllowedNextState[FStatementState] then
      begin
        DoBeforeStatementStateChange(Ord(Value));
        FStatementState := Value;
        InternalStatementState := 0;
        DoAfterStatementStateChange;
      end else
        StatusCode := errWrongKeywordSequence;
    if Value = ussStatementComplete then
    begin
      DoBeforeStatementStateChange(Ord(Value));
      FStatementState := Value;
      InternalStatementState := 0;
      DoAfterStatementStateChange;
    end;
  end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费毛片a| 国产九色sp调教91| 国产精品久久久久一区二区三区共| 精品视频1区2区3区| 欧美性猛交xxxxxx富婆| 色综合天天综合色综合av| 国产成人免费视频一区| 国产露脸91国语对白| 久久精品国产久精国产爱| 日本不卡一区二区三区 | 国模套图日韩精品一区二区| 久久91精品国产91久久小草| 精品一区二区三区久久久| 韩国一区二区视频| 国产精品888| 色网综合在线观看| 欧美婷婷六月丁香综合色| 欧美猛男男办公室激情| 日韩欧美美女一区二区三区| 2020日本不卡一区二区视频| 国产精品美女久久久久久久久久久| 欧美国产欧美综合| 樱桃视频在线观看一区| 日韩精品亚洲专区| 国产黄色精品网站| 91蝌蚪porny九色| 欧美一区日韩一区| 欧美韩国日本综合| 香蕉成人啪国产精品视频综合网| 奇米888四色在线精品| 国产大陆a不卡| 欧美色精品天天在线观看视频| 91麻豆精品91久久久久同性| 久久这里只有精品6| 国产精品动漫网站| 日韩av中文字幕一区二区| 国产精品一区在线观看你懂的| 91一区二区三区在线观看| 欧美一区二区三区在线观看 | 成人app在线观看| 欧美无砖专区一中文字| wwwwww.欧美系列| 亚洲福利国产精品| 成人av网址在线| 欧美一区二区视频观看视频| 国产精品午夜免费| 日韩黄色小视频| 97久久精品人人做人人爽| 日韩欧美色综合| 午夜精品成人在线| 99精品视频一区| 久久亚洲二区三区| 日韩**一区毛片| 在线日韩一区二区| 国产精品免费网站在线观看| 免费在线观看不卡| 欧美三级视频在线观看| 自拍偷拍亚洲激情| 成人午夜视频免费看| 精品国产免费一区二区三区四区| 亚洲一区二区三区视频在线| 菠萝蜜视频在线观看一区| 久久综合九色综合97婷婷女人| 亚洲成人动漫av| 欧美日韩一级黄| 一区二区在线观看av| 97久久精品人人爽人人爽蜜臀| 久久精品一区二区三区四区| 麻豆成人综合网| 欧美高清hd18日本| 三级影片在线观看欧美日韩一区二区| 99精品久久99久久久久| 国产精品久久久久9999吃药| 国模冰冰炮一区二区| 精品国产乱码久久久久久浪潮| 久久精品久久精品| 日韩欧美在线观看一区二区三区| 日韩高清在线电影| 8x8x8国产精品| 午夜久久福利影院| 日韩一区二区免费电影| 日本中文在线一区| 欧美一卡二卡三卡| 国内成人免费视频| 国产精品少妇自拍| av电影在线不卡| 一区二区三区精品| 欧美日韩高清在线播放| 日韩一区精品字幕| wwww国产精品欧美| 91色视频在线| 丝袜亚洲另类欧美| 欧美精品一区二区三区视频| 国产美女精品在线| 最新日韩av在线| 欧美日韩精品免费| 美女视频黄 久久| 国产欧美精品国产国产专区| 成人av综合一区| 亚洲高清在线精品| 精品精品国产高清a毛片牛牛 | 国产精品丝袜在线| 91久久奴性调教| 秋霞午夜av一区二区三区| 国产欧美一区二区三区网站| 91丝袜国产在线播放| 日韩高清国产一区在线| 久久一区二区三区四区| 91九色02白丝porn| 久草在线在线精品观看| 亚洲欧美乱综合| 欧美一区二区三区视频在线| 成人精品国产一区二区4080| 亚洲最快最全在线视频| 久久久影视传媒| 欧美在线999| 国产a区久久久| 日韩和欧美的一区| 亚洲人成精品久久久久久| 日韩三级中文字幕| 在线亚洲人成电影网站色www| 麻豆国产精品官网| 亚洲高清免费在线| 国产精品三级视频| 日韩精品自拍偷拍| 日本韩国欧美在线| 懂色中文一区二区在线播放| 亚洲国产中文字幕在线视频综合| 国产亚洲欧洲997久久综合| 欧美日韩一区二区三区免费看| 成人免费毛片aaaaa**| 日韩国产一区二| 亚洲综合激情小说| 亚洲欧洲精品一区二区三区| 精品少妇一区二区三区日产乱码| 欧美性大战久久久久久久| 波多野结衣一区二区三区| 经典三级一区二区| 麻豆精品视频在线| 午夜精品一区二区三区电影天堂| 自拍偷拍亚洲综合| 国产精品美日韩| 国产视频一区二区在线| 欧美xxxxxxxx| 欧美大黄免费观看| 91精品欧美福利在线观看| 欧美色涩在线第一页| 欧美亚洲综合一区| 欧洲视频一区二区| 欧美午夜精品电影| 欧美性淫爽ww久久久久无| 91视频国产观看| 91久久国产最好的精华液| 91蜜桃传媒精品久久久一区二区| 国产91精品一区二区麻豆网站 | 国产精品国产三级国产普通话蜜臀 | 麻豆91精品91久久久的内涵| 爽爽淫人综合网网站| 日韩电影在线免费观看| 蜜臀av国产精品久久久久| 五月婷婷欧美视频| 免费日韩伦理电影| 国产麻豆精品视频| 成人高清视频在线观看| www.亚洲激情.com| 在线一区二区观看| 欧美一级免费观看| 欧美激情综合五月色丁香小说| 国产欧美日韩久久| 日韩美女视频一区二区| 国产精品国产成人国产三级| 日韩一区有码在线| 午夜精品福利一区二区三区av| 日本在线观看不卡视频| 国产伦理精品不卡| 99re在线精品| 欧美精选在线播放| 久久久精品日韩欧美| 18成人在线观看| 午夜天堂影视香蕉久久| 紧缚捆绑精品一区二区| 成人一级黄色片| 欧美偷拍一区二区| 久久久久久久久岛国免费| 国产精品传媒视频| 日韩电影免费一区| 成人高清视频在线| 这里只有精品电影| 国产精品久久久久久久久晋中| 亚洲一区二区欧美| 国产原创一区二区三区| 在线亚洲免费视频| 欧美精品一区二区三区四区 | 日本成人在线不卡视频| 成人h版在线观看| 欧美疯狂性受xxxxx喷水图片| 久久欧美中文字幕| 亚洲h在线观看| 成人免费的视频| 日韩一级黄色大片|