Patch: java.math.BigDecimal, JDK 1.1 compliant java.sql, misc.

Warren Levy warrenl@cygnus.com
Tue Apr 11 02:20:00 GMT 2000


Folks,
I'm checking in a JDK 1.1 compliant version of java.sql (the Classpath
code massaged to be 1.1 compliant), along with their java.math.BigDecimal,
a few java.io exceptions, a safeguard-type patch to 
java.net.MulticastSocket.java, and I turned on the appropriate Mauve tests
for the new functionality.  

BTW, the reason to include a 1.1 compliant version of java.sql was a 
decision to get some java.sql package in sourceware (we're still missing
some of the support in libgcj that would have allowed the 1.2 code to
be checked in).  Hopefully, we'll have that in soon.

Enjoy!
--warrenl


2000-04-10  Warren Levy  <warrenl@cygnus.com>

        * java/io/ObjectStreamException.java: New file.
        * java/io/OptionalDataException.java: New file.
        * java/io/StreamCorruptedException.java: New file.
        * java/math/BigDecimal.java: New file.
        * java/sql/CallableStatement.java: New file.
        * java/sql/Connection.java: New file.
        * java/sql/DataTruncation.java: New file.
        * java/sql/DatabaseMetaData.java: New file.
        * java/sql/Date.java: New file.
        * java/sql/Driver.java: New file.
        * java/sql/DriverManager.java: New file.
        * java/sql/DriverPropertyInfo.java: New file.
        * java/sql/PreparedStatement.java: New file.
        * java/sql/ResultSet.java: New file.
        * java/sql/ResultSetMetaData.java: New file.
        * java/sql/SQLException.java: New file.
        * java/sql/SQLWarning.java: New file.
        * java/sql/Statement.java: New file.
        * java/sql/Time.java: New file.
        * java/sql/Timestamp.java: New file.
        * java/sql/Types.java: New file.
        * Makefile.am: Added above new files.
        * Makefile.in: Rebuilt.

        * mauve-libgcj: Turned on java.math, java.sql and java.security tests.
        * java/net/MulticastSocket.java (MulticastSocket): Pass values a la
        DatagramSocket constructor instead of null.



Index: Makefile.am
===================================================================
RCS file: /cvs/java/libgcj/libjava/Makefile.am,v
retrieving revision 1.57
diff -u -p -r1.57 Makefile.am
--- Makefile.am	2000/04/09 04:13:27	1.57
+++ Makefile.am	2000/04/11 09:04:06
@@ -632,6 +632,8 @@ java/io/InputStreamReader.java \
 java/io/InterruptedIOException.java \
 java/io/LineNumberInputStream.java \
 java/io/LineNumberReader.java \
+java/io/ObjectStreamException.java \
+java/io/OptionalDataException.java \
 java/io/OutputStream.java \
 java/io/OutputStreamWriter.java	\
 java/io/PipedInputStream.java \
@@ -646,6 +648,7 @@ java/io/RandomAccessFile.java \
 java/io/Reader.java \
 java/io/SequenceInputStream.java \
 java/io/Serializable.java \
+java/io/StreamCorruptedException.java \
 java/io/StreamTokenizer.java \
 java/io/StringBufferInputStream.java \
 java/io/StringReader.java \
@@ -731,6 +734,7 @@ java/lang/reflect/InvocationTargetExcept
 java/lang/reflect/Member.java \
 java/lang/reflect/Method.java \
 java/lang/reflect/Modifier.java	\
+java/math/BigDecimal.java \
 java/math/BigInteger.java \
 java/net/BindException.java \
 java/net/ConnectException.java \
@@ -800,6 +804,23 @@ java/security/spec/KeySpec.java \
 java/security/spec/RSAPrivateCrtKeySpec.java \
 java/security/spec/RSAPrivateKeySpec.java \
 java/security/spec/RSAPublicKeySpec.java \
+java/sql/CallableStatement.java \
+java/sql/Connection.java \
+java/sql/DataTruncation.java \
+java/sql/DatabaseMetaData.java \
+java/sql/Date.java \
+java/sql/Driver.java \
+java/sql/DriverManager.java \
+java/sql/DriverPropertyInfo.java \
+java/sql/PreparedStatement.java \
+java/sql/ResultSet.java \
+java/sql/ResultSetMetaData.java \
+java/sql/SQLException.java \
+java/sql/SQLWarning.java \
+java/sql/Statement.java \
+java/sql/Time.java \
+java/sql/Timestamp.java \
+java/sql/Types.java \
 java/text/BreakIterator.java \
 java/text/CharacterIterator.java \
 java/text/ChoiceFormat.java \
Index: Makefile.in
===================================================================
RCS file: /cvs/java/libgcj/libjava/Makefile.in,v
retrieving revision 1.62
diff -u -p -r1.62 Makefile.in
--- Makefile.in	2000/04/09 04:13:27	1.62
+++ Makefile.in	2000/04/11 09:04:06
@@ -84,6 +84,7 @@ GCOBJS = @GCOBJS@
 GCSPEC = @GCSPEC@
 GCTESTSPEC = @GCTESTSPEC@
 INCLTDL = @INCLTDL@
+LD = @LD@
 LIBDATASTARTSPEC = @LIBDATASTARTSPEC@
 LIBGCJTESTSPEC = @LIBGCJTESTSPEC@
 LIBGCJ_CFLAGS = @LIBGCJ_CFLAGS@
@@ -94,7 +95,6 @@ LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
-OBJDUMP = @OBJDUMP@
 PACKAGE = @PACKAGE@
 PERL = @PERL@
 RANLIB = @RANLIB@
@@ -104,6 +104,7 @@ THREADINCS = @THREADINCS@
 THREADLIBS = @THREADLIBS@
 THREADOBJS = @THREADOBJS@
 THREADSPEC = @THREADSPEC@
+USE_SYMBOL_UNDERSCORE = @USE_SYMBOL_UNDERSCORE@
 VERSION = @VERSION@
 ZDEPS = @ZDEPS@
 ZINCS = @ZINCS@
@@ -433,6 +434,8 @@ java/io/InputStreamReader.java \
 java/io/InterruptedIOException.java \
 java/io/LineNumberInputStream.java \
 java/io/LineNumberReader.java \
+java/io/ObjectStreamException.java \
+java/io/OptionalDataException.java \
 java/io/OutputStream.java \
 java/io/OutputStreamWriter.java	\
 java/io/PipedInputStream.java \
@@ -447,6 +450,7 @@ java/io/RandomAccessFile.java \
 java/io/Reader.java \
 java/io/SequenceInputStream.java \
 java/io/Serializable.java \
+java/io/StreamCorruptedException.java \
 java/io/StreamTokenizer.java \
 java/io/StringBufferInputStream.java \
 java/io/StringReader.java \
@@ -532,6 +536,7 @@ java/lang/reflect/InvocationTargetExcept
 java/lang/reflect/Member.java \
 java/lang/reflect/Method.java \
 java/lang/reflect/Modifier.java	\
+java/math/BigDecimal.java \
 java/math/BigInteger.java \
 java/net/BindException.java \
 java/net/ConnectException.java \
@@ -601,6 +606,23 @@ java/security/spec/KeySpec.java \
 java/security/spec/RSAPrivateCrtKeySpec.java \
 java/security/spec/RSAPrivateKeySpec.java \
 java/security/spec/RSAPublicKeySpec.java \
+java/sql/CallableStatement.java \
+java/sql/Connection.java \
+java/sql/DataTruncation.java \
+java/sql/DatabaseMetaData.java \
+java/sql/Date.java \
+java/sql/Driver.java \
+java/sql/DriverManager.java \
+java/sql/DriverPropertyInfo.java \
+java/sql/PreparedStatement.java \
+java/sql/ResultSet.java \
+java/sql/ResultSetMetaData.java \
+java/sql/SQLException.java \
+java/sql/SQLWarning.java \
+java/sql/Statement.java \
+java/sql/Time.java \
+java/sql/Timestamp.java \
+java/sql/Types.java \
 java/text/BreakIterator.java \
 java/text/CharacterIterator.java \
 java/text/ChoiceFormat.java \
@@ -833,7 +855,7 @@ libgcj.spec.in
 
 DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
 
-TAR = tar
+TAR = gtar
 GZIP_ENV = --best
 DIST_SUBDIRS =  @DIRLTDL@ testsuite gcj include @DIRLTDL@ gcj include
 DEP_FILES =  .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
@@ -931,13 +953,15 @@ DEP_FILES =  .deps/$(srcdir)/$(CONVERT_D
 .deps/java/io/InputStream.P .deps/java/io/InputStreamReader.P \
 .deps/java/io/InterruptedIOException.P \
 .deps/java/io/LineNumberInputStream.P .deps/java/io/LineNumberReader.P \
-.deps/java/io/OutputStream.P .deps/java/io/OutputStreamWriter.P \
-.deps/java/io/PipedInputStream.P .deps/java/io/PipedOutputStream.P \
-.deps/java/io/PipedReader.P .deps/java/io/PipedWriter.P \
-.deps/java/io/PrintStream.P .deps/java/io/PrintWriter.P \
-.deps/java/io/PushbackInputStream.P .deps/java/io/PushbackReader.P \
-.deps/java/io/RandomAccessFile.P .deps/java/io/Reader.P \
-.deps/java/io/SequenceInputStream.P .deps/java/io/Serializable.P \
+.deps/java/io/ObjectStreamException.P \
+.deps/java/io/OptionalDataException.P .deps/java/io/OutputStream.P \
+.deps/java/io/OutputStreamWriter.P .deps/java/io/PipedInputStream.P \
+.deps/java/io/PipedOutputStream.P .deps/java/io/PipedReader.P \
+.deps/java/io/PipedWriter.P .deps/java/io/PrintStream.P \
+.deps/java/io/PrintWriter.P .deps/java/io/PushbackInputStream.P \
+.deps/java/io/PushbackReader.P .deps/java/io/RandomAccessFile.P \
+.deps/java/io/Reader.P .deps/java/io/SequenceInputStream.P \
+.deps/java/io/Serializable.P .deps/java/io/StreamCorruptedException.P \
 .deps/java/io/StreamTokenizer.P .deps/java/io/StringBufferInputStream.P \
 .deps/java/io/StringReader.P .deps/java/io/StringWriter.P \
 .deps/java/io/SyncFailedException.P \
@@ -1015,12 +1039,13 @@ DEP_FILES =  .deps/$(srcdir)/$(CONVERT_D
 .deps/java/lang/w_exp.P .deps/java/lang/w_fmod.P \
 .deps/java/lang/w_log.P .deps/java/lang/w_pow.P \
 .deps/java/lang/w_remainder.P .deps/java/lang/w_sqrt.P \
-.deps/java/math/BigInteger.P .deps/java/net/BindException.P \
-.deps/java/net/ConnectException.P .deps/java/net/ContentHandler.P \
-.deps/java/net/ContentHandlerFactory.P .deps/java/net/DatagramPacket.P \
-.deps/java/net/DatagramSocket.P .deps/java/net/DatagramSocketImpl.P \
-.deps/java/net/FileNameMap.P .deps/java/net/HttpURLConnection.P \
-.deps/java/net/InetAddress.P .deps/java/net/JarURLConnection.P \
+.deps/java/math/BigDecimal.P .deps/java/math/BigInteger.P \
+.deps/java/net/BindException.P .deps/java/net/ConnectException.P \
+.deps/java/net/ContentHandler.P .deps/java/net/ContentHandlerFactory.P \
+.deps/java/net/DatagramPacket.P .deps/java/net/DatagramSocket.P \
+.deps/java/net/DatagramSocketImpl.P .deps/java/net/FileNameMap.P \
+.deps/java/net/HttpURLConnection.P .deps/java/net/InetAddress.P \
+.deps/java/net/JarURLConnection.P \
 .deps/java/net/MalformedURLException.P .deps/java/net/MulticastSocket.P \
 .deps/java/net/NoRouteToHostException.P \
 .deps/java/net/PlainDatagramSocketImpl.P \
@@ -1065,6 +1090,14 @@ DEP_FILES =  .deps/$(srcdir)/$(CONVERT_D
 .deps/java/security/spec/RSAPrivateCrtKeySpec.P \
 .deps/java/security/spec/RSAPrivateKeySpec.P \
 .deps/java/security/spec/RSAPublicKeySpec.P \
+.deps/java/sql/CallableStatement.P .deps/java/sql/Connection.P \
+.deps/java/sql/DataTruncation.P .deps/java/sql/DatabaseMetaData.P \
+.deps/java/sql/Date.P .deps/java/sql/Driver.P \
+.deps/java/sql/DriverManager.P .deps/java/sql/DriverPropertyInfo.P \
+.deps/java/sql/PreparedStatement.P .deps/java/sql/ResultSet.P \
+.deps/java/sql/ResultSetMetaData.P .deps/java/sql/SQLException.P \
+.deps/java/sql/SQLWarning.P .deps/java/sql/Statement.P \
+.deps/java/sql/Time.P .deps/java/sql/Timestamp.P .deps/java/sql/Types.P \
 .deps/java/text/BreakIterator.P .deps/java/text/CharacterIterator.P \
 .deps/java/text/ChoiceFormat.P \
 .deps/java/text/CollationElementIterator.P \
Index: mauve-libgcj
===================================================================
RCS file: /cvs/java/libgcj/libjava/mauve-libgcj,v
retrieving revision 1.12
diff -u -p -r1.12 mauve-libgcj
--- mauve-libgcj	2000/01/07 20:42:26	1.12
+++ mauve-libgcj	2000/04/11 09:04:06
@@ -11,10 +11,10 @@ java.lang.Character.classify12
 java.lang.String.hash
 # We support 1.2 for this test.
 java.lang.reflect.Modifier.toString12
-!java.math
+java.math
 !java.rmi
-!java.security
-!java.sql
+java.security
+java.sql
 java.text.FieldPosition.Test
 java.text.ParsePosition.Test
 java.text.SimpleDateFormat.getAndSet2DigitYearStart
Index: java/io/ObjectStreamException.java
===================================================================
RCS file: ObjectStreamException.java
diff -N ObjectStreamException.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ ObjectStreamException.java	Tue Apr 11 02:04:06 2000
@@ -0,0 +1,31 @@
+/* Copyright (C) 2000  Free Software Foundation
+
+   This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+details.  */
+
+package java.io;
+
+/**
+ * @author Warren Levy <warrenl@cygnus.com>
+ * @date February 7, 2000.
+ */
+
+/* Written using on-line Java Platform 1.2 API Specification.
+ * Status:  Believed complete and correct.
+ */
+
+public abstract class ObjectStreamException extends IOException
+{
+  public ObjectStreamException()
+  {
+    super();
+  }
+
+  public ObjectStreamException(String msg)
+  {
+    super(msg);
+  }
+}
Index: java/io/OptionalDataException.java
===================================================================
RCS file: OptionalDataException.java
diff -N OptionalDataException.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ OptionalDataException.java	Tue Apr 11 02:04:06 2000
@@ -0,0 +1,31 @@
+/* Copyright (C) 2000  Free Software Foundation
+
+   This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+details.  */
+
+package java.io;
+
+/**
+ * @author Warren Levy <warrenl@cygnus.com>
+ * @date February 7, 2000.
+ */
+
+/* Written using on-line Java Platform 1.2 API Specification.
+ * Status:  Believed complete and correct.
+ */
+
+public class OptionalDataException extends ObjectStreamException
+{
+  public OptionalDataException()
+  {
+    super();
+  }
+
+  public OptionalDataException(String msg)
+  {
+    super(msg);
+  }
+}
Index: java/io/StreamCorruptedException.java
===================================================================
RCS file: StreamCorruptedException.java
diff -N StreamCorruptedException.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ StreamCorruptedException.java	Tue Apr 11 02:04:06 2000
@@ -0,0 +1,31 @@
+/* Copyright (C) 2000  Free Software Foundation
+
+   This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+details.  */
+
+package java.io;
+
+/**
+ * @author Warren Levy <warrenl@cygnus.com>
+ * @date February 7, 2000.
+ */
+
+/* Written using on-line Java Platform 1.2 API Specification.
+ * Status:  Believed complete and correct.
+ */
+
+public class StreamCorruptedException extends ObjectStreamException
+{
+  public StreamCorruptedException()
+  {
+    super();
+  }
+
+  public StreamCorruptedException(String msg)
+  {
+    super(msg);
+  }
+}
Index: java/math/BigDecimal.java
===================================================================
RCS file: BigDecimal.java
diff -N BigDecimal.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ BigDecimal.java	Tue Apr 11 02:04:07 2000
@@ -0,0 +1,348 @@
+/* java.math.BigDecimal -- Arbitrary precision decimals.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+package java.math;
+
+import java.math.BigInteger;
+
+public class BigDecimal extends Number implements Comparable {
+  BigInteger num;
+  int scale;
+
+  private final static BigDecimal ZERO = 
+    new BigDecimal (BigInteger.valueOf (0), 0);
+
+  private final static BigDecimal ONE = 
+    new BigDecimal (BigInteger.valueOf (1), 0);
+
+  public final static int ROUND_UP = 0;
+  public final static int ROUND_DOWN = 1;
+  public final static int ROUND_CEILING = 2;
+  public final static int ROUND_FLOOR = 3;
+  public final static int ROUND_HALF_UP = 4;
+  public final static int ROUND_HALF_DOWN = 5;
+  public final static int ROUND_HALF_EVEN = 6;
+  public final static int ROUND_UNNECESSARY = 7;
+
+  public BigDecimal (BigInteger num) 
+  {
+    this (num, 0);
+  }
+
+  public BigDecimal (BigInteger num, int scale) throws NumberFormatException 
+  {
+    if (scale < 0) 
+      throw new NumberFormatException ("scale of " + scale + " is < 0");
+    this.num = num;
+    this.scale = scale;
+  }
+
+  public BigDecimal (double num) throws NumberFormatException 
+  {
+    this (Double.toString (num));
+  }
+
+  public BigDecimal (String num) throws NumberFormatException 
+  {
+    int point = num.indexOf('.');
+    this.num = new BigInteger (point == -1 ? num :
+			       num.substring (0, point) + 
+			       num.substring (point + 1));
+    scale = num.length() - (point == -1 ? num.length () : point + 1);
+  }
+
+  public static BigDecimal valueOf (long val) 
+  {
+    return valueOf (val, 0);
+  }
+
+  public static BigDecimal valueOf (long val, int scale) 
+    throws NumberFormatException 
+  {
+    if (scale == 0)
+      switch ((int) val)
+	{
+	case 0:
+	  return ZERO;
+	case 1:
+	  return ONE;
+	}
+
+    return new BigDecimal (BigInteger.valueOf (val), scale);
+  }
+
+  public BigDecimal add (BigDecimal val) 
+  {
+    // For addition, need to line up decimals.  Note that the movePointRight
+    // method cannot be used for this as it might return a BigDecimal with
+    // scale == 0 instead of the scale we need.
+    BigInteger op1 = num;
+    BigInteger op2 = val.num;
+    if (scale < val.scale)
+      op1 = op1.multiply (BigInteger.valueOf (10).pow (val.scale - scale));
+    else if (scale > val.scale)
+      op2 = op2.multiply (BigInteger.valueOf (10).pow (scale - val.scale));
+
+    return new BigDecimal (op1.add (op2), Math.max (scale, val.scale));
+  }
+
+  public BigDecimal subtract (BigDecimal val) 
+  {
+    return this.add(val.negate());
+  }
+
+  public BigDecimal multiply (BigDecimal val) 
+  {
+    return new BigDecimal (num.multiply (val.num), scale + val.scale);
+  }
+
+  public BigDecimal divide (BigDecimal val, int roundingMode) 
+    throws ArithmeticException, IllegalArgumentException 
+  {
+    return divide (val, scale, roundingMode);
+  }
+
+  public BigDecimal divide(BigDecimal val, int newScale, int roundingMode)
+    throws ArithmeticException, IllegalArgumentException 
+  {
+    if (roundingMode < 0 || roundingMode > 7)
+      throw 
+	new IllegalArgumentException("illegal rounding mode: " + roundingMode);
+
+    if (scale < 0)
+      throw new ArithmeticException ("scale is negative: " + scale);
+
+    if (num.signum () == 0)	// handle special case of 0.0/0.0
+      return ZERO;
+    
+    BigInteger dividend = num.multiply (BigInteger.valueOf (10).pow 
+					(newScale + 1 - (scale - val.scale)));
+    
+    BigInteger parts[] = dividend.divideAndRemainder (val.num);
+//      System.out.println("int: " + parts[0]);
+//      System.out.println("rem: " + parts[1]);
+
+    int roundDigit = parts[0].mod (BigInteger.valueOf (10)).intValue ();
+    BigInteger unrounded = parts[0].divide (BigInteger.valueOf (10));
+
+    if (roundDigit == 0 && parts[1].signum () == 0) // no rounding necessary
+      return new BigDecimal (unrounded, newScale);
+
+    int sign = unrounded.signum ();
+
+    switch (roundingMode)
+      {
+      case ROUND_UNNECESSARY:
+	throw new ArithmeticException ("newScale is not large enough");
+      case ROUND_CEILING:
+	roundingMode = (sign == 1) ? ROUND_UP : ROUND_DOWN;
+	break;
+      case ROUND_FLOOR:
+	roundingMode = (sign == 1) ? ROUND_DOWN : ROUND_UP;
+	break;
+      case ROUND_HALF_UP:
+	roundingMode = (roundDigit >= 5) ? ROUND_UP : ROUND_DOWN;
+	break;
+      case ROUND_HALF_DOWN:
+	roundingMode = (roundDigit > 5) ? ROUND_UP : ROUND_DOWN;
+	break;
+      case ROUND_HALF_EVEN:
+	if (roundDigit < 5)
+	  roundingMode = ROUND_DOWN;
+	else
+	  {
+	    int rightmost = 
+	      unrounded.mod (BigInteger.valueOf (10)).intValue ();
+	    if (rightmost % 2 == 1) // odd, then ROUND_HALF_UP
+	      roundingMode = ROUND_UP;
+	    else // even, then ROUND_HALF_DOWN
+	      roundingMode = (roundDigit > 5) ? ROUND_UP : ROUND_DOWN;
+	  }
+	break;
+      }
+
+    if (roundingMode == ROUND_UP)
+      return new BigDecimal (unrounded.add (BigInteger.valueOf (1)), newScale);
+
+    // roundingMode == ROUND_DOWN
+    return new BigDecimal (unrounded, newScale);
+  }
+    
+  public int compareTo (BigDecimal val) 
+  {
+    if (scale == val.scale)
+      return num.compareTo (val.num);
+
+    BigInteger thisParts[] = 
+      num.divideAndRemainder (BigInteger.valueOf (10).pow (scale));
+    BigInteger valParts[] =
+      val.num.divideAndRemainder (BigInteger.valueOf (10).pow (val.scale));
+    
+    int compare;
+    if ((compare = thisParts[0].compareTo (valParts[0])) != 0)
+      return compare;
+
+    // quotients are the same, so compare remainders
+
+    // remove trailing zeros
+    if (thisParts[1].equals (BigInteger.valueOf (0)) == false)
+      while (thisParts[1].mod (BigInteger.valueOf (10)).equals
+	     (BigInteger.valueOf (0)))
+      thisParts[1] = thisParts[1].divide (BigInteger.valueOf (10));
+    // again...
+    if (valParts[1].equals(BigInteger.valueOf (0)) == false)
+      while (valParts[1].mod (BigInteger.valueOf (10)).equals
+	     (BigInteger.valueOf (0)))
+	valParts[1] = valParts[1].divide (BigInteger.valueOf (10));
+
+    // and compare them
+    return thisParts[1].compareTo (valParts[1]);
+  }
+
+  public int compareTo (Object val) 
+  {
+    return(compareTo((BigDecimal)val));
+  }
+
+  public boolean equals (Object o) 
+  {
+    return (o instanceof BigDecimal 
+	    && scale == ((BigDecimal) o).scale
+	    && compareTo ((BigDecimal) o) == 0);
+  }
+
+  public int hashCode() 
+  {
+    return intValue() ^ scale;
+  }
+
+  public BigDecimal max (BigDecimal val)
+  {
+    switch (compareTo (val)) 
+      {
+      case 1:
+	return this;
+      default:
+	return val;
+      }
+  }
+
+  public BigDecimal min (BigDecimal val) 
+  {
+    switch (compareTo (val)) 
+      {
+      case -1:
+	return this;
+      default:
+	return val;
+      }
+  }
+
+  public BigDecimal movePointLeft (int n)
+  {
+    return (n < 0) ? movePointRight (-n) : new BigDecimal (num, scale + n);
+  }
+
+  public BigDecimal movePointRight (int n)
+  {
+    if (n < 0)
+      return movePointLeft (-n);
+
+    if (scale >= n)
+      return new BigDecimal (num, scale - n);
+
+    return new BigDecimal (num.multiply 
+			   (BigInteger.valueOf (10).pow (n - scale)), 0);
+  }
+
+  public int signum () 
+  {
+    return num.signum ();
+  }
+
+  public int scale () 
+  {
+    return scale;
+  }
+  
+  public BigDecimal abs () 
+  {
+    return new BigDecimal (num.abs (), scale);
+  }
+
+  public BigDecimal negate () 
+  {
+    return new BigDecimal (num.negate (), scale);
+  }
+
+  public String toString () 
+  {
+    String bigStr = num.toString();
+    if (scale == 0) 
+      return bigStr;
+
+    int point = bigStr.length() - scale;
+    boolean negative = (bigStr.charAt(0) == '-');
+    StringBuffer sb = new StringBuffer(bigStr.length() + 1 + 
+				       (point <= 0 ? -point+1 : 0));
+    if (negative)
+      sb.append('-');
+    while (point <= 0)
+      {
+	sb.append('0');
+	point++;
+      }
+    sb.append(bigStr.substring(negative ? 1 : 0));
+    sb.insert(point, '.');
+    return sb.toString();
+  }
+
+  public BigInteger toBigInteger () 
+  {
+    return scale == 0 ? num : num.divide (BigInteger.valueOf (10).pow (scale));
+  }
+
+
+  public int intValue () 
+  {
+    return toBigInteger ().intValue ();
+  }
+
+  public long longValue ()
+  {
+    return toBigInteger().longValue();
+  }
+
+  public float floatValue() 
+  {
+    return Float.valueOf(toString()).floatValue();
+  }
+
+  public double doubleValue() 
+  {
+    return Double.valueOf(toString()).doubleValue();
+  }
+}
Index: java/net/MulticastSocket.java
===================================================================
RCS file: /cvs/java/libgcj/libjava/java/net/MulticastSocket.java,v
retrieving revision 1.5
diff -u -p -r1.5 MulticastSocket.java
--- MulticastSocket.java	2000/03/07 19:55:27	1.5
+++ MulticastSocket.java	2000/04/11 09:04:07
@@ -30,12 +30,12 @@ public class MulticastSocket extends Dat
 
   public MulticastSocket() throws IOException
   {
-    super(0, null);
+    super(0, ServerSocket.ANY_IF);
   }
 
   public MulticastSocket(int port) throws IOException
   {
-    super(port, null);
+    super(port, ServerSocket.ANY_IF);
   }
 
   public InetAddress getInterface() throws SocketException
Index: java/sql/CallableStatement.java
===================================================================
RCS file: CallableStatement.java
diff -N CallableStatement.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ CallableStatement.java	Tue Apr 11 02:04:07 2000
@@ -0,0 +1,299 @@
+/* CallableStatement.java -- A statement for calling stored procedures.
+   Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.sql;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.util.Calendar;
+
+/**
+  * This interface provides a mechanism for calling stored procedures.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public interface CallableStatement extends PreparedStatement
+{
+
+/*************************************************************************/
+
+/**
+  * This method tests whether the value of the last parameter that was fetched
+  * was actually a SQL NULL value.
+  *
+  * @return <code>true</code> if the last parameter fetched was a NULL,
+  * <code>false</code> otherwise.
+  * 
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+wasNull() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified parameter as a Java
+  * <code>String</code>.
+  *
+  * @param index The index of the parameter to return.
+  *
+  * @return The parameter value as a <code>String</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getString(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified parameter as a Java
+  * <code>Object</code>.
+  *
+  * @param index The index of the parameter to return.
+  *
+  * @return The parameter value as an <code>Object</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract Object
+getObject(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified parameter as a Java
+  * <code>boolean</code>.
+  *
+  * @param index The index of the parameter to return.
+  *
+  * @return The parameter value as a <code>boolean</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+getBoolean(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified parameter as a Java
+  * <code>byte</code>.
+  *
+  * @param index The index of the parameter to return.
+  *
+  * @return The parameter value as a <code>byte</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract byte
+getByte(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified parameter as a Java
+  * <code>short</code>.
+  *
+  * @param index The index of the parameter to return.
+  *
+  * @return The parameter value as a <code>short</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract short
+getShort(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified parameter as a Java
+  * <code>int</code>.
+  *
+  * @param index The index of the parameter to return.
+  *
+  * @return The parameter value as a <code>int</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getInt(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified parameter as a Java
+  * <code>long</code>.
+  *
+  * @param index The index of the parameter to return.
+  *
+  * @return The parameter value as a <code>long</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract long
+getLong(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified parameter as a Java
+  * <code>float</code>.
+  *
+  * @param index The index of the parameter to return.
+  *
+  * @return The parameter value as a <code>float</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract float
+getFloat(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified parameter as a Java
+  * <code>double</code>.
+  *
+  * @param index The index of the parameter to return.
+  *
+  * @return The parameter value as a <code>double</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract double
+getDouble(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified parameter as a Java
+  * <code>BigDecimal</code>.
+  *
+  * @param index The index of the parameter to return.
+  * @param scale The number of digits to the right of the decimal to return.
+  *
+  * @return The parameter value as a <code>BigDecimal</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract BigDecimal
+getBigDecimal(int index, int scale) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified parameter as a Java
+  * byte array.
+  *
+  * @param index The index of the parameter to return.
+  *
+  * @return The parameter value as a byte array
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract byte[]
+getBytes(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified parameter as a Java
+  * <code>java.sql.Date</code>.
+  *
+  * @param index The index of the parameter to return.
+  *
+  * @return The parameter value as a <code>java.sql.Date</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract java.sql.Date
+getDate(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified parameter as a Java
+  * <code>java.sql.Time</code>.
+  *
+  * @param index The index of the parameter to return.
+  *
+  * @return The parameter value as a <code>java.sql.Time</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract java.sql.Time
+getTime(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified parameter as a Java
+  * <code>java.sql.Timestamp</code>.
+  *
+  * @param index The index of the parameter to return.
+  *
+  * @return The parameter value as a <code>java.sql.Timestamp</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract java.sql.Timestamp
+getTimestamp(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method registers the specified parameter as an output parameter
+  * of the specified SQL type.
+  *
+  * @param index The index of the parameter to register as output.
+  * @param type The SQL type value from <code>Types</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+registerOutParameter(int index, int type) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method registers the specified parameter as an output parameter
+  * of the specified SQL type and scale.
+  *
+  * @param index The index of the parameter to register as output.
+  * @param type The SQL type value from <code>Types</code>.
+  * @param scale The scale of the value that will be returned.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+registerOutParameter(int index, int type, int scale) throws SQLException;
+
+} // interface CallableStatement
+
+
Index: java/sql/Connection.java
===================================================================
RCS file: Connection.java
diff -N Connection.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ Connection.java	Tue Apr 11 02:04:07 2000
@@ -0,0 +1,350 @@
+/* Connection.java -- Manage a database connection.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.sql;
+
+/**
+  * This interface provides methods for managing a connection to a database.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public interface Connection
+{
+
+/**
+  * This transaction isolation level indicates that transactions are not
+  * supported.
+  */
+public static final int TRANSACTION_NONE = 0;
+
+/**
+  * This transaction isolation level indicates that one transaction can
+  * read modifications by other transactions before the other transactions
+  * have committed their changes.  This could result in invalid reads.
+  */
+public static final int TRANSACTION_READ_UNCOMMITTED = 1;
+
+/**
+  * This transaction isolation leve indicates that only committed data from
+  * other transactions will be read.  If a transaction reads a row, then
+  * another transaction commits a change to that row, the first transaction
+  * would retrieve the changed row on subsequent reads of the same row.
+  */
+public static final int TRANSACTION_READ_COMMITTED = 2;
+
+/**
+  * This transaction isolation level indicates that only committed data from
+  * other transactions will be read.  It also ensures that data read from
+  * a row will not be different on a subsequent read even if another
+  * transaction commits a change.
+  */
+public static final int TRANSACTION_REPEATABLE_READ = 4;
+
+/**
+  * This transaction isolation level indicates that only committed data from
+  * other transactions will be read.  It also ensures that data read from
+  * a row will not be different on a subsequent read even if another
+  * transaction commits a change.  Additionally, rows modified by other
+  * transactions will not affect the result set returned during subsequent
+  * executions of the same WHERE clause in this transaction.
+  */
+public static final int TRANSACTION_SERIALIZABLE = 8;
+
+/*************************************************************************/
+
+/**
+  * This method creates a new SQL statement.  The default result set type
+  * and concurrency will be used.
+  *
+  * @return A new <code>Statement</code> object. 
+  *
+  * @exception SQLException If an error occurs.
+  *
+  * @see Statement
+  */
+public abstract Statement
+createStatement() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method creates a new <code>PreparedStatement</code> for the specified
+  * SQL string.  This method is designed for use with parameterized
+  * statements.  The default result set type and concurrency will be used.
+  *
+  * @param The SQL statement to use in creating this 
+  * <code>PreparedStatement</code>.
+  *
+  * @return A new <code>PreparedStatement</code>.
+  *
+  * @exception SQLException If an error occurs.
+  *
+  * @see PreparedStatement
+  */
+public abstract PreparedStatement
+prepareStatement(String sql) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method creates a new <code>CallableStatement</code> for the 
+  * specified SQL string.  Thie method is designed to be used with
+  * stored procedures.  The default result set type and concurrency
+  * will be used.
+  *
+  * @param The SQL statement to use in creating this 
+  * <code>CallableStatement</code>.
+  *
+  * @return A new <code>CallableStatement</code>.
+  *
+  * @exception SQLException If an error occurs.
+  *
+  * @see CallableStatement
+  */
+public abstract CallableStatement
+prepareCall(String sql) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method converts the specified generic SQL statement into the
+  * native grammer of the database this object is connected to.
+  *
+  * @param The JDBC generic SQL statement.
+  *
+  * @return The native SQL statement.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+nativeSQL(String sql) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not auto commit mode is currently enabled.
+  * In auto commit mode,  every SQL statement is committed its own transaction.
+  * Otherwise a transaction must be explicitly committed or rolled back.
+  *
+  * @return <code>true</code> if auto commit mode is enabled, 
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  *
+  * @see commit
+  * @see rollback
+  */
+public abstract boolean
+getAutoCommit() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method turns auto commit mode on or off.  In auto commit mode,
+  * every SQL statement is committed its own transaction.  Otherwise a
+  * transaction must be explicitly committed or rolled back.
+  *
+  * @param autoCommit <code>true</code> to enable auto commit mode,
+  * <code>false</code> to disable it.
+  *
+  * @exception SQLException If an error occurs.
+  *
+  * @see commit
+  * @see rollback
+  */
+public abstract void
+setAutoCommit(boolean autoCommit) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method commits any SQL statements executed on this connection since 
+  * the last commit or rollback.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+commit() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method rolls back any SQL statements executed on this connection
+  * since the last commit or rollback.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+rollback() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method immediately closes this database connection.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+close() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not this connection has been closed. 
+  *
+  * @return <code>true</code> if the connection is closed, <code>false</code>
+  * otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+isClosed() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the meta data for this database connection.
+  *
+  * @return The meta data for this database.
+  *
+  * @exception SQLException If an error occurs.
+  *
+  * @see DatabaseMetaData
+  */
+public abstract DatabaseMetaData
+getMetaData() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not this connection is in read only mode.
+  *
+  * @return <code>true</code> if the connection is read only <code>false</code>
+  * otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+isReadOnly() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method turns read only mode on or off.  It may not be called while
+  * a transaction is in progress.
+  *
+  * @param readOnly <code>true</code> if this connection is read only,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setReadOnly(boolean readOnly) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the name of the catalog in use by this connection,
+  * if any.
+  *
+  * @return The name of the catalog, or <code>null</code> if one does not
+  * exist or catalogs are not supported by this database.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getCatalog() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the name of the catalog in use by this connection.
+  * Note that this method does nothing if catalogs are not supported by
+  * this database.
+  *
+  * @param catalog The name of the catalog to use for this connection.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setCatalog(String catalog) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the current transaction isolation mode.  This will
+  * be one of the constants defined in this interface.
+  *
+  * @return The transaction isolation level.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getTransactionIsolation() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the transaction isolation level using one of the
+  * constants defined in this interface.
+  *
+  * @param level The transaction isolation level to change to; must be
+  * one of the TRANSACTION_* isolation values with the exception of
+  * TRANSACTION_NONE; some databases may not support other values.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setTransactionIsolation(int level) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the first warning that occurred on this connection,
+  * if any.  If there were any subsequence warnings, they will be chained
+  * to the first one.
+  *
+  * @return The first <code>SQLWarning</code> that occurred, or 
+  * <code>null</code> if there have been no warnings.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract SQLWarning
+getWarnings() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method clears all warnings that have occurred on this connection.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+clearWarnings() throws SQLException;
+
+} // interface Connection
+
Index: java/sql/DataTruncation.java
===================================================================
RCS file: DataTruncation.java
diff -N DataTruncation.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ DataTruncation.java	Tue Apr 11 02:04:07 2000
@@ -0,0 +1,185 @@
+/* DataTruncation.java -- Warning when data has been truncated.
+   Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.sql;
+
+/**
+  * This exception is thrown when a piece of data is unexpectedly 
+  * truncated in JDBC.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public class DataTruncation extends SQLWarning implements java.io.Serializable
+{
+
+/*************************************************************************/
+
+/*
+ * Instance Variables
+ */
+
+/**
+  * The original size of the data.
+  * @serialized
+  */
+private int dataSize;
+
+/**
+  * The index of the parameter or column whose value was truncated.
+  * @serialized
+  */
+private int index;
+
+/**
+  * Indicates whether or not a parameter value was truncated.
+  * @serialized
+  */
+private boolean parameter;
+
+/**
+  * Indicates whether or not a data column value was truncated.
+  * @serialized
+  */
+private boolean read;
+
+/**
+  * This is the size of the data after truncation.
+  * @serialized
+  */
+private int transferSize;
+
+/*************************************************************************/
+
+/*
+ * Constructors
+ */
+
+/**
+  * This method initializes a new instance of <code>DataTruncation</code>
+  * with the specified values.  The descriptive error message for this 
+  * exception will be "Data truncation", the SQL state will be "01004"
+  * and the vendor specific error code will be set to 0.
+  *
+  * @param index The index of the parameter or column that was truncated.
+  * @param parameter <code>true</code> if a parameter was truncated,
+  * <code>false</code> otherwise.
+  * @param read <code>true</code> if a data column was truncated,
+  * <code>false</code> otherwise.
+  * @param dataSize The original size of the data.
+  * @param transferSize The size of the data after truncation.
+  */
+public
+DataTruncation(int index, boolean parameter, boolean read, int dataSize,
+               int transferSize)
+{
+  super("Data truncation", "01004");
+
+  this.index = index;
+  this.parameter = parameter;
+  this.read = read;
+  this.dataSize = dataSize;
+  this.transferSize = transferSize;
+}
+
+/*************************************************************************/
+
+/*
+ * Instance Methods
+ */
+
+/**
+  * This method returns the index of the column or parameter that was
+  * truncated.
+  *
+  * @return The index of the column or parameter that was truncated.
+  */
+public int
+getIndex()
+{
+  return(index);
+}
+
+/*************************************************************************/
+
+/**
+  * This method determines whether or not it was a parameter that was
+  * truncated.
+  *
+  * @return <code>true</code> if a parameter was truncated, <code>false</code>
+  * otherwise.
+  */
+public boolean
+getParameter()
+{
+  return(parameter);
+}
+
+/*************************************************************************/
+
+/**
+  * This method determines whether or not it was a column that was
+  * truncated.
+  *
+  * @return <code>true</code> if a column was truncated, <code>false</code>
+  * otherwise.
+  */
+public boolean
+getRead()
+{
+  return(read);
+}
+
+/*************************************************************************/
+
+/**
+  * This method returns the original size of the parameter or column that
+  * was truncated.
+  *
+  * @return The original size of the parameter or column that was truncated.
+  */
+public int
+getDataSize()
+{
+  return(dataSize);
+}
+
+/*************************************************************************/
+
+/**
+  * This method returns the size of the parameter or column after it was
+  * truncated.
+  *
+  * @return The size of the parameter or column after it was truncated.
+  */
+public int
+getTransferSize()
+{
+  return(transferSize);
+}
+
+} // class DataTruncation
+
Index: java/sql/DatabaseMetaData.java
===================================================================
RCS file: DatabaseMetaData.java
diff -N DatabaseMetaData.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ DatabaseMetaData.java	Tue Apr 11 02:04:07 2000
@@ -0,0 +1,2460 @@
+/* DatabaseMetaData.java -- Information about the database itself.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.sql;
+
+/**
+  * This interface provides a mechanism for obtaining information about
+  * the database itself, as opposed to data in it.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public interface DatabaseMetaData
+{
+
+/**
+  * The best row may or may not be a pseudo-column.
+  */
+public static final int bestRowUnknown = 0;
+
+/**
+  * The best row identifier is not a pseudo-column.
+  */
+public static final int bestRowNotPseudo = 1;
+
+/**
+  * The best row identifer is a pseudo-column.
+  */
+public static final int bestRowPseudo = 2;
+
+/**
+  * The best row's scope is only guaranteed to be valid so long as the
+  * row is actually being used.
+  */
+public static final int bestRowTemporary = 0;
+
+/**
+  * The best row identifer is valid to the end of the transaction.
+  */
+public static final int bestRowTransaction = 1;
+
+/**
+  * The best row identifer is valid to the end of the session.
+  */
+public static final int bestRowSession = 2;
+
+/**
+  * It is unknown whether or not the procedure returns a result.
+  */
+public static final int procedureResultUnknown = 0;
+
+/**
+  * The procedure does not return a result.
+  */
+public static final int procedureNoResult = 1;
+
+/**
+  * The procedure returns a result.
+  */
+public static final int procedureReturnsResult = 2;
+
+/**
+  * The column type is unknown.
+  */
+public static final int procedureColumnUnknown = 0;
+
+/**
+  * The column type is input.
+  */
+public static final int procedureColumnIn = 1;
+
+/**
+  * The column type is input/output.
+  */
+public static final int procedureColumnInOut = 2;
+
+/**
+  * The column type is output
+  */
+public static final int procedureColumnOut = 4;
+
+/**
+  * The column is used for return values.
+  */
+public static final int procedureColumnReturn = 5;
+
+/**
+  * The column is used for storing results
+  */
+public static final int procedureColumnResult = 3;
+
+/**
+  * NULL values are not allowed.
+  */
+public static final int procedureNoNulls = 0;
+
+/**
+  * NULL values are allowed.
+  */
+public static final int procedureNullable = 1;
+
+/**
+  * It is unknown whether or not NULL values are allowed.
+  */
+public static final int procedureNullableUnknown = 2;
+
+/**
+  * The column does not allow NULL
+  */
+public static final int columnNoNulls = 0;
+
+/**
+  * The column does allow NULL
+  */
+public static final int columnNullable = 1;
+
+/**
+  * It is unknown whether or not the column allows NULL
+  */
+public static final int columnNullableUnknown = 2;
+
+/**
+  * It is unknown whether or not the version column is a pseudo-column.
+  */
+public static final int versionColumnUnknown = 0;
+
+/**
+  * The version column is not a pseudo-column
+  */
+public static final int versionColumnNotPseudo = 1;
+
+/**
+  * The version column is a pseudo-column
+  */
+public static final int versionColumnPseudo = 2;
+
+/**
+  * Foreign key changes are cascaded in updates or deletes.
+  */
+public static final int importedKeyCascade = 0;
+
+/**
+  * Column may not be updated or deleted in use as a foreign key.
+  */
+public static final int importedKeyRestrict = 1;
+
+/**
+  * When primary key is updated or deleted, the foreign key is set to NULL.
+  */
+public static final int importedKeySetNull = 2;
+
+/**
+  * If the primary key is a foreign key, it cannot be udpated or deleted.
+  */
+public static final int importedKeyNoAction = 3;
+
+/**
+  * If the primary key is updated or deleted, the foreign key is set to
+  * a default value.
+  */
+public static final int importedKeySetDefault = 4;
+
+/**
+  * Wish I knew what this meant.
+  */
+public static final int importedKeyInitiallyDeferred = 5;
+
+/**
+  * Wish I knew what this meant.
+  */
+public static final int importedKeyInitiallyImmediate = 6;
+
+/**
+  * Wish I knew what this meant.
+  */
+public static final int importedKeyNotDeferrable = 7;
+
+/**
+  * A NULL value is not allowed for this data type.
+  */
+public static final int typeNoNulls = 0;
+
+/**
+  * A NULL value is allowed for this data type.
+  */
+public static final int typeNullable = 1;
+
+/**
+  * It is unknown whether or not NULL values are allowed for this data type.
+  */
+public static final int typeNullableUnknown = 2;
+
+/**
+  * Where clauses are not supported for this type.
+  */
+public static final int typePredNone = 0;
+
+/**
+  * Only "WHERE..LIKE" style WHERE clauses are allowed on this data type.
+  */
+public static final int typePredChar = 1;
+
+/**
+  * All WHERE clauses except "WHERE..LIKE" style are allowed on this data type.
+  */
+public static final int typePredBasic = 2;
+
+/**
+  * Any type of WHERE clause is allowed for this data type.
+  */
+public static final int typeSearchable = 3;
+
+/**
+  * This column contains table statistics.
+  */
+public static final short tableIndexStatistic = 0;
+
+/**
+  * This table index is clustered.
+  */
+public static final short tableIndexClustered = 1;
+
+/**
+  * This table index is hashed.
+  */
+public static final short tableIndexHashed = 2;
+
+/**
+  * This table index is of another type.
+  */
+public static final short tableIndexOther = 3;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not all the procedures returned by
+  * the <code>getProcedures</code> method can be called by this user.
+  *
+  * @return <code>true</code> if all the procedures can be called,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+allProceduresAreCallable() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not all the table returned by the
+  * <code>getTables</code> method can be selected by this user.
+  *
+  * @return <code>true</code> if all the procedures can be called,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+allTablesAreSelectable() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the URL for this database.
+  *
+  * @return The URL string for this database, or <code>null</code> if it
+  * is not known.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getURL() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the database username for this connection.
+  *
+  * @return The database username.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getUserName() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database is in read only mode.
+  *
+  * @return <code>true</code> if the database is in read only mode,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+isReadOnly() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not NULL's sort as high values.
+  *
+  * @return <code>true</code> if NULL's sort as high values, <code>false</code>
+  * otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+nullsAreSortedHigh() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not NULL's sort as low values.
+  *
+  * @return <code>true</code> if NULL's sort as low values, <code>false</code>
+  * otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+nullsAreSortedLow() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method test whether or not NULL's are sorted to the beginning
+  * of the list regardless of ascending or descending sort order.
+  *
+  * @return <code>true</code> if NULL's always sort to the beginning,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+nullsAreSortedAtStart() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method test whether or not NULL's are sorted to the end
+  * of the list regardless of ascending or descending sort order.
+  *
+  * @return <code>true</code> if NULL's always sort to the end,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+nullsAreSortedAtEnd() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the name of the database product.
+  *
+  * @return The database product.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getDatabaseProductName() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the version of the database product.
+  *
+  * @return The version of the database product.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getDatabaseProductVersion() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the name of the JDBC driver.
+  *
+  * @return The name of the JDBC driver.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getDriverName() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the version of the JDBC driver.
+  *
+  * @return The version of the JDBC driver.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getDriverVersion() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the major version number of the JDBC driver.
+  *
+  * @return The major version number of the JDBC driver.
+  */
+public abstract int
+getDriverMajorVersion();
+
+/*************************************************************************/
+
+/**
+  * This method returns the minor version number of the JDBC driver.
+  *
+  * @return The minor version number of the JDBC driver.
+  */
+public abstract int
+getDriverMinorVersion();
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database uses local files to
+  * store tables.
+  *
+  * @return <code>true</code> if the database uses local files, 
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+usesLocalFiles() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database uses a separate file for
+  * each table.
+  *
+  * @return <code>true</code> if the database uses a separate file for each
+  * table </code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+usesLocalFilePerTable() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database supports identifiers
+  * with mixed case.
+  *
+  * @return <code>true</code> if the database supports mixed case identifiers,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsMixedCaseIdentifiers() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database treats mixed case
+  * identifiers as all upper case.
+  *
+  * @exception <code>true</code> if the database treats all identifiers as
+  * upper case, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+storesUpperCaseIdentifiers() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database treats mixed case
+  * identifiers as all lower case.
+  *
+  * @exception <code>true</code> if the database treats all identifiers as
+  * lower case, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+storesLowerCaseIdentifiers() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database stores mixed case 
+  * identifers even if it treats them as case insensitive.
+  *
+  * @return <code>true</code> if the database stores mixed case identifiers,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+storesMixedCaseIdentifiers() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database supports quoted identifiers
+  * with mixed case.
+  *
+  * @return <code>true</code> if the database supports mixed case quoted
+  * identifiers, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsMixedCaseQuotedIdentifiers() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database treats mixed case
+  * quoted identifiers as all upper case.
+  *
+  * @exception <code>true</code> if the database treats all quoted identifiers 
+  * as upper case, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+storesUpperCaseQuotedIdentifiers() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database treats mixed case
+  * quoted identifiers as all lower case.
+  *
+  * @exception <code>true</code> if the database treats all quoted identifiers 
+  * as lower case, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+storesLowerCaseQuotedIdentifiers() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database stores mixed case 
+  * quoted identifers even if it treats them as case insensitive.
+  *
+  * @return <code>true</code> if the database stores mixed case quoted 
+  * identifiers, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+storesMixedCaseQuotedIdentifiers() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This metohd returns the quote string for SQL identifiers.
+  *
+  * @return The quote string for SQL identifers, or a space if quoting
+  * is not supported.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getIdentifierQuoteString() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns a comma separated list of all the SQL keywords in
+  * the database that are not in SQL92.
+  *
+  * @return The list of SQL keywords not in SQL92.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getSQLKeywords() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns a comma separated list of math functions.
+  *
+  * @return The list of math functions.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getNumericFunctions() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns a comma separated list of string functions.
+  *
+  * @return The list of string functions.
+  * 
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getStringFunctions() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns a comma separated list of of system functions.
+  *
+  * @return A comma separated list of system functions.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getSystemFunctions() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns comma separated list of time/date functions.
+  * 
+  * @return The list of time/date functions.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getTimeDateFunctions() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the string used to escape wildcards in search strings.
+  *
+  * @return The string used to escape wildcards in search strings.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getSearchStringEscape() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This methods returns non-standard characters that can appear in 
+  * unquoted identifiers.
+  *
+  * @return Non-standard characters that can appear in unquoted identifiers.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getExtraNameCharacters() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database supports
+  * "ALTER TABLE ADD COLUMN"
+  *
+  * @return <code>true</code> if column add supported, <code>false</code>
+  * otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsAlterTableWithAddColumn() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database supports
+  * "ALTER TABLE DROP COLUMN"
+  *
+  * @return <code>true</code> if column drop supported, <code>false</code>
+  * otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsAlterTableWithDropColumn() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not column aliasing is supported.
+  *
+  * @return <code>true</code> if column aliasing is supported,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsColumnAliasing() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether the concatenation of a NULL and non-NULL
+  * value results in a NULL.  This will always be true in fully JDBC compliant
+  * drivers.
+  *
+  * @return <code>true</code> if concatenating NULL and a non-NULL value
+  * returns a NULL, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+nullPlusNonNullIsNull() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * Tests whether or not CONVERT is supported.
+  *
+  * @return <code>true</code> if CONVERT is supported, <code>false</code>
+  * otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsConvert() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not CONVERT can be performed between the
+  * specified types.  The types are contants from <code>Types</code>.
+  *
+  * @param fromType The SQL type to convert from.
+  * @param toType The SQL type to convert to.
+  * 
+  * @return <code>true</code> if the conversion can be performed,
+  * <code>false</code> otherwise.
+  *
+  * @see Types
+  */
+public abstract boolean
+supportsConvert(int fromType, int toType) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not table correlation names are 
+  * supported.  This will be always be <code>true</code> in a fully JDBC
+  * compliant driver.
+  *
+  * @return <code>true</code> if table correlation names are supported,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsTableCorrelationNames() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether correlation names must be different from the
+  * name of the table.
+  *
+  * @return <code>true</code> if the correlation name must be different from
+  * the table name, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsDifferentTableCorrelationNames() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not expressions are allowed in an
+  * ORDER BY lists.
+  *
+  * @return <code>true</code> if expressions are allowed in ORDER BY
+  * lists, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsExpressionsInOrderBy() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or ORDER BY on a non-selected column is
+  * allowed.
+  *
+  * @return <code>true</code> if a non-selected column can be used in an
+  * ORDER BY, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsOrderByUnrelated() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not GROUP BY is supported.
+  *
+  * @return <code>true</code> if GROUP BY is supported, <code>false</code>
+  * otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsGroupBy() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether GROUP BY on a non-selected column is
+  * allowed.
+  *
+  * @return <code>true</code> if a non-selected column can be used in a
+  * GROUP BY, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsGroupByUnrelated() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not a GROUP BY can add columns not in the
+  * select if it includes all the columns in the select.
+  *
+  * @return <code>true</code> if GROUP BY an add columns provided it includes
+  * all columns in the select, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsGroupByBeyondSelect() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the escape character is supported in
+  * LIKE expressions.  A fully JDBC compliant driver will always return
+  * <code>true</code>.
+  *
+  * @return <code>true</code> if escapes are supported in LIKE expressions,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean supportsLikeEscapeClause() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether multiple result sets for a single statement are
+  * supported.
+  *
+  * @return <code>true</code> if multiple result sets are supported for a 
+  * single statement, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsMultipleResultSets() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method test whether or not multiple transactions may be open
+  * at once, as long as they are on different connections.
+  *
+  * @return <code>true</code> if multiple transactions on different
+  * connections are supported, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsMultipleTransactions() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not columns can be defined as NOT NULL.  A
+  * fully JDBC compliant driver always returns <code>true</code>.
+  *
+  * @return <code>true</code> if NOT NULL columns are supported,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsNonNullableColumns() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the minimum grammer for ODBC is supported.
+  * A fully JDBC compliant driver will always return <code>true</code>.
+  *
+  * @return <code>true</code> if the ODBC minimum grammar is supported,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsMinimumSQLGrammar() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the core grammer for ODBC is supported.
+  *
+  * @return <code>true</code> if the ODBC core grammar is supported,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsCoreSQLGrammar() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the extended grammer for ODBC is supported.
+  *
+  * @return <code>true</code> if the ODBC extended grammar is supported,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsExtendedSQLGrammar() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the ANSI92 entry level SQL
+  * grammar is supported.  A fully JDBC compliant drivers must return
+  * <code>true</code>.
+  *
+  * @return <code>true</code> if the ANSI92 entry level SQL grammar is
+  * supported, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsANSI92EntryLevelSQL() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the ANSI92 intermediate SQL
+  * grammar is supported.  
+  *
+  * @return <code>true</code> if the ANSI92 intermediate SQL grammar is
+  * supported, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsANSI92IntermediateSQL() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the ANSI92 full SQL
+  * grammar is supported.  
+  *
+  * @return <code>true</code> if the ANSI92 full SQL grammar is
+  * supported, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsANSI92FullSQL() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the SQL integrity enhancement
+  * facility is supported.
+  *
+  * @return <code>true</code> if the integrity enhancement facility is
+  * supported, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsIntegrityEnhancementFacility() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database supports outer joins.
+  *
+  * @return <code>true</code> if outer joins are supported, <code>false</code>
+  * otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsOuterJoins() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database supports full outer joins.
+  *
+  * @return <code>true</code> if full outer joins are supported, 
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsFullOuterJoins() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database supports limited outer joins.
+  *
+  * @return <code>true</code> if limited outer joins are supported, 
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsLimitedOuterJoins() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the vendor's term for "schema".
+  *
+  * @return The vendor's term for schema.
+  *
+  * @exception SQLException if an error occurs.
+  */
+public abstract String
+getSchemaTerm() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the vendor's term for "procedure".
+  *
+  * @return The vendor's term for procedure.
+  *
+  * @exception SQLException if an error occurs.
+  */
+public abstract String
+getProcedureTerm() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the vendor's term for "catalog".
+  *
+  * @return The vendor's term for catalog.
+  *
+  * @exception SQLException if an error occurs.
+  */
+public abstract String
+getCatalogTerm() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether a catalog name appears at the beginning of
+  * a fully qualified table name.
+  *
+  * @return <code>true</code> if the catalog name appears at the beginning,
+  * <code>false</code> if it appears at the end.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+isCatalogAtStart() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the separator between the catalog name and the
+  * table name.
+  *
+  * @return The separator between the catalog name and the table name.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getCatalogSeparator() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether a catalog name can appear in a data
+  * manipulation statement.
+  *
+  * @return <code>true</code> if a catalog name can appear in a data
+  * manipulation statement, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsSchemasInDataManipulation() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether a catalog name can appear in a procedure
+  * call
+  *
+  * @return <code>true</code> if a catalog name can appear in a procedure
+  * call, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsSchemasInProcedureCalls() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether a catalog name can appear in a table definition.
+  *
+  * @return <code>true</code> if a catalog name can appear in a table
+  * definition, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsSchemasInTableDefinitions() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether a catalog name can appear in an index definition.
+  *
+  * @return <code>true</code> if a catalog name can appear in an index
+  * definition, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsSchemasInIndexDefinitions() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether a catalog name can appear in privilege definitions.
+  *
+  * @return <code>true</code> if a catalog name can appear in privilege
+  * definition, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsSchemasInPrivilegeDefinitions() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether a catalog name can appear in a data
+  * manipulation statement.
+  *
+  * @return <code>true</code> if a catalog name can appear in a data
+  * manipulation statement, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsCatalogsInDataManipulation() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether a catalog name can appear in a procedure
+  * call
+  *
+  * @return <code>true</code> if a catalog name can appear in a procedure
+  * call, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsCatalogsInProcedureCalls() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether a catalog name can appear in a table definition.
+  *
+  * @return <code>true</code> if a catalog name can appear in a table
+  * definition, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsCatalogsInTableDefinitions() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether a catalog name can appear in an index definition.
+  *
+  * @return <code>true</code> if a catalog name can appear in an index
+  * definition, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsCatalogsInIndexDefinitions() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether a catalog name can appear in privilege definitions.
+  *
+  * @return <code>true</code> if a catalog name can appear in privilege
+  * definition, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsCatalogsInPrivilegeDefinitions() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not that database supports positioned
+  * deletes.
+  *
+  * @return <code>true</code> if positioned deletes are supported,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsPositionedDelete() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not that database supports positioned
+  * updates.
+  *
+  * @return <code>true</code> if positioned updates are supported,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsPositionedUpdate() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not SELECT FOR UPDATE is supported by the
+  * database.
+  *
+  * @return <code>true</code> if SELECT FOR UPDATE is supported 
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsSelectForUpdate() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not stored procedures are supported on
+  * this database.
+  *
+  * @return <code>true</code> if stored procedures are supported,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsStoredProcedures() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not subqueries are allowed in comparisons.
+  * A fully JDBC compliant driver will always return <code>true</code>.
+  *
+  * @return <code>true</code> if subqueries are allowed in comparisons,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsSubqueriesInComparisons() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not subqueries are allowed in exists
+  * expressions.  A fully JDBC compliant driver will always return
+  * <code>true</code>.
+  *
+  * @return <code>true</code> if subqueries are allowed in exists 
+  * expressions, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsSubqueriesInExists() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether subqueries are allowed in IN statements.
+  * A fully JDBC compliant driver will always return <code>true</code>.
+  *
+  * @return <code>true</code> if the driver supports subqueries in IN
+  * statements, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsSubqueriesInIns() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not subqueries are allowed in quantified
+  * expressions.  A fully JDBC compliant driver will always return
+  * <code>true</code>.
+  *
+  * @return <code>true</code> if subqueries are allowed in quantified 
+  * expressions, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsSubqueriesInQuantifieds() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method test whether or not correlated subqueries are allowed. A
+  * fully JDBC compliant driver will always return <code>true</code>.
+  *
+  * @return <code>true</code> if correlated subqueries are allowed,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsCorrelatedSubqueries() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the UNION statement is supported.
+  *
+  * @return <code>true</code> if UNION is supported, <code>false</code>
+  * otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsUnion() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the UNION ALL statement is supported.
+  *
+  * @return <code>true</code> if UNION ALL is supported, <code>false</code>
+  * otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsUnionAll() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database supports cursors
+  * remaining open across commits.
+  *
+  * @return <code>true</code> if cursors can remain open across commits,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsOpenCursorsAcrossCommit() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database supports cursors
+  * remaining open across rollbacks.
+  *
+  * @return <code>true</code> if cursors can remain open across rollbacks,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsOpenCursorsAcrossRollback() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database supports statements
+  * remaining open across commits.
+  *
+  * @return <code>true</code> if statements can remain open across commits,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsOpenStatementsAcrossCommit() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database supports statements
+  * remaining open across rollbacks.
+  *
+  * @return <code>true</code> if statements can remain open across rollbacks,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsOpenStatementsAcrossRollback() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the number of hex characters allowed in an inline
+  * binary literal.
+  *
+  * @return The number of hex characters allowed in a binary literal, 0 meaning
+  * either an unknown or unlimited number.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxBinaryLiteralLength() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum length of a character literal.
+  * 
+  * @return The maximum length of a character literal.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxCharLiteralLength() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum length of a column name.
+  *
+  * @return The maximum length of a column name.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxColumnNameLength() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum number of columns in a GROUP BY statement.
+  *
+  * @return The maximum number of columns in a GROUP BY statement.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxColumnsInGroupBy() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum number of columns in an index.
+  *
+  * @return The maximum number of columns in an index.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxColumnsInIndex() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum number of columns in an ORDER BY statement.
+  *
+  * @return The maximum number of columns in an ORDER BY statement.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxColumnsInOrderBy() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum number of columns in a SELECT statement.
+  *
+  * @return The maximum number of columns in a SELECT statement.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxColumnsInSelect() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum number of columns in a table.
+  *
+  * @return The maximum number of columns in a table.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxColumnsInTable() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum number of connections this client
+  * can have to the database.
+  *
+  * @return The maximum number of database connections.
+  *
+  * @SQLException If an error occurs.
+  */
+public abstract int
+getMaxConnections() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum length of a cursor name.
+  *
+  * @return The maximum length of a cursor name.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxCursorNameLength() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum length of an index.
+  *
+  * @return The maximum length of an index.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxIndexLength() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum length of a schema name.
+  *
+  * @return The maximum length of a schema name.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxSchemaNameLength() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum length of a procedure name.
+  *
+  * @return The maximum length of a procedure name.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxProcedureNameLength() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum length of a catalog name.
+  *
+  * @return The maximum length of a catalog name.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxCatalogNameLength() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum size of a row in bytes.
+  *
+  * @return The maximum size of a row.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxRowSize() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the maximum row size includes BLOB's
+  *
+  * @return <code>true</code> if the maximum row size includes BLOB's,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+doesMaxRowSizeIncludeBlobs() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method includes the maximum length of a SQL statement.
+  *
+  * @return The maximum length of a SQL statement.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxStatementLength() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum number of statements that can be
+  * active at any time.
+  *
+  * @return The maximum number of statements that can be active at any time.
+  * 
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxStatements() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum length of a table name.
+  *
+  * @return The maximum length of a table name.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxTableNameLength() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum number of tables that may be referenced
+  * in a SELECT statement.
+  *
+  * @return The maximum number of tables allowed in a SELECT statement.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxTablesInSelect() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum length of a user name.
+  *
+  * @return The maximum length of a user name.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxUserNameLength() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the default transaction isolation level of the
+  * database.
+  *
+  * @return The default transaction isolation level of the database.
+  *
+  * @exception SQLException If an error occurs.
+  *
+  * @see Connection
+  */
+public abstract int
+getDefaultTransactionIsolation() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database supports transactions.
+  *
+  * @return <code>true</code> if the database supports transactions,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsTransactions() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the database supports the specified
+  * transaction isolation level.
+  *
+  * @param level The transaction isolation level.
+  *
+  * @return <code>true</code> if the specified transaction isolation level
+  * is supported, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsTransactionIsolationLevel(int level) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not DDL and DML statements allowed within 
+  * the same transaction.
+  *
+  * @return <code>true</code> if DDL and DML statements are allowed in the
+  * same transaction, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsDataDefinitionAndDataManipulationTransactions() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not only DML statement are allowed
+  * inside a transaction.
+  *
+  * @return <code>true</code> if only DML statements are allowed in
+  * transactions, <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+supportsDataManipulationTransactionsOnly() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not a DDL statement will cause the
+  * current transaction to be automatically committed.
+  *
+  * @return <code>true</code> if DDL causes an immediate transaction commit,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+dataDefinitionCausesTransactionCommit() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not DDL statements are ignored in
+  * transactions.
+  *
+  * @return <code>true</code> if DDL statements are ignored in transactions,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+dataDefinitionIgnoredInTransactions() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns a list of all the stored procedures matching the
+  * specified pattern in the given schema and catalog.  This is returned
+  * a <code>ResultSet</code> with the following columns:
+  * <p>
+  * <ol>
+  * <li>PROCEDURE_CAT - The catalog the procedure is in, which may be 
+  * <code>null</code>.
+  * <li>PROCEDURE_SCHEM - The schema the procedures is in, which may be
+  * <code>null</code>.
+  * <li>PROCEDURE_NAME - The name of the procedure.
+  * <li>Unused
+  * <li>Unused
+  * <li>Unused
+  * <li>REMARKS - A description of the procedure
+  * <li>PROCEDURE_TYPE - Indicates the return type of the procedure, which 
+  * is one of the contstants defined in this class 
+  * (<code>procedureResultUnknown</code>, <code>procedureNoResult</code>, or
+  * <code>procedureReturnsResult</code>).
+  * </ol>
+  *
+  * @param catalog The name of the catalog to return stored procedured from,
+  * or "" to return procedures from all catalogs.
+  * @param schemaPattern A schema pattern for the schemas to return stored
+  * procedures from, or "" to return procedures from all schemas.
+  * @param namePattern The pattern of procedures names to return.
+  *
+  * @returns A <code>ResultSet</code> with all the requested procedures.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSet
+getProcedures(String catalog, String schemaPattern, String namePattern)
+              throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns a list of the parameter and result columns for
+  * the requested stored procedures.  This is returned in the form of a
+  * <code>ResultSet</code> with the following columns:
+  * <p>
+  * <ol>
+  * <li>PROCEDURE_CAT - The catalog the procedure is in, which may be 
+  * <code>null</code>.
+  * <li>PROCEDURE_SCHEM - The schema the procedures is in, which may be
+  * <code>null</code>.
+  * <li>PROCEDURE_NAME - The name of the procedure.
+  * <li>COLUMN_NAME - The name of the column
+  * <li>COLUMN_TYPE - The type of the column, which will be one of the
+  * contants defined in this class (<code>procedureColumnUnknown</code>,
+  * <code>procedureColumnIn</code>, <code>procedureColumnInOut</code>,
+  * <code>procedureColumnOut</code>, <code>procedureColumnReturn</code>,
+  * or <code>procedureColumnResult</code>).
+  * <li>DATA_TYPE - The SQL type of the column. This is one of the constants
+  * defined in <code>Types</code>.
+  * <li>TYPE_NAME - The string name of the data type for this column.
+  * <li>PRECISION - The precision of the column.
+  * <li>LENGTH - The length of the column in bytes
+  * <li>SCALE - The scale of the column.
+  * <li>RADIX - The radix of the column.
+  * <li>NULLABLE - Whether or not the column is NULLABLE.  This is one of
+  * the constants defined in this class (<code>procedureNoNulls</code>,
+  * <code>procedureNullable</code>, or <code>procedureNullableUnknown</code>)
+  * <li>REMARKS - A description of the column.
+  * </ol>
+  *
+  * @param catalog The name of the catalog to return stored procedured from,
+  * or "" to return procedures from all catalogs.
+  * @param schemaPattern A schema pattern for the schemas to return stored
+  * procedures from, or "" to return procedures from all schemas.
+  * @param namePattern The pattern of procedures names to return.
+  * @param columnPattern The pattern of column names to return.
+  *
+  * @returns A <code>ResultSet</code> with all the requested procedures.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSet
+getProcedureColumns(String catalog, String schemaPattern, String namePattern,
+                    String columnPattern) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns a list of the requested table as a   
+  * <code>ResultSet</code> with the following columns:
+  * <p>
+  * <ol>
+  * <li>TABLE_CAT - The catalog the table is in, which may be <code>null</code>.
+  * <li>TABLE_SCHEM - The schema the table is in, which may be <code>null</code>.
+  * <li>TABLE_NAME - The name of the table.
+  * <li>TABLE_TYPE - A string describing the table type.  This will be one
+  * of the values returned by the <code>getTableTypes()</code> method.
+  * <li>REMARKS - Comments about the table.
+  * </ol>
+  * 
+  * @param catalog The name of the catalog to return tables from,
+  * or "" to return tables from all catalogs.
+  * @param schemaPattern A schema pattern for the schemas to return tables
+  * from, or "" to return tables from all schemas.
+  * @param namePattern The pattern of table names to return.
+  * @param types The list of table types to include; null returns all types.
+  *
+  * @returns A <code>ResultSet</code> with all the requested tables.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSet
+getTables(String catalog, String schemaPattern, String namePattern,
+	  String types[]) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the list of database schemas as a 
+  * <code>ResultSet</code>, with one column - TABLE_SCHEM - that is the
+  * name of the schema.
+  *
+  * @return A <code>ResultSet</code> with all the requested schemas.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSet
+getSchemas() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the list of database catalogs as a
+  * <code>ResultSet</code> with one column - TABLE_CAT - that is the
+  * name of the catalog.
+  *
+  * @return A <code>ResultSet</code> with all the requested catalogs.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSet
+getCatalogs() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the list of database table types as a
+  * <code>ResultSet</code> with one column - TABLE_TYPE - that is the
+  * name of the table type.
+  *
+  * @return A <code>ResultSet</code> with all the requested table types.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSet
+getTableTypes() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns a list of the tables columns for
+  * the requested tables.  This is returned in the form of a
+  * <code>ResultSet</code> with the following columns:
+  * <p>
+  * <ol>
+  * <li>TABLE_CAT - The catalog the table is in, which may be 
+  * <code>null</code>.
+  * <li>TABLE_SCHEM - The schema the tables is in, which may be
+  * <code>null</code>.
+  * <li>TABLE_NAME - The name of the table.
+  * <li>COLUMN_NAME - The name of the column
+  * <li>DATA_TYPE - The SQL type of the column. This is one of the constants
+  * defined in <code>Types</code>.
+  * <li>TYPE_NAME - The string name of the data type for this column.
+  * <li>COLUMN_SIZE - The size of the column.
+  * <li>Unused
+  * <li>NUM_PREC_RADIX - The radix of the column.
+  * <li>NULLABLE - Whether or not the column is NULLABLE.  This is one of
+  * the constants defined in this class (<code>tableNoNulls</code>,
+  * <code>tableNullable</code>, or <code>tableNullableUnknown</code>)
+  * <li>REMARKS - A description of the column.
+  * <li>COLUMN_DEF - The default value for the column, may be <code>null</code>.
+  * <li>SQL_DATA_TYPE - Unused
+  * <li>SQL_DATETIME_SUB - Unused
+  * <li>CHAR_OCTET_LENGTH - For character columns, the maximum number of bytes
+  * in the column.
+  * <li>ORDINAL_POSITION - The index of the column in the table.
+  * <li>IS_NULLABLE - "NO" means no, "YES" means maybe, and an empty string
+  * means unknown.
+  * </ol>
+  *
+  * @param catalog The name of the catalog to return table from,
+  * or "" to return tables from all catalogs.
+  * @param schemaPattern A schema pattern for the schemas to return 
+  * tables from, or "" to return tables from all schemas.
+  * @param namePattern The pattern of tables names to return.
+  * @param columnPattern The pattern of column names to return.
+  *
+  * @returns A <code>ResultSet</code> with all the requested tables.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSet
+getColumns(String catalog, String schemaPattern, String namePattern,
+           String columnPattern) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the access rights that have been granted to the
+  * requested columns.  This information is returned as a <code>ResultSet</code>
+  * with the following columns:
+  * <p>
+  * <ol>
+  * <li>TABLE_CAT - The catalog the table is in, which may be 
+  * <code>null</code>.
+  * <li>TABLE_SCHEM - The schema the tables is in, which may be
+  * <code>null</code>.
+  * <li>TABLE_NAME - The name of the table.
+  * <li>COLUMN_NAME - The name of the column.
+  * <li>GRANTOR - The entity that granted the access.
+  * <li>GRANTEE - The entity granted the access.
+  * <li>PRIVILEGE - The name of the privilege granted.
+  * <li>IS_GRANTABLE - "YES" if the grantee can grant the privilege to
+  * others, "NO" if not, and <code>null</code> if unknown.
+  * </ol>
+  *
+  * @param catalog The catalog to retrieve information from, or the empty string
+  * to return entities not associated with a catalog, or <code>null</code>
+  * to return information from all catalogs.
+  * @param schema The schema to retrieve information from, or the empty string
+  * to return entities not associated with a schema.
+  * @param table The table name to return information for.
+  * @param columnPattern A pattern of column names to return information for.
+  * 
+  * @return A <code>ResultSet</code> with all the requested privileges.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSet
+getColumnPrivileges(String catalog, String schema, String table,
+                    String columnPattern) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the access rights that have been granted to the
+  * requested tables.  This information is returned as a <code>ResultSet</code>
+  * with the following columns:
+  * <p>
+  * <ol>
+  * <li>TABLE_CAT - The catalog the table is in, which may be 
+  * <code>null</code>.
+  * <li>TABLE_SCHEM - The schema the tables is in, which may be
+  * <code>null</code>.
+  * <li>TABLE_NAME - The name of the table.
+  * <li>GRANTOR - The entity that granted the access.
+  * <li>GRANTEE - The entity granted the access.
+  * <li>PRIVILEGE - The name of the privilege granted.
+  * <li>IS_GRANTABLE - "YES" if the grantee can grant the privilege to
+  * others, "NO" if not, and <code>null</code> if unknown.
+  * </ol>
+  *
+  * @param catalog The catalog to retrieve information from, or the empty string
+  * to return entities not associated with a catalog, or <code>null</code>
+  * to return information from all catalogs.
+  * @param schema The schema to retrieve information from, or the empty string
+  * to return entities not associated with a schema.
+  * @param tablePattern The table name pattern of tables to return 
+  * information for.
+  * 
+  * @return A <code>ResultSet</code> with all the requested privileges.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSet
+getTablePrivileges(String catalog, String schema, String table)
+                   throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the best set of columns for uniquely identifying
+  * a row.  It returns this information as a <code>ResultSet</code> with
+  * the following columns:
+  * <p>
+  * <ol>
+  * <li>SCOPE - The scope of the results returned.  This is one of the 
+  * constants defined in this class (<code>bestRowTemporary</code>,
+  * <code>bestRowTransaction</code>, or <code>bestRowSession</code).
+  * <li>COLUMN_NAME - The name of the column.
+  * <li>DATA_TYPE - The SQL type of the column. This is one of the constants
+  * defined in <code>Types</code>.
+  * <li>TYPE_NAME - The string name of the data type for this column.
+  * <li>COLUMN_SIZE - The precision of the columns
+  * <li>BUFFER_LENGTH - Unused
+  * <li>DECIMAL_DIGITS - The scale of the column.
+  * <li>PSEUDO_COLUMN - Whether or not the best row identifier is a
+  * pseudo_column.  This is one of the constants defined in this class 
+  * (<code>bestRowUnknown</code>, <code>bestRowNotPseudo</code>, or
+  * <code>bestRowPseudo</code>).
+  * </ol>
+  *
+  * @param catalog The catalog to retrieve information from, or the empty string
+  * to return entities not associated with a catalog, or <code>null</code>
+  * to return information from all catalogs.
+  * @param schema The schema to retrieve information from, or the empty string
+  * to return entities not associated with a schema.
+  * @param table The table name to return information for.
+  * @param columnPattern A pattern of column names to return information for.
+  * @param scope One of the best row id scope constants from this class.
+  * @param nullable <code>true</code> to include columns that are nullable,
+  * <code>false</code> otherwise.
+  * 
+  * @return A <code>ResultSet</code> with the best row identifier.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSet
+getBestRowIdentifier(String catalog, String schema, String table,
+                     int scope, boolean nullable) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the set of columns that are automatically updated
+  * when the row is update. It returns this information as a 
+  * <code>ResultSet</code> with the following columns:
+  * <p>
+  * <ol>
+  * <li>SCOPE - Unused
+  * <li>COLUMN_NAME - The name of the column.
+  * <li>DATA_TYPE - The SQL type of the column. This is one of the constants
+  * defined in <code>Types</code>.
+  * <li>TYPE_NAME - The string name of the data type for this column.
+  * <li>COLUMN_SIZE - The precision of the columns
+  * <li>BUFFER_LENGTH - Unused
+  * <li>DECIMAL_DIGITS - The scale of the column.
+  * <li>PSEUDO_COLUMN - Whether or not the best row identifier is a
+  * pseudo_column.  This is one of the constants defined in this class 
+  * (<code>versionRowUnknown</code>, <code>versionRowNotPseudo</code>, or
+  * <code>versionRowPseudo</code>).
+  * </ol>
+  *
+  * @param catalog The catalog to retrieve information from, or the empty string
+  * to return entities not associated with a catalog, or <code>null</code>
+  * to return information from all catalogs.
+  * @param schema The schema to retrieve information from, or the empty string
+  * to return entities not associated with a schema.
+  * @param table The table name to return information for.
+  * @param columnPattern A pattern of column names to return information for.
+  *
+  * @return A <code>ResultSet</code> with the version columns.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSet
+getVersionColumns(String catalog, String schema, String table)
+                  throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns a list of a table's primary key columns.  These
+  * are returned as a <code>ResultSet</code> with the following columns.
+  * <p>
+  * <ol>
+  * <li>TABLE_CAT - The catalog of the table, which may be <code>null</code>.
+  * <li>TABLE_SCHEM - The schema of the table, which may be <code>null</code>.
+  * <li>TABLE_NAME - The name of the table.
+  * <li>COLUMN_NAME - The name of the column.
+  * <li>KEY_SEQ - The sequence number of the column within the primary key.
+  * <li>PK_NAME - The name of the primary key, which may be <code>null</code>.
+  *
+  * @param catalog The catalog to retrieve information from, or the empty string
+  * to return entities not associated with a catalog, or <code>null</code>
+  * to return information from all catalogs.
+  * @param schema The schema to retrieve information from, or the empty string
+  * to return entities not associated with a schema.
+  * @param table The table name to return information for.
+  * @param columnPattern A pattern of column names to return information for.
+  *
+  * @return A <code>ResultSet</code> with the primary key columns.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSet
+getPrimaryKeys(String catalog, String schema, String table)
+               throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns a list of the table's foreign keys.  These are
+  * returned as a <code>ResultSet</code> with the following columns:
+  * <p>
+  * <ol>
+  * <li>PKTABLE_CAT - The catalog of the table the key was imported from.
+  * <li>PKTABLE_SCHEM - The schema of the table the key was imported from.
+  * <li>PKTABLE_NAME - The name of the table the key was imported from.
+  * <li>PKCOLUMN_NAME - The name of the column that was imported.
+  * <li>FKTABLE_CAT - The foreign key catalog name.
+  * <li>FKTABLE_SCHEM - The foreign key schema name.
+  * <li>FKTABLE_NAME - The foreign key table name.
+  * <li>FKCOLUMN_NAME - The foreign key column name.
+  * <li>KEY_SEQ - The sequence number of the column within the foreign key.
+  * <li>UPDATE_RULE - How the foreign key behaves when the primary key is
+  * updated.  This is one of the constants defined in this class 
+  * (<code>importedNoAction</code>, <code>importedKeyCascade</code>,
+  * <code>importedKeySetNull</code>, <code>importedKeySetDefault</code>, or
+  * <code>importedKeyRestrict</code>).
+  * <li>DELETE_RULE - How the foreign key behaves when the primary key is
+  * deleted.  This is one of the constants defined in this class 
+  * (<code>importedNoAction</code>, <code>importedKeyCascade</code>,
+  * <code>importedKeySetNull</code>, or <code>importedKeySetDefault</code>)
+  * <li>FK_NAME - The name of the foreign key.
+  * <li>PK_NAME - The name of the primary key.
+  * <li>DEFERRABILITY - The deferrability value.  This is one of the
+  * constants defined in this table (<code>importedKeyInitiallyDeferred</code>,
+  * <code>importedKeyInitiallyImmediate</code>, or
+  * <code>importedKeyNotDeferrable</code>).
+  *
+  * @param catalog The catalog to retrieve information from, or the empty string
+  * to return entities not associated with a catalog, or <code>null</code>
+  * to return information from all catalogs.
+  * @param schema The schema to retrieve information from, or the empty string
+  * to return entities not associated with a schema.
+  * @param table The table name to return information for.
+  *
+  * @return A <code>ResultSet</code> with the foreign key columns.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSet
+getImportedKeys(String catalog, String schema, String table)
+                throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns a list of the table's which use this table's
+  * primary key as a foreign key.  The information is
+  * returned as a <code>ResultSet</code> with the following columns:
+  * <p>
+  * <ol>
+  * <li>PKTABLE_CAT - The catalog of the table the key was imported from.
+  * <li>PKTABLE_SCHEM - The schema of the table the key was imported from.
+  * <li>PKTABLE_NAME - The name of the table the key was imported from.
+  * <li>PKCOLUMN_NAME - The name of the column that was imported.
+  * <li>FKTABLE_CAT - The foreign key catalog name.
+  * <li>FKTABLE_SCHEM - The foreign key schema name.
+  * <li>FKTABLE_NAME - The foreign key table name.
+  * <li>FKCOLUMN_NAME - The foreign key column name.
+  * <li>KEY_SEQ - The sequence number of the column within the foreign key.
+  * <li>UPDATE_RULE - How the foreign key behaves when the primary key is
+  * updated.  This is one of the constants defined in this class 
+  * (<code>importedNoAction</code>, <code>importedKeyCascade</code>,
+  * <code>importedKeySetNull</code>, <code>importedKeySetDefault</code>, or
+  * <code>importedKeyRestrict</code>).
+  * <li>DELETE_RULE - How the foreign key behaves when the primary key is
+  * deleted.  This is one of the constants defined in this class 
+  * (<code>importedNoAction</code>, <code>importedKeyCascade</code>,
+  * <code>importedKeySetNull</code>, or <code>importedKeySetDefault</code>)
+  * <li>FK_NAME - The name of the foreign key.
+  * <li>PK_NAME - The name of the primary key.
+  * <li>DEFERRABILITY - The deferrability value.  This is one of the
+  * constants defined in this table (<code>importedKeyInitiallyDeferred</code>,
+  * <code>importedKeyInitiallyImmediate</code>, or
+  * <code>importedKeyNotDeferrable</code>).
+  *
+  * @param catalog The catalog to retrieve information from, or the empty string
+  * to return entities not associated with a catalog, or <code>null</code>
+  * to return information from all catalogs.
+  * @param schema The schema to retrieve information from, or the empty string
+  * to return entities not associated with a schema.
+  * @param table The table name to return information for.
+  *
+  * @return A <code>ResultSet</code> with the requested information
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSet
+getExportedKeys(String catalog, String schema, String table)
+                throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns a description of how one table imports another
+  * table's primary key as a foreign key.  The information is
+  * returned as a <code>ResultSet</code> with the following columns:
+  * <p>
+  * <ol>
+  * <li>PKTABLE_CAT - The catalog of the table the key was imported from.
+  * <li>PKTABLE_SCHEM - The schema of the table the key was imported from.
+  * <li>PKTABLE_NAME - The name of the table the key was imported from.
+  * <li>PKCOLUMN_NAME - The name of the column that was imported.
+  * <li>FKTABLE_CAT - The foreign key catalog name.
+  * <li>FKTABLE_SCHEM - The foreign key schema name.
+  * <li>FKTABLE_NAME - The foreign key table name.
+  * <li>FKCOLUMN_NAME - The foreign key column name.
+  * <li>KEY_SEQ - The sequence number of the column within the foreign key.
+  * <li>UPDATE_RULE - How the foreign key behaves when the primary key is
+  * updated.  This is one of the constants defined in this class 
+  * (<code>importedNoAction</code>, <code>importedKeyCascade</code>,
+  * <code>importedKeySetNull</code>, <code>importedKeySetDefault</code>, or
+  * <code>importedKeyRestrict</code>).
+  * <li>DELETE_RULE - How the foreign key behaves when the primary key is
+  * deleted.  This is one of the constants defined in this class 
+  * (<code>importedNoAction</code>, <code>importedKeyCascade</code>,
+  * <code>importedKeySetNull</code>, or <code>importedKeySetDefault</code>)
+  * <li>FK_NAME - The name of the foreign key.
+  * <li>PK_NAME - The name of the primary key.
+  * <li>DEFERRABILITY - The deferrability value.  This is one of the
+  * constants defined in this table (<code>importedKeyInitiallyDeferred</code>,
+  * <code>importedKeyInitiallyImmediate</code>, or
+  * <code>importedKeyNotDeferrable</code>).
+  *
+  * @param primCatalog The catalog to retrieve information from, or the empty string
+  * to return entities not associated with a catalog, or <code>null</code>
+  * to return information from all catalogs, on the exporting side.
+  * @param primSchema The schema to retrieve information from, or the empty string
+  * to return entities not associated with a schema, on the exporting side.
+  * @param primTable The table name to return information for, on the exporting
+  * side.
+  * @param forCatalog The catalog to retrieve information from, or the empty string
+  * to return entities not associated with a catalog, or <code>null</code>
+  * to return information from all catalogs, on the importing side.
+  * @param forSchema The schema to retrieve information from, or the empty string
+  * to return entities not associated with a schema on the importing side.
+  * @param forTable The table name to return information for on the importing
+  * side.
+  *
+  * @return A <code>ResultSet</code> with the requested information
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSet
+getCrossReference(String primCatalog, String primSchema, String primTable,
+                  String forCatalog, String forSchema, String forTable)
+                  throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns a list of the SQL types supported by this
+  * database.  The information is returned as a <code>ResultSet</code>
+  * with the following columns:
+  * <p>
+  * <ol>
+  * <li>TYPE_NAME - The name of the data type.
+  * <li>DATA_TYPE - A data type constant from <code>Types</code> for this
+  * type.
+  * <li>PRECISION - The maximum precision of this type.
+  * <li>LITERAL_PREFIX - Prefix value used to quote a literal, which may be
+  * <code>null</code>.
+  * <li>LITERAL_SUFFIX - Suffix value used to quote a literal, which may be
+  * <code>null</code>.
+  * <li>CREATE_PARAMS - The parameters used to create the type, which may be
+  * <code>null</code>.
+  * <li>NULLABLE - Whether or not this type supports NULL values.  This will
+  * be one of the constants defined in this interface 
+  * (<code>typeNoNulls</code>, <code>typeNullable</code>, or
+  * <code>typeNullableUnknown</code>).
+  * <li>CASE_SENSITIVE - Whether or not the value is case sensitive.
+  * <li>SEARCHABLE - Whether or not "LIKE" expressions are supported in
+  * WHERE clauses for this type.  This will be one of the constants defined
+  * in this interface (<code>typePredNone</code>, <code>typePredChar</code>,
+  * <code>typePredBasic</code>, or <code>typeSearchable</code>).
+  * <li>UNSIGNED_ATTRIBUTE - Is the value of this type unsigned.
+  * <li>FIXED_PREC_SCALE - Whether or not this type can be used for money.
+  * <li>AUTO_INCREMENT - Whether or not this type supports auto-incrementing.
+  * <li>LOCAL_TYPE_NAME - A localized name for this data type.
+  * <li>MINIMUM_SCALE - The minimum scale supported by this type.
+  * <li>MAXIMUM_SCALE - The maximum scale supported by this type.
+  * <li>SQL_DATA_TYPE - Unused.
+  * <li>SQL_DATETIME_SUB - Unused.
+  * <li>NUM_PREC_RADIX - The radix of this data type.
+  * </ol>
+  * 
+  * @return A <code>ResultSet</code> with the list of available data types.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSet
+getTypeInfo() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns information about a tables indices and statistics.
+  * It is returned as a <code>ResultSet</code> with the following columns:
+  * <p>
+  * <ol>
+  * <li>TABLE_CAT - The catalog of the table, which may be <code>null</code>.
+  * <li>TABLE_SCHEM - The schema of the table, which may be <code>null</code>.
+  * <li>TABLE_NAME - The name of the table.
+  * <li>NON_UNIQUE - Are index values non-unique?
+  * <li>INDEX_QUALIFIER The index catalog, which may be <code>null</code>
+  * <li>INDEX_NAME - The name of the index.
+  * <li>TYPE - The type of index, which will be one of the constants defined
+  * in this interface (<code>tableIndexStatistic</code>,
+  * <code>tableIndexClustered</code>, <code>tableIndexHashed</code>, or
+  * <code>tableIndexOther</code>).
+  * <li>ORDINAL_POSITION - The sequence number of this column in the index.
+  * This will be 0 when the index type is <code>tableIndexStatistic</code>.
+  * <li>COLUMN_NAME - The name of this column in the index.
+  * <li>ASC_OR_DESC - "A" for an ascending sort sequence, "D" for a
+  * descending sort sequence or <code>null</code> if a sort sequence is not
+  * supported.
+  * <li>CARDINALITY - The number of unique rows in the index, or the number
+  * of rows in the table if the index type is <code>tableIndexStatistic</code>.
+  * <li>PAGES - The number of pages used for the index, or the number of pages
+  * in the table if the index type is <code>tableIndexStatistic</code>.
+  * <li>FILTER_CONDITION - The filter condition for this index, which may be
+  * <code>null</code>.
+  *
+  * @param catalog The catalog to retrieve information from, or the empty string
+  * to return entities not associated with a catalog, or <code>null</code>
+  * to return information from all catalogs.
+  * @param schema The schema to retrieve information from, or the empty string
+  * to return entities not associated with a schema.
+  * @param table The table name to return information for.
+  * @param unique <code>true</code> to return only unique indexes, 
+  * <code>false</code> otherwise.
+  * @param approx <code>true</code> if data values can be approximations,
+  * <code>false</code> otherwise.
+  *
+  * @return A <code>ResultSet</code> with the requested index information
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSet
+getIndexInfo(String catalog, String schema, String table, boolean unique,
+             boolean approx) throws SQLException; 
+
+} // interface DatabaseMetaData
+
Index: java/sql/Date.java
===================================================================
RCS file: Date.java
diff -N Date.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ Date.java	Tue Apr 11 02:04:07 2000
@@ -0,0 +1,133 @@
+/* Date.java -- Wrapper around java.util.Date
+   Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.sql;
+
+import java.text.SimpleDateFormat;
+
+/**
+  * This class is a wrapper around java.util.Date to allow the JDBC
+  * driver to identify the value as a SQL Date.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public class Date extends java.util.Date implements java.io.Serializable
+{
+
+/*
+ * Class Variables
+ */
+
+/**
+  * Used for parsing and formatting this date.
+  */
+private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
+/*************************************************************************/
+
+/*
+ * Class Methods
+ */
+
+/**
+  * This method returns a new instance of this class by parsing a
+  * date in JDBC format into a Java date.
+  *
+  * @param str The string to parse.
+  *
+  * @return The resulting <code>java.sql.Date</code> value. 
+  */
+public static Date
+valueOf(String str)
+{
+  try
+    {
+      java.util.Date d = (java.util.Date)sdf.parseObject(str);
+      return(new Date(d.getTime()));
+    }
+  catch(Exception e)
+    {
+      return(null);
+    }
+}
+
+/*************************************************************************/
+
+/*
+ * Constructors
+ */
+
+/**
+  * This method initializes a new instance of this class with the
+  * specified year, month, and day.
+  *
+  * @param year The year of this date minue 1900.
+  * @param month The month of this date (0-11).
+  * @param day The day of this date (1-31).
+  *
+  * @deprecated
+  */
+public 
+Date(int year, int month, int day)
+{
+  super(year, month, day);
+}
+
+/*************************************************************************/
+
+/**
+  * This method initializes a new instance of this class with the
+  * specified time value representing the number of seconds since 
+  * Jan 1, 1970 at 12:00 midnight GMT.
+  *
+  * @param time The time value to intialize this date to.
+  */
+public
+Date(long date)
+{
+  super(date);
+}
+
+/*************************************************************************/
+
+/*
+ * Instance Methods
+ */
+
+/**
+  * This method returns this date in JDBC format.
+  *
+  * @return This date as a string.
+  */
+public String
+toString()
+{
+  return(sdf.format(this));
+}
+
+} // class Date
+
Index: java/sql/Driver.java
===================================================================
RCS file: Driver.java
diff -N Driver.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ Driver.java	Tue Apr 11 02:04:07 2000
@@ -0,0 +1,137 @@
+/* Driver.java -- A JDBC driver
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.sql;
+
+import java.util.Properties;
+
+/**
+  * This interface specifies a mechanism for accessing a JDBC database
+  * driver.  When the class implementing this method is loaded, it should
+  * register an instance of itself with the <code>DriverManager</code> in
+  * a static initializer.  
+  * <p>
+  * Because the <code>DriverManager</code> might attempt to use several
+  * drivers to find one that can connect to the requested database, 
+  * this driver should not cause large numbers of classes and code to
+  * be loaded.  If another driver is the one that ends up performing the
+  * request, any loading done by this driver would be wasted.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public interface Driver
+{
+
+/**
+  * This method returns the major version number of the driver.
+  *
+  * @return The major version number of the driver.
+  */
+public abstract int
+getMajorVersion();
+
+/*************************************************************************/
+
+/**
+  * This method returns the minor version number of the driver.
+  *
+  * @return The minor version number of the driver.
+  */
+public abstract int
+getMinorVersion();
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the driver is JDBC compliant.  This
+  * method should only return <code>true</code> if the driver has been
+  * certified as JDBC compliant.
+  *
+  * @return <code>true</code> if the driver has been certified JDBC compliant,
+  * <code>false</code> otherwise.
+  */
+public abstract boolean
+jdbcCompliant();
+
+/*************************************************************************/
+
+/**
+  * This method returns an array of possible properties that could be
+  * used to connect to the specified database.
+  *
+  * @param url The URL string of the database to connect to.
+  * @param properties The list of properties the caller is planning to use
+  * to connect to the database.
+  *
+  * @return A list of possible additional properties for a connection to this
+  * database.  This list may be empty.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract DriverPropertyInfo[]
+getPropertyInfo(String url, Properties properties) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the driver believes it can connect to
+  * the specified database.  The driver should only test whether it 
+  * understands and accepts the URL. It should not necessarily attempt to 
+  * probe the database for a connection.
+  *
+  * @param The database URL string.
+  *
+  * @return <code>true</code> if the drivers can connect to the database, 
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+acceptsURL(String url) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method connects to the specified database using the connection
+  * properties supplied.  If the driver does not understand the database
+  * URL, it should return <code>null</code> instead of throwing an
+  * exception since the <code>DriverManager</code> will probe a driver
+  * in this manner.
+  * 
+  * @param url The URL string for this connection.
+  * @param properties The list of database connection properties.
+  *
+  * @return A <code>Connection</code> object for the newly established
+  * connection, or <code>null</code> if the URL is not understood.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract Connection
+connect(String url, Properties properties) throws SQLException;
+
+} // interface Driver
+
Index: java/sql/DriverManager.java
===================================================================
RCS file: DriverManager.java
diff -N DriverManager.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ DriverManager.java	Tue Apr 11 02:04:07 2000
@@ -0,0 +1,336 @@
+/* DriverManager.java -- Manage JDBC drivers
+   Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.sql;
+
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+import java.util.Properties;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+/**
+  * This class manages the JDBC drivers in the system. It maintains a
+  * registry of drivers and locates the appropriate driver to handle a
+  * JDBC database URL.
+  * <p>
+  * On startup, <code>DriverManager</code> loads all the managers specified
+  * by the system property <code>jdbc.drivers</code>.  The value of this
+  * property should be a colon separated list of fully qualified driver
+  * class names.  Additional drivers can be loaded at any time by
+  * simply loading the driver class with <code>class.forName(String)</code>.
+  * The driver should automatically register itself in a static 
+  * initializer.
+  * <p>
+  * The methods in this class are all <code>static</code>. This class
+  * cannot be instantiated.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public class DriverManager 
+{
+
+/*
+ * Class Variables
+ */
+
+/**
+  * This is the log stream for JDBC drivers.
+  */
+private static PrintStream log_stream;
+
+/**
+  * This is the log writer for JDBC drivers.
+  */
+private static PrintWriter log_writer;
+
+/**
+  * This is the login timeout used by JDBC drivers.
+  */
+private static int login_timeout;
+
+/**
+  * This is the list of JDBC drivers that are loaded.
+  */
+private static Vector drivers;
+ // Hmm, seems like we might want to do a Hashtable and lookup by something,
+ // but what would it be?
+
+// Load all drivers on startup
+static
+{
+  drivers = new Vector();
+
+  String driver_string = System.getProperty("jdbc.drivers");
+  if (driver_string != null)
+    {
+      StringTokenizer st = new StringTokenizer(driver_string);
+      while (st.hasMoreTokens())
+        {
+          String driver_classname = st.nextToken();
+
+          try
+            {
+              Class.forName(driver_classname); // The driver registers itself
+            }
+          catch (Exception e) { ; } // Ignore not founds
+        }
+    }
+
+}
+  
+/*************************************************************************/
+
+/*
+ * Class Methods
+ */
+
+/**
+  * This method returns the login timeout in use by JDBC drivers systemwide.
+  *
+  * @return The login timeout.
+  */
+public static int
+getLoginTimeout()
+{
+  return(login_timeout);
+}
+
+/*************************************************************************/
+
+/**
+  * This method set the login timeout used by JDBC drivers.  This is a
+  * system-wide parameter that applies to all drivers.
+  *
+  * @param login_timeout The new login timeout value.
+  */
+public static void
+setLoginTimeout(int login_timeout)
+{
+  DriverManager.login_timeout = login_timeout;
+}
+
+/*************************************************************************/
+
+/**
+  * This method returns the log stream in use by JDBC.
+  *
+  * @return The log stream in use by JDBC.
+  *
+  * @deprecated Use <code>getLogWriter()</code> instead.
+  */
+public static PrintStream
+getLogStream()
+{
+  return(log_stream);
+}
+
+/*************************************************************************/
+
+/**
+  * This method sets the log stream in use by JDBC.
+  *
+  * @param log_stream The log stream in use by JDBC.
+  *
+  * @deprecated Use <code>setLogWriter</code> instead.
+  */
+public static void
+setLogStream(PrintStream log_stream)
+{
+  DriverManager.log_stream = log_stream;
+}
+
+/*************************************************************************/
+
+/**
+  * This method prints the specified line to the log stream.
+  *
+  * @param str The string to write to the log stream.
+  */
+public static void
+println(String str)
+{
+  if (log_stream != null) // Watch for user not using logging
+    log_stream.println(str);
+}
+
+/*************************************************************************/
+
+/**
+  * This method registers a new driver with the manager.  This is normally
+  * called by the driver itself in a static initializer.
+  *
+  * @param driver The new <code>Driver</code> to add.
+  */
+public static void
+registerDriver(Driver driver)
+{
+  if (!drivers.contains(driver))
+    drivers.addElement(driver);
+}
+
+/*************************************************************************/
+
+/**
+  * This method de-registers a driver from the manager.
+  *
+  * @param driver The <code>Driver</code> to unregister.
+  */
+public static void
+deregisterDriver(Driver driver)
+{
+  if (drivers.contains(driver))
+    drivers.removeElement(driver);
+}
+
+/*************************************************************************/
+
+/**
+  * This method returns a list of all the currently loaded JDBC drivers which
+  * the current caller has access to.
+  *
+  * @return An <code>Enumeration</code> of all currently loaded JDBC drivers.
+  */
+public static Enumeration
+getDrivers()
+{
+  return(drivers.elements());
+}
+
+/*************************************************************************/
+
+/**
+  * This method returns a driver that can connect to the specified
+  * JDBC URL string.  This will be selected from among drivers loaded
+  * at initialization time and those drivers manually loaded by the
+  * same class loader as the caller.
+  *
+  * @param url The JDBC URL string to find a driver for.
+  *
+  * @return A <code>Driver</code> that can connect to the specified
+  * URL, or <code>null</code> if a suitable driver cannot be found.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public static Driver
+getDriver(String url) throws SQLException
+{
+  // FIXME: Limit driver search to the appropriate subset of loaded drivers.
+
+  Enumeration e = drivers.elements();
+  while(e.hasMoreElements())
+    {
+      Driver d = (Driver)e.nextElement();
+      if (d.acceptsURL(url))
+        return(d);
+    }
+
+  return(null);
+}
+
+/*************************************************************************/
+
+/**
+  * This method attempts to return a connection to the specified
+  * JDBC URL string.
+  *
+  * @param url The JDBC URL string to connect to.
+  *
+  * @return A <code>Connection</code> to that URL.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public static Connection
+getConnection(String url) throws SQLException
+{
+  return(getConnection(url, new Properties()));
+}
+
+/*************************************************************************/
+
+/**
+  * This method attempts to return a connection to the specified
+  * JDBC URL string using the specified username and password.
+  *
+  * @param url The JDBC URL string to connect to.
+  * @param user The username to connect with.
+  * @param password The password to connect with.
+  *
+  * @return A <code>Connection</code> to that URL.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public static Connection
+getConnection(String url, String user, String password) throws SQLException
+{
+  Properties p = new Properties();
+
+  p.setProperty("user", user);
+  p.setProperty("password", password);
+
+  return(getConnection(url, p));
+}
+
+/*************************************************************************/
+
+/**
+  * This method attempts to return a connection to the specified
+  * JDBC URL string using the specified connection properties.
+  *
+  * @param url The JDBC URL string to connect to.
+  * @param properties The connection properties.
+  *
+  * @return A <code>Connection</code> to that URL.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public static Connection
+getConnection(String url, Properties properties) throws SQLException
+{
+  Driver d = getDriver(url);
+  if (d == null)
+    throw new SQLException("Driver not found for URL: " + url);
+
+  return(d.connect(url, properties));
+}
+
+/*************************************************************************/
+
+/*
+ * Constructors
+ */
+
+// Keep bozos from trying to instantiate us.
+private
+DriverManager()
+{
+  ;
+}
+
+} // class DriverManager 
+
Index: java/sql/DriverPropertyInfo.java
===================================================================
RCS file: DriverPropertyInfo.java
diff -N DriverPropertyInfo.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ DriverPropertyInfo.java	Tue Apr 11 02:04:07 2000
@@ -0,0 +1,91 @@
+/* DriverPropertyInfo.java -- Property information about drivers.
+   Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.sql;
+
+/**
+  * This class holds a driver property that can be used for querying or
+  * setting driver configuration parameters.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public class DriverPropertyInfo
+{
+
+/*
+ * Instance Variables
+ */
+
+/**
+  * The name of the property.
+  */
+public String name;
+
+/**
+  * This is the value of the property.
+  */
+public String value;
+
+/**
+  * A description of the property, possibly <code>null</code>.
+  */
+public String description;
+
+/**
+  * A flag indicating whether or not a value for this property is required
+  * in order to connect to the database.
+  */
+public boolean required;
+
+/**
+  * If values are restricted to certain choices, this is the list of valid
+  * ones.  Otherwise it is <code>null</code>.
+  */
+public String[] choices;
+
+/*************************************************************************/
+
+/*
+ * Constructors
+ */
+
+/**
+  * This method initializes a new instance of <code>DriverPropertyInfo</code>
+  * with the specified name and value.  All other fields are defaulted.
+  *
+  * @param name The name of the property.
+  * @param value The value to assign to the property.
+  */
+public
+DriverPropertyInfo(String name, String value)
+{
+  this.name = name;
+  this.value = value;
+}
+
+} // DriverPropertyInfo
+
Index: java/sql/PreparedStatement.java
===================================================================
RCS file: PreparedStatement.java
diff -N PreparedStatement.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ PreparedStatement.java	Tue Apr 11 02:04:07 2000
@@ -0,0 +1,387 @@
+/* PreparedStatement.java -- Interface for pre-compiled statements.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.sql;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.math.BigDecimal;
+
+/**
+  * This interface provides a mechanism for executing pre-compiled
+  * statements.  This provides greater efficiency when calling the same
+  * statement multiple times.  Parameters are allowed in a statement,
+  * providings for maximum reusability.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public interface PreparedStatement extends Statement
+{
+
+/**
+  * This method populates the specified parameter with a SQL NULL value
+  * for the specified type.
+  *
+  * @param index The index of the parameter to set.
+  * @param type The SQL type identifier of the parameter from <code>Types</code>
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setNull(int index, int type) throws SQLException;
+  
+/*************************************************************************/
+
+/**
+  * This method sets the specified parameter from the given Java
+  * <code>boolean</code> value.
+  *
+  * @param index The index of the parameter value to set.
+  * @param value The value of the parameter.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setBoolean(int index, boolean value) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the specified parameter from the given Java
+  * <code>byte</code> value.
+  *
+  * @param index The index of the parameter value to set.
+  * @param value The value of the parameter.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setByte(int index, byte value) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the specified parameter from the given Java
+  * <code>short</code> value.
+  *
+  * @param index The index of the parameter value to set.
+  * @param value The value of the parameter.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setShort(int index, short value) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the specified parameter from the given Java
+  * <code>int</code> value.
+  *
+  * @param index The index of the parameter value to set.
+  * @param value The value of the parameter.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setInt(int index, int value) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the specified parameter from the given Java
+  * <code>long</code> value.
+  *
+  * @param index The index of the parameter value to set.
+  * @param value The value of the parameter.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setLong(int index, long value) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the specified parameter from the given Java
+  * <code>float</code> value.
+  *
+  * @param index The index of the parameter value to set.
+  * @param value The value of the parameter.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setFloat(int index, float value) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the specified parameter from the given Java
+  * <code>double</code> value.
+  *
+  * @param index The index of the parameter value to set.
+  * @param value The value of the parameter.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setDouble(int index, double value) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the specified parameter from the given Java
+  * <code>String</code> value.
+  *
+  * @param index The index of the parameter value to set.
+  * @param value The value of the parameter.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setString(int index, String value) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the specified parameter from the given Java
+  * <code>byte</code> array value.
+  *
+  * @param index The index of the parameter value to set.
+  * @param value The value of the parameter.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setBytes(int index, byte[] value) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the specified parameter from the given Java
+  * <code>java.math.BigDecimal</code> value.
+  *
+  * @param index The index of the parameter value to set.
+  * @param value The value of the parameter.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setBigDecimal(int index, java.math.BigDecimal value) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the specified parameter from the given Java
+  * <code>java.sql.Date</code> value.
+  *
+  * @param index The index of the parameter value to set.
+  * @param value The value of the parameter.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setDate(int index, java.sql.Date value) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the specified parameter from the given Java
+  * <code>java.sql.Time</code> value.
+  *
+  * @param index The index of the parameter value to set.
+  * @param value The value of the parameter.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setTime(int index, java.sql.Time value) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the specified parameter from the given Java
+  * <code>java.sql.Timestamp</code> value.
+  *
+  * @param index The index of the parameter value to set.
+  * @param value The value of the parameter.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setTimestamp(int index, java.sql.Timestamp value) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the specified parameter from the given Java
+  * ASCII <code>InputStream</code> value.
+  *
+  * @param index The index of the parameter value to set.
+  * @param value The value of the parameter.
+  * @param length The number of bytes in the stream.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setAsciiStream(int index, InputStream value, int length) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the specified parameter from the given Java
+  * Unicode UTF-8 <code>InputStream</code> value.
+  *
+  * @param index The index of the parameter value to set.
+  * @param value The value of the parameter.
+  * @param length The number of bytes in the stream.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setUnicodeStream(int index, InputStream value, int length) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the specified parameter from the given Java
+  * binary <code>InputStream</code> value.
+  *
+  * @param index The index of the parameter value to set.
+  * @param value The value of the parameter.
+  * @param length The number of bytes in the stream.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setBinaryStream(int index, InputStream value, int length) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the specified parameter from the given Java
+  * <code>Object</code> value.  The default object type to SQL type mapping
+  * will be used.
+  *
+  * @param index The index of the parameter value to set.
+  * @param value The value of the parameter.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setObject(int index, Object value) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the specified parameter from the given Java
+  * <code>Object</code> value.  The specified SQL object type will be used.
+  *
+  * @param index The index of the parameter value to set.
+  * @param value The value of the parameter.
+  * @param type The SQL type to use for the parameter, from <code>Types</code>
+  *
+  * @exception SQLException If an error occurs.
+  *
+  * @see Types
+  */
+public abstract void
+setObject(int index, Object value, int type) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the specified parameter from the given Java
+  * <code>Object</code> value.  The specified SQL object type will be used.
+  *
+  * @param index The index of the parameter value to set.
+  * @param value The value of the parameter.
+  * @param type The SQL type to use for the parameter, from <code>Types</code>
+  * @param scale The scale of the value, for numeric values only.
+  *
+  * @exception SQLException If an error occurs.
+  *
+  * @see Types
+  */
+public abstract void
+setObject(int index, Object value, int type, int scale) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method clears all of the input parameter that have been
+  * set on this statement.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+clearParameters() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method executes a prepared SQL query.
+  * Some prepared statements return multiple results; the execute method
+  * handles these complex statements as well as the simpler form of
+  * statements handled by executeQuery and executeUpdate.
+  *
+  * @return The result of the SQL statement.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+execute() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method executes a prepared SQL query and returns its ResultSet.
+  *
+  * @return The ResultSet of the SQL statement.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSet
+executeQuery() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method executes an SQL INSERT, UPDATE or DELETE statement.  SQL
+  * statements that return nothing such as SQL DDL statements can be executed.
+  *
+  * @return The result is either the row count for INSERT, UPDATE or DELETE
+  * statements; or 0 for SQL statements that return nothing.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+executeUpdate() throws SQLException;
+
+} // interface PreparedStatement
+
Index: java/sql/ResultSet.java
===================================================================
RCS file: ResultSet.java
diff -N ResultSet.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ ResultSet.java	Tue Apr 11 02:04:07 2000
@@ -0,0 +1,682 @@
+/* ResultSet.java -- A SQL statement result set.
+   Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.sql;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.math.BigDecimal;
+
+/**
+  * This interface provides access to the data set returned by a SQL
+  * statement.  An instance of this interface is returned by the various
+  * execution methods in the <code>Statement</code.
+  * <p>
+  * This class models a cursor, which can be stepped through one row at a
+  * time.  Methods are provided for accessing columns by column name or by
+  * index.
+  * <p>
+  * Note that a result set is invalidated if the statement that returned
+  * it is closed.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public interface ResultSet
+{
+
+/**
+  * This method advances to the next row in the result set.  Any streams
+  * open on the current row are closed automatically.
+  *
+  * @return <code>true</code> if the next row exists, <code>false</code>
+  * otherwise.
+  * 
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean 
+next() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method closes the result set and frees any associated resources.
+  * 
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+close() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether the value of the last column that was fetched
+  * was actually a SQL NULL value.
+  *
+  * @return <code>true</code> if the last column fetched was a NULL,
+  * <code>false</code> otherwise.
+  * 
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+wasNull() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>String</code>.
+  *
+  * @param index The index of the column to return.
+  *
+  * @return The column value as a <code>String</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getString(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>Object</code>.
+  *
+  * @param index The index of the column to return.
+  *
+  * @return The column value as an <code>Object</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract Object
+getObject(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>boolean</code>.
+  *
+  * @param index The index of the column to return.
+  *
+  * @return The column value as a <code>boolean</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+getBoolean(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>byte</code>.
+  *
+  * @param index The index of the column to return.
+  *
+  * @return The column value as a <code>byte</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract byte
+getByte(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>short</code>.
+  *
+  * @param index The index of the column to return.
+  *
+  * @return The column value as a <code>short</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract short
+getShort(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>int</code>.
+  *
+  * @param index The index of the column to return.
+  *
+  * @return The column value as a <code>int</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getInt(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>long</code>.
+  *
+  * @param index The index of the column to return.
+  *
+  * @return The column value as a <code>long</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract long
+getLong(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>float</code>.
+  *
+  * @param index The index of the column to return.
+  *
+  * @return The column value as a <code>float</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract float
+getFloat(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>double</code>.
+  *
+  * @param index The index of the column to return.
+  *
+  * @return The column value as a <code>double</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract double
+getDouble(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>BigDecimal</code>.
+  *
+  * @param index The index of the column to return.
+  * @param scale The number of digits to the right of the decimal to return.
+  *
+  * @return The column value as a <code>BigDecimal</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract BigDecimal
+getBigDecimal(int index, int scale) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * byte array.
+  *
+  * @param index The index of the column to return.
+  *
+  * @return The column value as a byte array
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract byte[]
+getBytes(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>java.sql.Date</code>.
+  *
+  * @param index The index of the column to return.
+  *
+  * @return The column value as a <code>java.sql.Date</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract java.sql.Date
+getDate(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>java.sql.Time</code>.
+  *
+  * @param index The index of the column to return.
+  *
+  * @return The column value as a <code>java.sql.Time</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract java.sql.Time
+getTime(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>java.sql.Timestamp</code>.
+  *
+  * @param index The index of the column to return.
+  *
+  * @return The column value as a <code>java.sql.Timestamp</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract java.sql.Timestamp
+getTimestamp(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as an ASCII 
+  * stream.  Note that all the data from this stream must be read before
+  * fetching the value of any other column.  Please also be aware that 
+  * calling <code>next()</code> or <code>close()</code> on this result set
+  * will close this stream as well.
+  *
+  * @param index The index of the column to return.
+  *
+  * @return The column value as an ASCII <code>InputStream</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract InputStream
+getAsciiStream(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Unicode UTF-8
+  * stream.  Note that all the data from this stream must be read before
+  * fetching the value of any other column.  Please also be aware that 
+  * calling <code>next()</code> or <code>close()</code> on this result set
+  * will close this stream as well.
+  *
+  * @param index The index of the column to return.
+  *
+  * @return The column value as a Unicode UTF-8 <code>InputStream</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract InputStream
+getUnicodeStream(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a raw byte
+  * stream.  Note that all the data from this stream must be read before
+  * fetching the value of any other column.  Please also be aware that 
+  * calling <code>next()</code> or <code>close()</code> on this result set
+  * will close this stream as well.
+  *
+  * @param index The index of the column to return.
+  *
+  * @return The column value as a raw byte <code>InputStream</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract InputStream
+getBinaryStream(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>String</code>.
+  *
+  * @param column The name of the column to return.
+  *
+  * @return The column value as a <code>String</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getString(String column) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>Object</code>.
+  *
+  * @param column The name of the column to return.
+  *
+  * @return The column value as an <code>Object</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract Object
+getObject(String column) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>boolean</code>.
+  *
+  * @param column The name of the column to return.
+  *
+  * @return The column value as a <code>boolean</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+getBoolean(String column) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>byte</code>.
+  *
+  * @param column The name of the column to return.
+  *
+  * @return The column value as a <code>byte</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract byte
+getByte(String column) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>short</code>.
+  *
+  * @param column The name of the column to return.
+  *
+  * @return The column value as a <code>short</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract short
+getShort(String column) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>int</code>.
+  *
+  * @param column The name of the column to return.
+  *
+  * @return The column value as a <code>int</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getInt(String column) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>long</code>.
+  *
+  * @param column The name of the column to return.
+  *
+  * @return The column value as a <code>long</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract long
+getLong(String column) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>float</code>.
+  *
+  * @param column The name of the column to return.
+  *
+  * @return The column value as a <code>float</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract float
+getFloat(String column) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>double</code>.
+  *
+  * @param column The name of the column to return.
+  *
+  * @return The column value as a <code>double</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract double
+getDouble(String column) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>BigDecimal</code>.
+  *
+  * @param column The name of the column to return.
+  * @param scale The number of digits to the right of the decimal to return.
+  *
+  * @return The column value as a <code>BigDecimal</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract BigDecimal
+getBigDecimal(String column, int scale) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * byte array.
+  *
+  * @param column The name of the column to return.
+  *
+  * @return The column value as a byte array
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract byte[]
+getBytes(String column) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>java.sql.Date</code>.
+  *
+  * @param column The name of the column to return.
+  *
+  * @return The column value as a <code>java.sql.Date</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract java.sql.Date
+getDate(String column) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>java.sql.Time</code>.
+  *
+  * @param column The name of the column to return.
+  *
+  * @return The column value as a <code>java.sql.Time</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract java.sql.Time
+getTime(String column) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Java
+  * <code>java.sql.Timestamp</code>.
+  *
+  * @param column The name of the column to return.
+  *
+  * @return The column value as a <code>java.sql.Timestamp</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract java.sql.Timestamp
+getTimestamp(String column) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as an ASCII 
+  * stream.  Note that all the data from this stream must be read before
+  * fetching the value of any other column.  Please also be aware that 
+  * calling <code>next()</code> or <code>close()</code> on this result set
+  * will close this stream as well.
+  *
+  * @param column The name of the column to return.
+  *
+  * @return The column value as an ASCII <code>InputStream</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract InputStream
+getAsciiStream(String column) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a Unicode UTF-8
+  * stream.  Note that all the data from this stream must be read before
+  * fetching the value of any other column.  Please also be aware that 
+  * calling <code>next()</code> or <code>close()</code> on this result set
+  * will close this stream as well.
+  *
+  * @param column The name of the column to return.
+  *
+  * @return The column value as a Unicode UTF-8 <code>InputStream</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract InputStream
+getUnicodeStream(String column) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the value of the specified column as a raw byte
+  * stream.  Note that all the data from this stream must be read before
+  * fetching the value of any other column.  Please also be aware that 
+  * calling <code>next()</code> or <code>close()</code> on this result set
+  * will close this stream as well.
+  *
+  * @param column The name of the column to return.
+  *
+  * @return The column value as a raw byte <code>InputStream</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract InputStream
+getBinaryStream(String column) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the first SQL warning associated with this result
+  * set.  Any additional warnings will be chained to this one.
+  *
+  * @return The first SQLWarning for this result set, or <code>null</code> if
+  * there are no warnings.
+  * 
+  * @exception SQLException If an error occurs.
+  */
+public abstract SQLWarning 
+getWarnings() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method clears all warnings associated with this result set.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+clearWarnings() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the name of the database cursor used by this
+  * result set.
+  *
+  * @return The name of the database cursor used by this result set.
+  * 
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getCursorName() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns data about the columns returned as part of the
+  * result set as a <code>ResultSetMetaData</code> instance.
+  *
+  * @return The <code>ResultSetMetaData</code> instance for this result set.
+  * 
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSetMetaData
+getMetaData() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the column index of the specified named column.
+  *
+  * @param column The name of the column.
+  *
+  * @return The index of the column.
+  * 
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+findColumn(String column) throws SQLException;
+
+} // interface ResultSet
+
Index: java/sql/ResultSetMetaData.java
===================================================================
RCS file: ResultSetMetaData.java
diff -N ResultSetMetaData.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ ResultSetMetaData.java	Tue Apr 11 02:04:07 2000
@@ -0,0 +1,362 @@
+/* ResultSetMetaData.java -- Returns information about the ResultSet
+   Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.sql;
+
+/**
+  * This interface provides a mechanism for obtaining information about
+  * the columns that are present in a <code>ResultSet</code>.
+  * <p>
+  * Note that in this class column indexes start at 1, not 0.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public interface ResultSetMetaData
+{
+
+/**
+  * The column does not allow NULL's.
+  */
+public static final int columnNoNulls = 0;
+
+/**
+  * The column allows NULL's.
+  */
+public static final int columnNullable = 1;
+
+/**
+  * It is unknown whether or not the column allows NULL's.
+  */
+public static final int columnNullableUnknown = 2;
+
+/*************************************************************************/
+
+/**
+  * This method returns the number of columns in the result set.
+  *
+  * @return The number of columns in the result set.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getColumnCount() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method test whether or not the column is an auto-increment column.
+  * Auto-increment columns are read-only.
+  *
+  * @param index The index of the column to test.
+  *
+  * @return <code>true</code> if the column is auto-increment, <code>false</code>
+  * otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+isAutoIncrement(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not a column is case sensitive in its values.
+  *
+  * @param index The index of the column to test.
+  *
+  * @return <code>true</code> if the column value is case sensitive,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+isCaseSensitive(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether not the specified column can be used in 
+  * a WHERE clause.
+  *
+  * @param index The index of the column to test.
+  *
+  * @return <code>true</code> if the column may be used in a WHERE clause,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+isSearchable(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the column stores a monetary value.
+  *
+  * @param index The index of the column to test.
+  *
+  * @return <code>true</code> if the column contains a monetary value,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+isCurrency(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns a value indicating whether or not the specified
+  * column may contain a NULL value.
+  *
+  * @param index The index of the column to test.
+  *
+  * @return A constant indicating whether or not the column can contain NULL,
+  * which will be one of <code>columnNoNulls</code>,
+  * <code>columnNullable</code>, or <code>columnNullableUnknown</code>.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+isNullable(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the value of the specified column
+  * is signed or unsigned.
+  *
+  * @param index The index of the column to test.
+  *
+  * @return <code>true</code> if the column value is signed, <code>false</code>
+  * otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+isSigned(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum number of characters that can be used
+  * to display a value in this column.
+  *
+  * @param index The index of the column to check.
+  *
+  * @return The maximum number of characters that can be used to display a
+  * value for this column.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getColumnDisplaySize(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns a string that should be used as a caption for this
+  * column for user display purposes.
+  *
+  * @param index The index of the column to check.
+  *
+  * @return A display string for the column.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getColumnLabel(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the name of the specified column.
+  *
+  * @param index The index of the column to return the name of.
+  *
+  * @return The name of the column.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getColumnName(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the name of the schema that contains the specified
+  * column.
+  *
+  * @param index The index of the column to check the schema name for.
+  *
+  * @return The name of the schema that contains the column.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getSchemaName(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the precision of the specified column, which is the
+  * number of decimal digits it contains.
+  *
+  * @param index The index of the column to check the precision on.
+  *
+  * @return The precision of the specified column.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getPrecision(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the scale of the specified column, which is the
+  * number of digits to the right of the decimal point.
+  *
+  * @param index The index column to check the scale of.
+  *
+  * @return The scale of the column.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getScale(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the name of the table containing the specified
+  * column.
+  *
+  * @param index The index of the column to check the table name for.
+  *
+  * @return The name of the table containing the column.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getTableName(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the name of the catalog containing the specified
+  * column.
+  *
+  * @param index The index of the column to check the catalog name for.
+  *
+  * @return The name of the catalog containing the column.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getCatalogName(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the SQL type of the specified column.  This will
+  * be one of the constants from <code>Types</code>.
+  *
+  * @param index The index of the column to check the SQL type of.
+  *
+  * @return The SQL type for this column.
+  *
+  * @exception SQLException If an error occurs.
+  *
+  * @see Types
+  */
+public abstract int
+getColumnType(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the name of the SQL type for this column.
+  *
+  * @param index The index of the column to check the SQL type name for.
+  *
+  * @return The name of the SQL type for this column.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract String
+getColumnTypeName(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the specified column is read only.
+  *
+  * @param index The index of the column to check.
+  *
+  * @return <code>true</code> if the column is read only, <code>false</code>
+  * otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+isReadOnly(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the column may be writable.  This
+  * does not guarantee that a write will be successful.
+  *
+  * @param index The index of the column to check for writability.
+  *
+  * @return <code>true</code> if the column may be writable,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+isWritable(int index) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method tests whether or not the column is writable.  This
+  * does guarantee that a write will be successful.
+  *
+  * @param index The index of the column to check for writability.
+  *
+  * @return <code>true</code> if the column is writable,
+  * <code>false</code> otherwise.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+isDefinitelyWritable(int index) throws SQLException;
+
+} // interface ResultSetMetaData
+
Index: java/sql/SQLException.java
===================================================================
RCS file: SQLException.java
diff -N SQLException.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ SQLException.java	Tue Apr 11 02:04:07 2000
@@ -0,0 +1,199 @@
+/* SQLException.java -- General SQL exception
+   Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.sql;
+
+/**
+  * This exception is thrown when a database error occurs.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public class SQLException extends Exception implements java.io.Serializable
+{
+
+/*************************************************************************/
+
+/*
+ * Instance Variables
+ */
+
+/**
+  * This is the next exception in the chain
+  * @serialized
+  */
+private SQLException next;
+
+/**
+  * This is the state of the SQL statement at the time of the error.
+  * @serialized
+  */
+private String SQLState;
+
+/**
+  * The vendor error code for this error
+  * @serialized
+  */
+private int vendorCode;
+
+/*************************************************************************/
+
+/*
+ * Constructors
+ */
+
+/**
+  * This method initializes a new instance of <code>SQLException</code>
+  * that does not have a descriptive messages and SQL state, and which
+  * has a vendor error code of 0.
+  */
+public 
+SQLException()
+{
+  this(null, null, 0);
+}
+
+/*************************************************************************/
+
+/**
+  * This method initializes a new instance of <code>SQLException</code>
+  * with the specified descriptive error message.  The SQL state of this
+  * instance will be <code>null</code> and the vendor error code will be 0.
+  *
+  * @param message A string describing the nature of the error.
+  */
+public 
+SQLException(String message)
+{
+  this(message, null, 0);
+}
+
+/*************************************************************************/
+
+/**
+  * This method initializes a new instance of <code>SQLException</code>
+  * with the specified descriptive error message and SQL state string.
+  * The vendor error code of this instance will be 0.
+  *
+  * @param message A string describing the nature of the error.
+  * @param SQLState A string containing the SQL state of the error.
+  */
+public
+SQLException(String message, String SQLState)
+{
+  this(message, SQLState, 0);
+}
+
+/*************************************************************************/
+
+/**
+  * This method initializes a nwe instance of <code>SQLException</code>
+  * with the specified descriptive error message, SQL state string, and
+  * vendor code.
+  *
+  * @param message A string describing the nature of the error.
+  * @param SQLState A string containing the SQL state of the error.
+  * @param vendorCode The vendor error code associated with this error.
+  */
+public
+SQLException(String message, String SQLState, int vendorCode)
+{
+  super(message);
+
+  this.SQLState = SQLState;
+  this.vendorCode = vendorCode;
+}
+
+/*************************************************************************/
+
+/*
+ * Instance Methods
+ */
+
+/**
+  * This method returns the SQLState information associated with this
+  * error.  The value returned is a <code>String</code> which is formatted
+  * using the XOPEN SQL state conventions.
+  *
+  * @return The SQL state, which may be <code>null</code>.
+  */
+public String
+getSQLState()
+{
+  return(SQLState);
+}
+
+/*************************************************************************/
+
+/**
+  * This method returns the vendor specific error code associated with 
+  * this error.
+  *
+  * @return The vendor specific error code associated with this error.
+  */
+public int
+getErrorCode()
+{
+  return(vendorCode);
+}
+
+/*************************************************************************/
+
+/**
+  * This method returns the exception that is chained to this object.
+  *
+  * @return The exception chained to this object, which may be 
+  * <code>null</code>.
+  */
+public SQLException
+getNextException()
+{
+  return(next);
+}
+
+/*************************************************************************/
+
+/**
+  * This method adds a new exception to the end of the chain of exceptions
+  * that are chained to this object.
+  *
+  * @param e The exception to add to the end of the chain.
+  */
+public void
+setNextException(SQLException e)
+{
+  if (e == null)
+    return;
+
+  SQLException list_entry = this;
+  while (list_entry.getNextException() != null)
+    list_entry = list_entry.getNextException();
+
+  list_entry.next = e;
+}
+
+} // class SQLException
+
Index: java/sql/SQLWarning.java
===================================================================
RCS file: SQLWarning.java
diff -N SQLWarning.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ SQLWarning.java	Tue Apr 11 02:04:07 2000
@@ -0,0 +1,136 @@
+/* SQLWarning.java -- Database access warnings.
+   Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.sql;
+
+/**
+  * This exception is thrown when a database warning occurs.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public class SQLWarning extends SQLException implements java.io.Serializable
+{
+
+/*************************************************************************/
+
+/*
+ * Constructors
+ */
+
+/**
+  * This method initializes a new instance of <code>SQLWxception</code>
+  * that does not have a descriptive messages and SQL state, and which
+  * has a vendor error code of 0.
+  */
+public 
+SQLWarning()
+{
+  this(null, null, 0);
+}
+
+/*************************************************************************/
+
+/**
+  * This method initializes a new instance of <code>SQLWarning</code>
+  * with the specified descriptive error message.  The SQL state of this
+  * instance will be <code>null</code> and the vendor error code will be 0.
+  *
+  * @param message A string describing the nature of the error.
+  */
+public 
+SQLWarning(String message)
+{
+  this(message, null, 0);
+}
+
+/*************************************************************************/
+
+/**
+  * This method initializes a new instance of <code>SQLWarning</code>
+  * with the specified descriptive error message and SQL state string.
+  * The vendor error code of this instance will be 0.
+  *
+  * @param message A string describing the nature of the error.
+  * @param SQLState A string containing the SQL state of the error.
+  */
+public
+SQLWarning(String message, String SQLState)
+{
+  this(message, SQLState, 0);
+}
+
+/*************************************************************************/
+
+/**
+  * This method initializes a nwe instance of <code>SQLWarning</code>
+  * with the specified descriptive error message, SQL state string, and
+  * vendor code.
+  *
+  * @param message A string describing the nature of the error.
+  * @param SQLState A string containing the SQL state of the error.
+  * @param vendorCode The vendor error code associated with this error.
+  */
+public
+SQLWarning(String message, String SQLState, int vendorCode)
+{
+  super(message, SQLState, vendorCode);
+}
+
+/*************************************************************************/
+
+/*
+ * Instance Methods
+ */
+
+/**
+  * This method returns the exception that is chained to this object.
+  *
+  * @return The exception chained to this object, which may be 
+  * <code>null</code>.
+  */
+public SQLWarning
+getNextWarning()
+{
+  return((SQLWarning)super.getNextException());
+}
+
+/*************************************************************************/
+
+/**
+  * This method adds a new exception to the end of the chain of exceptions
+  * that are chained to this object.
+  *
+  * @param e The exception to add to the end of the chain.
+  */
+public void
+setNextWarning(SQLWarning e)
+{
+  super.setNextException(e);
+}
+
+} // class SQLWarning
+
Index: java/sql/Statement.java
===================================================================
RCS file: Statement.java
diff -N Statement.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ Statement.java	Tue Apr 11 02:04:07 2000
@@ -0,0 +1,277 @@
+/* Statement.java -- Interface for executing SQL statements.
+   Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.sql;
+
+/**
+  * This interface provides a mechanism for executing SQL statements.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public interface Statement
+{
+
+/**
+  * This method executes the specified SQL SELECT statement and returns a
+  * (possibly empty) <code>ResultSet</code> with the results of the query.
+  *
+  * @param sql The SQL statement to execute.
+  *
+  * @return The result set of the SQL statement.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract ResultSet
+executeQuery(String sql) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method executes the specified SQL INSERT, UPDATE, or DELETE statement
+  * and returns the number of rows affected, which may be 0.
+  * 
+  * @param sql The SQL statement to execute.
+  *
+  * @return The number of rows affected by the SQL statement.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+executeUpdate(String sql) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method closes the statement and frees any associated resources.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+close() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum length of any column value in bytes.
+  *
+  * @return The maximum length of any column value in bytes.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxFieldSize() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the limit for the maximum length of any column in bytes.
+  *
+  * @param maxsize The new maximum length of any column in bytes.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setMaxFieldSize(int maxsize) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the maximum possible number of rows in a result set.
+  *
+  * @return The maximum possible number of rows in a result set.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getMaxRows() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the maximum number of rows that can be present in a
+  * result set.
+  *
+  * @param maxrows The maximum possible number of rows in a result set.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setMaxRows(int maxrows) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the local escape processing mode on or off.  The
+  * default value is on.
+  *
+  * @param escape <code>true</code> to enable local escape processing, 
+  * <code>false</code> to disable it.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setEscapeProcessing(boolean esacpe) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * The method returns the number of seconds a statement may be in process
+  * before timing out.  A value of 0 means there is no timeout.
+  *
+  * @return The SQL statement timeout in seconds.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract int
+getQueryTimeout() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the number of seconds a statement may be in process
+  * before timing out.  A value of 0 means there is no timeout.
+  *
+  * @param timeout The new SQL statement timeout value.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setQueryTimeout(int timeout) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method cancels an outstanding statement, if the database supports
+  * that operation.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+cancel() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the first SQL warning attached to this statement.
+  * Subsequent warnings will be chained to this one.
+  *
+  * @return The first SQL warning for this statement.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract SQLWarning
+getWarnings() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method clears any SQL warnings that have been attached to this
+  * statement.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+clearWarnings() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method sets the cursor name that will be used by the result set.
+  *
+  * @param name The cursor name to use for this statement.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract void
+setCursorName(String name) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method executes an arbitrary SQL statement of any time.  The
+  * methods <code>getResultSet</code>, <code>getMoreResults</code> and
+  * <code>getUpdateCount</code> retrieve the results.
+  *
+  * @return <code>true</code> if a result set was returned, <code>false</code>
+  * if an update count was returned.
+  *
+  * @exception SQLException If an error occurs.
+  */
+public abstract boolean
+execute(String sql) throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the result set of the SQL statement that was
+  * executed.  This should be called only once per result set returned.
+  *
+  * @return The result set of the query, or <code>null</code> if there was
+  * no result set (for example, if the statement was an UPDATE).
+  *
+  * @exception SQLException If an error occurs.
+  *
+  * @see execute
+  */
+public abstract ResultSet
+getResultSet() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method returns the update count of the SQL statement that was
+  * executed.  This should be called only once per executed SQL statement.
+  *
+  * @return The update count of the query, or -1 if there was no update
+  * count (for example, if the statement was a SELECT).
+  *
+  * @exception SQLException If an error occurs.
+  *
+  * @see execute
+  */
+public abstract int
+getUpdateCount() throws SQLException;
+
+/*************************************************************************/
+
+/**
+  * This method advances the result set pointer to the next result set, 
+  * which can then be retrieved using <code>getResultSet</code>
+  *
+  * @return <code>true</code> if there is another result set, 
+  * <code>false</code> otherwise (for example, the next result is an
+  * update count).
+  *
+  * @exception SQLException If an error occurs.
+  *
+  * @see execute
+  */
+public abstract boolean
+getMoreResults() throws SQLException;
+
+} // interface Statement
+
Index: java/sql/Time.java
===================================================================
RCS file: Time.java
diff -N Time.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ Time.java	Tue Apr 11 02:04:07 2000
@@ -0,0 +1,137 @@
+/* Time.java -- Wrapper around java.util.Date
+   Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.sql;
+
+import java.text.SimpleDateFormat;
+
+/**
+  * This class is a wrapper around java.util.Date to allow the JDBC
+  * driver to identify the value as a SQL Time.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public class Time extends java.util.Date implements java.io.Serializable
+{
+
+/*
+ * Class Variables
+ */
+
+/**
+  * Used for parsing and formatting this date.
+  */
+private static SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
+
+/*************************************************************************/
+
+/*
+ * Class Methods
+ */
+
+/**
+  * This method returns a new instance of this class by parsing a
+  * date in JDBC format into a Java date.
+  *
+  * @param str The string to parse.
+  *
+  * @return The resulting <code>java.sql.Time</code> value. 
+  */
+public static Time
+valueOf(String str)
+{
+  try
+    {
+      java.util.Date d = (java.util.Date)sdf.parseObject(str);
+      return(new Time(d.getTime()));
+    }
+  catch(Exception e)
+    {
+      return(null);
+    }
+}
+
+/*************************************************************************/
+
+/*
+ * Constructors
+ */
+
+/**
+  * This method initializes a new instance of this class with the
+  * specified year, month, and day.
+  *
+  * @param hour The hour for this Time (0-23)
+  * @param minute The minute for this time (0-59)
+  * @param second The second for this time (0-59)
+  *
+  * @deprecated
+  */
+public 
+Time(int hour, int minute, int second)
+{
+  super(System.currentTimeMillis());
+
+  setHours(hour);
+  setMinutes(minute);
+  setSeconds(second);
+}
+
+/*************************************************************************/
+
+/**
+  * This method initializes a new instance of this class with the
+  * specified time value representing the number of seconds since 
+  * Jan 1, 1970 at 12:00 midnight GMT.
+  *
+  * @param time The time value to intialize this <code>Time</code> to.
+  */
+public
+Time(long date)
+{
+  super(date);
+}
+
+/*************************************************************************/
+
+/*
+ * Instance Methods
+ */
+
+/**
+  * This method returns this date in JDBC format.
+  *
+  * @return This date as a string.
+  */
+public String
+toString()
+{
+  return(sdf.format(this));
+}
+
+} // class Time
+
Index: java/sql/Timestamp.java
===================================================================
RCS file: Timestamp.java
diff -N Timestamp.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ Timestamp.java	Tue Apr 11 02:04:07 2000
@@ -0,0 +1,285 @@
+/* Time.java -- Wrapper around java.util.Date
+   Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.sql;
+
+import java.text.SimpleDateFormat;
+
+/**
+  * This class is a wrapper around java.util.Date to allow the JDBC
+  * driver to identify the value as a SQL Timestamp.  Note that this
+  * class also adds an additional field for nano-seconds, and so 
+  * is not completely identical to <code>java.util.Date</code> as
+  * the <code>java.sql.Date</code> and <code>java.sql.Time</code>
+  * classes are.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public class Timestamp extends java.util.Date implements java.io.Serializable
+{
+
+/*
+ * Class Variables
+ */
+
+/**
+  * Used for parsing and formatting this date.
+  */
+  // Millisecond will have to be close enough for now.
+private static SimpleDateFormat parse_sdf = 
+  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSS");
+
+private static SimpleDateFormat format_sdf =
+  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+/*************************************************************************/
+
+/*
+ * Instance Variables
+ */
+
+/**
+  * @serial The nanosecond value for this object
+  */
+private int nanos;
+
+/*************************************************************************/
+
+/*
+ * Class Methods
+ */
+
+/**
+  * This method returns a new instance of this class by parsing a
+  * date in JDBC format into a Java date.
+  *
+  * @param str The string to parse.
+  *
+  * @return The resulting <code>java.sql.Timestamp</code> value. 
+  */
+public static Timestamp
+valueOf(String str)
+{
+  try
+    {
+      Date d = (Date)parse_sdf.parseObject(str);
+      return(new Timestamp(d.getTime()));
+    }
+  catch(Exception e)
+    {
+      return(null);
+    }
+}
+
+/*************************************************************************/
+
+/*
+ * Constructors
+ */
+
+/**
+  * This method initializes a new instance of this class with the
+  * specified year, month, and day.
+  *
+  * @param year The year for this Timestamp (year - 1900)
+  * @param month The month for this Timestamp (0-11)
+  * @param day The day for this Timestamp (1-31)
+  * @param hour The hour for this Timestamp (0-23)
+  * @param minute The minute for this Timestamp (0-59)
+  * @param second The second for this Timestamp (0-59)
+  * @param nanos The nanosecond value for this Timestamp (0 to 999,999,9999)
+  *
+  * @deprecated
+  */
+public 
+Timestamp(int year, int month, int day, int hour, int minute, int second,
+          int nanos)
+{
+  super(year, month, day, hour, minute, second);
+
+  this.nanos = nanos;
+}
+
+/*************************************************************************/
+
+/**
+  * This method initializes a new instance of this class with the
+  * specified time value representing the number of seconds since 
+  * Jan 1, 1970 at 12:00 midnight GMT.
+  *
+  * @param time The time value to intialize this <code>Time</code> to.
+  */
+public
+Timestamp(long date)
+{
+  super(date);
+}
+
+/*************************************************************************/
+
+/*
+ * Instance Methods
+ */
+
+/**
+  * This method returns this date in JDBC format.
+  *
+  * @return This date as a string.
+  */
+public String
+toString()
+{
+  return(format_sdf.format(this) + "." + getNanos());
+}
+
+/*************************************************************************/
+
+/**
+  * This method returns the nanosecond value for this object.
+  *
+  * @return The nanosecond value for this object.
+  */
+public int
+getNanos()
+{
+  return(nanos);
+}
+
+/*************************************************************************/
+
+/**
+  * This method sets the nanosecond value for this object.
+  *
+  * @param nanos The nanosecond value for this object.
+  */
+public void
+setNanos(int nanos)
+{
+  this.nanos = nanos;
+}
+
+/*************************************************************************/
+
+/**
+  * This methods tests whether this object is earlier than the specified
+  * object.
+  *
+  * @param ts The other <code>Timestamp</code> to test against.
+  *
+  * @return <code>true</code> if this object is earlier than the other object,
+  * <code>false</code> otherwise.
+  */
+public boolean
+before(Timestamp ts)
+{
+  if (ts.getTime() > getTime())
+    return(true);
+
+  if (ts.getNanos() > getNanos())
+    return(true);
+
+  return(false);
+}
+
+/*************************************************************************/
+
+/**
+  * This methods tests whether this object is later than the specified
+  * object.
+  *
+  * @param ts The other <code>Timestamp</code> to test against.
+  *
+  * @return <code>true</code> if this object is later than the other object,
+  * <code>false</code> otherwise.
+  */
+public boolean
+after(Timestamp ts)
+{
+  if (ts.getTime() < getTime())
+    return(true);
+
+  if (ts.getNanos() < getNanos())
+    return(true);
+
+  return(false);
+}
+
+/*************************************************************************/
+
+/**
+  * This method these the specified <code>Object</code> for equality
+  * against this object.  This will be true if an only if the specified
+  * object is an instance of <code>Timestamp</code> and has the same
+  * time value fields.
+  *
+  * @param obj The object to test against for equality.
+  *
+  * @return <code>true</code> if the specified object is equal to this
+  * object, <code>false</code> otherwise.
+  */
+public boolean
+equals(Object obj)
+{
+  if (obj == null)
+    return(false);
+
+  if (!(obj instanceof Timestamp))
+    return(false);
+
+  return(equals((Timestamp)obj));
+}
+
+/*************************************************************************/
+
+/**
+  * This method tests the specified timestamp for equality against this
+  * object.  This will be true if and only if the specified object is
+  * not <code>null</code> and contains all the same time value fields
+  * as this object.
+  *
+  * @param ts The <code>Timestamp</code> to test against for equality.
+  *
+  * @return <code>true</code> if the specified object is equal to this
+  * object, <code>false</code> otherwise.
+  */
+public boolean
+equals(Timestamp ts)
+{
+  if (ts == null)
+    return(false);
+
+  if (ts.getTime() != getTime())
+    return(false);
+
+  if (ts.getNanos() != getNanos())
+    return(false);
+
+  return(true);
+}
+
+} // class Timestamp
+
Index: java/sql/Types.java
===================================================================
RCS file: Types.java
diff -N Types.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ Types.java	Tue Apr 11 02:04:07 2000
@@ -0,0 +1,64 @@
+/* Types.java -- SQL type constants
+   Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.sql;
+
+/**
+  * This class contains constants that are used to identify SQL data types.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public class Types 
+{
+
+// These should be self explanatory.  People need a SQL book, not
+// Javadoc comments for these.
+
+public static final int BIT = -7;
+public static final int TINYINT = -6;
+public static final int SMALLINT = 5;
+public static final int INTEGER = 4;
+public static final int BIGINT = -5;
+public static final int FLOAT = 6;
+public static final int REAL = 7;
+public static final int DOUBLE = 8;
+public static final int NUMERIC = 2;
+public static final int DECIMAL = 3;
+public static final int CHAR = 1;
+public static final int VARCHAR = 12;
+public static final int LONGVARCHAR = -1;
+public static final int DATE = 91;
+public static final int TIME = 92;
+public static final int TIMESTAMP = 93;
+public static final int BINARY = -2;
+public static final int VARBINARY = -3;
+public static final int LONGVARBINARY = -4;
+public static final int NULL = 0;
+public static final int OTHER = 1111;
+
+} // class Types 
+




More information about the Java-patches mailing list