Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

implementacija lijevog i desnog vanjskog SQL ključa u JanSQL

1 view
Skip to first unread message

AureliusMaticus

unread,
Aug 19, 2011, 8:40:01 AM8/19/11
to
Ovako, u jedinici imaomo:
TjanSQLExpression2=class(TObject)
private
FInFix:TList;
FPostFix:TList;
FStack:TList;
Fsource: string;
VStack:array[0..100] of variant;
SP:integer;
idx: integer; // scan index
SL:integer; // source length
FToken:string;
FTokenKind:TTokenKind;
FTokenValue:variant;
FTokenOperator:TTokenOperator;
FTokenLevel:integer;
FTokenExpression:string;
...........................................
i onda pop i push metode:

function TjanSQLExpression2.runpop: variant;
begin
if SP=0 then result:=null
else begin
dec(SP);
result:=VStack[sp];
end;
end;

procedure TjanSQLExpression2.runpush(value:Variant);
begin
VStack[SP]:=value;
inc(SP);
end;

runpop i runpush metode se koriste za izvođenje operacije nad
vrijednostima u VStack nizovnom steku, npr:

procedure TjanSQLExpression2.procEq;
var
v1,v2:variant;
b:boolean;
begin
v1:=runpop;
v2:=runpop;
runpush(v2=v1);
end;

procedure TjanSQLExpression2.procGe;
var
v1,v2:variant;
begin
v1:=runpop;
v2:=runpop;
runpush(v2>=v1);
end;

procedure TjanSQLExpression2.procGt;
var
v1,v2:variant;
begin
v1:=runpop;
v2:=runpop;
runpush(v2>v1);
end;

itd...

JanSQL ima ograničenje da omogućava jedino inner joinove i to preko
"=" u WHERE odjeljku SQL iskaza.
Ja bih sada želio dodati po uzoru na Sybase operatore "*=" (left outer
join) i "=*" (right outer join), pa bih po uzoru na gore naveden
metode trebao napisati procedure TjanSQLExpression2.procLOJ i
TjanSQLExpression2.procROJ; gdje ROJ=RightOuterJoin, a
LOJ=LeftOuterJoin.

Međutim, nemam nikakvu ideju što trebam upisati pod runpush dio?!?

runpush (v2 ??? v1) ?

Kako to izvesti?

0 new messages