Regal: An SQL relational algebra builder

Jacob Carlborg via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Fri May 16 06:42:30 PDT 2014


On 16/05/14 09:58, Dylan Knutson wrote:

> 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).

Can you do compile time introspection, like ranges do? Basically check 
if it has a "join" method.

> 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.

I don't know, use structs and compile time introspection.

> Another option is, you could try using CTFE as much as possible to get
> the allocations over with at compile time :)



-- 
/Jacob Carlborg


More information about the Digitalmars-d-announce mailing list