Alvaro Herrera [Mon, 21 Nov 2005 12:49:33 +0000 (12:49 +0000)]
Implement DROP OWNED and REASSIGN OWNED. These new commands facilitate the
process of dropping roles by dropping objects owned by them and privileges
granted to them, or giving the owned objects to someone else, through the
use of the data stored in the new pg_shdepend catalog.
Some refactoring of the GRANT/REVOKE code was needed, as well as ALTER OWNER
code. Further cleanup of code duplication in the GRANT code seems necessary.
Implemented by me after an idea from Tom Lane, who also provided various kind
of implementation advice.
Regression tests pass. Some tests for the new functionality are also added,
as well as rudimentary documentation.
Teodor Sigaev [Mon, 21 Nov 2005 12:27:57 +0000 (12:27 +0000)]
Text parser rewritten:
- supports multibyte encodings
- more strict rules for lexemes
- flex isn't used
Add:
- tsquery plainto_tsquery(text)
Function makes tsquery from plain text.
- &&, ||, !! operation for tsquery for combining
tsquery from it's parts: 'foo & bar' || 'asd' => 'foo & bar | asd'
Tom Lane [Sun, 20 Nov 2005 19:49:08 +0000 (19:49 +0000)]
Remove the t_datamcxt field of HeapTupleData. This was introduced for
the convenience of tuptoaster.c and is no longer needed, so may as well
get rid of some small amount of overhead.
Tom Lane [Sun, 20 Nov 2005 18:38:20 +0000 (18:38 +0000)]
Modify tuptoaster's API so that it does not try to modify the passed
tuple in-place, but instead passes back an all-new tuple structure if
any changes are needed. This is a much cleaner and more robust solution
for the bug discovered by Alexey Beschiokov; accordingly, revert the
quick hack I installed yesterday.
With this change, HeapTupleData.t_datamcxt is no longer needed; will
remove it in a separate commit in HEAD only.
Tom Lane [Sat, 19 Nov 2005 20:57:44 +0000 (20:57 +0000)]
Stopgap solution for problem reported by Alexey Beschiokov: after
doing heap_insert or heap_update, wipe out any extracted fields in
the TupleTableSlot containing the tuple, because they might not be valid
anymore if tuptoaster.c changed the tuple. Safe because slot must be
in the materialized state, but mighty ugly --- find a better answer!
Tom Lane [Sat, 19 Nov 2005 19:44:55 +0000 (19:44 +0000)]
Change array comparison rules to consider dimensionality information,
not only the array contents, before claiming two arrays are equal.
Per recent discussion.
Tom Lane [Sat, 19 Nov 2005 03:00:09 +0000 (03:00 +0000)]
Defend against nulls-in-arrays in contrib/intarray. I may have put in
more tests than strictly necessary, but did not feel like tracing call
paths in detail ...
Tom Lane [Sat, 19 Nov 2005 02:08:45 +0000 (02:08 +0000)]
Add defenses against nulls-in-arrays to contrib/ltree. Possibly it'd
be useful to actually do something with nulls, rather than reject them,
but I'll just close the hole for now.
Tom Lane [Sat, 19 Nov 2005 01:50:08 +0000 (01:50 +0000)]
Change array_push and array_cat so that they retain the lower bound of
the array (for array_push) or higher-dimensional array (for array_cat)
rather than decrementing it as before. This avoids generating lower
bounds other than one for any array operation within the SQL spec. Per
recent discussion.
Interestingly, this seems to have been the original behavior, because
while updating the docs I noticed that a large fraction of relevant
examples were *wrong* for the old behavior and are now right. Is it
worth correcting this in the back-branch docs?
Tom Lane [Fri, 18 Nov 2005 23:08:00 +0000 (23:08 +0000)]
Fix performance issue in exprTypmod(): for a COALESCE expression, it
recursed twice on its first argument, leading to exponential time spent
on a deep nest of COALESCEs ... such as a deeply nested FULL JOIN would
produce. Per report from Matt Carter.
Tom Lane [Thu, 17 Nov 2005 22:14:56 +0000 (22:14 +0000)]
Make SQL arrays support null elements. This commit fixes the core array
functionality, but I still need to make another pass looking at places
that incidentally use arrays (such as ACL manipulation) to make sure they
are null-safe. Contrib needs work too.
I have not changed the behaviors that are still under discussion about
array comparison and what to do with lower bounds.
Tom Lane [Thu, 17 Nov 2005 17:42:02 +0000 (17:42 +0000)]
DropRelFileNodeBuffers failed to fix the state of the lookup hash table
that was added to localbuf.c in 8.1; therefore, applying it to a temp table
left corrupt lookup state in memory. The only case where this had a
significant chance of causing problems was an ON COMMIT DELETE ROWS temp
table; the other possible paths left bogus state that was unlikely to
be used again. Per report from Csaba Nagy.
Bruce Momjian [Wed, 16 Nov 2005 18:45:09 +0000 (18:45 +0000)]
Update, add mention of user locking table before MERGE:
< so duplicate checking can be easily performed.
> so duplicate checking can be easily performed. It is possible to
> do it without a unique index if we require the user to LOCK the table
> before the MERGE.
Tom Lane [Wed, 16 Nov 2005 17:08:03 +0000 (17:08 +0000)]
make_restrictinfo() failed to attach the specified required_relids to
its result when the clause was an OR clause. Brain fade exposed by
example from Sebastian BÎck.
Bruce Momjian [Wed, 16 Nov 2005 16:33:44 +0000 (16:33 +0000)]
Add batch mode, make new libpq section:
< * Add a libpq function to support Parse/DescribeStatement capability
< * Add PQescapeIdentifier() to libpq
< * Prevent PQfnumber() from lowercasing unquoted the column name
<
< PQfnumber() should never have been doing lowercasing, but historically
< it has so we need a way to prevent it
< 648a642,661
>
>
> libpq
>
> o Add a function to support Parse/DescribeStatement capability
> o Add PQescapeIdentifier()
> o Prevent PQfnumber() from lowercasing unquoted the column name
>
> PQfnumber() should never have been doing lowercasing, but
> historically it has so we need a way to prevent it
>
> o Allow query results to be automatically batched to the client
>
> Currently, all query results are transfered to the libpq
> client before libpq makes the results available to the
> application. This feature would allow the application to make
> use of the first result rows while the rest are transfered, or
> held on the server waiting for them to be requested by libpq.
> One complexity is that a query like SELECT 1/col could error
> out mid-way through the result set.
Bruce Momjian [Tue, 15 Nov 2005 14:45:10 +0000 (14:45 +0000)]
Prevent certain symbols that are used for both typedefs and variable
names from being added to pgindent's typedef list. The existance of
them caused weird formatting in the date/type files, and in keywords.c.
Bruce Momjian [Tue, 15 Nov 2005 00:43:01 +0000 (00:43 +0000)]
Fix recent problems with BSD indent, including indenting past 80
columns, shifting comment to the right when more than 150 'else if'
clauses were used, and update typedefs for 8.1.X.
Tom Lane [Mon, 14 Nov 2005 23:54:23 +0000 (23:54 +0000)]
Restore the former RestrictInfo field valid_everywhere (but invert the flag
sense and rename to "outerjoin_delayed" to more clearly reflect what it
means). I had decided that it was redundant in 8.1, but the folly of this
is exposed by a bug report from Sebastian Böck. The place where it's
needed is to prevent orindxpath.c from cherry-picking arms of an outer-join
OR clause to form a relation restriction that isn't actually legal to push
down to the relation scan level. There may be some legal cases that this
forbids optimizing, but we'd need much closer analysis to determine it.
Tom Lane [Mon, 14 Nov 2005 17:42:55 +0000 (17:42 +0000)]
Prevent ExecInsert() and ExecUpdate() from scribbling on the result tuple
slot of the topmost plan node when a trigger returns a modified tuple.
These appear to be the only places where a plan node's caller did not
treat the result slot as read-only, which is an assumption that nodeUnique
makes as of 8.1. Fixes trigger-vs-DISTINCT bug reported by Frank van Vugt.
Teodor Sigaev [Mon, 14 Nov 2005 16:11:37 +0000 (16:11 +0000)]
Remove usage of ArrayType->flags field, use pgsql's macros BITS_PER_BYTE instead
of self-defined macros, add limit of Array to gist__int_ops. BTW, intarray now
doesn't support NULLs in arrays.
Tom Lane [Sun, 13 Nov 2005 19:11:28 +0000 (19:11 +0000)]
Force the second argument of SUBSTRING(foo FOR bar) to be int4, to avoid
surprising results when it's some other numeric type. This doesn't solve
the generic problem of surprising implicit casts to text, but it's a
low-impact way of making sure this particular case behaves sanely.
Per gripe from Harald Fuchs and subsequent discussion.
Tom Lane [Thu, 10 Nov 2005 00:31:34 +0000 (00:31 +0000)]
When in transaction-aborted state, reject Bind message for portals containing
anything but transaction-exiting commands (ROLLBACK etc). We already rejected
Parse and Execute in such cases, so there seems little point in allowing Bind.
This prevents at least an Assert failure, and probably worse things, since
there's a lot of infrastructure that doesn't work when not in a live
transaction. We can also simplify the Bind logic a bit by rejecting messages
with a nonzero number of parameters, instead of the former kluge to silently
substitute NULL for each parameter. Per bug #2033 from Joel Stevenson.
Teodor Sigaev [Tue, 8 Nov 2005 17:08:46 +0000 (17:08 +0000)]
New features for tsearch2:
1 Comparison operation for tsquery
2 Btree index on tsquery
3 numnode(tsquery) - returns 'length' of tsquery
4 tsquery @ tsquery, tsquery ~ tsquery - contains, contained for tsquery.
Note: They don't gurantee exact result, only MAY BE, so it
useful only for speed up rewrite functions
5 GiST index support for @,~
6 rewrite():
select rewrite(orig, what, to);
select rewrite(ARRAY[orig, what, to]) from tsquery_table;
select rewrite(orig, 'select what, to from tsquery_table;');
7 significantly improve cover algorithm
Tom Lane [Sun, 6 Nov 2005 19:29:01 +0000 (19:29 +0000)]
Add defenses to btree and hash index AMs to do simple sanity checks
on every index page they read; in particular to catch the case of an
all-zero page, which PageHeaderIsValid allows to pass. It turns out
hash already had this idea, but it was just Assert()ing things rather
than doing a straight error check, and the Asserts were partially
redundant with PageHeaderIsValid anyway. Per recent failure example
from Jim Nasby. (gist still needs the same treatment.)
Tom Lane [Sat, 5 Nov 2005 21:19:47 +0000 (21:19 +0000)]
Clean up representation of SLRU page state. This is the cleaner fix
for the SLRU race condition that I posted a few days ago, but we decided
not to use in 8.1 and older branches.
Tom Lane [Sat, 5 Nov 2005 03:04:53 +0000 (03:04 +0000)]
Repair an error introduced by log_line_prefix patch: it is not acceptable
to assume that the string pointer passed to set_ps_display is good forever.
There's no need to anyway since ps_status.c itself saves the string, and
we already had an API (get_ps_display) to return it.
I believe this explains Jim Nasby's report of intermittent crashes in
elog.c when %i format code is in use in log_line_prefix.
While at it, repair a previously unnoticed problem: on some platforms such as
Darwin, the string returned by get_ps_display was blank-padded to the maximum
length, meaning that lock.c's attempt to append " waiting" to it never worked.
Tom Lane [Fri, 4 Nov 2005 18:35:40 +0000 (18:35 +0000)]
Ensure that we only create one ConsoleCtrlHandler per psql process,
so as to avoid performance issues and possible ultimate crash on long
psql scripts. Per Merlin Moncure.
Bruce Momjian [Fri, 4 Nov 2005 18:16:50 +0000 (18:16 +0000)]
We haven't seen any agreement emerge as to what is causing AIX 5.3 ML3
to fail to successfully build the release candidates.
However, a patch has emerged (thanks, Seneca!) that does allow it to
work, and which I'd expect to be portable (better still!).
We are still actively pursuing why it breaks, but supposing that still
remains outstanding, at least the following would allow AIX users to
better survive a build...
Tom Lane [Fri, 4 Nov 2005 17:25:15 +0000 (17:25 +0000)]
Disregard superuserness when checking to see if a role GRANT would
create circularity of role memberships. This is a minimum-impact fix
for the problem reported by Florian Pflug. I thought about removing
the superuser_arg test from is_member_of_role() altogether, as it seems
redundant for many of the callers --- but not all, and it's way too late
in the 8.1 cycle to be making large changes. Perhaps reconsider this
later.
Tom Lane [Fri, 4 Nov 2005 02:56:31 +0000 (02:56 +0000)]
Avoid referring to a specific version of the SQL standard except where
necessary, and be careful to refer to the right version where it is
useful to do so. This partially reverts an ill-considered search and
replace from a few months ago.
Tom Lane [Thu, 3 Nov 2005 17:45:29 +0000 (17:45 +0000)]
Thinking further, it seems we had better also copy down resorigtbl/resorigcol
to ensure that SubqueryScan elimination doesn't change the behavior of
reporting of original column sources.
Tom Lane [Thu, 3 Nov 2005 17:34:03 +0000 (17:34 +0000)]
Fix the recently-added code that eliminates unnecessary SubqueryScan nodes
from a finished plan tree. We have to copy the output column names
(resname fields) from the SubqueryScan down to its child plan node;
else, if this is the topmost level of the plan, the wrong column names
will be delivered to the client. Per bug #2017 reported by Jolly Chen.
Alvaro Herrera [Thu, 3 Nov 2005 17:11:40 +0000 (17:11 +0000)]
Rename the members of CommandDest enum so they don't collide with other uses of
those names. (Debug and None were pretty bad names anyway.) I hope I catched
all uses of the names in comments too.
Tom Lane [Thu, 3 Nov 2005 00:23:36 +0000 (00:23 +0000)]
Fix longstanding race condition in transaction log management: there was a
very narrow window in which SimpleLruReadPage or SimpleLruWritePage could
think that I/O was needed when it wasn't (and indeed the buffer had already
been assigned to another page). This would result in an Assert failure if
Asserts were enabled, and probably in silent data corruption if not.
Reported independently by Jim Nasby and Robert Creager.
I intend a more extensive fix when 8.2 development starts, but this is a
reasonably low-impact patch for the existing branches.
Andrew Dunstan [Tue, 1 Nov 2005 15:09:11 +0000 (15:09 +0000)]
Provide a --no-locale option for pg_regress and a corresponding NOLOCALE=1
setting for the regression makefile, allowing Windows users to force locale
settings since Windows does not get its locale from the environment.
Tom Lane [Fri, 28 Oct 2005 19:00:19 +0000 (19:00 +0000)]
Reorder code so that we don't have to hold a critical section while
reserving SLRU space for a new MultiXact. The original coding would have
treated out-of-disk-space as a PANIC condition, which is unnecessary.
Tom Lane [Fri, 28 Oct 2005 17:32:22 +0000 (17:32 +0000)]
Clean up AIX build to avoid 'duplicate symbol' warnings, by moving use
of postgres.imp file into BE_DLLLIBS macro. This makes the AIX build
work more like the Windows and Darwin builds, which have similar requirements
to mention a backend library when linking shared libraries that will be
dynamically loaded into the backend.
Tom Lane [Fri, 28 Oct 2005 17:27:29 +0000 (17:27 +0000)]
Fix race condition in multixact code: it's possible to try to read a
multixact's starting offset before the offset has been stored into the
SLRU file. A simple fix would be to hold the MultiXactGenLock until the
offset has been stored, but that looks like a big concurrency hit. Instead
rely on knowledge that unset offsets will be zero, and loop when we see
a zero. This requires a little extra hacking to ensure that zero is never
a valid value for the offset. Problem reported by Matteo Beccati, fix
ideas from Martijn van Oosterhout, Alvaro Herrera, and Tom Lane.