Re: Thoughs after discussions at OSCON - Mailing list pgsql-advocacy

From Chris Browne
Subject Re: Thoughs after discussions at OSCON
Date
Msg-id 60vf25u8q7.fsf@dba2.int.libertyrms.com
Whole thread Raw
In response to Re: Thoughs after discussions at OSCON  (Rick Morris <rick@brainscraps.com>)
Responses Re: Thoughs after discussions at OSCON  (Rick Morris <rick@brainscraps.com>)
List pgsql-advocacy
jnasby@pervasive.com ("Jim C. Nasby") writes:
> So far, the best solution I've seen is the XML-based 'datadef' that
> a friend of mine created at a former job. It was database-centric
> enough so that it could drive the entire database creation process
> (including triggers, stored procs, etc) and do it well, while also
> creating application code (C/C++ in this case). Since it was
> XML/XSLT based it was pretty easy to add new features, and more
> importantly, it could support any programming language out
> there. Everything else I've seen is tied to a specific language,
> which is a big downside. Unfortunately, he never wanted to release
> it to the community because he felt the implementation was ugly.

I don't much like that; that adds a layer that can fall out of date,
and offers NOTHING in terms of tools to get things resynchronized.

What would be the "nice to have" thing is some system that allows you
to extract a set of field validation functions from the database.

In effect, you do:

select a.attname, field_validation_function(c.oid, a.attname, 'Perl')
from pg_class c, pg_attribute a where a.attrelid = c.oid and c.relname
= 'my_table');

which returns a list of Perl 'validation functions', one for each
attribute.

Each validation function would take data passed in, validate it
against some Perl-encoded form of the DBMS constraints, and either:

 a) Return 0/NULL, indicating that all is OK, or

 b) Return a matrix of error messages indicating the failures

It would be neat (would it not? :-)) to allow passing in other names
of languages, e.g. where scripting_language in ('Perl', 'Python',
'Ruby', 'Tcl', 'PHP', 'JavaScript'), where the result would be a set
of functions in those respective languages.

It would probably be ideal for what is to be returned to be, in each
case, the local equivalent to a lambda function so that it could be
transparently embedded inside the user's favorite application
framework rather than forcing some Procrustean naming convention on
them.

If the result was some hunk of XML that could be automatically
transformed into suitable lambda functions, that's OK too, although
there is the demerit that it FORCES a further rewriting process.

I'm not sure what to do about multicolumn constraints, but that's
probably troublesome even in theory :-).
--
output = reverse("moc.enworbbc" "@" "enworbbc")
http://www3.sympatico.ca/cbbrowne/linuxdistributions.html
"Implying that you    can build systems  without  rigourous  interface
specification is always a powerful selling technique to the clueless."
-- Paul Campbell, seen in comp.object.corba

pgsql-advocacy by date:

Previous
From: Rick Morris
Date:
Subject: Re: Thoughs after discussions at OSCON
Next
From: Rick Morris
Date:
Subject: Re: Thoughs after discussions at OSCON