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-20 15:49:29 |
Message-ID: | 36fdef070904200849k1bea4a02g8a568c57cacb79b2@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
2009/4/17 Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
> Arturo Rossodivita escribió:
> > 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
>
> Hmm, me imagino que eso puede suceder si has definido algún valor como char
> *
> o algo semejante. El truco de GETSTRUCT sólo funciona si tienes
> solamente campos de ancho fijo.
>
> > ERROR: badly formated node string "AEXPR :name (">") :lexpr
> {AEXPR"...
> >
> > me doy cuenta que el problema es cuando hago el stringToNode(fp->exprfp)
>
> Hmm ... esto se ve raro ... supongo que agregaste una funcion en
> readfuncs.c verdad? Ten en cuenta que a cualquier nodo que modifiques
> el struct debes también modificar su respectiva función en outfuncs.c y
> readfuncs.c, posiblemente también en copyfuncs.c, etc etc. Obviamente
> también debes agregar un T_* en el enum de tipos de nodos, y debes crear
> el nodo con makeNode(), etc (asumo que todo esto ya lo hiciste).
No habia modificado el readfuncs. y ya lo hice, pero te explico no
estoy tratando de pasar un nodo nuevo creado por mi, mi nodo completo es el
A_FuzzyPred
{
NodeTag type;
char *pred;
int minfp;
int core1;
int core2;
int maxfp;
unsigned int vno;
int vattno;
List *compfplist;
char *disd;
char *exprfp;
}A_FuzzyPred;
en una tabla del catalogo yo tengo almacenados cada uno de los valore que
necesito cargarle a este nodo al momento de un select el cual incluya una
condicion difusa en el where;
para los que estoy trabajando específicamente en este momento yo almaceno
con forma de string un nodo A_Expr, al momento de calcular la expresion
necesito pasar ese string (almacenado en exprfp del nodo A_FuzzyPred) de
nuevo a nodo pues ese es el nuevo qual para la consulta.
bueno me di guenta que stringToNode(); llama parseNodeString(); y que esta
no tiene para crear la estructura de un nodo A_Expr, y la modifique. ahora
el problema viene es porque entre los case de nodeRead()
si hay un parentesis derecho ")" manda un error, y los nodos A_Expr que yo
almaceno en el catalogo son de la forma:
{AEXPR
:name ("=")
:lexpr
{COLUMNREF
:fields ("edad")
:location 22
}
:rexpr
{COLUMNREF
:fields ("aprox")
:location 29
}
:location 27
}
al leer el parentesis me lanza un error diciendo que hay un parentesis
derecho inesperado.
No se si es que estoy haciendo algo mal o si me falta extender algo mas, si
no me entienden mucho me avisan para explicar mas detalladamente.
Gracias.
>
>
> --
> Alvaro Herrera
> http://www.amazon.com/gp/registry/DXLWNGRJD34J
> "El sabio habla porque tiene algo que decir;
> el tonto, porque tiene que decir algo" (Platon).
>
From | Date | Subject | |
---|---|---|---|
Next Message | Emanuel Calvo Franco | 2009-04-20 16:10:53 | Re: Off-topic (era Re: traducciones) |
Previous Message | Virginia | 2009-04-20 15:14:15 | Sincronización |