Bruce Momjian [Wed, 24 Apr 2002 02:28:28 +0000 (02:28 +0000)]
Attached is an update to contrib/dblink. Please apply if there are no
objections.
Major changes:
- removed cursor wrap around input sql to allow for remote
execution of INSERT/UPDATE/DELETE
- dblink now returns a resource id instead of a real pointer
- added several utility functions
I'm still hoping to add explicit cursor open/fetch/close support before
7.3 is released, but I need a bit more time on that.
On a somewhat unrelated topic, I never got any feedback on the
unknownin/out patch and the mb_substring patch. Is there anything else I
need to do to get those applied?
Bruce Momjian [Wed, 24 Apr 2002 02:26:06 +0000 (02:26 +0000)]
I'm at the win32 error messages once more. The DLL load thingy doesn't
work on all win9x machines, so i made it go thru a l ookup table
instead, using the DLL as last resort. I also moved this out of the
fe-misc.c file because of the size of the lookup ta ble. Who knows, we
might add more other win32 specific code there in the future.
I also fixed a small typo in the pg_config.h.win32 that made the
compiler compla in about the gnu snprintf declaration.
I tried to make this patch with psql coding style. I've successfully
tested this on win2k and win98 and it works fine (i.e. the mes sage
shows on win98 too, it didn't with the old implementation).
Bruce Momjian [Wed, 24 Apr 2002 02:12:53 +0000 (02:12 +0000)]
Here's a patch to add unknownin/unknownout support. I also poked around
looking for places that assume UNKNOWN == TEXT. One of those was the
"SET" type in pg_type.h, which was using textin/textout. This one I took
care of in this patch. The other suspicious place was in
string_to_dataum (which is defined in both selfuncs.c and indxpath.c). I
wasn't too sure about those, so I left them be.
Bruce Momjian [Wed, 24 Apr 2002 01:58:31 +0000 (01:58 +0000)]
pgdb.connect() seems to be broken on Python 2.0.1 (which ships with
Slackware 8), and perhaps on other Pythons, haven't checked. Something in
the _pg.connect() call isn't working. I think the problem stems from the
fact that 'host' is a named parameter of both _pg.connect and pgdb.connect,
and so Python treats it as a variable assignment, not a named parameter.
Bruce Momjian [Wed, 24 Apr 2002 01:51:11 +0000 (01:51 +0000)]
[ Patch comments in three pieces.]
Attached is a pacth against 7.2 which adds locale awareness to the
character classes of the regular expression engine.
...
> > I still think the xdigit class could be handled the same way the digit
> > class is (by enumeration rather than using the isxdigit function). That
> > saves you a cicle, and I don't think there's any loss.
>
> In fact, I will email you when I apply the original patch.
I miss that case :-(. Here is the pached patch.
...
Here is a patch which addresses Tatsuo's concerns (it does return an
static struct instead of constructing it).
Bruce Momjian [Tue, 23 Apr 2002 23:46:37 +0000 (23:46 +0000)]
Based on this report, I am adding a FUNC_MAX_ARGS define to
src/include/pg_config.h.win32. Certainly if we have INDEX_MAX_KEYS in
there, we should have FUNC_MAX_ARGS too.
Tom Lane [Tue, 23 Apr 2002 15:45:30 +0000 (15:45 +0000)]
Clean up INT64CONST conflicts. Make the pg_crc code use a macro called
UINT64CONST, since unsigned was what it wanted anyway. Centralize macro
definitions into c.h.
Convert GUC parameters back to strings if input as integers.
Change elog(ERROR) messages to say that a variable takes one parameter,
rather than saying that it does not take multiple parameters.
Check for multiple arguments on parameters which do not allow them.
The last version caught this with an assert because I wasn't sure whether
we should elog(ERROR) or just loop through the parameters.
Initialize or set a couple of variables to suppress compiler warnings.
These were for cases protected by elog(ERROR) exits, but may as well
keep the compiler happy. Not sure why they don't show up on my gcc-2.96.x
version of the compiler.
Support alternate storage scheme of 64-bit integer for date/time types.
Use "--enable-integer-datetimes" in configuration to use this rather
than the original float8 storage. I would recommend the integer-based
storage for any platform on which it is available. We perhaps should
make this the default for the production release.
Change timezone(timestamptz) results to return timestamp rather than
a character string. Formerly, we didn't have a way to represent
timestamps with an explicit time zone other than freezing the info into
a string. Now, we can reasonably omit the explicit time zone from the
result and return a timestamp with values appropriate for the specified
time zone. Much cleaner, and if you need the time zone in the result
you can put it into a character string pretty easily anyway.
Allow fractional seconds in date/time types even for dates prior to 1BC.
Limit timestamp data types to 6 decimal places of precision. Just right
for a micro-second storage of int8 date/time types, and reduces the
number of places ad-hoc rounding was occuring for the float8-based types.
Use lookup tables for precision/rounding calculations for timestamp and
interval types. Formerly used pow() to calculate the desired value but
with a more limited range there is no reason to not type in a lookup
table. Should be *much* better performance, though formerly there were
some optimizations to help minimize the number of times pow() was called.
Define a HAVE_INT64_TIMESTAMP variable. Based on the configure option
"--enable-integer-datetimes" and the existing internal INT64_IS_BUSTED.
Add explicit date/interval operators and functions for addition and
subtraction. Formerly relied on implicit type promotion from date to
timestamp with time zone.
Change timezone conversion functions for the timetz type from "timetz()"
to "timezone()". This is consistant with other time zone coersion
functions for other types.
Bump the catalog version to 200204201.
Fix up regression tests to reflect changes in fractional seconds
representation for date/times in BC eras.
All regression tests pass on my Linux box.
Make WITHOUT TIME ZONE the default for TIMESTAMP and TIME data types.
This is a big change from past behavior, but the last release was
designed to handle this correctly for dump/restore upgrades.
Fix up handling of SET value arguments. Allow lists for most options at
least at the parser level; multiple values may be rejected at the
command processor of course.
Allow more variations on values for SET commands, including integer and
float values where formerly stringy fields were required.
Check precision specification for date/time fields against the true
precision range allowed by the data types. Especially useful with the
new int8-based storage for these types, where precision is fixed and
predictable.
Stub out a basic CREATE ASSERTION per SQL9x. Does not do anything (yet) but
should be augmented as appropriate.
Minor fixups in braces and tabbing.
Allow more choices for style of value in various SET commands. Formerly,
most required a stringy syntax in the parser; now integers and floats
can (or should) be handled. There is at least one cheesy error message
mentioning sending mail to me if there are problems; should be changed
prior to release.
Allow lists of values from the parser in more cases. If multiple arguments
were not allowed previously, they probably are not allowed now, but at
least the data structures being passed around are more consistant across
more cases.
Add fields in the control file to check for whether the backend was
compiled for integer date/time storage and to check the length of
storage for the locale fields in the same data structure.
Slightly reword some of the error messages to be more accurate on
possible recovery options (e.g. recompile *or* re-initdb).
Bump version number on this file.
Augment the date/time examples in the User's Guide to reflect the newer
capabilities of specifying time zones as intervals per SQL9x.
Put refentrytitle contents on the same line as the tag.
Otherwise, leading whitespace is propagated into the product, which
(at least) messes up the ToC layout.
Remove (some) docinfo tags containing dates. Best to omit if the dates
are not accurate; maybe use CVS dates instead or leave them out.
Tom Lane [Sun, 21 Apr 2002 00:26:44 +0000 (00:26 +0000)]
Restructure AclItem representation so that we can have more than eight
different privilege bits (might as well make use of the space we were
wasting on padding). EXECUTE and USAGE bits for procedures, languages
now are separate privileges instead of being overlaid on SELECT. Add
privileges for namespaces and databases. The GRANT and REVOKE commands
work for these object types, but we don't actually enforce the privileges
yet...
Peter Eisentraut [Sat, 20 Apr 2002 21:56:15 +0000 (21:56 +0000)]
Scanner performance improvements
Use flex flags -CF. Pass the to-be-scanned string around as StringInfo
type, to avoid querying the length repeatedly. Clean up some code and
remove lex-compatibility cruft. Escape backslash sequences inline. Use
flex-provided yy_scan_buffer() function to set up input, rather than using
myinput().
Tom Lane [Fri, 19 Apr 2002 16:36:08 +0000 (16:36 +0000)]
pg_trigger's index on tgrelid is replaced by a unique index on
(tgrelid, tgname). This provides an additional check on trigger name
uniqueness per-table (which was already enforced by the code anyway).
With this change, RelationBuildTriggers will read the triggers in
order by tgname, since it's scanning using this index. Since a
predictable trigger ordering has been requested for some time, document
this behavior as a feature. Also document that rules fire in name
order, since yesterday's changes to pg_rewrite indexing cause that too.
Tom Lane [Thu, 18 Apr 2002 20:01:11 +0000 (20:01 +0000)]
Rule names are now unique per-relation, rather than unique globally.
DROP RULE and COMMENT ON RULE syntax adds an 'ON tablename' clause,
similar to TRIGGER syntaxes. To allow loading of existing pg_dump
files containing COMMENT ON RULE, the COMMENT code will still accept
the old syntax --- but only if the target rulename is unique across
the whole database.
Tom Lane [Wed, 17 Apr 2002 20:57:57 +0000 (20:57 +0000)]
Opclasses live in namespaces. I also took the opportunity to create
an 'opclass owner' column in pg_opclass. Nothing is done with it at
present, but since there are plans to invent a CREATE OPERATOR CLASS
command soon, we'll probably want DROP OPERATOR CLASS too, which
suggests that a notion of ownership would be a good idea.
Tom Lane [Tue, 16 Apr 2002 23:08:12 +0000 (23:08 +0000)]
Operators live in namespaces. CREATE/DROP/COMMENT ON OPERATOR take
qualified operator names directly, for example CREATE OPERATOR myschema.+
( ... ). To qualify an operator name in an expression you need to write
OPERATOR(myschema.+) (thanks to Peter for suggesting an escape hatch).
I also took advantage of having to reformat pg_operator to fix something
that'd been bugging me for a while: mergejoinable operators should have
explicit links to the associated cross-data-type comparison operators,
rather than hardwiring an assumption that they are named < and >.
Bruce Momjian [Mon, 15 Apr 2002 23:47:12 +0000 (23:47 +0000)]
The patch I sent to -patches a little while ago wasn't applied: it
was in the thread "make BufferGetBlockNumber() a macro". Tom
objected to the original patch, so I prepared a new one which
doesn't change BufferGetBlockNumber() into a macro, it just
cleans up some comments and fixes an assertion. The patch
is attached.
Bruce Momjian [Mon, 15 Apr 2002 23:45:07 +0000 (23:45 +0000)]
CATALOG VERSION UPDATED:
The indexes on most system catalogs are named with the suffix "_index";
not so with TOAST table indexes, which use "_idx". This trivial patch
changes TOAST table index names to use the "_index" suffix for
consistency.
Bruce Momjian [Mon, 15 Apr 2002 23:35:51 +0000 (23:35 +0000)]
Fix for NOTIFY when NAMEDATALEN is nonstandard in server. Fix idea from
Tom Lane to move string storage to end of structure but keep pointer in
the same location.
Bruce Momjian [Mon, 15 Apr 2002 23:34:17 +0000 (23:34 +0000)]
Fix for EINTR returns from Win9X socket operations:
In summary, if a software writer implements timer events or other events
which generate a signal with a timing fast enough to occur while libpq
is inside connect(), then connect returns -EINTR. The code following
the connect call does not handle this and generates an error message.
The sum result is that the pg_connect() fails. If the timer or other
event is right on the window of the connect() completion time, the
pg_connect() may appear to work sporadically. If the event is too slow,
pg_connect() will appear to always work and if the event is too fast,
pg_connect() will always fail.
Tom Lane [Mon, 15 Apr 2002 22:33:21 +0000 (22:33 +0000)]
Adjust rules for search_path so that pg_catalog is never implicitly
selected as the creation target namespace; to make that happen, you
must explicitly set search_path that way. This makes initdb a hair
more complex but seems like a good safety feature.
Tom Lane [Mon, 15 Apr 2002 06:05:49 +0000 (06:05 +0000)]
Fix oversight in recent change of representation for JOIN alias
variables: JOIN/ON should allow references to contained JOINs.
Per bug report from Barry Lind.
Tom Lane [Mon, 15 Apr 2002 05:22:04 +0000 (05:22 +0000)]
The contents of command.c, creatinh.c, define.c, remove.c and rename.c
have been divided according to the type of object manipulated - so ALTER
TABLE code is in tablecmds.c, aggregate commands in aggregatecmds.c and
so on.
A few common support routines remain in define.c (prototypes in
src/include/commands/defrem.h).
No code has been changed except for includes to reflect the new files.
The prototypes for aggregatecmds.c, functioncmds.c, operatorcmds.c,
and typecmds.c remain in src/include/commands/defrem.h.
Bruce Momjian [Sat, 13 Apr 2002 19:57:18 +0000 (19:57 +0000)]
Rod's patch does what it is supposed to do, but it also includes
some old code to add PK constraints to CREATE TABLE. That stuff
had been removed as part of my original patch for pg_dump a
little while ago.
The attached patch fixes this by removing (again :-) ) the
code in dumpTables() to perform PK creation during CREATE
TABLE. I briefly tested it locally and it fixes both of
Tom's test cases.