Tom Lane [Thu, 8 May 2003 18:16:37 +0000 (18:16 +0000)]
Update 3.0 protocol support to match recent agreements about how to
handle multiple 'formats' for data I/O. Restructure CommandDest and
DestReceiver stuff one more time (it's finally starting to look a bit
clean though). Code now matches latest 3.0 protocol document as far
as message formats go --- but there is no support for binary I/O yet.
Barry Lind [Wed, 7 May 2003 03:03:30 +0000 (03:03 +0000)]
Fixed bug with Warnings. Warnings are not added to the Statement instead of
the connection when appropriate.
This checkin also adds the type map for jdbc3, however currently it is
identical to the jdbc2 mapping.
Tom Lane [Tue, 6 May 2003 21:51:42 +0000 (21:51 +0000)]
Add display of eventual result RowDescription (if any) to the output
of Describe on a prepared statement. This was in the original 3.0
protocol proposal, but I took it out for reasons that seemed good at
the time. Put it back per yesterday's pghackers discussion.
Tom Lane [Tue, 6 May 2003 21:01:04 +0000 (21:01 +0000)]
Ensure that an Execute operation can't send tuples in cases where
Describe would claim that no tuples will be returned. Only affects
SELECTs added to non-SELECT base queries by rewrite rules. If you
want to see the output of such a select, you gotta use 'simple Query'
protocol.
Tom Lane [Tue, 6 May 2003 20:26:28 +0000 (20:26 +0000)]
Restructure command destination handling so that we pass around
DestReceiver pointers instead of just CommandDest values. The DestReceiver
is made at the point where the destination is selected, rather than
deep inside the executor. This cleans up the original kluge implementation
of tstoreReceiver.c, and makes it easy to support retrieving results
from utility statements inside portals. Thus, you can now do fun things
like Bind and Execute a FETCH or EXPLAIN command, and it'll all work
as expected (e.g., you can Describe the portal, or use Execute's count
parameter to suspend the output partway through). Implementation involves
stuffing the utility command's output into a Tuplestore, which would be
kind of annoying for huge output sets, but should be quite acceptable
for typical uses of utility commands.
Tom Lane [Tue, 6 May 2003 00:20:33 +0000 (00:20 +0000)]
Implement feature of new FE/BE protocol whereby RowDescription identifies
the column by table OID and column number, if it's a simple column
reference. Along the way, get rid of reskey/reskeyop fields in Resdoms.
Turns out that representation was not convenient for either the planner
or the executor; we can make the planner deliver exactly what the
executor wants with no more effort.
initdb forced due to change in stored rule representation.
Tom Lane [Mon, 5 May 2003 17:57:47 +0000 (17:57 +0000)]
Ditch ExecGetTupType() in favor of the much simpler ExecGetResultType(),
which does the same thing. Perhaps at one time there was a reason to
allow plan nodes to store their result types in different places, but
AFAICT that's been unnecessary for a good while.
Tom Lane [Mon, 5 May 2003 16:46:28 +0000 (16:46 +0000)]
Alter plpgsql's lexer so that yylineno and yymore are not used. This
avoids 'input buffer overflow' failure on long literals, improves
performance, gives the right answer for line position in functions
containing multiline literals, suppresses annoying compiler warnings,
and generally is so much better I wonder why we didn't do it before.
Tom Lane [Sun, 4 May 2003 04:30:15 +0000 (04:30 +0000)]
Allow 60 in seconds fields of timestamp, time, interval input values.
Per recent discussion on pgsql-general, this is appropriate for spec
compliance, and has the nice side-effect of easing porting from old
pg_dump files that exhibit the 59.999=>60.000 roundoff problem.
Tom Lane [Sun, 4 May 2003 00:03:55 +0000 (00:03 +0000)]
When a TIMESTAMP, TIME, or INTERVAL precision is specified larger than our
implementation limits, do not issue an ERROR; instead issue a NOTICE and use
the max supported value. Per pgsql-general discussion of 28-Apr, this is
needed to allow easy porting from pre-7.3 releases where the limits were
higher.
Unrelated change in same area: accept GLOBAL TEMP/TEMPORARY as a synonym
for TEMPORARY, as per pgsql-hackers discussion of 15-Apr. We previously
rejected it, but that was based on a misreading of the spec --- SQL92's
GLOBAL temp tables are really closer to what we have than their LOCAL ones.
Tom Lane [Sat, 3 May 2003 22:18:59 +0000 (22:18 +0000)]
Fix erroneous space calculation leading to core dump in dumpProcLangs,
per report from Olivier Prenant. Also fix off-by-one space calculation
in ReadToc; this woould not have hurt us until we had more than 100
dependencies for a single object, but wrong is wrong.
Barry Lind [Sat, 3 May 2003 20:40:45 +0000 (20:40 +0000)]
Patch to fix up LONGVARBINARY support submitted by Amit Gollapudi
(agollapudi@demandsolutions.com).
Also applied the RefCursor support patch by Nic Ferrier. This patch allows
you too return a get a result set from a function that returns a refcursor.
For example:
call.registerOutParameter(1, Types.OTHER);
call.execute();
ResultSet rs = (ResultSet) call.getObject(1);
Tom Lane [Fri, 2 May 2003 20:54:36 +0000 (20:54 +0000)]
Portal and memory management infrastructure for extended query protocol.
Both plannable queries and utility commands are now always executed
within Portals, which have been revamped so that they can handle the
load (they used to be good only for single SELECT queries). Restructure
code to push command-completion-tag selection logic out of postgres.c,
so that it won't have to be duplicated between simple and extended queries.
initdb forced due to addition of a field to Query nodes.
Tom Lane [Fri, 2 May 2003 19:48:53 +0000 (19:48 +0000)]
Repair sloppiness about where cached mergeclause pathkeys are allocated.
Without this fix, CVS tip dumps core when running the regression tests
with geqo_threshold = 2. I would think that a similar patch might be
needed in 7.3, but cannot duplicate the failure in that branch --- so
for now, leave well enough alone.
Tom Lane [Wed, 30 Apr 2003 19:04:12 +0000 (19:04 +0000)]
Update to describe new set of globally-known contexts planned for support
of extended query features in new FE/BE protocol. TransactionCommandContext
is gone (PortalContext replaces it for some purposes), and QueryContext
has taken on a new meaning (MessageContext plays its old role).
Tom Lane [Tue, 29 Apr 2003 22:13:11 +0000 (22:13 +0000)]
Infrastructure for deducing Param types from context, in the same way
that the types of untyped string-literal constants are deduced (ie,
when coerce_type is applied to 'em, that's what the type must be).
Remove the ancient hack of storing the input Param-types array as a
global variable, and put the info into ParseState instead. This touches
a lot of files because of adjustment of routine parameter lists, but
it's really not a large patch. Note: PREPARE statement still insists on
exact specification of parameter types, but that could easily be relaxed
now, if we wanted to do so.
Tom Lane [Mon, 28 Apr 2003 04:29:12 +0000 (04:29 +0000)]
Okay, I've had it with PQsetdbLogin having slightly different defaults
than PQconnectdb. Reimplement the former to use the same code as the
latter. Fix documentation omissions while at it.
Tom Lane [Sun, 27 Apr 2003 23:56:53 +0000 (23:56 +0000)]
Make getaddrinfo's behavior with NULL node parameter agree with the
Linux man page for it. This error was preventing CVS tip from accepting
remote connections.
Tom Lane [Sun, 27 Apr 2003 22:21:22 +0000 (22:21 +0000)]
Fix plpgsql so that variables of composite types (rowtypes) can be
declared without having to write %ROWTYPE. If the declared type of
a variable is a composite type, it'll be taken to be a row variable
automatically.
Tom Lane [Sun, 27 Apr 2003 20:09:44 +0000 (20:09 +0000)]
Put back encoding-conversion step in processing of incoming queries;
I had inadvertently omitted it while rearranging things to support
length-counted incoming messages. Also, change the parser's API back
to accepting a 'char *' query string instead of 'StringInfo', as the
latter wasn't buying us anything except overhead. (I think when I put
it in I had some notion of making the parser API 8-bit-clean, but
seeing that flex depends on null-terminated input, that's not really
ever gonna happen.)
Tom Lane [Sun, 27 Apr 2003 17:31:25 +0000 (17:31 +0000)]
Clean up some problems in SetClientEncoding: failed to honor doit flag
in all cases, leaked TopMemoryContext memory in others. Make the
interaction between SetClientEncoding and InitializeClientEncoding
cleaner and better documented. I suspect these changes should be
back-patched into 7.3, but will wait on Tatsuo's verification.
Tom Lane [Sat, 26 Apr 2003 22:21:47 +0000 (22:21 +0000)]
Repair permissions problem in RI triggers: query parsing has to be done
as the correct user, not only query execution. Per report from Sean
Chittenden.
Tom Lane [Sat, 26 Apr 2003 20:23:00 +0000 (20:23 +0000)]
Add transaction status field to ReadyForQuery messages, and make room
for tableID/columnID in RowDescription. (The latter isn't really
implemented yet though --- the backend always sends zeroes, and libpq
just throws away the data.)
Tom Lane [Sat, 26 Apr 2003 02:57:14 +0000 (02:57 +0000)]
Tweak stats collector start logic so that we will not try to spawn a
new stats collector oftener than once a minute. Per gripe from Erik Walthinsen
4/25/03.
Tom Lane [Fri, 25 Apr 2003 19:45:10 +0000 (19:45 +0000)]
In the continuing saga of FE/BE protocol revisions, add reporting of
initial values and runtime changes in selected parameters. This gets
rid of the need for an initial 'select pg_client_encoding()' query in
libpq, bringing us back to one message transmitted in each direction
for a standard connection startup. To allow server version to be sent
using the same GUC mechanism that handles other parameters, invent the
concept of a never-settable GUC parameter: you can 'show server_version'
but it's not settable by any GUC input source. Create 'lc_collate' and
'lc_ctype' never-settable parameters so that people can find out these
settings without need for pg_controldata. (These side ideas were all
discussed some time ago in pgsql-hackers, but not yet implemented.)
Tom Lane [Thu, 24 Apr 2003 23:43:09 +0000 (23:43 +0000)]
Adjust subquery qual pushdown rules so that we can push down a qual
into a UNION that has some type coercions applied to the component
queries, so long as the qual itself does not reference any columns that
have such coercions. Per example from Jonathan Bartlett 24-Apr-03.
Tom Lane [Thu, 24 Apr 2003 21:16:45 +0000 (21:16 +0000)]
Infrastructure for upgraded error reporting mechanism. elog.c is
rewritten and the protocol is changed, but most elog calls are still
elog calls. Also, we need to contemplate mechanisms for controlling
all this functionality --- eg, how much stuff should appear in the
postmaster log? And what API should libpq expose for it?
Tom Lane [Tue, 22 Apr 2003 00:08:07 +0000 (00:08 +0000)]
Another round of protocol changes. Backend-to-frontend messages now all
have length words. COPY OUT reimplemented per new protocol: it doesn't
need \. anymore, thank goodness. COPY BINARY to/from frontend works,
at least as far as the backend is concerned --- libpq's PQgetline API
is not up to snuff, and will have to be replaced with something that is
null-safe. libpq uses message length words for performance improvement
(no cycles wasted rescanning long messages), but not yet for error
recovery.
Tom Lane [Sun, 20 Apr 2003 21:54:34 +0000 (21:54 +0000)]
Apple's assembler likes the inlined TAS syntax too, so no reason to
maintain a separate out-of-line version of PPC tas() anymore.
Also fix S_UNLOCK for __powerpc64__ platforms.
Tom Lane [Sun, 20 Apr 2003 17:03:25 +0000 (17:03 +0000)]
Avoid O(N^2) behavior with lots of deferred triggers by making
deferredTriggerInvokeEvents only scan events added since it last ran.
Stephan Szabo, some corrections by Tom Lane.
Tom Lane [Thu, 17 Apr 2003 22:26:02 +0000 (22:26 +0000)]
First phase of FE/BE protocol modifications: new StartupPacket layout
with variable-width fields. No more truncation of long user names.
Also, libpq can now send its environment-variable-driven SET commands
as part of the startup packet, saving round trips to server.