Re: SQLF Optimization question

Lists: pgsql-hackers
From: "Werner Echezuria" <wercool(at)gmail(dot)com>
To: pgsql-hackers(at)postgresql(dot)org
Subject: SQLF Optimization question
Date: 2007-05-31 13:58:27
Message-ID: 2485a25e0705310658k4d7fa8ddse45e9e94dd9b7303@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Hello, (First of all, sorry for my english),

I'm in a project that involves including sqlf sentences to make postgres
understand the fuzzy querys, i mean, make people to create fuzzy
predicates, these are words like fat, tall, young, old, in an sql sentence.
I guess the first step is complete. The parser know when an user writes
"CREATE FUZZY PREDICATE <name> ON <domain> AS <fuzzy set>".

For instance, a person can create the young word as a fuzzy predicate like
this: "CREATE FUZZY PREDICATE young ON 0..120 AS (0,0,25,50)", that means,
in a domain of 0..120 a young person is between 25 and 50. The fuzzy set has
the follows: (beg,core1,core2,end), (begin of the set, first core, second
core, end of the set).

The sentence creates a row in a catalog named "pg_fuzzypred", and we're good
till then.

But when I write "Select * from students where age=young", brings me a
message telling me the node isn't exist. My teacher who is very involved in
the project tells me that postgres has to do the derivation principle,
before it gets to the executor (what sounds logical), in order to the
optimizer calculates all costs properly.

It's in this point where i need help, ¿What do i have to modify or create to
make postgres undestand the derivation principle, where it's the point in
parser tree goes to query tree and do the optimization?

I send a file, this has all the modification that my teacher and i have make
to postgres (It has some words in spanish, but i guess it's understandable),
and a file with the errors.

Thanks.

Attachment Content-Type Size
PostgreSQLf 14-05-07.txt text/plain 14.7 KB
Resultado.txt text/plain 5.8 KB

From: Martijn van Oosterhout <kleptog(at)svana(dot)org>
To: Werner Echezuria <wercool(at)gmail(dot)com>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: SQLF Optimization question
Date: 2007-05-31 18:59:53
Message-ID: 20070531185953.GB25571@svana.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

On Thu, May 31, 2007 at 09:58:27AM -0400, Werner Echezuria wrote:
> Hello, (First of all, sorry for my english),
>
> I'm in a project that involves including sqlf sentences to make postgres
> understand the fuzzy querys, i mean, make people to create fuzzy
> predicates, these are words like fat, tall, young, old, in an sql sentence.
> I guess the first step is complete. The parser know when an user writes
> "CREATE FUZZY PREDICATE <name> ON <domain> AS <fuzzy set>".
>
> For instance, a person can create the young word as a fuzzy predicate like
> this: "CREATE FUZZY PREDICATE young ON 0..120 AS (0,0,25,50)", that means,
> in a domain of 0..120 a young person is between 25 and 50. The fuzzy set has
> the follows: (beg,core1,core2,end), (begin of the set, first core, second
> core, end of the set).
>
> The sentence creates a row in a catalog named "pg_fuzzypred", and we're good
> till then.
>
> But when I write "Select * from students where age=young", brings me a
> message telling me the node isn't exist. My teacher who is very involved in
> the project tells me that postgres has to do the derivation principle,
> before it gets to the executor (what sounds logical), in order to the
> optimizer calculates all costs properly.

Ok, I didn't totally follow the patch, but it seems to be you need to,
somewhere, get postgres to see an unadorned word as a fuzzy predicate.
Somewhere involving IDENT probably.

However, it seems to me you're opening yourself up to problems, what if
someone has a column name the same as your fuzzy predicate? I suggest
you also add syntax for the matching, something like:

Select * from students where age FUZZYMATCH young;

This means that you don't interfere with existing grammer, but you have
your own bit which you can completely control.

Hope this helps,
--
Martijn van Oosterhout <kleptog(at)svana(dot)org> http://svana.org/kleptog/
> From each according to his ability. To each according to his ability to litigate.