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

📄 xqyacc.pas

📁 TxQuery is an SQL engine implemented in a TDataSet descendant component, that can parse SQL syntax,
💻 PAS
📖 第 1 页 / 共 4 页
字号:
 241 : begin
         CurrentAnalizer.DoSelectAll := True;
       end;
 242 : begin
         yyval := yyv[yysp-1];
       end;
 243 : begin
         yyval := yyv[yysp-0];
       end;
 244 : begin
         CurrentAnalizer.IsDistinct := True;
       end;
 245 : begin
         CreateNewSubquery;
         CurrentAnalizer.TopNInSelect:= FtempTopNInSelect;
         CurrentAnalizer.TopNInGroupBy:= FtempTopNInGroupBy;

       end;
 246 : begin
         FtempTopNInSelect:= 0;
       end;
 247 : begin
         FtempTopNInSelect:= StrToInt( yyv[yysp-0].yystring ) ;
       end;
 248 : begin
         FtempTopNInGroupBy:= 0;
       end;
 249 : begin
         FtempTopNInGroupBy:= StrToInt( yyv[yysp-0].yystring ) ;
       end;
 250 : begin
         Self.fCurrAnalizer := Self.fCurrAnalizer.ParentAnalizer;
       end;
 251 : begin
         fEscapeChar := '';
       end;
 252 : begin
         fEscapeChar := GetString( yyv[yysp-0].yystring );
       end;
 253 : begin
       end;
 254 : begin
         yyval := yyv[yysp-3];
       end;
 255 : begin
         AddGroupBy( yyv[yysp-0].yystring );
       end;
 256 : begin
         AddGroupBy( yyv[yysp-0].yystring );
       end;
 257 : begin
         yyval.yystring := Format('\f"%s"', [yyv[yysp-0].yystring]);
       end;
 258 : begin
         yyval := yyv[yysp-0];
       end;
 259 : begin
         yyval.yystring := yyv[yysp-0].yystring;
       end;
 260 : begin
       end;
 261 : begin
         AddHavingColumn( yyv[yysp-0].yystring );
         CurrentAnalizer.HavingCol := CurrentAnalizer.ColumnList.Count-1;
       end;
 262 : begin
       end;
 263 : begin
         yyval := yyv[yysp-2];
       end;
 264 : begin
         yyval := yyv[yysp-0];
       end;
 265 : begin
         yyval := yyv[yysp-2];
       end;
 266 : begin
         AddOrderBy( yyv[yysp-0].yystring, False );
       end;
 267 : begin
         AddOrderBy( yyv[yysp-1].yystring, False );
       end;
 268 : begin
         AddOrderBy( yyv[yysp-1].yystring, True );
       end;
 269 : begin
       end;
 270 : begin
         yyval := yyv[yysp-0];
       end;
 271 : begin
         yyval := yyv[yysp-5];
       end;
 272 : begin
         yyval := yyv[yysp-6];
       end;
 273 : begin
         yyval := yyv[yysp-0];
       end;
 274 : begin
         yyval := yyv[yysp-2];
       end;
 275 : begin
         AddUpdateColumn(yyv[yysp-2].yystring,yyv[yysp-0].yystring);
       end;
 276 : begin
         AddUpdateColumn(yyv[yysp-2].yystring,'');
       end;
 277 : begin
         yyval := yyv[yysp-4];
       end;
 278 : begin
         yyval := yyv[yysp-1];
       end;
 279 : begin
         Inc(fNumInserts);
       end;
 280 : begin
         Inc(fNumInserts);
       end;
 281 : begin
         if fIsFullPath then
         CurrentInsertItem.TableName := Copy(yyv[yysp-3].yystring,2,Length(yyv[yysp-3].yystring)-2)
         else
         CurrentInsertItem.TableName := yyv[yysp-3].yystring;
         CurrentInsertItem.IsFullPath  := self.fIsFullPath ;

       end;
 282 : begin
       end;
 283 : begin
         yyval := yyv[yysp-0];
       end;
 284 : begin
         fIsFullPath := false;
       end;
 285 : begin
         fIsFullPath := true;
       end;
 286 : begin
         yyval := yyv[yysp-2];
       end;
 287 : begin
         yyval := yyv[yysp-2];
       end;
 288 : begin
         CurrentInsertItem.FieldNames.Add(yyv[yysp-0].yystring);
       end;
 289 : begin
         CurrentInsertItem.FieldNames.Add(yyv[yysp-0].yystring);
       end;
 290 : begin
         yyval := yyv[yysp-2];
       end;
 291 : begin
         yyval := yyv[yysp-0];
       end;
 292 : begin
         CurrentInsertItem.ExprList.Add( yyv[yysp-0].yystring );
       end;
 293 : begin
         CurrentInsertItem.ExprList.Add( yyv[yysp-0].yystring );
       end;
 294 : begin
         yyval := yyv[yysp-0];
       end;
 295 : begin
         yyval := yyv[yysp-0];
       end;
 296 : begin
         yyval := yyv[yysp-1];
       end;
 297 : begin
         yyval := yyv[yysp-0];
       end;
 298 : begin
         yyval := yyv[yysp-1];
       end;
 299 : begin
         SetAlterTableName( GetString( yyv[yysp-1].yystring ) );
       end;
 300 : begin
         yyval := yyv[yysp-0];
       end;
 301 : begin
         yyval := yyv[yysp-2];
       end;
 302 : begin
         AddAlterField(yyv[yysp-1].yystring,false);
       end;
 303 : begin
         AddAlterField(yyv[yysp-0].yystring,true);
       end;
 304 : begin
       end;
 305 : begin
         yyval := yyv[yysp-0];
       end;
 306 : begin
         yyval := yyv[yysp-1];
       end;
 307 : begin
         Inc(FNumTables);
       end;
 308 : begin
         Inc(FNumTables);
       end;
 309 : begin
         SetTableName( GetString( yyv[yysp-4].yystring ) );
       end;
 310 : begin
         SetFieldParams(RW_CHAR,0,0,StrToInt(yyv[yysp-1].yystring),0);
       end;
 311 : begin
         SetFieldParams(RW_INTEGER,0,0,0,0);
       end;
 312 : begin
         SetFieldParams(RW_SMALLINT,0,0,0,0);
       end;
 313 : begin
         SetFieldParams(RW_BOOLEAN,0,0,0,0);
       end;
 314 : begin
         SetFieldParams(RW_DATE,0,0,0,0);
       end;
 315 : begin
         SetFieldParams(RW_TIME,0,0,0,0);
       end;
 316 : begin
         SetFieldParams(RW_DATETIME,0,0,0,0);
       end;
 317 : begin
         SetFieldParams(RW_MONEY,0,0,0,0);
       end;
 318 : begin
         SetFieldParams(RW_FLOAT,0,0,0,0);
       end;
 319 : begin
         SetFieldParams(RW_FLOAT,StrToInt(yyv[yysp-1].yystring),0,0,0);
       end;
 320 : begin
         SetFieldParams(RW_FLOAT,StrToInt(yyv[yysp-3].yystring),StrToInt(yyv[yysp-1].yystring),0,0);
       end;
 321 : begin
         SetFieldParams(RW_AUTOINC,0,0,0,0);
       end;
 322 : begin
         SetFieldParams(RW_BLOB,0,0,0,StrToInt(yyv[yysp-1].yystring));
       end;
 323 : begin
         AddCreateField(yyv[yysp-1].yystring);
       end;
 324 : begin
         AddCreateField(yyv[yysp-1].yystring);
       end;
 325 : begin
       end;
 326 : begin
         yyval := yyv[yysp-4];
       end;
 327 : begin
         AddPrimaryKeyField( yyv[yysp-0].yystring );
       end;
 328 : begin
         AddPrimaryKeyField( yyv[yysp-0].yystring );
       end;
 329 : begin
         CurrentAnalizer.IndexName  := yyv[yysp-6].yystring;
         CurrentAnalizer.IndexTable := GetString( yyv[yysp-4].yystring );
       end;
 330 : begin
       end;
 331 : begin
         CurrentAnalizer.IndexUnique := True;
       end;
 332 : begin
       end;
 333 : begin
         yyval := yyv[yysp-0];
       end;
 334 : begin
         CurrentAnalizer.IndexDescending := True;
       end;
 335 : begin
         CurrentAnalizer.IndexColumnList.Add(yyv[yysp-0].yystring);
       end;
 336 : begin
         CurrentAnalizer.IndexColumnList.Add(yyv[yysp-0].yystring);
       end;
 337 : begin
         CurrentAnalizer.IndexTable:= GetString( yyv[yysp-1].yystring );
       end;
 338 : begin
         CurrentAnalizer.IndexTable:= GetString( yyv[yysp-2].yystring );
         CurrentAnalizer.IndexName := yyv[yysp-1].yystring;
       end;
 339 : begin
         CurrentAnalizer.PivotStr := yyv[yysp-2].yystring;
       end;
 340 : begin
         AddColumn( yyv[yysp-0].yystring, True );
       end;
 341 : begin
         AddColumn( yyv[yysp-3].yystring, True );
       end;
 342 : begin
         yyval := yyv[yysp-0];
       end;
 343 : begin
         yyval := yyv[yysp-2];
       end;
 344 : begin
       end;
 345 : begin
         yyval := yyv[yysp-3];
       end;
 346 : begin
         CurrentAnalizer.SubqueryInPivotPredicate:= true ;
       end;
 347 : begin
         CurrentAnalizer.PivotInList.Add( RemoveStrDelim( yyv[yysp-0].yystring));
       end;
 348 : begin
         CurrentAnalizer.PivotInList.Add( RemoveStrDelim( yyv[yysp-0].yystring));
       end;
 349 : begin
         yyval := yyv[yysp-5];
       end;
 350 : begin
         CurrentAnalizer.DoSelectAll := True;
       end;
 351 : begin
         yyval := yyv[yysp-1];
       end;
 352 : begin
         yyval := yyv[yysp-0];
       end;
 353 : begin
         CurrentAnalizer.IsDistinct := True;
       end;
 354 : begin
         CurrentAnalizer.UnionAnalizer :=
         TSqlAnalizer.Create( CurrentAnalizer.ParentAnalizer, fAnalizer.xQuery );
         Self.fCurrAnalizer := CurrentAnalizer.UnionAnalizer;
       end;
 355 : begin
         yyval := yyv[yysp-2];
       end;
 356 : begin
         yyval := yyv[yysp-2];
       end;
 357 : begin
         yyval := yyv[yysp-2];
       end;
  end;
end(*yyaction*);

(* parse table: *)

type YYARec = record
                sym, act : SmallInt;
              end;
     YYRRec = record
                len, sym : SmallInt;
              end;

const

yynacts   = 4800;
yyngotos  = 1170;
yynstates = 695;
yynrules  = 357;

var

yya : array [1..yynacts    ] of YYARec;
yyg : array [1..yyngotos   ] of YYARec;
yyd : array [0..yynstates-1] of SmallInt;
yyal: array [0..yynstates-1] of SmallInt;
yyah: array [0..yynstates-1] of SmallInt;
yygl: array [0..yynstates-1] of SmallInt;
yygh: array [0..yynstates-1] of SmallInt;
yyr : array [1..yynrules   ] of YYRRec;

procedure LoadResArrays;

  procedure ResLoad(const resname: string; ResourceBuffer: Pointer);
  var
    ResourceSize: Integer;
    ResourcePtr: PChar;
    BinResource: THandle;
    ResInstance: Longint;
    H: THandle;
    Buf: array[0..255] of Char;
  begin
    H := System.FindResourceHInstance(HInstance);
    StrPLCopy(Buf, resname, SizeOf(Buf)-1);
    ResInstance := FindResource(H, Buf, RT_RCDATA);
    if ResInstance = 0 then begin
      H := HInstance;
      {try to find in main binary}
      ResInstance := FindResource(H, Buf, RT_RCDATA);
    end;
    ResourceSize := SizeofResource(H,ResInstance);
    BinResource := LoadResource(H,ResInstance);
    ResourcePtr := LockResource(BinResource);
    Move(ResourcePtr^, ResourceBuffer^, ResourceSize);
    UnlockResource(BinResource);
    FreeResource(BinResource);

  end;
begin

  ResLoad('xqyacc_YYA', @yya[1]);
  ResLoad('xqyacc_YYG', @yyg[1]);

  ResLoad('xqyacc_YYD', @yyd[0]);

  ResLoad('xqyacc_YYAL', @yyal[0]);

  ResLoad('xqyacc_YYAH', @yyah[0]);

  ResLoad('xqyacc_YYGL', @yygl[0]);

  ResLoad('xqyacc_YYGH', @yygh[0]);

  ResLoad('xqyacc_YYR', @yyr[1]);


end;


const _error = 256; (* error token *)

function yyact(state, sym : Integer; var act : SmallInt) : Boolean;
  (* search action table *)
  var k : Integer;
  begin
    k := yyal[state];
    while (k<=yyah[state]) and (yya[k].sym<>sym) do inc(k);
    if k>yyah[state] then
      yyact := false
    else
      begin
        act := yya[k].act;
        yyact := true;
      end;
  end(*yyact*);

function yygoto(state, sym : Integer; var nstate : SmallInt) : Boolean;
  (* search goto table *)
  var k : Integer;
  begin
    k := yygl[state];
    while (k<=yygh[state]) and (yyg[k].sym<>sym) do inc(k);
    if k>yygh[state] then
      yygoto := false
    else
      begin
        nstate := yyg[k].act;
        yygoto := true;
      end;
  end(*yygoto*);

label parse, next, error, errlab, shift, reduce, accept, abort;

begin(*yyparse*)

  (* load arrays from resource *)
  LoadResArrays;

  yystate := 0; yychar := -1; yynerrs := 0; yyerrflag := 0; yysp := 0;

{$ifdef yydebug}
  yydebug := true;
{$else}
  yydebug := false;
{$endif}

parse:

  (* push state and value: *)

  inc(yysp);
  if yysp>yymaxdepth then
    begin
      yyerror('yyparse stack overflow');
      goto abort;
    end;
  yys[yysp] := yystate; yyv[yysp] := yyval;

next:

  if (yyd[yystate]=0) and (yychar=-1) then
    (* get next symbol *)
    begin
      repeat
         yychar := yyLexer.yylex; if yychar<0 then yychar := 0;
         // ignore comments and blanks [ \n\t]
         if not( (yychar=_COMMENT) or (yychar=_BLANK) or
                 (yychar=_TAB) or (yychar=_NEWLINE) ) then break;
      until false;
      if yychar= _ILLEGAL then goto error;
    end;

  (*
  if yydebug then
    writeln( yyLexer.yyOutput, 'state '+intToStr( yystate)+ ', char '+
                               intToStr( yychar) + ' at line n

⌨️ 快捷键说明

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