Tom Lane [Fri, 17 Jan 2003 03:25:04 +0000 (03:25 +0000)]
Fix parse_agg.c to detect ungrouped Vars in sub-SELECTs; remove code
that used to do it in planner. That was an ancient kluge that was
never satisfactory; errors should be detected at parse time when possible.
But at the time we didn't have the support mechanism (expression_tree_walker
et al) to make it convenient to do in the parser.
Tom Lane [Fri, 17 Jan 2003 02:01:21 +0000 (02:01 +0000)]
Adjust API of expression_tree_mutator and query_tree_mutator to
simplify callers. It turns out the common case is that the caller
does want to recurse into sub-queries, so push support for that into
these subroutines.
Tom Lane [Thu, 16 Jan 2003 21:01:45 +0000 (21:01 +0000)]
Add code to print information about a detected deadlock cycle. The
printed data is comparable to what you could read in the pg_locks view,
were you fortunate enough to have been looking at it at the right time.
Tom Lane [Thu, 16 Jan 2003 00:26:49 +0000 (00:26 +0000)]
Repair an embarrassingly large number of alphabetization mistakes in the
datetime token tables. Even more embarrassing, the regression tests
revealed some of the problems --- but evidently the bogus output wasn't
questioned. Add code to postmaster startup to directly check the tables
for correct ordering, in hopes of not being embarrassed like this again.
Tom Lane [Wed, 15 Jan 2003 23:10:32 +0000 (23:10 +0000)]
Now that switch_outer processing no longer relies on being run after
join_references(), it's practical to consolidate all join_references()
processing into the set_plan_references traversal in setrefs.c. This
seems considerably cleaner than the old way where we did it for join
quals in createplan.c and for targetlists in setrefs.c.
Tom Lane [Wed, 15 Jan 2003 19:35:48 +0000 (19:35 +0000)]
Allow merge and hash joins to occur on arbitrary expressions (anything not
containing a volatile function), rather than only on 'Var = Var' clauses
as before. This makes it practical to do flatten_join_alias_vars at the
start of planning, which in turn eliminates a bunch of klugery inside the
planner to deal with alias vars. As a free side effect, we now detect
implied equality of non-Var expressions; for example in
SELECT ... WHERE a.x = b.y and b.y = 42
we will deduce a.x = 42 and use that as a restriction qual on a. Also,
we can remove the restriction introduced 12/5/02 to prevent pullup of
subqueries whose targetlists contain sublinks.
Still TODO: make statistical estimation routines in selfuncs.c and costsize.c
smarter about expressions that are more complex than plain Vars. The need
for this is considerably greater now that we have to be able to estimate
the suitability of merge and hash join techniques on such expressions.
Barry Lind [Tue, 14 Jan 2003 09:13:51 +0000 (09:13 +0000)]
Patch from Florian Wunderlich to correctly support java Timestamps. Previously
the code would only capture milliseconds where as both postgres and the java
Timestamp object support greater resolution.
Also fixed a bug reported by Rhett Sutphin where the last digit of the
fractional seconds was lost when using timestamp without time zone
Barry Lind [Tue, 14 Jan 2003 05:05:26 +0000 (05:05 +0000)]
Patch from Kris Jurka to improve the performance of getImportedKeys().
Use explicit joins to avoid using the genetic query optimizer. Also fixed
a regression test that was failing to compile. This change also cleans up
how key names are reported as per:
A change to the value of the FK_NAME column. Currently the returned value
is the triggers arguments which look like
This was required for server versions < 7.3 when a user did not supply
constraint names. Every constraint was named "<unnamed>"
. 7.3 has enforced unique constraint names per table so unnamed foreign
keys will have different names "$1", "$2" and so on. I've used logic
along the lines of the following to preserve the unique names in the
original scheme, but allow people who go to the trouble of naming their
constraints to see them:
if (triggerargs.startsWith("<unnamed>")) {
fkname = [the whole ugly trigger args name originally used];
} else {
fkname = [the actual fk name];
}
Tom Lane [Mon, 13 Jan 2003 18:10:53 +0000 (18:10 +0000)]
Reconsider mechanism for marking sub-selects that are at top level of
a qualification clause (and hence can get away with being sloppy about
distinguishing FALSE from UNKNOWN). We need to know this in subselect.c;
marking the subplans in setrefs.c is too late.
Tom Lane [Mon, 13 Jan 2003 00:29:26 +0000 (00:29 +0000)]
Cause planner to account for evaluation costs in targetlists and
HAVING quals. Normally this is an insignificant effect --- but it
will not be insignificant when these clauses contain sub-selects.
The added costs cannot affect the planning of the query containing
them, but they might have an impact when the query is a sub-query
of a larger one.
Tom Lane [Sun, 12 Jan 2003 22:35:29 +0000 (22:35 +0000)]
Revise cost_qual_eval() to compute both startup (one-time) and per-tuple
costs for expression evaluation, not only per-tuple cost as before.
This extension is needed in order to deal realistically with hashed or
materialized sub-selects.
Bruce Momjian [Sat, 11 Jan 2003 05:04:14 +0000 (05:04 +0000)]
> > This patch improves the documentation for the shared_buffers GUC param.
>
> I'd suggest that the runtime.sgml description explicitly say "values of
> at least a few thousand are recommended for production installations".
Tom Lane [Fri, 10 Jan 2003 21:08:15 +0000 (21:08 +0000)]
Further tweaking of parsetree & plantree representation of SubLinks.
Simplify SubLink by storing just a List of operator OIDs, instead of
a list of incomplete OpExprs --- that was a bizarre and bulky choice,
with no redeeming social value since we have to build new OpExprs
anyway when forming the plan tree.
Tom Lane [Thu, 9 Jan 2003 20:50:53 +0000 (20:50 +0000)]
Adjust parser so that 'x NOT IN (subselect)' is converted to
'NOT (x IN (subselect))', that is 'NOT (x = ANY (subselect))',
rather than 'x <> ALL (subselect)' as we formerly did. This
opens the door to optimizing NOT IN the same way as IN, whereas
there's no hope of optimizing the expression using <>. Also,
convert 'x <> ALL (subselect)' to the NOT(IN) style, so that
the optimization will be available when processing rules dumped
by older Postgres versions.
initdb forced due to small change in SubLink node representation.
Tom Lane [Thu, 9 Jan 2003 01:06:57 +0000 (01:06 +0000)]
Repair inconsistent rounding behavior for timestamp, time, interval,
per gripe from Csaba Nagy. There is still potential for platform-specific
behavior for values that are exactly halfway between integers, but at
least we now get the expected answer for all other cases.
Tom Lane [Thu, 9 Jan 2003 00:58:41 +0000 (00:58 +0000)]
Add missing pg_proc entry for interval_scale(). The lack of this entry
causes interval rounding not to work as expected in 7.3, for example
SELECT '18:17:15.6'::interval(0) does not round the value.
I did not force initdb, but one is needed to install the added row.
Bruce Momjian [Wed, 8 Jan 2003 23:18:25 +0000 (23:18 +0000)]
The second was that renegotiation was just plain broken. I can't
believe I didn't notice this before -- once 64k was sent to/from the
server the client would crash. Basicly, in 7.3 the server SSL code set
the initial state to "about to renegotiate" without actually starting
the renegotiation. In addition, the server and client didn't properly
handle the SSL_ERROR_WANT_(READ|WRITE) error. This is fixed in the
second patch.
Bruce Momjian [Wed, 8 Jan 2003 22:56:58 +0000 (22:56 +0000)]
I was playing around with 7.3.1 and found some more SSL problems. The
first, that I missed when checking over 7.3.1, was that the client
method was switched to SSLv23 along with the server. The SSLv23 client
method does SSLv2 by default, but can also understand SSLv3. In our
situation the SSLv2 backwords compatibility is really only needed on the
server. This is the first patch.
The last thing is that I found a way for the server to understand SSLv2
HELLO messages (sent by pre-7.3 clients) but then get them to talk
SSLv3. This is the last one.
Bruce Momjian [Wed, 8 Jan 2003 22:54:06 +0000 (22:54 +0000)]
Fix dumping of DEFERRABLE/INITIALLY DEFERRED:
> The big problem is that while pg_dump's dump_trigger() looks at
> tginitdeferred and dumps accordingly, pg_get_constraintdef doesn't look
> at tginitdeferred, and therefore doesn't record the requirement as part
> of ALTER TABLE ADD CONSTRAINT.
pg_get_constraintdef should probably be looking at condeferrable and
condeferred in the pg_constraint row it's looking at. Maybe something
like the attached.
Bruce Momjian [Wed, 8 Jan 2003 22:28:32 +0000 (22:28 +0000)]
This trivial patch implements disabled, deferred triggers, per my
proposal on -hackers a couple days ago. The 'tgenabled' status of the
trigger is consulted when the trigger is added to the deferred queue
(i.e. when the event occurs that fires the trigger), not when the
deferred event is executed.
No regression tests, as another bug prevents them (the pg_trigger row
for a trigger is only loaded once per session, so any changes to it are
not noticed unless the client disconnects and reconnects).
Tom Lane [Wed, 8 Jan 2003 22:06:23 +0000 (22:06 +0000)]
Reconsider old decision to try to constant-fold default and constraint
expressions before they are stored. This seems like not such a hot idea,
particularly now that the constant-folder will try to inline SQL functions.
Tom Lane [Wed, 8 Jan 2003 19:41:40 +0000 (19:41 +0000)]
Fix for bug #866. 7.3 contains new logic for avoiding redundant calls to
the index AM when we know we are fetching a unique row. However, this
logic did not consider the possibility that it would be asked to fetch
backwards. Also fix mark/restore to work correctly in this scenario.
Tom Lane [Wed, 8 Jan 2003 00:22:27 +0000 (00:22 +0000)]
Code review for FETCH/MOVE 0 changes. Improve documentation, do the
right thing with the destination when FETCH 0 can't return a row,
don't try to stuff LONG_MAX into an int value.
Tom Lane [Tue, 7 Jan 2003 20:56:07 +0000 (20:56 +0000)]
Apply the proper version of Christopher Kings-Lynne's describe patch
(ie, the one with describe-schema support). Minor code review.
Adjust display of casts to use standard type names.