Re: [HACKERS] 6.4 Aggregate Bug

From: Bruce Momjian <maillist(at)candle(dot)pha(dot)pa(dot)us>
To: daybee(at)bellatlantic(dot)net (David Hartwig)
Cc: pgsql-hackers(at)postgreSQL(dot)org
Subject: Re: [HACKERS] 6.4 Aggregate Bug
Date: 1998-08-01 20:12:21
Message-ID: 199808012012.QAA29464@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

> While testing my 6.4 patch to allow functions/expressions to be
> specified in the ORDER/GROUP BY clause (and not in the target list) I
> came across a nasty little bug. A segmentation fault gets thrown
> somewhere in replace_agg_clause() when using aggregates, in combination
> with a function or expression. (I am still tracking down the
> offending lines of code. Sorry, the Linux/GCC environment is still new
> to me.)
>
> I backed out my patch, and discovered the bug was still present. The
> bug does not exist in version 6.3.2. Here is an example:
>
> -- This crashes the backend
> select upper(a) as x, count(k) from t group by x;
>
> -- This works fine
> select upper(a) as x, count(a) from t group by x;
>
> Notice how in the first query, (the one that does not work) upper() has
> a different argument than count(). And in the second query (the one
> that works) upper() has the same argument as count(). When using
> count(*) it will always fail.
Here is my initial analysis of the crash. It appears the types do not
match. Not sure why.

---------------------------------------------------------------------------

POSTGRES backend interactive interface
$Revision: 1.80 $ $Date: 1998/07/18 18:34:09 $
> select upper(a) as x, count(xmin) from t group by x;
StartTransactionCommand() at Sat Aug 1 14:55:16 1998


Breakpoint 1, match_varid (test_var=0x305010, tlist=0x303750) at
tlist.c:270
270 type_var = (Oid) test_var->vartype;
(gdb)
(gdb) cont
Continuing.

Breakpoint 1, match_varid (test_var=0x305110, tlist=0x303750) at
tlist.c:270
270 type_var = (Oid) test_var->vartype;
(gdb) cont
Continuing.

Breakpoint 1, match_varid (test_var=0x3048d0, tlist=0x303ad0) at
tlist.c:270
270 type_var = (Oid) test_var->vartype;
(gdb) l
265 match_varid(Var *test_var, List *tlist)
266 {
267 List *tl;
268 Oid type_var;
269
270 type_var = (Oid) test_var->vartype;
271
272 Assert(test_var->varlevelsup == 0);
273 foreach(tl, tlist)
274 {
(gdb) call pprint(test_var)
{ VAR
:varno 1
:varattno 3
:vartype 1043
:vartypmod -1
:varlevelsup 0
:varnoold 1
:varoattno 3
}
(gdb) call pprint(tlist)
(
{ TARGETENTRY
:resdom
{ RESDOM
:resno 1
:restype 25
:restypmod -1
:resname "x"
:reskey 1
:reskeyop 740
:resjunk 0
}

:expr
{ VAR
:varno 1
:varattno 1
:vartype 25
:vartypmod -1
:varlevelsup 0
:varnoold -1
:varoattno 1
}
}

{ TARGETENTRY
:resdom
{ RESDOM
:resno 2
:restype 28
:restypmod -1
:resname "(null)
"
:reskey 0
:reskeyop 0
:resjunk 0
}

:expr
{ VAR
:varno 1
:varattno 2
:vartype 28
:vartypmod -1
:varlevelsup 0
:varnoold 1
:varoattno -3
}
}
)

--
Bruce Momjian | 830 Blythe Avenue
maillist(at)candle(dot)pha(dot)pa(dot)us | Drexel Hill, Pennsylvania 19026
+ If your life is a hard drive, | (610) 353-9879(w)
+ Christ can be your backup. | (610) 853-3000(h)

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Bruce Momjian 1998-08-01 21:38:22 Re: [HACKERS] 6.4 Aggregate Bug
Previous Message Tom Lane 1998-08-01 19:58:04 Re: [HACKERS] Problem with CVS access to current sources