Hola Lista como estan? escribo primero para agradecerles pues con los consejos que me dieron estuve documentandome y consegui guardar un nodo en la tabla del catalogo con la funcion nodetoString(), (gracias por la recomendacion alvaro). pero ahora tengo un pequeno problemita y es el siguiente:
para cuando hago un select en el cual necesite el nodo que guarde en el catalogo tengo que obviamente traerme ese nodo que esta almacenado como string para trabajar con el. 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 al hacerlo de esta forma al hacer el SELECT * FROM x WHERE edad = aprox; se me cae el servidor. Cabe destacar que al compilar me lanza un warning que me dice que el segundo parametro de DirectFunctionCall1 crea un entero desde un puntero sin una conversion si lo hago de la forma: n->experfp = DatumGetCString(DirectFunctionCall1(textout, pg_fuzzypred->predexprfp)); me da un error al compilar que dice lo siguiente: tipo incompatible para el argumento 2 de DirectFunctionCall1 y por ultimo si lo hago de la forma: n->experfp = DatumGetCString(&(pg_fuzzypred->predexprfp)); compila y no se cae el servidor al hacer el select pero me al imprimir el string que se trae del catalogo que no es mas que el nodo que almacene como string siempre me borra los 12 primeros caracteres es decir: si mi nodo en string queda de la siguiente forma: {AEXPR :name ("/") : lexpr {AEXPR :name ("+") : lexpr {COLUMNREF :fields ("x") :location 42} : rexpr {A_CONST :val 1.5 :typename <>} :location 43} :rexpr {AEXPR :name ("+") :lexpr {A_CONST :val 5.3 :typename <>} :rexpr {A_CONST :val 6 :typename <>} :location 53} :location 48} el string que se trae del catalogo es de la forma: e ("/") : lexpr {AEXPR :name ("+") : lexpr {COLUMNREF :fields ("x") :location 42} : rexpr {A_CONST :val 1.5 :typename <>} :location 43} :rexpr {AEXPR :name ("+") :lexpr {A_CONST :val 5.3 :typename <>} :rexpr {A_CONST :val 6 :typename <>} :location 53} :location 48} como ven los primeros 12 caracteres los desaparece, revise la tabla en el catalogo a ver si los almacena mal pero si los almacena completos. me imagino que es por la forma en que me estoy trayendo el string pero no se de que otra forma me lo puedo traer. Probe con diferentes nodos almacenados y siempre me quita la misma cantidad de caracteres. Bueno de antemano gracias si alguno me puede ayudar de todos modos yo sigo intentando a ver si lo puedo solucionar.