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)
>
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 |