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
Views: Raw Message | Whole Thread | Download mbox | Resend email
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

Browse pgsql-es-ayuda by date

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