From: | Arturo Rossodivita <arossodivita(at)gmail(dot)com> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: crear expresion |
Date: | 2009-03-25 20:34:36 |
Message-ID: | 36fdef070903251334l4f296b45oe53c58019b9ded99@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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.
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2009-03-25 21:46:55 | Re: crear expresion |
Previous Message | Marcos Ortiz Valmaseda | 2009-03-25 20:25:49 | Re: Necesito ayuda en la instalción de Psycopg2 |