Skip site navigation (1) Skip section navigation (2)

Re: crear expresion

From: Arturo Rossodivita <arossodivita(at)gmail(dot)com>
To: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: crear expresion
Date: 2009-04-16 22:23:04
Message-ID: 36fdef070904161523u387de53y8839a6d56ea04224@mail.gmail.com (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
hola lista, un poco tarde pero seguro...

bueno primero gracias ya que ahora si me tarigo el nodo en string
desde el catalogo completo, les comento que no tenia ningun valor null
en la tupla pero igual GETSTRUCT no me servia y tuve que usar
heap_getattr de la siguiente forma:

Datum    Expr_datum;
bool    isNull;
TupleDesc    ExprDesc;

ExprDesc = RaletionGetDescr (pg_fuzzypred_rel);

Expr_datum = heap_getattr(tuple,
                                         Anum_pg_fuzzypred_predexprfp,
                                         ExprDesc,
                                         &isNull);

if(isNull)
    elog(ERROR,"Null Expression");
else
    n->exprfp = DatumGetCString(DirectFunctionCall1(textout,Expr_datum));

y ahora si me trae el string completo.

lo coloco por si alguien necesita usar algo parecido en algun trabajo.

Por otra parte, estoy presentando un problema que es cuando voy a usar
ese nodo que almacene en n->exprfp de la forma:

Node *ExprNode;

ExprNode = (Node *) stringToNode(fp->exprfp);

donde fp es un nodo A_FuzzyPred que tengo en el
src/backend/optimizer/plan/planner.c en la funcion subquery_planner();

cuando hago la consulta de tipo:

SELECT * FROM X WHERE edad = aprox;

donde aprox es un predicado difuso el cual contiene el nodo que
extraje del catalogo como indique mas arriba y me sale el siguiente
error:

ERROR: badly formated node string "AEXPR   :name (">")   :lexpr   {AEXPR"...

me doy cuenta que el problema es cuando hago el stringToNode(fp->exprfp)

si alguien sabe que pueda ser estaria muy agradecido.

Gracias. Saludos

On 3/25/09, Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> wrote:
> Arturo Rossodivita escribió:
>
>> En el src/backend/parser/parse_expr.c evaluo el
>> catalogo y justamente cuando me traigo el nodo para asignarselo al nodo
>> que
>> paso al planner lo hago de la siguiente forma:
>>
>> n->experfp = DatumGetCString(DirectFunctionCall1(textout,
>> &(pg_fuzzypred->predexprfp))); donde n es el nuevo nodo de tipo
>> A_FuzzyPred
>
> Creo que te falta un PointerGetDatum,
>
> n->experfp = DatumGetCString(DirectFunctionCall1(textout,
> 		PointerGetDatum(pg_fuzzypred->prefexprfp)));
>
> Ahora, esto asume que has creado un Form_pg_fuzzypred y que has aplicado
> algo como
> pg_fuzzypred = (From_pg_fuzzypred) GETSTRUCT(tuple);
> donde "tuple" viene de un system_getnext() o equivalente.  Ademas asume
> que ninguno de los valores de la tupla es nulo.  (Si alguno de los
> valores de la tupla es nulo, entonces olvidate del GETSTRUCT y usa
> heap_getattr).
>
> --
> Alvaro Herrera                          Developer,
> http://www.PostgreSQL.org/
> "I am amazed at [the pgsql-sql] mailing list for the wonderful support, and
> lack of hesitasion in answering a lost soul's question, I just wished the
> rest
> of the mailing list could be like this."
> (Fotis)
>
> (http://archives.postgresql.org/pgsql-sql/2006-06/msg00265.php)
>

In response to

Responses

pgsql-es-ayuda by date

Next:From: Martín MarquésDate: 2009-04-16 22:49:22
Subject: Re: Una pregunta!!!!
Previous:From: Emanuel Calvo FrancoDate: 2009-04-16 21:45:49
Subject: Error con --with-perl Compilando 8.4 test

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group