Tom Lane [Sat, 9 Jun 2001 18:16:59 +0000 (18:16 +0000)]
Remove RelationGetBufferWithBuffer(), which is horribly confused about
appropriate pin-count manipulation, and instead use ReleaseAndReadBuffer.
Make use of the fact that the passed-in buffer (if there is one) must
be pinned to avoid grabbing the bufmgr spinlock when we are able to
return this same buffer. Eliminate unnecessary 'previous tuple' and
'next tuple' fields of HeapScanDesc and IndexScanDesc, thereby removing
a whole lot of bookkeeping from heap_getnext() and related routines.
Bruce Momjian [Thu, 7 Jun 2001 00:10:18 +0000 (00:10 +0000)]
I have ported another Python Postgres interface to Windows (PgSQL). It seems
that not many people actually use libpq on Win32; I have found another bug. Some
functions that are defined in libpq-fe.h aren't exported in the DLL version of
the library. I have added them to src/interfaces/libpq/libpqdll.def. The new
complete file is attached.
Tom Lane [Wed, 6 Jun 2001 17:07:46 +0000 (17:07 +0000)]
Adjust WAL code so that checkpoints truncate the xlog at the previous
checkpoint's redo pointer, not its undo pointer, per discussion in
pghackers a few days ago. No point in hanging onto undo information
until we have the ability to do something with it --- and this solves
a rather large problem with log space for long-running transactions.
Also, change all calls of write() to detect the case where write
returned a count less than requested, but failed to set errno.
Presume that this situation indicates ENOSPC, and give the appropriate
error message, rather than a random message associated with the previous
value of errno.
Tom Lane [Tue, 5 Jun 2001 19:34:56 +0000 (19:34 +0000)]
Correct permissions-checking bugs associated with ancient decision to
copy PUBLIC access rights into each newly created ACL entry. Instead
treat each ACL entry as independent flags. Also clean up some ugliness
in acl.h API.
Tom Lane [Tue, 5 Jun 2001 17:13:52 +0000 (17:13 +0000)]
Improve planning of OR indexscan plans: for quals like
WHERE (a = 1 or a = 2) and b = 42
and an index on (a,b), include the clause b = 42 in the indexquals
generated for each arm of the OR clause. Essentially this is an index-
driven conversion from CNF to DNF. Implementation is a bit klugy, but
better than not exploiting the extra quals at all ...
Tom Lane [Tue, 5 Jun 2001 05:26:05 +0000 (05:26 +0000)]
Further work on making use of new statistics in planner. Adjust APIs
of costsize.c routines to pass Query root, so that costsize can figure
more things out by itself and not be so dependent on its callers to tell
it everything it needs to know. Use selectivity of hash or merge clause
to estimate number of tuples processed internally in these joins
(this is more useful than it would've been before, since eqjoinsel is
somewhat more accurate than before).
Bruce Momjian [Mon, 4 Jun 2001 23:27:23 +0000 (23:27 +0000)]
This patch adds support for %TYPE in CREATE FUNCTION argument and return
types. This version has an elog() to remind the user the type
resolution is not dynamic.
Tom Lane [Mon, 4 Jun 2001 16:17:30 +0000 (16:17 +0000)]
Give error message, rather than coredump, for utility statements in
conditional rules (rules with WHERE clauses). We cannot support these
since there's noplace to hang a condition on a utility statement.
We caught the other case (attempt to attach a condition at rewrite time)
awhile ago, but this one escaped notice until now.
Tom Lane [Sat, 2 Jun 2001 20:18:30 +0000 (20:18 +0000)]
Accept and output '-Infinity' as well as 'Infinity', per long-ago
suggestion from Ross Reedstrom. Still needs work to make those symbols
convert to actual IEEE infinities (on machines where such things exist).
Tom Lane [Sat, 2 Jun 2001 19:01:53 +0000 (19:01 +0000)]
Tweak sorting so that nulls appear at the front of a descending sort
(vs. at the end of a normal sort). This ensures that explicit sorts
yield the same ordering as a btree index scan. To be really sure that
that equivalence holds, we use the btree entries in pg_amop to decide
whether we are looking at a '<' or '>' operator. For a sort operator
that has no btree association, we put the nulls at the front if the
operator is named '>' ... pretty grotty, but it does the right thing in
simple ASC and DESC cases, and at least there's no possibility of getting
a different answer depending on the plan type chosen.
Use --enable-nls to turn it on; see installation instructions for details.
See developer's guide how to make use of it in programs and how to add
translations.
psql sources have been almost fully prepared and an incomplete German
translation has been provided. In the backend, only elog() calls are
currently translatable, and the provided German translation file is more
of a placeholder.
Tom Lane [Sat, 2 Jun 2001 17:12:12 +0000 (17:12 +0000)]
Paranoia about unordered comparisons in IEEE float math. If we are
given values that compare as unordered, make sure we reply that they
are equal, which is better than giving an arbitrary answer --- at least
it doesn't depend on which one is passed as which arg.
Bruce Momjian [Fri, 1 Jun 2001 20:57:58 +0000 (20:57 +0000)]
The following patch for JDBC fixes an issue with jdbc running on a
non-multibyte database loosing 8bit characters. This patch will cause
the jdbc driver to ignore the encoding reported by the database when
multibyte isn't enabled and use the JVM default in that case.
Tom Lane [Fri, 1 Jun 2001 18:17:44 +0000 (18:17 +0000)]
pltcl, plperl, and plpython all suffer the same bug previously fixed
in plpgsql: they fail for datatypes that have old-style I/O functions
due to caching FmgrInfo structs with wrong fn_mcxt lifetime.
Although the plpython fix seems straightforward, I can't check it here
since I don't have Python installed --- would someone check it?
Tom Lane [Fri, 1 Jun 2001 17:49:17 +0000 (17:49 +0000)]
New improved version of bpcharin() may have got the truncation case
right, but it failed to get the padding case right.
This was obscured by subsequent application of bpchar() in all but one
regression test case, and that one didn't fail in an obvious way ---
trailing blanks are hard to see. Add another test case to make it
more obvious if it breaks again.
Tom Lane [Fri, 1 Jun 2001 15:45:42 +0000 (15:45 +0000)]
Remove fastpath.c's lame attempt at caching function lookup info across
calls. This has never actually cached anything, because postgres.c does
each fastpath call as a separate transaction command, and so fastpath.c
would always decide that its cache was outdated. If it had worked, it
would now be failing for calls of oldstyle functions due to dangling
pointers in the FmgrInfo struct. Rip it out for simplicity and bug-
proofing.
Tom Lane [Fri, 1 Jun 2001 02:41:36 +0000 (02:41 +0000)]
Clean up some minor problems exposed by further thought about Panon's bug
report on old-style functions invoked by RI triggers. We had a number of
other places that were being sloppy about which memory context FmgrInfo
subsidiary data will be allocated in. Turns out none of them actually
cause a problem in 7.1, but this is for arcane reasons such as the fact
that old-style triggers aren't supported anyway. To avoid getting burnt
later, I've restructured the trigger support so that we don't keep trigger
FmgrInfo structs in relcache memory. Some other related cleanups too:
it's not really necessary to call fmgr_info at all while setting up
the index support info in relcache entries, because those ScanKeyEntry
structs are never used to invoke the functions. This should speed up
relcache initialization a tiny bit.
Tom Lane [Thu, 31 May 2001 18:16:55 +0000 (18:16 +0000)]
Updates to make GIST work with multi-key indexes (from Oleg Bartunov
and Teodor Sigaev). Declare key values as Datum where appropriate,
rather than char* (Tom Lane).
Tom Lane [Thu, 31 May 2001 17:32:33 +0000 (17:32 +0000)]
RI triggers would fail for datatypes using old-style equal function,
because cached fmgr info contained reference to a shorter-lived data
structure. Also guard against possibility that fmgr_info could fail,
leaving an incomplete entry present in the hash table.
Tom Lane [Wed, 30 May 2001 19:53:40 +0000 (19:53 +0000)]
Tweak StrategyEvaluation data structure to eliminate hardwired limit on
number of strategies supported by an index AM. Add missing copyright
notices and CVS $Header$ markers to GIST source files.
Bruce Momjian [Wed, 30 May 2001 16:34:49 +0000 (16:34 +0000)]
I just got bitten by this too. I use type timestamp in the
database, and often need the latest timestamp, but want to
format it as a date. With 7.0.x, I just
The ResultSet.getXXX methods will attempt to
convert whatever SQL type was returned by the
database to whatever Java type is returned by
the getXXX method.
Bruce Momjian [Wed, 30 May 2001 13:00:03 +0000 (13:00 +0000)]
These patches should fix check constraints not inheriting
when added by alter table add constraint. The first file
patches backend/commands/command.c and the latter is a patch
to the alter table regression test.
Bruce Momjian [Wed, 30 May 2001 12:57:36 +0000 (12:57 +0000)]
Attached is my patch that adds DROP CONSTRAINT support to PostgreSQL. I
basically want your guys feedback. I have sprinkled some of my q's thru
the text delimited with the @@ symbol. It seems to work perfectly.
[ Removed @@ comments because patch was reviewed. ]
At the moment it does CHECK constraints only, with inheritance. However,
due to the problem mentioned before with the mismatching between inherited
constraints it may be wise to disable the inheritance feature for a while.
it is written in an extensible fashion to support future dropping of other
types of constraint, and is well documented.
Please send me your comments, check my use of locking, updating of
indices, use of ERROR and NOTICE, etc. and I will rework the patch based
on feedback until everyone
is happy with it...
Bruce Momjian [Wed, 30 May 2001 04:01:11 +0000 (04:01 +0000)]
In chapter:
7.7. Keys
you have
However, my application requires that each collection will also have a
unique name. Why? So that a human being who wants to modify a collection
will be able to identify it. It's much harder to know, if you have two
collections named "Life Science", the the one tagged 24433 is the one
you
need, and the one tagged 29882 is not
I think 'the the' shouldn't be repeated twice. Although taken from an
email it would be cool to fix.
Tom Lane [Mon, 28 May 2001 21:58:32 +0000 (21:58 +0000)]
Make text <=> char conversion functions convert zero character to and
from an empty text string. This makes them consistent with the de facto
behavior of type char's I/O conversion functions, and avoids generating
text values with embedded nulls, which confuse many text operators.
Tom Lane [Mon, 28 May 2001 19:33:24 +0000 (19:33 +0000)]
Cause plpgsql's PERFORM to behave according to its documentation,
which says that PERFORM will execute any SELECT query and discard the
result. The former implementation would in fact raise an error if the
result contained more than one row or more than one column.
Also, change plpgsql's error-logging mechanism to emit the additional
messages about error location at NOTICE rather than DEBUG level. This
allows them to be seen by the client without having to dig into the
postmaster log file (which may be nonexistent or inaccessible by the
client).
Bruce Momjian [Mon, 28 May 2001 00:37:00 +0000 (00:37 +0000)]
Attached is a patch to fix the problem Thomas mentions below. The JDBC
driver now correctly handles timezones that are offset fractional hours
from GMT (ie. -06:30).
Tom Lane [Sun, 27 May 2001 20:48:51 +0000 (20:48 +0000)]
When using a junkfilter, the output tuple should NOT be stored back into
the same tuple slot that the raw tuple came from, because that slot has
the wrong tuple descriptor. Store it into its own slot with the correct
descriptor, instead. This repairs problems with SPI functions seeing
inappropriate tuple descriptors --- for example, plpgsql code failing to
cope with SELECT FOR UPDATE.