Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [stellation-res] Database abstraction

Without being too critical, I don't think that you're being abstract
enough.  ie/  It looks like you're trying to rebuild the String with
method calls, instead of, for example, just creating a
ForeignConstraint object and having a
addConstraint(ForeignConstraint constraint)...

but that's my $.02 (approx. $.013 after exchange with the States...)

Tuesday, August 13, 2002, 10:06:39 AM, you wrote:


> So... I'm looking at trying to create a database abstraction layer that
> will work accross Postgres, DB2, Oracle, MySQL/InnoDB, and
> Firebird. 

> One option is to totally automate the SQL generation process. This
> allows us to smoothly handle things like the INNODB declarations
> that need to go onto the end of table creations, variations in typenames,
> etc.

> I've tried a first cut at doing this for table creation. I'm looking at a 
> bit of test code, and I can't decide whether I like it (it's nicely abstract,
> and quite easy to write), or hate it (it's hard to see the SQL in it). Here's
> a sample: what do you folks think: is this a good direction, or am I being
> idiotically abstract?

> Here's the original SQL:

>         CREATE TABLE Properties (INTEGER aid,
>                                                 INTEGER vid,
>                                                 INTEGER inheritable,
>                                                 VARCHAR(200) name,
>                                                 VARCHAR(1600) value,
>                         CONSTRAINT fk3 FOREIGN KEY (aid, vid) REFERENCES Versions(aid, vid)
>                         PRIMARY KEY(aid, vid, name))


> Here's the corresponding code:
>         DatabaseCreateTableCommand cmd = 
>                     _db.createTable("Properties")
>                         .addIntegerField("aid")
>                         .addIntegerField("vid")
>                         .addIntegerField("inheritable")
>                         .addShortStringField("name")
>                         .addLongStringField("value")
>                        .beginForeignKeyConstraint("fk3", "FOREIGN KEY")
>                             .addConstraintField("aid")
>                             .addConstraintField("vid")
>                            .beginForeignKeyReferences("Versions")
>                              .addConstraintField("aid")
>                              .addConstraintField("vid")
>                            .endForeignKeyConstraint()
>                        .beginPrimaryKeyConstraint()
>                           .addConstraintField("aid")
>                           .addConstraintField("vid")
>                           .addConstraintField("name")
>                        .endPrimaryKeyConstraint()
>                      .endCommand();



Back to the top