From: | Bruce Momjian <maillist(at)candle(dot)pha(dot)pa(dot)us> |
---|---|
To: | vadim(at)sable(dot)krasnoyarsk(dot)su (Vadim B(dot) Mikheev) |
Cc: | hackers(at)postgreSQL(dot)org |
Subject: | Re: [HACKERS] Re: varchar() troubles (fwd) |
Date: | 1998-01-15 23:41:08 |
Message-ID: | 199801152341.SAA20985@candle.pha.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
>
> Bruce Momjian wrote:
> >
> > >
> > > I have found that ExecEvalVar() uses a descriptor that has the attr
> > > length set to the maximum, instead of -1. The ExecTypeFromTL() comment
> ...
> >
> > Vadim, can you look at this for me. If you set a break at ExecEvalVar
> > before executing the SELECT, you will see its
> > tupledescriptor->attrs[0].attlen is the max length, and not -1 as it
> > should be.
> >
> > I can't figure out where that is getting set. Can you also check the
> > other tupledescriptor initializations to see they have the -1 for
> > varchar too. I am stumped.
>
> Why attlen should be -1 ?
> attlen in pg_attribute for v in table t is 84, why run-time attlen
> should be -1 ? How else maxlen constraint could be checked ?
> IMHO, you have to change heap_getattr() to check is atttype == VARCHAROID
> and use vl_len if yes. Also, other places where attlen is used must be
> changed too - e.g. ExecEvalVar():
>
> {
> len = tuple_type->attrs[attnum - 1]->attlen;
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> byval = tuple_type->attrs[attnum - 1]->attbyval ? true : false;
> }
>
> execConstByVal = byval;
> execConstLen = len;
> ^^^^^^^^^^^^^^^^^^ - used in nodeHash.c
>
The major problem is that TupleDesc comes from several places, and
attlen means several things.
There are some cases where TupleDesc (int numatt, Attrs[]) is created
on-the-fly (tupdesc.c), and the attlen is the length of the type. In
other cases, we get attlen from opening the relation, heap_open(), and
in these cases it is the length as defined for the particular attribute.
Certainly a bad situation. I am not sure about a fix.
--
Bruce Momjian
maillist(at)candle(dot)pha(dot)pa(dot)us
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 1998-01-16 00:26:45 | Re: [HACKERS] postgres performance |
Previous Message | Bruce Momjian | 1998-01-15 23:26:41 | Re: [HACKERS] Re: subselects |