Trochu problém, toto riešenie funguje len pre jednu inštanciu funkcie v rámci SQL.
Viacnásobné požitie tej iste funkcie v SQL vyššie uvedeným spôsobom nefunguje :
Pre funkcie, ktoré nie sú
aggregate, by sa dalo využiť tvoje: AOutput.Handle + Dictionary.
Jednoduchým skombinovaním dvoch riešení to nejde.
Link na tvoj príspevok, kde navrhuješ postup pre viac inštancií jednej funkcie:
Lenže nové Output.Handle už neumožní vyhľadanie hodnoty v Dictionary, pretože sa zmeni riešením pre Aggregate.
Bijú sa tieto dva čiastkové kódy:
if not FResults.TryGetValue(AOutput.Handle, Value) then
Value := AInputs[0].AsInteger
else
Value := Value + AInputs[0].AsInteger;
FResults.AddOrSetValue(AOutput.Handle, Value);
V rámci opravy Finalize, sa priradí iný handle, než je v Dictionary:
procedure TSQLiteFunctionInstance.DoFinalize(context: psqlite3_context);
begin
FOutput.Handle := context; // je treba uchovat kontext, jinak nebude mozne vratit hodnotu
Func.DoFinalize(Self);
end;
[/quote]
Musel som použiť ešte ďalšiu property FHandleOld, pre zachovanie FHandle. Potom to už funguje.