📄 xqyacc.pas
字号:
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 + -