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 <alvhe...@alvh.no-ip.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) > -- TIP 3: Si encontraste la respuesta a tu problema, publícala, otros te lo agradecerán