| 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: | Whole Thread | Raw Message | 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 |