Tangram Inheritance problems

TeeJay on 2004-05-17T15:15:41

Tangram has some severe issues with inheritance and relationships, given its goals.

It lacks Multiple Inheritance and doesn't provide an alternative. This sucks.

After several days trying to grok what the hell happens to cause it to generate a query with an aliased table missing (i.e. attempting to select t3.foo without specifying what t3 was).

Finally today I discovered that when I removed a layer of inheritance it suddenly worked. so if class A inherited from Class Super, then you can insert objects of Class A nicely into Class C via a relationship and it won't barf horribly. However if you make Class Super inherit from Class SuperSuper then the insert/fetch/etc calls will barf as Tangram gets itself all confused with no hint as to what the problem could be.

In fact the more I use Tangram, the more I think "given a month I could do a shit load better than this", so much so I reckon we (myself, a web designer who has picked up some perl, and our sysadmin) could replace the PoS pretty quickly if we sat down and coded something that meets our needs without trying to be clever and pure and 'elegant'.


Tangram Takes Over

cwest on 2004-05-17T16:42:45

You're problem is just that Tangram takes over the database for you. It keeps a table that maps class names to table names so you never have to look that far down. It does cause an inheritance problem but I suspect that could be overcome, perhaps a 1-to-many relationship for class name aliases. I suspect it wouldn't be too horrible.

Beware, though, creating your own mapper will drive you insane if you aren't careful. I don't use Tangram because I'm not willing to give up that much control. On the other end lies Class::DBI, which I tend to prefer.

Good luck.

Re:Tangram Takes Over

TeeJay on 2004-05-17T17:33:21

Tangram is just not ready for production use.

The documentation is sparse, once you leave the trivial parts and it is hugely limiting.

I wouldn't mind it hiding the complexity and details, if it let me choose to be able to at least see what was problematic and why it crashed.

More error checking wouldn't go amiss either - failing to check that all the table aliases it refers to in a query are in there is a stupid loophole and the sql is generated so far from the query that its impossible to find where the problem occured - there ought to be some sanity checking in the sql generation.

If there is another problem - like 2 or more deep inheritance it should complain rather than silently break.

Bah!

look at the laternatives before you build your own

perrin on 2004-05-17T16:59:35

Hiding the database details from you is the major feature of Tangram. If you want closer access to the database, you should look at Class::DBI or SPOPS.

Beware of hubris about Tangram -- it does a lot of tricky perl magic in order to provide almost invisible persistence. It is not easy to build something like that.

Re:look at the laternatives before you build your

TeeJay on 2004-05-17T17:35:20

I'm not after hiding stuff - I am after automating stuff - there is an important difference. When something is automated I can still see what is going on - critical in any system AFAIK.

The schema and other bits of database behind tangram aren't anything special.

Re:look at the laternatives before you build your

perrin on 2004-05-17T17:46:38

If you're not after hiding stuff, then Tangram is the wrong tool for you. Hiding stuff is most of the point of Tangram.

The schema that Tangram generates is simple, but handling the query language and doing all the TIE and proxying in order to make things like arrays work is quite complex.

"Works For Me"

amackey on 2004-05-18T19:45:34

Multiple inheritance in Tangram works fine. What doesn't work is empty intermediate classes. I got burnt by the same "bug" you experienced, and found that it was simply due to the fact that I had an "organizational" superclass with no actual attributes. A little class rearrangement and everything was OK.

But I certainly don't disagree that Tangram has many rough spots.