supporting/emulating updatable views in a ruby orm

A

Ara.T.Howard

i've got a method to emulate updateable views in postgresql which is rather
simple. however, i'm wondering if any of the ruby orms out there would
support such a beast. for example, given:

create table foo(
foo text,
id serial,

primary key (id)
);

create table bar(
bar text,
foo_id integer,
id serial,

primary key (id),
foreign key (foo_id) references foo (id)
);

create view foobar as
select
foo.foo as foo,
bar.bar as bar
from foo, bar
where foo.id = bar.foo_id;

i need to be able to do something like this:

db = DB::new options

foo = db.table "foo"
bar = db.table "bar"

foobar = db.view "foobar"

foobar[0]["foo"] = "42"
foobar[0]["bar"] = "forty-two"

p foo[0]["foo"] #=> "42"
p bar[0]["bar"] #=> "forty-two"

i can do this using my code if the view is constructed a certain way, but i'm
wondering of any of the existing orms have addressed this rather common need?

regards.

-a
--
===============================================================================
| ara [dot] t [dot] howard [at] noaa [dot] gov
| all happiness comes from the desire for others to be happy. all misery
| comes from the desire for oneself to be happy.
| -- bodhicaryavatara
===============================================================================
 
P

Pit Capitain

Ara.T.Howard said:
i've got a method to emulate updateable views in postgresql which is rather
simple. however, i'm wondering if any of the ruby orms out there would
support such a beast. for example, given:

create table foo(
foo text,
id serial,

primary key (id)
);

create table bar(
bar text,
foo_id integer,
id serial,

primary key (id),
foreign key (foo_id) references foo (id)
);

create view foobar as
select
foo.foo as foo,
bar.bar as bar
from foo, bar
where foo.id = bar.foo_id;

i need to be able to do something like this:

db = DB::new options

foo = db.table "foo"
bar = db.table "bar"

foobar = db.view "foobar"

foobar[0]["foo"] = "42"
foobar[0]["bar"] = "forty-two"

p foo[0]["foo"] #=> "42"
p bar[0]["bar"] #=> "forty-two"

i can do this using my code if the view is constructed a certain way,
but i'm
wondering of any of the existing orms have addressed this rather common
need?

Ara, I don't have an answer for you, but some more questions. If I
understand your code, you want to create new rows via the view foobar.

Do you want to create a new foo for every new bar? I don't think so,
otherwise you could have both in the same table.

Do you want to allow two foos to have the same text? If not, you should
add a unique key on the foo column to the foo table. Only then it should
be possible to do what you want.

But as I said, I can't tell you anything about the Ruby ORM frameworks.

Regards,
Pit
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,480
Members
44,900
Latest member
Nell636132

Latest Threads

Top