On Sat, 28 Jun 2003, Kurt Roeckx wrote:

> On Thu, Jun 26, 2003 at 08:02:01AM -0400, Kris Jurka wrote:
> >
> >
> > On Thu, 26 Jun 2003, Manuel Gil [iso-8859-1] Pérez wrote:
> >
> > > Hi all.
> > >
> > > I have a Java application that it connects to the PostgreSQL database with
> > > IPv6 patch installed.
> > >
> > What exactly do you have for the URL in the first argument to
> > getConnection?  If you have a direct IPv6 address like
> > jdbc:postgresql://::1 it will not work at the moment because it tries to
> > parse the url using the colon as a delimiter which works fine for IPv4
> > addresses, but not IPv6 see org.postgresql.Driver#parseURL for more info.
> >
> > What happens if you are using a name that resolves to an IPv6 address?
> > You're probably the first person to actually try this.  I will look into
> > this further, but it may take me a while to get IPv6 up and running on my
> > machine.
>
> Did you get it working yet?
>
>
> Kurt
>

The following patch allows you to connect using an IPv6 address by
enclosing it in square brackets.

jdbc:postgresql://[::1]:5432/dbname

Additionally some minor cleanup to JDBC docs, adding <acronym> tags,
mentioning JDBC 3 support, and cross referencing the installation
instructions.

Kris Jurka

Index: src/interfaces/jdbc/org/postgresql/Driver.java.in
===================================================================
RCS file: 
/projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/Driver.java.in,v
retrieving revision 1.30
diff -c -r1.30 Driver.java.in
*** src/interfaces/jdbc/org/postgresql/Driver.java.in   29 May 2003 04:39:51 -0000     
 1.30
--- src/interfaces/jdbc/org/postgresql/Driver.java.in   29 Jun 2003 11:15:53 -0000
***************
*** 272,277 ****
--- 272,288 ----
                        l_urlArgs = url.substring(l_qPos+1);
                }
  
+               // look for an IPv6 address that is enclosed by []
+               // the upcoming parsing that uses colons as identifiers can't handle
+               // the colons in an IPv6 address.
+               int ipv6start = l_urlServer.indexOf("[");
+               int ipv6end = l_urlServer.indexOf("]");
+               String ipv6address = null;
+               if (ipv6start != -1 && ipv6end > ipv6start) {
+                       ipv6address = l_urlServer.substring(ipv6start+1,ipv6end);
+                       l_urlServer = 
l_urlServer.substring(0,ipv6start)+"ipv6host"+l_urlServer.substring(ipv6end+1);
+               }
+ 
                //parse the server part of the url
                StringTokenizer st = new StringTokenizer(l_urlServer, ":/", true);
                for (int count = 0; (st.hasMoreTokens()); count++)
***************
*** 345,350 ****
--- 356,365 ----
                                }
                        }
                }
+ 
+               // if we extracted an IPv6 address out earlier put it back
+               if (ipv6address != null)
+                       urlProps.put("PGHOST",ipv6address);
  
                //parse the args part of the url
                StringTokenizer qst = new StringTokenizer(l_urlArgs, "&");
Index: doc/src/sgml/jdbc.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql-server/doc/src/sgml/jdbc.sgml,v
retrieving revision 1.44
diff -c -r1.44 jdbc.sgml
*** doc/src/sgml/jdbc.sgml      7 Apr 2003 01:29:25 -0000       1.44
--- doc/src/sgml/jdbc.sgml      29 Jun 2003 11:15:54 -0000
***************
*** 33,39 ****
  
    <para>
     This section describes the steps you need to take before you can
!    write or run programs that use the JDBC interface.
    </para>
  
    <sect2 id="jdbc-build">
--- 33,39 ----
  
    <para>
     This section describes the steps you need to take before you can
!    write or run programs that use the <acronym>JDBC</> interface.
    </para>
  
    <sect2 id="jdbc-build">
***************
*** 49,63 ****
     <para>
      Alternatively you can build the driver from source, but you should
      only need to do this if you are making changes to the source code.
!     For details, refer to the <productname>PostgreSQL</> installation
!     instructions.  After installation, the driver should be found in
      <filename><replaceable>PREFIX</>/share/java/postgresql.jar</filename>.
      The resulting driver will be built for the version of Java you are
      running.  If you build with a 1.1 <acronym>JDK</> you will build a
!     version that supports the JDBC 1 specification, if you build with
!     a Java 2 <acronym>JDK</> (e.g., <acronym>JDK</> 1.2 or
!     <acronym>JDK</> 1.3) you will build a version that supports the
!     JDBC 2 specification.
     </para>
    </sect2>
  
--- 49,65 ----
     <para>
      Alternatively you can build the driver from source, but you should
      only need to do this if you are making changes to the source code.
!     For details, refer to the <productname>PostgreSQL</>
!     <link linkend="installation">installation instructions</link>.
!     After installation, the driver should be found in
      <filename><replaceable>PREFIX</>/share/java/postgresql.jar</filename>.
      The resulting driver will be built for the version of Java you are
      running.  If you build with a 1.1 <acronym>JDK</> you will build a
!     version that supports the <acronym>JDBC</> 1 specification, if you build
!     with a 1.2 or 1.3 <acronym>JDK</> you will build a version that supports
!     the <acronym>JDBC</> 2 specification, and finally if you build with a
!     1.4 <acronym>JDK</acronym> you will build a version that supports the
!     <acronym>JDBC</> 3 specification.
     </para>
    </sect2>
  
***************
*** 67,78 ****
     <para>
      To use the driver, the JAR archive (named
      <filename>postgresql.jar</filename> if you built from source, otherwise
!     it will likely be named <filename>jdbc&majorversion;-1.1.jar</filename> or 
!     <filename>jdbc&majorversion;-1.2.jar</filename> for the JDBC 1 and JDBC 2 
versions
!     respectively)
!     needs to be included in the
!     class path, either by putting it in the <envar>CLASSPATH</envar>
!     environment variable, or by using flags on the
      <command>java</command> command line.
     </para>
  
--- 69,80 ----
     <para>
      To use the driver, the JAR archive (named
      <filename>postgresql.jar</filename> if you built from source, otherwise
!     it will likely be named <filename>pg&majorversion;jdbc1.jar</filename>,
!     <filename>pg&majorversion;jdbc2.jar</filename>, or
!     <filename>pg&majorversion;jdbc3.jar</filename> for the <acronym>JDBC</> 1,
!     <acronym>JDBC</> 2, and <acronym>JDBC</> 3 versions respectively)
!     needs to be included in the class path, either by putting it in the
!     <envar>CLASSPATH</envar> environment variable, or by using flags on the
      <command>java</command> command line.
     </para>
  
***************
*** 81,87 ****
      <acronym>JDBC</acronym> driver to access a database, and that
      application is installed as
      <filename>/usr/local/lib/myapp.jar</filename>.  The PostgreSQL
!     JDBC driver installed as
      <filename>/usr/local/pgsql/share/java/postgresql.jar</>.  To run
      the application, we would use:
  <programlisting>
--- 83,89 ----
      <acronym>JDBC</acronym> driver to access a database, and that
      application is installed as
      <filename>/usr/local/lib/myapp.jar</filename>.  The PostgreSQL
!     <acronym>JDBC</> driver installed as
      <filename>/usr/local/pgsql/share/java/postgresql.jar</>.  To run
      the application, we would use:
  <programlisting>
***************
*** 113,120 ****
      Also, the client authentication setup in the
      <filename>pg_hba.conf</filename> file may need to be configured.
      Refer to <xref linkend="client-authentication"> for details.  The
!     <acronym>JDBC</acronym> driver supports the trust, ident,
!     password, md5, and crypt authentication methods.
     </para>
    </sect2>
   </sect1>
--- 115,123 ----
      Also, the client authentication setup in the
      <filename>pg_hba.conf</filename> file may need to be configured.
      Refer to <xref linkend="client-authentication"> for details.  The
!     <acronym>JDBC</acronym> driver supports the <literal>trust</>,
!     <literal>ident</>, <literal>password</>, <literal>md5</>, and
!     <literal>crypt</> authentication methods.
     </para>
    </sect2>
   </sect1>
***************
*** 123,130 ****
    <title>Initializing the Driver</title>
  
    <para>
!    This section describes how to load and initialize the JDBC driver
!    in your programs.
    </para>
  
    <sect2 id="jdbc-import">
--- 126,133 ----
    <title>Initializing the Driver</title>
  
    <para>
!    This section describes how to load and initialize the <acronym>JDBC</>
!    driver in your programs.
    </para>
  
    <sect2 id="jdbc-import">
***************
*** 252,258 ****
        </term>
        <listitem>
         <para>
!         The host name of the server. Defaults to <literal>localhost</literal>.
         </para>
        </listitem>
       </varlistentry>
--- 255,264 ----
        </term>
        <listitem>
         <para>
!         The host name of the server. Defaults to <literal>localhost</literal>.  To 
specify an IPv6 address your must enclose the <replaceable 
class="parameter">host</replaceable> parameter with square brackets, for example:
! <programlisting>
! jdbc:postgresql://[::1]:5740/accounting
! </programlisting>
         </para>
        </listitem>
       </varlistentry>
***************
*** 451,466 ****
         </para>
        </listitem>
  
-       <listitem>
-        <para>
-         <classname>ResultSet</classname> is currently read only.
-         You can not update data through the <classname>ResultSet</classname>.
-         If you want to update data you need to do it the normal way
-         by using the <acronym>SQL</acronym> statement <command>UPDATE</command>.  
This is 
-         in conformance with the <acronym>JDBC</acronym> specification 
-         which does not require drivers to provide updatable result sets.
-        </para>
-       </listitem>
       </itemizedlist>
      </para>
     </sect2>
--- 457,462 ----
***************
*** 606,616 ****
  
    <para>
     <xref linkend="jdbc-binary-data-example"> contains some examples on
!    how to process binary data using the PostgreSQL JDBC driver.
    </para>
  
    <example id="jdbc-binary-data-example">
!    <title>Processing Binary Data in JDBC</title>
  
     <para>
      For example, suppose you have a table containing the file names of
--- 602,612 ----
  
    <para>
     <xref linkend="jdbc-binary-data-example"> contains some examples on
!    how to process binary data using the PostgreSQL <acronym>JDBC</> driver.
    </para>
  
    <example id="jdbc-binary-data-example">
!    <title>Processing Binary Data in <acronym>JDBC</></title>
  
     <para>
      For example, suppose you have a table containing the file names of
***************
*** 2490,2501 ****
    <title>Connection Pools and Data Sources</title>
  
    <para>
!     JDBC 2 introduced standard connection pooling features in an
!     add-on API known as the <acronym>JDBC</acronym> 2.0 Optional
      Package (also known as the <acronym>JDBC</acronym> 2.0
      Standard Extension).  These features have since been included in
!     the core JDBC 3 API.  The <productname>PostgreSQL</productname>
!     <acronym>JDBC</acronym> drivers support these features if it has been compiled 
with
      <acronym>JDK</acronym> 1.3.x in combination with the
      <acronym>JDBC</acronym> 2.0 Optional Package
      (<acronym>JDBC</acronym> 2), or with <acronym>JDK</acronym> 1.4 or higher
--- 2486,2498 ----
    <title>Connection Pools and Data Sources</title>
  
    <para>
!     <acronym>JDBC</> 2 introduced standard connection pooling features in an
!     add-on <acronym>API</> known as the <acronym>JDBC</acronym> 2.0 Optional
      Package (also known as the <acronym>JDBC</acronym> 2.0
      Standard Extension).  These features have since been included in
!     the core <acronym>JDBC</> 3 <acronym>API</>.  The
!     <productname>PostgreSQL</productname> <acronym>JDBC</acronym> drivers
!     support these features if it has been compiled with
      <acronym>JDK</acronym> 1.3.x in combination with the
      <acronym>JDBC</acronym> 2.0 Optional Package
      (<acronym>JDBC</acronym> 2), or with <acronym>JDK</acronym> 1.4 or higher
***************
*** 2510,2516 ****
     <title>Overview</title>
  
      <para>
!      The <acronym>JDBC</acronym> API provides a client
       and a server interface for connection pooling.  The client
       interface is <literal>javax.sql.DataSource</literal>,
       which is what application code will typically use to
--- 2507,2513 ----
     <title>Overview</title>
  
      <para>
!      The <acronym>JDBC</acronym> <acronym>API</> provides a client
       and a server interface for connection pooling.  The client
       interface is <literal>javax.sql.DataSource</literal>,
       which is what application code will typically use to
---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings

Reply via email to