Zdá sa, že FDSQLiteFunction1 svoju udalosť OnFinalize, ráči navštíviť iba v prípade, že je označená ako aggregate.
Alebo robím niekde chybu?
Použil som prakticky identický kód s tvojim príspevkom, ale finalize sa nevykonáva..
To je spravne chovani a spatny priklad z me strany. Ty
AUserData objekty by se neuvolnily se skalarni funkci. Viz.
Create Or Redefine SQL Functions:
The sixth, seventh and eighth parameters, xFunc, xStep and xFinal, are pointers to C-language functions that implement the SQL function or aggregate. A scalar SQL function requires an implementation of the xFunc callback only; NULL pointers must be passed as the xStep and xFinal parameters. An aggregate SQL function requires an implementation of xStep and xFinal and NULL pointer must be passed for xFunc. To delete an existing SQL function or aggregate, pass NULL pointers for all three function callbacks.
A protoze je udalost
OnFinalize ve FireDAC povesena na
xFinal callback, bude se spoustet jen pro agregatni funkce. On nejspis SQLite nenabizi jinou moznost. Ten mechanismus funguje tak, ze vytvoris UDF s definovanymi callbacky. A SQLite pak uz jen kompiluje SQL prikazy a pri prochazeni kurzorem vola ty callbacky. V pripade skalarnich funkci je k dispozici tedy jen
xFunc callback, tj. ve FireDAC udalost
OnCalculate.
Pro konstantni hodnoty parametru by bylo mozne definovat pomerne nestabilni
cache objekty pomoci
Function Auxiliary Data, to ale neni Tvuj pripad.
Omlouvam se za spatny priklad.