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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? myldbsqlprocessor.pas

?? 一個本地database引擎,支持中文T_Sql查詢,兼容DELPHI標(biāo)準(zhǔn)數(shù)據(jù)庫控件
?? PAS
?? 第 1 頁 / 共 5 頁
字號:

 try
  // create group by AO?
  bGroupBy := (GroupByFields.ItemCount > 0);
  // check for aggregates in select list
  if (not bGroupBy) then
   if (not AllFields) then
    begin
     for i := 0 to SelectListCount-1 do
      if (SelectList[i].ValueExpr <> nil) then
       if (TMYLDBExpression(SelectList[i].ValueExpr).IsAggregated) then
        begin
         bGroupBy := True;
         break;
        end;
    end;

  // if expressions, then AOTable -> AOTableExpr?
  if (bGroupBy) or (Result is TMYLDBAOTable) then
   begin
    bAnyExpressions := False;
    for i := 0 to SelectListCount-1 do
     if (SelectList[i].ValueExpr <> nil) then
      // 5.01 fix to support "select f1,f1 from table1"
      if (not TMYLDBExpression(SelectList[i].ValueExpr).IsField) or SelectList[i].IsDuplicatedField then
        if (not TMYLDBExpression(SelectList[i].ValueExpr).IsAggregated) then
         begin
          bAnyExpressions := True;
          break;
         end;
    // create table wrapper with expression-fields?
    if (bAnyExpressions) then
      begin
        if (bGroupBy) then
          begin
            bAnyExpressions := False;
            // check if group by expression, not only by fields
            for i := 0 to SelectListCount-1 do
             if (SelectList[i].ValueExpr <> nil) then
              if (not TMYLDBExpression(SelectList[i].ValueExpr).IsField) then
                if (not TMYLDBExpression(SelectList[i].ValueExpr).IsAggregated) then
                  begin
                    for j := 0 to GroupByFields.ItemCount-1 do
                      if (AnsiUpperCase(GroupByFields.Items[j].FieldName) =
                          AnsiUpperCase(SelectList[i].Pseudonym)) then
                        begin
                          bAnyExpressions := True;
                          break;
                        end;
                  end;
            if (bAnyExpressions) then
              begin
                Result := TMYLDBAOTableExpr.Create(Result);
                Result.SetResultFields(SelectList,False);
              end;
          end
        else
          Result := TMYLDBAOTableExpr.Create(Result);
      end;
   end;

  // apply parts of WHERE clause if possible
  if (SearchCondition <> nil) then
     SearchCondition.ApplyFilterParts(Result, ParentQueryAO, ParentCursor);

  // create GroupByAO, apply having condition
  if (bGroupBy) then
   begin
    try
     Result := TMYLDBAOGroupBy.Create(Result, GroupByFields, SelectList);
     GroupByAO := Result;
    except
     // to avoid duplicated destroying
     Result := nil;
     for i := 0 to SelectListCount-1 do
      if (SelectList[i].ValueExpr <> nil) then
       begin
        SelectList[i].ValueExpr.Free;
        SelectList[i].ValueExpr := nil;
       end;
     raise;
    end;
   end;

  // prepare for setting projection
  if (Result.FHasSetResultFields) then
    Result := TMYLDBAOTableExpr.Create(Result);

  bAddTempTableAO := (not RequestLive) and (Result is TMYLDBAOTable) and (TopRowCount < 0);
  // sets projection
  Result.SetResultFields(SelectList,Distinct and (not bAddTempTableAO));

  if (bGroupBy) then
    begin
      // apply having
      if (HavingCondition <> nil) then
        begin
          // apply having with pseudonames
          HavingCondition.ApplyFilterParts(Result, ParentQueryAO, ParentCursor, false, true);
          // apply having w/o pseudonames
          HavingCondition.ApplyFilterParts(GroupByAO, ParentQueryAO, ParentCursor, true, true);
          if (not AllowNotAppliedConditions) then
            if (not HavingCondition.IsEmpty) then
               raise EMYLDBException.Create(20244, ErorrANotApplicableHavingCondition);
        end;
    end;

  // sort - order by
  ApplyOrderBy(Result);

  // apply pseudonames parts of WHERE clause if possible
  if (SearchCondition <> nil) then
   begin
     SearchCondition.ApplyFilterParts(Result, ParentQueryAO, ParentCursor);
     if (not AllowNotAppliedConditions) then
       if (not SearchCondition.IsEmpty) then
         raise EMYLDBException.Create(30144, ErorrGNotApplicableCondition);
   end;

  // TOP n?
  if (TopRowCount > -1) then
   begin
    Result := TMYLDBAOSQLTopRowCount.Create(Result);
    Result.SetTopRowCount(FirstRowNo, TopRowCount);
   end;

  // if not request live => always use temp table
  if (bAddTempTableAO) then
    begin
      Result := TMYLDBAOTableExpr.Create(Result);
      Result.SetResultFields(SelectList,Distinct and bAddTempTableAO);
    end;

 except
  if (Assigned(Result)) then
   Result.Free;
  raise;
 end;
end;//BuildAOTree


//------------------------------------------------------------------------------
// SELECT
//------------------------------------------------------------------------------
function TMYLDBSQLSelect.ParseSelectToken: Boolean;
begin
  Result := IsReservedWord(Token, rwSELECT);
  if (not Result) then
   // unsupported SQL or unexpected token
   raise EMYLDBException.Create(30156, ErrorGSQLCommandExpected,
         [Token.Text, Token.LineNum, Token.ColumnNum]);
  GetNextToken;
end;//ParseSelectToken


//------------------------------------------------------------------------------
// DISTINCT | ALL ?
//------------------------------------------------------------------------------
function TMYLDBSQLSelect.ParseSetQuantifier: Boolean;
begin
 if (IsReservedWord(Token)) then
  begin
    if (IsReservedWord(Token, rwALL)) then
     begin
      Distinct := False;
      Result := True;
     end
    else
    if (IsReservedWord(Token, rwDISTINCT)) then
     begin
      Distinct := True;
      Result := True;
     end
    else // unrecognized reserved word - give up to handle
     begin
      Distinct := False; // default value
      Result := False; // handle this token by another handler
     end;
  end
 else // not reserved-word token give up handling
  begin
    Distinct := False; // default value
    Result := False; // handle this word by another handler
  end;

 // get next token
 if (Result) then
  GetNextToken;
end;// ParseSetQuantifier


//------------------------------------------------------------------------------
// TOP n ?
//------------------------------------------------------------------------------
function TMYLDBSQLSelect.ParseTopOperator: Boolean;
begin
  if (IsReservedWord(Token, rwTOP)) then
   begin
    // suppose 'TOP n'
    GetNextToken;
    // integer?
    if (not (Token.TokenType in [tktInt,tktParameter]) ) then
     raise EMYLDBException.Create(30158, ErrorGIntegerExpected,
                             [Token.Text, Token.LineNum, Token.ColumnNum]);
    if (Token.TokenType = tktInt) then
      TopRowCount := StrToInt(Token.Text)
    else
      TopRowCount := Token.ParamValue.AsInteger;
    // get next token
    GetNextToken;
    // default value
    FirstRowNo := -1;
    // ','? => TOP n, first_row
    if (Token.Text = ',') then
     begin
       // get next token
       GetNextToken;
       // integer?
       if (not (Token.TokenType in [tktInt,tktParameter]) ) then
         raise EMYLDBException.Create(30159, ErrorGIntegerExpected,
                             [Token.Text, Token.LineNum, Token.ColumnNum]);
       if (Token.TokenType = tktInt) then
         FirstRowNo := StrToInt(Token.Text)
       else
         FirstRowNo := Token.ParamValue.AsInteger;
       // get next token
       GetNextToken;
     end;
    Result := True;
   end
  else // unrecognized reserved word - give up to handle
   begin
    TopRowCount := -1; // default value
    FirstRowNo := -1;
    Result := False; // handle this token by another handler
   end;
end;// ParseTopOperator


//------------------------------------------------------------------------------
// DuplicatedFieldExists
//------------------------------------------------------------------------------
function TMYLDBSQLSelect.DuplicatedFieldExists(const TableName, FieldName: String): Boolean;
var
  i: Integer;
begin
  Result := False;
  for i:=0 to SelectListCount-1 do
    if (not SelectList[i].IsExpression) then
      if (AnsiUpperCase(SelectList[i].TableName) = AnsiUpperCase(TableName)) and
          (AnsiUpperCase(SelectList[i].FieldName) = AnsiUpperCase(FieldName)) then
        begin
          Result := True;
          break;
        end;
end;// DuplicatedFieldExists


//------------------------------------------------------------------------------
// FieldExists
//------------------------------------------------------------------------------
function TMYLDBSQLSelect.FieldExists(const TableName, FieldName: String): Boolean;
var
  i: Integer;
begin
  Result := False;
  for i:=0 to SelectListCount-1 do
      if (AnsiUpperCase(SelectList[i].TableName) = AnsiUpperCase(TableName)) and
         ((AnsiUpperCase(SelectList[i].FieldName) = AnsiUpperCase(FieldName)) or
          (AnsiUpperCase(SelectList[i].Pseudonym) = AnsiUpperCase(FieldName)))then
        begin
          Result := True;
          break;
        end;
end;// FieldExists


//------------------------------------------------------------------------------
// GetFieldNameForDuplicatedField
//------------------------------------------------------------------------------
function TMYLDBSQLSelect.GetFieldNameForDuplicatedField(const TableName, FieldName: String): String;
var
  i: Integer;
begin
  i := 0;
  repeat
    Inc(i);
    Result := Format('%s_%d',[FieldName,i]);
  until (not FieldExists(TableName, Result));
end;// GetFieldNameForDuplicatedField


//------------------------------------------------------------------------------
// <derived column>  | <qualifier> <period> <asterisk>
//------------------------------------------------------------------------------
function TMYLDBSQLSelect.ParseSelectSubList: Boolean;
var
  FieldName, TableName, Pseudonym: string;
  AllFields: Boolean;
begin
 // handle field1 | table1.field1 | expr
  begin
   Result := True;

   // add new select list item
   inc(SelectListCount);
   SetLength(SelectList, SelectListCount);

   // parse field name | expr
   SelectList[SelectListCount-1].ValueExpr := TMYLDBExpression.Create;

   TMYLDBExpression(SelectList[SelectListCount-1].ValueExpr).InMemory :=
                                                     TMYLDBQuery(LQuery).InMemory;

   TMYLDBExpression(SelectList[SelectListCount-1].ValueExpr).ParseForValueExpression(
                                LQuery, LLex);

   if (TMYLDBExpression(SelectList[SelectListCount-1].ValueExpr).IsEmpty) then
    begin
     SelectList[SelectListCount-1].ValueExpr.Free;
     SelectList[SelectListCount-1].ValueExpr := nil;
     raise EMYLDBException.Create(30160, ErrorGExpressionExpected,
                             [Token.Text, Token.LineNum, Token.ColumnNum]);
    end;
   GetCurrentToken;

   // pseudonym is not specified yet
   Pseudonym := '';
   AllFields := False;
   // check pseudonym
   if (not AllFields) then
    // (Field1 AS F1) ?
          if (IsReservedWord(Token, rwAS)) then
           begin
             // get next token (F1?)
             GetNextToken([tktString, tktQuotedString, tktBracketedString],
                          30162, ErrorGFieldPseudonymExpected);
             // got pseudonym
             Pseudonym := Token.Text;
             // get next token
             GetNextToken;
            end
          else
          // (Field1 F1) ?
          if (Token.TokenType in
               [tktString, tktQuotedString, tktBracketedString]) then
            begin
             // got pseudonym
             Pseudonym := Token.Text;
             // look at next token
             GetNextToken;
            end;

   // expr or field?
   SelectList[SelectListCount-1].IsExpression :=
          not TMYLDBExpression(SelectList[SelectListCount-1].ValueExpr).IsField;

   // field?
   if (not SelectList[SelectListCount-1].IsExpression) then
    begin
     // get field name, table name
     TMYLDBExpression(SelectList[SelectListCount-1].ValueExpr).GetFieldInfo(TableName, FieldName);
     // treat duplicated field as expression
     if (FieldName = '*') or (not DuplicatedFieldExists(TableName, FieldName)) then
       begin
         // store TableName
         SelectList[SelectListCount-1].TableName := TableName;
         // store ValueExpr (FieldName)
         SelectList[SelectListCount-1].FieldName := FieldName;
         if (FieldName = '*') then
          AllFields := True;
         SelectList[SelectListCount-1].IsDuplicatedField := False;
       end
     else
       begin
         SelectList[SelectListCount-1].IsExpression :=True;
         SelectList[SelectListCount-1].IsDuplicatedField := True;
         if (Pseudonym = '') then
           Pseudonym := GetFieldNameForDuplicatedField(TableName, FieldName);
       end;
    

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
男男视频亚洲欧美| 午夜成人在线视频| 久久精品在线观看| 欧美videossexotv100| 欧美电影精品一区二区| 久久这里都是精品| 色婷婷狠狠综合| 欧美视频在线一区| 丝袜亚洲另类欧美| 欧美v日韩v国产v| 欧美久久久久久久久| 国产精品国产a| 日韩亚洲欧美成人一区| 在线欧美日韩精品| 在线免费不卡视频| 91成人免费电影| fc2成人免费人成在线观看播放| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 国产成a人亚洲| 91电影在线观看| 国产精品久久久久永久免费观看 | 久久这里只有精品视频网| 亚洲精品欧美激情| a在线欧美一区| 久久久精品人体av艺术| 久久精品国产秦先生| 欧美自拍丝袜亚洲| 一区二区三区在线免费视频| 国产精品系列在线播放| 精品国产123| 国产精品影视网| 日本一区二区动态图| 亚洲精品五月天| 欧美日韩视频在线第一区| 久久激情综合网| 亚洲欧洲日本在线| 精品免费国产一区二区三区四区| 成人性生交大合| 亚洲激情在线播放| 欧美精品久久一区| 国产精一区二区三区| ...xxx性欧美| 91麻豆精品国产91久久久久久 | 亚洲一区二区三区四区在线观看| 色94色欧美sute亚洲线路二| 午夜影院久久久| 国产日韩精品一区二区三区在线| 91视频精品在这里| 青娱乐精品视频| 伊人色综合久久天天| 国产精品毛片无遮挡高清| 色视频欧美一区二区三区| 捆绑调教一区二区三区| 国产精品久久久久久久久快鸭| 91污在线观看| 精品中文字幕一区二区| 一区二区在线电影| 国产日本欧美一区二区| 91精品国产福利在线观看 | 国产精品免费看片| 欧美一区二区三区视频在线观看 | 亚洲成av人片在线| 国产精品久久午夜夜伦鲁鲁| 欧美老年两性高潮| 韩日欧美一区二区三区| 亚洲国产日产av| 亚洲欧美日韩中文播放| 久久久噜噜噜久久中文字幕色伊伊| 欧美日韩中文字幕一区| 欧美在线三级电影| 色综合久久中文字幕综合网| 大桥未久av一区二区三区中文| 蜜桃视频第一区免费观看| 视频一区欧美精品| 天堂久久久久va久久久久| 亚洲成a人片在线观看中文| 亚洲成人av中文| 日本成人在线视频网站| 热久久免费视频| 久久99国产精品久久99果冻传媒| 五月激情综合婷婷| 美女脱光内衣内裤视频久久影院| 亚洲成a人片在线观看中文| 日韩av一级电影| 激情文学综合丁香| 99精品视频一区| 欧美人与性动xxxx| 欧美国产日韩亚洲一区| 亚洲美女淫视频| 首页国产欧美久久| 国模套图日韩精品一区二区| 99精品在线免费| 91麻豆精品国产91久久久资源速度| 日韩一级大片在线| 中文字幕第一区二区| 天天操天天干天天综合网| 免费的成人av| 欧美专区日韩专区| 久久蜜桃av一区二区天堂 | 日本电影欧美片| 日韩欧美一级二级三级久久久 | 99久久伊人久久99| 91精品综合久久久久久| 中文字幕亚洲欧美在线不卡| 日韩国产成人精品| 欧美综合在线视频| 欧美国产一区在线| 午夜欧美2019年伦理| 一区二区三国产精华液| 一区二区三区中文字幕在线观看| 亚洲一区二区成人在线观看| 色狠狠色噜噜噜综合网| 亚洲精品欧美二区三区中文字幕| 欧美午夜精品免费| 亚洲国产日韩一级| 色婷婷精品久久二区二区蜜臂av| 中文字幕在线观看不卡| 不卡大黄网站免费看| 精品国产成人在线影院| 麻豆视频观看网址久久| 欧美在线观看视频在线| 亚洲主播在线播放| 欧美人动与zoxxxx乱| 日本中文一区二区三区| 久久久久国产一区二区三区四区 | 国产在线播精品第三| 色吧成人激情小说| 樱花草国产18久久久久| 欧美撒尿777hd撒尿| 日韩不卡免费视频| 亚洲欧洲av在线| 在线观看视频一区| 国产一区二区三区在线看麻豆| 国产拍揄自揄精品视频麻豆| 成人午夜免费电影| 亚洲成人精品在线观看| 久久综合色8888| 一本久道中文字幕精品亚洲嫩| 亚洲妇熟xx妇色黄| 中文字幕精品三区| 91麻豆精品国产91久久久使用方法 | 欧美激情一区在线观看| 欧美电影免费观看高清完整版| 91在线看国产| 成人av网站在线| 春色校园综合激情亚洲| 老司机午夜精品| 亚洲日本青草视频在线怡红院| 欧美剧情片在线观看| 丁香一区二区三区| 美女任你摸久久| 一区二区三区不卡视频在线观看| 精品久久人人做人人爽| 精品视频免费看| 欧美在线一二三四区| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 中文字幕一区视频| 久久久综合精品| 亚洲精品一线二线三线无人区| 欧美日韩国产综合草草| 色综合天天做天天爱| 91污片在线观看| 91在线小视频| 91免费版pro下载短视频| 国产成人av福利| 国产高清成人在线| 成人一级黄色片| 99视频在线精品| 欧美专区日韩专区| 欧美少妇bbb| 日韩欧美自拍偷拍| 久久婷婷国产综合国色天香 | 天天综合天天做天天综合| 一区二区三区.www| 亚洲va天堂va国产va久| 午夜天堂影视香蕉久久| 日日嗨av一区二区三区四区| 奇米色777欧美一区二区| 久久精品免费观看| 成人一区在线看| 欧美在线观看视频一区二区| 宅男噜噜噜66一区二区66| 欧美午夜精品久久久久久超碰| 欧美精品粉嫩高潮一区二区| 精品久久久影院| 国产精品久久免费看| 亚洲国产一区二区a毛片| 裸体健美xxxx欧美裸体表演| 国产经典欧美精品| 精品视频999| 亚洲国产精品成人综合 | 成人黄页在线观看| 日韩西西人体444www| 欧美韩日一区二区三区| 亚洲成国产人片在线观看| 国产高清久久久| 日韩视频免费观看高清完整版 | 93久久精品日日躁夜夜躁欧美| 欧美videossexotv100| 亚洲国产精品久久久久秋霞影院 |