Thread: SQLF Optimization question

SQLF Optimization question

From
"Werner Echezuria"
Date:
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

Re: SQLF Optimization question

From
Martijn van Oosterhout
Date:
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@svana.org>   http://svana.org/kleptog/
> From each according to his ability. To each according to his ability to litigate.