summaryrefslogtreecommitdiff
path: root/src/interfaces/jdbc/postgresql
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>1998-09-03 02:29:45 +0000
committerBruce Momjian <bruce@momjian.us>1998-09-03 02:29:45 +0000
commitc37adac74e7aced5eb3e562e2fa05b4f07da41e0 (patch)
tree1a1ca154747bdbd9b4f1a8fe9c2cf4c07661447a /src/interfaces/jdbc/postgresql
parentd318315200e31b886b57caeeb4d4ea81112730aa (diff)
downloadpostgresql-c37adac74e7aced5eb3e562e2fa05b4f07da41e0.tar.gz
New stuff for 6.4 jdbc.
Peter mount
Diffstat (limited to 'src/interfaces/jdbc/postgresql')
-rw-r--r--src/interfaces/jdbc/postgresql/ChangeLog78
-rw-r--r--src/interfaces/jdbc/postgresql/geometric/PGline.java103
-rw-r--r--src/interfaces/jdbc/postgresql/util/PGmoney.data85
3 files changed, 266 insertions, 0 deletions
diff --git a/src/interfaces/jdbc/postgresql/ChangeLog b/src/interfaces/jdbc/postgresql/ChangeLog
new file mode 100644
index 0000000000..1a43c1f819
--- /dev/null
+++ b/src/interfaces/jdbc/postgresql/ChangeLog
@@ -0,0 +1,78 @@
+Modifications done since 6.3.2 was released and Sun Aug 30 11:33:06 BST 1998
+
+ - Fixed PreparedStatement.setObject as it didn't handle shorts
+ - ResultSet.getDate() now handles null dates (returns null ratrher
+ than a NullPointerException)
+ - ResultSetMetaData.getPrecision() new returns 0 for VARCHAR
+ - Field now caches the typename->oid in a Hashtable to speed things
+ up. It removes the need for some unnecessary queries to the backend.
+ - PreparedStatement.toString() now returns the SQL statement that it
+ will send to the backend. Before it did nothing.
+ - DatabaseMetaData.getTypeInfo() now does something.
+ - Connection now throws an exception if either of the user or password
+ properties are missing, as they are required for JDBC to work.
+ This occasionally occurs when the client uses the properties version
+ of getConnection(), and is a common question on the email lists.
+
+Sun Aug 30 11:33:06 BST 1998
+
+ - Created ChangeLog file, and entered stuff done since 6.3.2 and today
+ - Change version number to 6.4 in Driver.java
+ - Added fix to DatabaseMetaData.getTables() submitted by
+ Stefan Andreasen <stefan@linux.kapow.dk>
+ - Added fix to DatabaseMetaData.getColumns() to handle patterns
+ submitted by Stefan Andreasen <stefan@linux.kapow.dk>
+ - Set TcpNoDelay on the connection, as this gives us a 10x speed
+ improvement on FreeBSD (caused by a bug in their TCP Stack). They
+ should fix the bug before 6.4 is released, but will keep this
+ in here unless it causes more problems.
+ Submitted by Jason Venner <jason@idiom.com>
+ - Removed a duplicate definition of fieldCache
+ - Added a more meaningful message when the connection is refused. It
+ now says:
+ Connection refused. Check that the hostname and port is
+ correct, and that the postmaster is running with the -i flag,
+ which enables TCP/IP networking.
+ - Removed kludge in PreparedStatement.setDate() that acted as a
+ temporary fix to a bug in SimpleDateFormat, as it broke date
+ handling in JDK 1.1.6.
+ - Modified PG_Stream and Connection, so that outbound data is now
+ buffered. This should give us a speed improvement, and reduce the
+ ammount of network packets generated.
+ - Removed duplicate code and optimised PG_Stream.
+ - PG_Stream now returns a more meaningful message when the connection
+ is broken by the backend. It now returns:
+ The backend has broken the connection. Possibly the action you
+ have attempted has caused it to close.
+ - Removed obsolete code from Connection.
+ - The error message returned when the authentication scheme is unknown
+ has been extended. It now reads:
+ Authentication type ### not supported. Check that you have
+ configured the pg_hba.conf file to include the client's IP
+ address or Subnet, and is using a supported authentication
+ scheme.
+ - Connection.getMetaData() now caches the instance returned, so
+ multiple calls will return the same instance.
+ - Created a test application that tests the DatabaseMetaData and
+ ResultSetMetaData classes.
+ - Replaced getString(#).getBytes() with getBytes(#) which should speed
+ things up, and reduce memory useage.
+ - Optimised DatabaseMetaData.getProcedures(), and implemented patterns
+ - Fixed NullPointerExceptions thrown when a field is null (Internal
+ to the driver, not caused by results from the backend.
+ DatabaseMetaData.getProcedures() is an example of a method that
+ causes this):
+ - ResultSetMetaData.getColumnName() now returns field# where
+ # is the column name.
+ - ResultSet.getObject() fixed
+ - Fixed bug in psql example that was affected by null fields
+ - DatabaseMetaData.getTables()
+ - DatabaseMetaData.getPrimaryKeys() ran a query with an ambiguous field
+ fixed.
+ - getTypeInfo() optimised to increase speed and reduce memory useage
+ - ResultSetMetaData.isCurrency() optimised and is now smaller.
+ - Removed unnecessary code fromResultSetMetaData.getCatalogName()
+ and getSchemaName().
+ - Created new class postgresql.util.PGmoney to map the money type
+ - Created new class postgresql.geometric.PGline to map the line type
+ \ No newline at end of file
diff --git a/src/interfaces/jdbc/postgresql/geometric/PGline.java b/src/interfaces/jdbc/postgresql/geometric/PGline.java
new file mode 100644
index 0000000000..a419ffb5a1
--- /dev/null
+++ b/src/interfaces/jdbc/postgresql/geometric/PGline.java
@@ -0,0 +1,103 @@
+package postgresql.geometric;
+
+import java.io.*;
+import java.sql.*;
+import postgresql.util.*;
+
+/**
+ * This implements a line consisting of two points.
+ *
+ * Currently line is not yet implemented in the backend, but this class
+ * ensures that when it's done were ready for it.
+ */
+public class PGline extends PGobject implements Serializable,Cloneable
+{
+ /**
+ * These are the two points.
+ */
+ public PGpoint point[] = new PGpoint[2];
+
+ /**
+ * @param x1 coordinate for first point
+ * @param y1 coordinate for first point
+ * @param x2 coordinate for second point
+ * @param y2 coordinate for second point
+ */
+ public PGline(double x1,double y1,double x2,double y2)
+ {
+ this(new PGpoint(x1,y1),new PGpoint(x2,y2));
+ }
+
+ /**
+ * @param p1 first point
+ * @param p2 second point
+ */
+ public PGline(PGpoint p1,PGpoint p2)
+ {
+ this();
+ this.point[0] = p1;
+ this.point[1] = p2;
+ }
+
+ /**
+ * @param s definition of the circle in PostgreSQL's syntax.
+ * @exception SQLException on conversion failure
+ */
+ public PGline(String s) throws SQLException
+ {
+ this();
+ setValue(s);
+ }
+
+ /**
+ * reuired by the driver
+ */
+ public PGline()
+ {
+ setType("line");
+ }
+
+ /**
+ * @param s Definition of the line segment in PostgreSQL's syntax
+ * @exception SQLException on conversion failure
+ */
+ public void setValue(String s) throws SQLException
+ {
+ PGtokenizer t = new PGtokenizer(PGtokenizer.removeBox(s),',');
+ if(t.getSize() != 2)
+ throw new SQLException("conversion of line failed - "+s);
+
+ point[0] = new PGpoint(t.getToken(0));
+ point[1] = new PGpoint(t.getToken(1));
+ }
+
+ /**
+ * @param obj Object to compare with
+ * @return true if the two boxes are identical
+ */
+ public boolean equals(Object obj)
+ {
+ if(obj instanceof PGline) {
+ PGline p = (PGline)obj;
+ return (p.point[0].equals(point[0]) && p.point[1].equals(point[1])) ||
+ (p.point[0].equals(point[1]) && p.point[1].equals(point[0]));
+ }
+ return false;
+ }
+
+ /**
+ * This must be overidden to allow the object to be cloned
+ */
+ public Object clone()
+ {
+ return new PGline((PGpoint)point[0].clone(),(PGpoint)point[1].clone());
+ }
+
+ /**
+ * @return the PGline in the syntax expected by postgresql
+ */
+ public String getValue()
+ {
+ return "["+point[0]+","+point[1]+"]";
+ }
+}
diff --git a/src/interfaces/jdbc/postgresql/util/PGmoney.data b/src/interfaces/jdbc/postgresql/util/PGmoney.data
new file mode 100644
index 0000000000..7d9ebf995a
--- /dev/null
+++ b/src/interfaces/jdbc/postgresql/util/PGmoney.data
@@ -0,0 +1,85 @@
+package postgresql.util;
+
+import java.io.*;
+import java.sql.*;
+
+/**
+ * This implements a class that handles the PostgreSQL money and cash types
+ */
+public class PGmoney extends PGobject implements Serializable,Cloneable
+{
+ /**
+ * The value of the field
+ */
+ public double val;
+
+ /**
+ * @param value of field
+ */
+ public PGmoney(double value) {
+ this();
+ val = value;
+ }
+
+ /**
+ * This is called mainly from the other geometric types, when a
+ * point is imbeded within their definition.
+ *
+ * @param value Definition of this point in PostgreSQL's syntax
+ */
+ public PGmoney(String value) throws SQLException
+ {
+ this();
+ setValue(value);
+ }
+
+ /**
+ * Required by the driver
+ */
+ public PGmoney()
+ {
+ setType("money");
+ }
+
+ /**
+ * @param s Definition of this point in PostgreSQL's syntax
+ * @exception SQLException on conversion failure
+ */
+ public void setValue(String s) throws SQLException
+ {
+ try {
+ val = Double.valueOf(s.substring(1)).doubleValue();
+ } catch(NumberFormatException e) {
+ throw new SQLException("conversion of money failed - "+e.toString());
+ }
+ }
+
+ /**
+ * @param obj Object to compare with
+ * @return true if the two boxes are identical
+ */
+ public boolean equals(Object obj)
+ {
+ if(obj instanceof PGmoney) {
+ PGmoney p = (PGmoney)obj;
+ return val == p.val;
+ }
+ return false;
+ }
+
+ /**
+ * This must be overidden to allow the object to be cloned
+ */
+ public Object clone()
+ {
+ return new PGmoney(val);
+ }
+
+ /**
+ * @return the PGpoint in the syntax expected by postgresql
+ */
+ public String getValue()
+ {
+ return "$"+val;
+ }
+}