Converting Postgres SQL constraint logic to PHP?

From: Ken Tanzer <ken(dot)tanzer(at)gmail(dot)com>
To: PG-General Mailing List <pgsql-general(at)postgresql(dot)org>
Subject: Converting Postgres SQL constraint logic to PHP?
Date: 2016-06-10 20:01:13
Message-ID: CAD3a31VsyorWfYDGYFsb7OVgRAVGrz6379+KYTbZBovuiFY6Ag@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi. I was hoping this list might be able to offer some
help/advice/suggestions/opinions about feasibility for something I want to
implement, namely converting Postgres constraints into PHP logic. Here's
the context and explanation:

I work on a PHP web app using Postgres. When possible, we try to build as
much logic as possible directly into the DB. The app already automatically
reads NOT NULL and foreign key constraints from the DB, and enforces them
through the UI thus preventing people from getting ugly database errors.
It doesn't do that with check constraints and table constraints though,
which means we either end up duplicating the constraint logic in PHP, or
else sometimes get lazy/expedient and only put the constraint into PHP.
Obviously neither of those is ideal.

What would be ideal is for the app to handle those constraints
automatically. It looks like I can pull them out (as SQL) from
information_schema.check_constraints, with the remaining issue being how to
make them usable in PHP.

I'm wondering if anyone has done this already, or if there is some kind of
library available for this purpose?

If not, and absent any better suggestions, I'm looking at trying to
parse/search/replace. This might well be imperfect, and error-prone. But
if I can get something that at least works in a lot of cases, that would
help a lot. So as a simple example, converting from

((sat3 >= 0) AND (sat3 <= 5))

to the needed format:

(($rec['sat3'] >=0) and ($rec['sat3'] <= 5))

seems like it would be relatively straightforward, since the structure of
the logic is neatly parallel between SQL and PHP. Each of these below, and
many others I could pull, all have additional complications beyond that
though:

- (((incentive_sent_date IS NULL) OR (incentive_sent_date >=
residence_date)))
- (((application_date IS NOT NULL) OR (employment_date IS NOT NULL)))
- (xor((assessed_by IS NULL), (assessor_organization IS NULL)))
- (((release_to IS NULL) OR ((consent_type_code)::text = ANY
((ARRAY['ROI'::character varying, 'MEDIA'::character varying])::text[]))))

So anyway, there's my issue. Any thoughts/comments/suggestions welcome.
Thanks in advance!

Ken

--
AGENCY Software
A Free Software data system
By and for non-profits
*http://agency-software.org/ <http://agency-software.org/>*
*https://agency-software.org/demo/client
<https://agency-software.org/demo/client>*
ken(dot)tanzer(at)agency-software(dot)org
(253) 245-3801

Subscribe to the mailing list
<agency-general-request(at)lists(dot)sourceforge(dot)net?body=subscribe> to
learn more about AGENCY or
follow the discussion.

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Steve Atkins 2016-06-10 20:47:24 Re: Converting Postgres SQL constraint logic to PHP?
Previous Message Rakesh Kumar 2016-06-10 18:36:42 Re: BDR