Commit graph

1294 commits

Author SHA1 Message Date
Bruce Momjian
e30b283f30 Attached is my attempt to clean up the horrors of the ExecSQL() method in
the JDBC driver.

I've done this by extracting it into a new method object called
QueryExecutor (should go into org/postgresql/core/) and then taking it
apart into different methods in that class.

A short summary:

* Extracted ExecSQL() from Connection into a method object called
  QueryExecutor.

* Moved ReceiveFields() from Connection to QueryExecutor.

* Extracted parts of the original ExecSQL() method body into smaller
  methods on QueryExecutor.

* Bug fix: The instance variable "pid" in Connection was used in two
  places with different meaning. Both were probably in dead code, but it's
  fixed anyway.

Anders Bengtsson
2001-09-06 03:13:34 +00:00
Bruce Momjian
d99794e613 Attached is a patch for current CVS, consisting of a cvs diff -c
for the changed files and a few new files:
- test/jdbc2/BatchExecuteTest.java
- util/MessageTranslator.java
- jdbc2/PBatchUpdateException.java

As an aside, is this the best way to submit a patch consisting
of both changed and new files? Or is there a smarter cvs command
which gets them all in one patch file?

This patch fixes batch processing in the JDBC driver to be
JDBC-2 compliant. Specifically, the changes introduced by this
patch are:

1) Statement.executeBatch() no longer commits or rolls back a
transaction, as this is not prescribed by the JDBC spec. Its up
to the application to disable autocommit and to commit or
rollback the transaction. Where JDBC talks about "executing the
statements as a unit", it means executing the statements in one
round trip to the backend for better performance, it does not
mean executing the statements in a transaction.

2) Statement.executeBatch() now throws a BatchUpdateException()
as required by the JDBC spec. The significance of this is that
the receiver of the exception gets the updateCounts of the
commands that succeeded before the error occurred. In order for
the messages to be translatable, java.sql.BatchUpdateException
is extended by org.postgresql.jdbc2.PBatchUpdateException() and
the localization code is factored out from
org.postgresql.util.PSQLException to a separate singleton class
org.postgresql.util.MessageTranslator.

3) When there is no batch or there are 0 statements in the batch
when Statement.executeBatch() is called, do not throw an
SQLException, but silently do nothing and return an update count
array of length 0. The JDBC spec says "Throws an SQLException if
the driver does not support batch statements", which is clearly
not the case. See testExecuteEmptyBatch() in
BatchExecuteTest.java for an example. The message
postgresql.stat.batch.empty is removed from the language
specific properties files.

4) When Statement.executeBatch() is performed, reset the
statement's list of batch commands to empty. The JDBC spec isn't
100% clear about this. This behaviour is only documented in the
Java tutorial
(http://java.sun.com/docs/books/tutorial/jdbc/jdbc2dot0/batchupdates.html).
Note that the Oracle JDBC driver also resets the statement's
list in executeBatch(), and this seems the most reasonable
interpretation.

5) A new test case is added to the JDBC test suite which tests
various aspects of batch processing. See the new file
BatchExecuteTest.java.

Regards,
Ren? Pijlman
2001-09-06 03:11:59 +00:00
Bruce Momjian
e5d3df2019 Apply jdbc error changes. 2001-09-06 03:07:27 +00:00
Bruce Momjian
914eec7d3b Sync up jdbc error files. 2001-09-06 03:03:37 +00:00
Bruce Momjian
37c0b64875 Below is the patch against current cvs for libpgtcl and
two additional files win32.mak and libpgtcl.def.
This patch allows to compile libpgtcl.dll on Windows
with tcl > 8.0. I've tested it on WinNT (VC6.0), SUSE Linux (7.0)
and Solaris 2.6 with tcl 8.3.3.

Mikhail Terekhov
2001-09-06 02:54:56 +00:00
Bruce Momjian
ee0ef05b8d Hello, i just reviewed the win32 errno patch and i saw that maybe i didn't
really played it totally safe in my last suggestion, the system table might
pick up the msg but not the netmsg.dll, so better try both.
I also added a hex printout of the "errno" appended to all messages, that's
nicer.

If anyone hate my coding style, or that i'm using goto constructs, just tell
me, and i'll rework it into a nested if () thing.

Magnus Naeslund(f)
2001-09-06 02:52:00 +00:00
Bruce Momjian
c2ed891512 Overhaul ecpg manual page.
Update Italian jdbc error messages.
2001-09-06 00:23:42 +00:00
Peter Eisentraut
2c3bd9e8f3 /usr/local/bin/perl => /usr/bin/perl 2001-09-04 11:41:04 +00:00
Peter Eisentraut
b1a38a4380 Install the SQL command man pages into a section appropriate for each
system.  Some systems did not understand the 'l' section, and in general
it wasn't entirely appropriate.

On SCO OpenServer, the man pages won't be installed at all until someone
figures out their man system.
2001-08-29 19:14:40 +00:00
Peter Eisentraut
f5944af8ba Include directory rearrangement
Client headers are no longer in a subdirectory, since they have been made
namespace-clean.

Internal libpq headers are in a private subdirectory.

Server headers are in a private subdirectory.  pg_config has a new option
to point there.
2001-08-28 14:20:28 +00:00
Hiroshi Inoue
3fcea502c4 Fix a wrong error handling. 2001-08-28 05:52:13 +00:00
Tom Lane
9d4a45e25c Avoid #ifdef inside printf() ... that loses on platforms where printf()
is a macro.
2001-08-28 02:47:18 +00:00
Peter Eisentraut
87c5e0fa56 Do not install the odbc header files, per discussion on odbc list. 2001-08-27 00:38:55 +00:00
Hiroshi Inoue
af70014686 Fix a complie error on Windows platform. 2001-08-27 00:18:03 +00:00
Peter Eisentraut
ef7152f99b Put the right runpath to libpq into the Perl module shared object on more
platforms and without relinking.

Also support VPATH builds and DESTDIR installs.  One hopes.
2001-08-26 22:28:04 +00:00
Bruce Momjian
3d162c0d1a Please pull this patch. It breaks JDBC1 support. The JDBC1 code no
longer compiles, due to objects being referenced in this patch that do
not exist in JDK1.1.

Barry Lind
---------------------------------------------------------------------------

The JDBC driver requires

  permission java.net.SocketPermission "host:port", "connect";

in the policy file of the application using the JDBC driver
in the postgresql.jar file.  Since the Socket() call in the
driver is not protected by AccessController.doPrivileged() this
permission must also be granted to the entire application.
2001-08-26 17:08:48 +00:00
Bruce Momjian
19a251d0ec >>>>The JDBC driver requires
>>>>
>>>> permission java.net.SocketPermission "host:port", "connect";
>>>>
>>>>in the policy file of the application using the JDBC driver
>>>>in the postgresql.jar file.  Since the Socket() call in the
>>>>driver is not protected by AccessController.doPrivileged() this
>>>>permission must also be granted to the entire application.
>>>>
>>>>The attached diff fixes it so that the connect permission can be
>>>>restricted just the the postgresql.jar codeBase if desired.

David Daney
2001-08-26 01:06:20 +00:00
Bruce Momjian
f478692552 The attached file: SerializePatch2.tgz, contains a patch for
org.postgresql.util.Serialize and org.postgresql.jdbc2.PreparedStatement
that  fixes the ability to "serialize" a simple java class into a
postgres table.

The current cvs seems completely broken in this support, so the patch
puts it  into working condition, granted that there are many limitations
with  serializing java classes into Postgres.

The code to do serialize appears to have been in the driver since
Postgres  6.4, according to some comments in the source.  My code is not
adding any  totally new ability to the driver, rather just fixing what
is there so that  it actually is usable.  I do not think that it should
affect any existing  functions of the driver that people regularly
depend on.

The code is activated if you use jdbc2.PreparedStatement and try to
setObject  some java class type that is unrecognized, like not String or
not some other  primitive type.  This will cause a sequence of function
calls that results in  an instance of Serialize being instantiated for
the class type passed.  The  Serialize constructor will query pg_class
to see if it can find an existing  table that matches the name of the
java class. If found, it will continue and  try to use the table to
store the object, otherwise an SQL exception is  thrown and no harm is
done.  Serialize.create() has to be used to setup the  table for a java
class before anything can really happen with this code other  than an
SQLException (unless by some freak chance a table exists that it  thinks
it can use).

I saw a difference in Serialize.java between 7.1.3 and 7.2devel that I
didn't  notice before, so I had to redo my changes from the 7.2devel
version (why I  had to resend this patch now).  I was missing the
fixString stuff, which is  nice and is imporant to ensure the inserts
will not fail due to embedded  single quote or unescaped backslashes. I
changed that fixString function in  Serialize just a little since there
is no need to muddle with escaping  newlines: only escaping single quote
and literal backslashes is needed.  Postgres appears to insert newlines
within strings without trouble.
2001-08-26 00:54:42 +00:00
Bruce Momjian
a263e39bec Re-apply Array.java patch to new Array.java file to fix compile. 2001-08-25 21:08:24 +00:00
Bruce Momjian
0927d9929a Add MD5 to win32.mak 2001-08-25 03:01:26 +00:00
Bruce Momjian
46d7ae759b Add intended Array.java file that accidentally was patched into the
wrong directory.
2001-08-25 01:35:45 +00:00
Peter Eisentraut
d39ec83cc2 update from Serguei Mokhov 2001-08-25 01:13:29 +00:00
Peter Eisentraut
7e20c35e1c Add ecpg --help and --version. Renumber the exit status codes, which were
documented wrong.
2001-08-24 22:37:36 +00:00
Bruce Momjian
76a6da8a1b Attached is a patch to fix the current issues with building under jdbc1.
This patch moves the logic that looks up TypeOid, PGTypeName, and
SQLTypeName from Field to Connection.  It is moved to connection since
it needs to differ from the jdbc1 to jdbc2 versions and Connection
already has different subclasses for the two driver versions.  It also
made sense to move the logic to Connection as some of the logic was
already there anyway.

Barry Lind
2001-08-24 16:50:18 +00:00
Peter Eisentraut
968d7733a1 Rename config.h to pg_config.h and os.h to pg_config_os.h, fix a number of
places that were including the wrong files.
2001-08-24 14:07:50 +00:00
Bruce Momjian
ef80c87f60 Attached is a simple one line patch for the problem reported in the
following email.

 > > The problem:  When I call getBigDecimal() on a ResultSet, it
 > > sometimes throws an exception:
 > >
 > >   Bad BigDecimal 174.50
 > >     at org.postgresql.jdbc2.ResultSet.getBigDecimal(ResultSet.java:373)
 > >     at org.postgresql.jdbc2.ResultSet.getBigDecimal(ResultSet.java:984)
 > >     ...blah blah blah...
 > >   org.postgresql.util.PSQLException: Bad BigDecimal 174.50

Barry Lind
2001-08-22 13:20:06 +00:00
Bruce Momjian
e8f7bfc095 Here's a resend of the patch.gz. I gunzip'ed it fine here
so it may be a transit problem.  Also removed the 'txt' suffix
in case that was confusing some transport layer trying to be
too inteligent for our own good.

This may have been because the Array.java class from the
previous patch didn't seem to have made it into the snapshot
build for some reason.  This patch should at least fix that issue.

Greg Zoller
2001-08-21 21:29:42 +00:00
Bruce Momjian
5db5c2db61 > Ok, where's a "system dependent hack" :)
> It seems that win9x doesn't have the "netmsg.dll" so it defaults to "normal"
> FormatMessage.
> I wonder if one could load wsock32.dll or winsock.dll on those systems
> instead of netmsg.dll.
>
> Mikhail, could you please test this code on your nt4 system?
> Could someone else test this code on a win98/95 system?
>
> It works on win2k over here.

It works on win2k here too but not on win98/95 or winNT.
Anyway, attached is the patch which uses Magnus's my_sock_strerror
function (renamed to winsock_strerror). The only difference is that
I put the code to load and unload netmsg.dll in the libpqdll.c
(is this OK Magnus?).

Mikhail Terekhov
2001-08-21 20:39:54 +00:00
Bruce Momjian
8dbaca424f Fix SCM_CREDS for FreeBSD, from Teodor Sigaev. 2001-08-21 15:49:17 +00:00
Bruce Momjian
2a9bfb1f0d Add new jdbc array file. 2001-08-21 15:26:55 +00:00
Bruce Momjian
f00caec541 Add ECPGd_cardinality to end of enum list so ecpg compiles. 2001-08-21 15:24:07 +00:00
Bruce Momjian
9bee8a1fd9 Add missing include for SCM_CREDS. 2001-08-21 15:21:25 +00:00
Hiroshi Inoue
c2f5d08c11 Fix a lot of compile errors on unix.
Fix '\\' handling for bytea type.
2001-08-21 05:21:09 +00:00
Bruce Momjian
44ae35cab9 >
> Shouldn't
>
>    throw new PSQLException("metadata unavailable");
>
> in getTypeInfo() be something like:
>
>    throw new PSQLException("postgresql.meta.unavailable");
>
> to allow translation of the error message in the
> errors*.properties files?

You're right. Attached is an updated patch that also includes a message
in error.properties. I've attempted a French message in
errors_fr.properties but beware that I haven't written French in quite a
few years. Don't know Italian, German, or Dutch so I can't do those.

Liam Stewart
2001-08-21 00:37:23 +00:00
Bruce Momjian
bca9d0cdf4 Add SCM_CREDS to get owner of unix-domain socket on BSD-like systems. 2001-08-21 00:33:28 +00:00
Michael Meskes
db07a3f47f - Synced preproc.y with gram.y.
- Include some patches by Christof Petig <christof.petig@wtal.de>.
2001-08-19 09:21:45 +00:00
Hiroshi Inoue
0c439e5ef6 1) Change all internal SQL function calls from
SQLxxxx() to PGAPI_xxxx().
2) Handle an escaped date/time format as a parameter.
3) Improve the tuple allocation a little.
4) The preparation of ODBC 3.0 a little.
5) Updatable cursors(may be deprecated before long).
2001-08-18 04:30:47 +00:00
Bruce Momjian
0a3094b6f3 Reorder MD5/crypt so MD5 comes first in the code. 2001-08-17 15:40:07 +00:00
Bruce Momjian
2637f887e7 Remove some unneeded dashes from libpq comments. 2001-08-17 15:11:15 +00:00
Bruce Momjian
27c272917a Add \n to libpq print output where needed. 2001-08-17 15:02:18 +00:00
Bruce Momjian
955040943a This patch updates some comments in the DatabaseMetaData classes to
reflect a mail thread that discussed our conformance (or lack thereof)
to the SQL92 spec.

Barry Lind
2001-08-17 14:46:22 +00:00
Bruce Momjian
a21c096058 Thanks for your feedback (and patience). Enclosed is my third
attempt at a patch to 7.1.2 to support Array.

[I think I've solved the mangled patch problem.  Hotmail seems to
try to format the text file, so gzipping it should solve this
problem.]

In this patch I've incorporated Barry's feedback.  Specifically:

1)  OIDs are no longer hard-coded into Array.java.  In order to
    support this change I added a getOID(String) method to Field.java
    which receives a PostgreSQL field type and returns a value from
    java.sql.Types.  I couldn't get away from using OIDs altogether
    because the JDBC spec for Array specifies that some methods return
    a ResultSet.  This requires I construct Field objects,
    which means I need OIDs.  At least this approach doesn't hard
    code these values.  A Hashtable cache has been added to Field
    so that an SQL lookup isn't necessary (following the model already
    in Field.java).

2)  Rewired the base formatting code in ResultSet.java to use 'to'
    methods, which are then exposed as static methods in ResultSet.
    These methods are used in Array to format the data without
    duplications in the code.

3)  Artifact call to first() in ResultSet.getArray() removed.

Greg Zoller
2001-08-17 14:45:49 +00:00
Bruce Momjian
1ebbfc150a Attached is the patch requested by Tom Lane (see below). It
includes two changes in the JDBC driver:

1) When connected to a backend >= 7.2: use obj_description() and
col_description() instead of direct access to pg_description.

2) In DatabaseMetaData.getTables()/getColumns()/getProcedures():
when there is no comment on the object, return null in the
REMARKS column of the ResultSet, instead of the default string
"no remarks".

Change 2 first appeared as a side-effect of change 1, but it is
actually more compliant with the JDBC spec: "String object
containing an explanatory comment on the table/column/procedure,
which may be null". The default string "no remarks" was strictly
speaking incorrect, as it could not be distinguished from a real
user comment "no remarks". So I removed the default string
completely.

Change 2 might break existing code that doesn't follow the JDBC
spec and isn't prepared to handle a null in the REMARKS column
of getTables()/getColumns()/getProcedures.

Patch tested with jdbc2 against both a 7.1 and a CVS tip
backend. I did not have a jdbc1 environment to build and test
with, but since the touched code is identical in jdbc1 and jdbc2
I don't foresee any problems.

Regards,
Ren? Pijlman
2001-08-17 13:59:29 +00:00
Bruce Momjian
b5453fae74 Force crypt() salt to be null-terminated. 2001-08-17 03:09:31 +00:00
Bruce Momjian
da45a0bdb7 Add 4-byte MD5 salt. 2001-08-17 02:59:20 +00:00
Tom Lane
d4f4b971a4 Sequences are now based on int8, not int4, arithmetic. SERIAL pseudo-type
has an alias SERIAL4 and a sister SERIAL8.  SERIAL8 is just the same
except the created column is type int8 not int4.
initdb forced.  Note this also breaks any chance of pg_upgrade from 7.1,
unless we hack up pg_upgrade to drop and recreate sequences.  (Which is
not out of the question, but I don't wanna do it.)
2001-08-16 20:38:56 +00:00
Bruce Momjian
f7eedfdff2 This patch fixes the well-known but unfixed bug that fetchone() always returns
the first result in the DB-API compliant wrapper. It turned out that the bug
was way down in the C code.

Gerhard Häring
2001-08-16 15:21:16 +00:00
Bruce Momjian
cd6868176e Remove protocol version change. Try MD5 first, then crypt() on all clients. 2001-08-16 04:27:18 +00:00
Bruce Momjian
d4fb1b2388 Move md5.h contents to crypt.h. 2001-08-15 21:08:21 +00:00
Bruce Momjian
38bb1abcda Use MD5 for wire protocol encryption for >= 7.2 client/server.
Allow pg_shadow to be MD5 encrypted.
Add ENCRYPTED/UNENCRYPTED option to CREATE/ALTER user.
Add password_encryption postgresql.conf option.
Update wire protocol version to 2.1.
2001-08-15 18:42:16 +00:00