Regal: An SQL relational algebra builder
Dylan Knutson via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Fri May 16 00:58:32 PDT 2014
> Does this need to be a class, can it be a struct instead?
Ya know, it might be able to be made into a struct; I'll fiddle
with it tomorrow. The main reason it was made a class was so
.join had to take a Table type as its first parameter, and
internally Table implements a Joinable interface (which is needed
for chaining .joins and propagating the table name during
printing).
> Why is 'new Sql("*")' needed? If you need to have a specific
> type, could it be a struct instead?
The Sql class is needed because it's a node in the AST (all nodes
inherit from a basic Node class) that just prints out its content
verbatim when to_sql is called. All the methods that take a Node
would need to be modified/templated to also accept a specialized
SQL struct type, which unfortunately isn't feasible. If it was
done, it'd probably be implemented using std.variant's Algebraic
type, but then CTFE is forfeited. If you know of another way to
go about doing this, I'd be really interested in hearing it. It
is unfortunate that the library has to make so many small
allocations, for sure.
Another option is, you could try using CTFE as much as possible
to get the allocations over with at compile time :)
>
>> The library can be found at: https://github.com/dymk/regal
>> And the dub package: http://code.dlang.org/packages/regal
>
> This all looks pretty nice :). Does it work at compile time?
Thank you! I haven't tested it, but it's not using any features
that would impede CTFE. So that's a solid "probably".
More information about the Digitalmars-d-announce
mailing list