[fpc-pascal] Built in Query language (or abuse)
Adrian Veith
adrian at veith-system.de
Wed Jun 4 11:39:37 CEST 2008
L schrieb:
> A creative idea:
>
> --Another idea--
> Remember the "file of Record" innovation in pascal?
>
> Table of Record...
>
> A "file of record" allows one to remain strongly typed. What about a
> "DatabaseTable of Record".
>
> var
> // F: File Of DataRec;
> DB: Table of DataRec; // aka a RelVar
>
We do something similar with our dbGonzales Database engine with
standard pascal code. The tables are typed and have coresponding
interface classes in oo-pascal. A table can hold any of the subclasses
of its baseclass. If you access a "record" you get automatically the
corresponding interface class and can use its methods.
A small demo to visualize this is here
http://www.db-gonzales.de/download/GDemo.zip. The demo draws objects
(circle, line, rectangle, ellips) stored in database and animates them
(or adds new). If you start more instances of the demo, you can see what
the other instance is doing with the objects.
If you look at the source of the demo, you can see, that it is also
possible to write queries with pascal notation, which are already
checked at compile time - but I must admit, that this a little bit clumsy.
qy:= TGdfFilteredTableOp.Create(tb, [],
TfComp.New(tb.BaseClass.FieldByName('ParentID'),
TvVariant.Val(Null), [cvEQ]));
could also be written as:
qy:= TGdfFilteredTableOp.Create(tb, [],
TfComp.New(TPaintObject(tb.BaseInterfaceClass).ParentID,
TvVariant.Val(Null), [cvEQ]));
and is the same as:
qy:= TGdfFilteredTableOp.Create(tb, [],
'ParentID is null' );
which is better readable.
So my opinion is - we don't need to change pascal to achieve things like
that, it's already in the language
Cheers, Adrian.
p.s: The information on the webpage about the database is outdated - i
haven't found the time to write a documentation.
More information about the fpc-pascal
mailing list