Tom Lane [Thu, 13 Feb 2003 18:29:07 +0000 (18:29 +0000)]
transformExpr() was missing some cases it ought to allow; per report
from Greg Stark. Also, twiddle the FuncCall case to not scribble on
the input structure, which was the proximate cause of the problem.
Someday we ought to fix things so that transformExpr() isn't called
on already-transformed trees ...
Bruce Momjian [Thu, 13 Feb 2003 05:53:46 +0000 (05:53 +0000)]
[ Revert patch ]
> =================================================================
> User interface proposal for multi-row function targetlist entries
> =================================================================
> 1. Only one targetlist entry may return a set.
> 2. Each targetlist item (other than the set returning one) is
> repeated for each item in the returned set.
>
Having gotten no objections (actually, no response at all), I can only
assume no one had heartburn with this change. The attached patch covers
the first of the two proposals, i.e. restricting the target list to only
one set returning function.
Bruce Momjian [Thu, 13 Feb 2003 05:35:11 +0000 (05:35 +0000)]
This trivial patch removes the usage of some old statistics code that no
longer works -- IncrHeapAccessStat() didn't actually *do* anything
anymore, so no reason to keep it around AFAICS. I also fixed a
grammatical error in a comment.
Bruce Momjian [Thu, 13 Feb 2003 05:32:42 +0000 (05:32 +0000)]
> > They work the same as table constraints with in-line declaration (no
> > comma).
>
> OK. But the documentation implies there is a comma, so it should probably
> get chenged then.
Bruce Momjian [Thu, 13 Feb 2003 05:31:06 +0000 (05:31 +0000)]
The attached patches change earthdistance to use the new cube functions
in one of the earth functions so that latitude and longitude to
cartesian coordinates conversion will be more accurrate. (Previously
a text string was built to provide as input which limited the accuracy
to the number of digits printed.)
The new functions were included in a recent patch to contrib/cube that has not
as yet been accepted as of yet.
I also added check constraints to the domain 'earth' since they are now
working in 7.4.
Bruce Momjian [Thu, 13 Feb 2003 05:26:50 +0000 (05:26 +0000)]
The attached patch provides cube with 4 functions for building cubes
directly from float8 values. (As opposed to converting the values to
strings
and then parsing the strings.)
The functions are:
cube(float8) returns cube
cube(float8,float8) returns cube
cube(cube,float8) returns cube
cube(cube,float8,float8) returns cube
Bruce Momjian [Thu, 13 Feb 2003 05:24:04 +0000 (05:24 +0000)]
The "random" regression test uses a function called oidrand(), which
takes two parameters, an OID x and an integer y, and returns "true" with
probability 1/y (the OID argument is ignored). This can be useful -- for
example, it can be used to select a random sampling of the rows in a
table (which is what the "random" regression test uses it for).
This patch removes that function, because it was old and messy. The old
function had the following problems:
- it was undocumented
- it was poorly named
- it was designed to workaround an optimizer bug that no longer exists
(the OID argument is to ensure that the optimizer won't optimize away
calls to the function; AFAIK marking the function as 'volatile' suffices
nowadays)
- it used a different random-number generation technique than the other
PSRNG-related functions in the backend do (it called random() like they
do, but it had its own logic for setting a set and deciding when to
reseed the RNG).
Ok, this patch removes oidrand(), oidsrand(), and userfntest(), and
improves the SGML docs a little bit (un-commenting the setseed()
documentation).
Bruce Momjian [Thu, 13 Feb 2003 05:20:05 +0000 (05:20 +0000)]
Code for WITHOUT OIDS.
On Wed, 2003-01-08 at 21:59, Christopher Kings-Lynne wrote:
> I agree. I want to remove OIDs from heaps of our tables when we go to 7.3.
> I'd rather not have to do it in the dump due to down time.
Bruce Momjian [Thu, 13 Feb 2003 05:10:39 +0000 (05:10 +0000)]
This patch makes pg_get_constraintdef support UNIQUE, PRIMARY KEY and
CHECK constraints.
There are apparently no other types of constraint in pg_constraint, so
now all bases are covered. Also, this patch assumes that consrc for a
CHECK constraint is always bracketed so that it's not necessary to add
extra brackets.
Bruce Momjian [Thu, 13 Feb 2003 05:06:35 +0000 (05:06 +0000)]
> =================================================================
> User interface proposal for multi-row function targetlist entries
> =================================================================
> 1. Only one targetlist entry may return a set.
> 2. Each targetlist item (other than the set returning one) is
> repeated for each item in the returned set.
>
Having gotten no objections (actually, no response at all), I can only assume
no one had heartburn with this change. The attached patch covers the first of
the two proposals, i.e. restricting the target list to only one set returning
function.
It compiles cleanly, and passes all regression tests. If there are no
objections, please apply.
Any suggestions on where this should be documented (other than maybe sql-select)?
Thanks,
Joe
p.s. Here's what the previous example now looks like:
CREATE TABLE bar(f1 int, f2 text, f3 int);
INSERT INTO bar VALUES(1, 'Hello', 42);
INSERT INTO bar VALUES(2, 'Happy', 45);
CREATE TABLE foo(a int, b text);
INSERT INTO foo VALUES(42, 'World');
INSERT INTO foo VALUES(42, 'Everyone');
INSERT INTO foo VALUES(45, 'Birthday');
INSERT INTO foo VALUES(45, 'New Year');
CREATE TABLE foo2(a int, b text);
INSERT INTO foo2 VALUES(42, '!!!!');
INSERT INTO foo2 VALUES(42, '????');
INSERT INTO foo2 VALUES(42, '####');
INSERT INTO foo2 VALUES(45, '$$$$');
CREATE OR REPLACE FUNCTION getfoo(int) RETURNS SETOF text AS '
SELECT b FROM foo WHERE a = $1
' language 'sql';
CREATE OR REPLACE FUNCTION getfoo2(int) RETURNS SETOF text AS '
SELECT b FROM foo2 WHERE a = $1
' language 'sql';
regression=# SELECT f1, f2, getfoo(f3) AS f4 FROM bar;
f1 | f2 | f4
----+-------+----------
1 | Hello | World
1 | Hello | Everyone
2 | Happy | Birthday
2 | Happy | New Year
(4 rows)
regression=# SELECT f1, f2, getfoo(f3) AS f4, getfoo2(f3) AS f5 FROM bar;
ERROR: Only one target list entry may return a set result
Bruce Momjian [Thu, 13 Feb 2003 04:08:16 +0000 (04:08 +0000)]
[ Have readline save edit history.]
>
> > I already posted a one-line patch to implement this, but it doesn't
> > seem to hve come through to the list. Here it is inline, instead of as
> > an attachment:
>
> We need this to work without readline as well. (Of course there won't be
> any history, but it needs to compile.)
<blush> Even after slogging my way through the nesting #ifdefs for readline
and win32, I forgot! Let's make that a three line patch, then.
Tom Lane [Tue, 11 Feb 2003 04:13:06 +0000 (04:13 +0000)]
Use a varno not chosen at random for dummy variables in the top-level
targetlist of a set-operation tree. I'm not sure that this solution
will really stand the test of time --- perhaps we need to make a special
RTE for such vars to refer to. But this quick hack fixes Brandon Craig
Rhodes' complaint of 10-Feb-02 about EXCEPT in CREATE RULE, while not
changing any behavior in the better-tested cases where leftmostRTI is
one anyway.
Tom Lane [Mon, 10 Feb 2003 17:08:50 +0000 (17:08 +0000)]
Fix thinko in new logic about pushing down non-nullability constraints:
constraints appearing in outer-join qualification clauses are restricted
as to when and where they can be pushed down. Add regression test
to catch future errors in this area.
Tom Lane [Mon, 10 Feb 2003 04:44:47 +0000 (04:44 +0000)]
Get rid of last few vestiges of parsetree dependency on grammar token
codes, per discussion from last March. parse.h should now be included
*only* by gram.y, scan.l, keywords.c, parser.c. This prevents surprising
misbehavior after seemingly-trivial grammar adjustments.
Tom Lane [Sun, 9 Feb 2003 23:57:19 +0000 (23:57 +0000)]
Detect case where an outer join can be reduced to a plain inner join
because there are WHERE clauses that will reject the null-extended rows.
Per suggestion from Brandon Craig Rhodes, 19-Nov-02.
Barry Lind [Sun, 9 Feb 2003 23:14:55 +0000 (23:14 +0000)]
Better error message on character set mismatches during conversion to unicode.
Also applied patch from Lars Stenberg to make callable statements use the form
select * from func() when running against a 7.3 server instead of select func() to allow for set returning functions to be called.
Tom Lane [Sun, 9 Feb 2003 06:56:28 +0000 (06:56 +0000)]
Create a distinction between Lists of integers and Lists of OIDs, to get
rid of the assumption that sizeof(Oid)==sizeof(int). This is one small
step towards someday supporting 8-byte OIDs. For the moment, it doesn't
do much except get rid of a lot of unsightly casts.
Tom Lane [Sun, 9 Feb 2003 00:30:41 +0000 (00:30 +0000)]
Make further use of new bitmapset code: executor's chgParam, extParam,
locParam lists can be converted to bitmapsets to speed updating. Also,
replace 'locParam' with 'allParam', which contains all the paramIDs
relevant to the node (i.e., the union of extParam and locParam); this
saves a step during SetChangedParamList() without costing anything
elsewhere.
Tom Lane [Sat, 8 Feb 2003 20:20:55 +0000 (20:20 +0000)]
Replace planner's representation of relation sets, per pghackers discussion.
Instead of Lists of integers, we now store variable-length bitmap sets.
This should be faster as well as less error-prone.
Tom Lane [Fri, 7 Feb 2003 01:33:06 +0000 (01:33 +0000)]
Revise mechanism for getting rid of temp tables at backend shutdown.
Instead of grovelling through pg_class to find them, make use of the
handy dandy dependency mechanism: just delete everything that depends
on our temp schema. Unlike the pg_class scan, the dependency mechanism
is smart enough to delete things in an order that doesn't fall foul of
any dependency restrictions. Fixes problem reported by David Heggie:
a temp table with a serial column may cause a backend FATAL exit at
shutdown time, if it chances to try to delete the temp sequence first.
Tom Lane [Thu, 6 Feb 2003 20:25:33 +0000 (20:25 +0000)]
Create a GUC variable REGEX_FLAVOR to control the type of regular
expression accepted by the regex operators, per discussion yesterday.
Along the way, reduce deadlock_timeout from PGC_POSTMASTER to PGC_SIGHUP
category. It is probably best to insist that all backends share the same
setting, but that doesn't mean it has to be frozen at startup.
Tom Lane [Wed, 5 Feb 2003 20:16:42 +0000 (20:16 +0000)]
Allow qualified type names in CREATE CAST, DROP CAST. Also allow the
construction 'SETOF type[]' which for some reason was previously
overlooked (you'd have to name the array type directly to make it work).
Tom Lane [Wed, 5 Feb 2003 17:41:33 +0000 (17:41 +0000)]
Replace regular expression package with Henry Spencer's latest version
(extracted from Tcl 8.4.1 release, as Henry still hasn't got round to
making it a separate library). This solves a performance problem for
multibyte, as well as upgrading our regexp support to match recent Tcl
and nearly match recent Perl.
Barry Lind [Tue, 4 Feb 2003 10:09:32 +0000 (10:09 +0000)]
Two patches from Kris Jurka. One fixes a problem with incorrect type for double
and the other fixes a NPE in Statement.toString() under some circumstances.
The second patch was originally submitted by Oliver Jowett and updated by Kris
Barry Lind [Tue, 4 Feb 2003 09:20:12 +0000 (09:20 +0000)]
Patch from Nic Ferrier to add support for result sets being cursor based
so that rows can be fetched incrementally. This is enabled by using
setFetchSize()
Tom Lane [Tue, 4 Feb 2003 00:50:01 +0000 (00:50 +0000)]
Minor code cleanup: remove no-longer-useful pull_subplans() function,
and convert pull_agg_clause() into count_agg_clause(), which is a more
efficient way of doing what it's really being used for.
Tom Lane [Tue, 4 Feb 2003 00:48:23 +0000 (00:48 +0000)]
Detect duplicate aggregate calls and evaluate only one copy. This
speeds up some useful real-world cases like
SELECT x, COUNT(*) FROM t GROUP BY x HAVING COUNT(*) > 100.
Tom Lane [Mon, 3 Feb 2003 21:15:45 +0000 (21:15 +0000)]
Determine the set of constraints applied to a domain at executor
startup, not in the parser; this allows ALTER DOMAIN to work correctly
with domain constraint operations stored in rules. Rod Taylor;
code review by Tom Lane.
Tom Lane [Mon, 3 Feb 2003 15:07:08 +0000 (15:07 +0000)]
Tweak planner and executor to avoid doing ExecProject() in table scan
nodes where it's not really necessary. In many cases where the scan node
is not the topmost plan node (eg, joins, aggregation), it's possible to
just return the table tuple directly instead of generating an intermediate
projection tuple. In preliminary testing, this reduced the CPU time
needed for 'SELECT COUNT(*) FROM foo' by about 10%.
Tom Lane [Sun, 2 Feb 2003 19:08:57 +0000 (19:08 +0000)]
Fix nodeUnique to behave correctly when reversing direction after reaching
either end of subplan results. This prevents misbehavior of cursors
on SELECT DISTINCT ... queries. Per bug report 1-Feb-02.
Tom Lane [Sat, 1 Feb 2003 22:09:26 +0000 (22:09 +0000)]
Remove restriction that cast functions cannot be volatile. This
restriction was debatable to begin with, but it has now become obvious
that it breaks forward-porting of user-defined types; contrib/lo being
the most salient example.
Tom Lane [Sat, 1 Feb 2003 22:06:59 +0000 (22:06 +0000)]
Cleaner solution to the problem of loading pre-7.3 dumps containing
columns of type lo (see contrib/lo). Rather than hacking the function
definitions on-the-fly, just modify the queries issued by FixupBlobRefs
so that they work even if CREATE CAST hasn't been issued.
Tom Lane [Sat, 1 Feb 2003 00:07:03 +0000 (00:07 +0000)]
Apply ljb's patch to prevent both memory leak and core dump during
connection shutdown. This is a grotty workaround for a Tcl bug, but
said bug has been there long enough that I'm not holding my breath
for a real fix. Per discussions and testing from ljb and g.hintermayer.
Tom Lane [Fri, 31 Jan 2003 22:25:14 +0000 (22:25 +0000)]
Clean up plpython error reporting so that its regression test passes
with some amount of cleanliness. I see no need to report the internal
Python name rather than the SQL procedure name in error tracebacks.
Tom Lane [Fri, 31 Jan 2003 20:58:00 +0000 (20:58 +0000)]
Tweak bison build rules so that we get the same error messages from
bison 1.875 and later as we did from earlier bison releases. Eventually
we will probably want to adopt the newer message spelling ... but not yet.
Per recent discussion on pgpatches.
Note: I didn't change the build rules for bootstrap, ecpg, or plpgsql
grammars, since these do not affect regression test results.
Tom Lane [Fri, 31 Jan 2003 01:08:08 +0000 (01:08 +0000)]
Allow a time zone to be specified (and silently ignored) in the input
for type 'time without time zone', as we already did for type
'timestamp without time zone'. This patch was proposed by Tom Lockhart
on 7-Nov-02, but he never got around to applying it. Adjust regression
tests and documentation to match.
Tom Lane [Wed, 29 Jan 2003 15:24:46 +0000 (15:24 +0000)]
SPI_exec shouldn't return SPI_OK_SELECT if it hasn't actually returned
a tuple table. Fixes core dump in pltcl (and probably other PLs) when
executing a query rewritten by a rule. Per bug report from Wolfgang Walter.
Tom Lane [Wed, 29 Jan 2003 01:28:33 +0000 (01:28 +0000)]
Tweak ArrayCount() to forestall possible access to temp[-1]. Problem
cannot actually happen at present because ArrayCount() is only called
on strings beginning with '{', but seems best to prevent it going forward.
Per report from Yichen Xie.
Tom Lane [Wed, 29 Jan 2003 01:18:21 +0000 (01:18 +0000)]
Guard against array overrun, per report from Yichen Xie. This case
can only occur if the constant DEFAULT_CLIENT_AUTHSVC is given a bogus
value, so it doesn't seem worth back-patching, but I'll fix it in HEAD.
Tom Lane [Wed, 29 Jan 2003 01:08:42 +0000 (01:08 +0000)]
Repair array subscript overrun identified by Yichen Xie. Reduce the
value of MAX_TIME_PRECISION in floating-point-timestamp-storage case
from 13 to 10, which is as much as time_out is actually willing to print.
(The alternative of increasing the number of digits we are willing to
print looks risky; we might find ourselves printing roundoff garbage.)
Tom Lane [Tue, 28 Jan 2003 22:13:41 +0000 (22:13 +0000)]
Extend join-selectivity API (oprjoin interface) so that join type is
passed to join selectivity estimators. Make use of this in eqjoinsel
to derive non-bogus selectivity for IN clauses. Further tweaking of
cost estimation for IN.
initdb forced because of pg_proc.h changes.
Peter Eisentraut [Tue, 28 Jan 2003 21:57:12 +0000 (21:57 +0000)]
Factor out the code that detects the long long int snprintf format into a
separate macro. Also add support for %I64d which is the way on Windows.
The code that checks for the 64-bit int type now gives more reasonable
results when cross-compiling: In that case we just take the compiler's
information and trust that the arithmetic works. Disabling int64 is too
pessimistic.
Tom Lane [Tue, 28 Jan 2003 18:04:02 +0000 (18:04 +0000)]
Convert variable name to canonical spelling before checking for matches
in GUCArrayAdd/GUCArrayDelete. This prevents the multiple-entry bug
exhibited by Frank Lupo 28-Jan-2003.
Tom Lane [Mon, 27 Jan 2003 20:51:54 +0000 (20:51 +0000)]
Upgrade cost estimation for joins, per discussion with Bradley Baetz.
Try to model the effect of rescanning input tuples in mergejoins;
account for JOIN_IN short-circuiting where appropriate. Also, recognize
that mergejoin and hashjoin clauses may now be more than single operator
calls, so we have to charge appropriate execution costs.
Tom Lane [Sat, 25 Jan 2003 23:10:30 +0000 (23:10 +0000)]
Allow the planner to collapse explicit inner JOINs together, rather than
necessarily following the JOIN syntax to develop the query plan. The old
behavior is still available by setting GUC variable JOIN_COLLAPSE_LIMIT
to 1. Also create a GUC variable FROM_COLLAPSE_LIMIT to control the
similar decision about when to collapse sub-SELECT lists into their parent
lists. (This behavior existed already, but the limit was always
GEQO_THRESHOLD/2; now it's separately adjustable.)
Tom Lane [Sat, 25 Jan 2003 05:19:47 +0000 (05:19 +0000)]
Where available, use utime() or utimes() to update the file mod time
of the socket file and socket lock file; this should prevent both of them
from being removed by even the stupidest varieties of /tmp-cleaning
script. Per suggestion from Giles Lean.