accept url and fk action fix from Kris Jurka

This commit is contained in:
Dave Cramer 2003-11-03 15:22:07 +00:00
parent 90e53f0c16
commit efea5da4fa
5 changed files with 52 additions and 11 deletions

View File

@ -6,7 +6,7 @@
* Copyright (c) 2003, PostgreSQL Global Development Group
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/Attic/Driver.java.in,v 1.36 2003/09/13 04:02:12 barry Exp $
* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/Attic/Driver.java.in,v 1.37 2003/11/03 15:22:06 davec Exp $
*
*-------------------------------------------------------------------------
*/
@ -111,7 +111,7 @@ public class Driver implements java.sql.Driver
*
* Our protocol takes the forms:
* <PRE>
* jdbc:org.postgresql://host:port/database?param1=val1&...
* jdbc:postgresql://host:port/database?param1=val1&...
* </PRE>
*
* @param url the URL of the database to connect to
@ -163,7 +163,7 @@ public class Driver implements java.sql.Driver
* Returns true if the driver thinks it can open a connection to the
* given URL. Typically, drivers will return true if they understand
* the subprotocol specified in the URL and false if they don't. Our
* protocols start with jdbc:org.postgresql:
* protocols start with jdbc:postgresql:
*
* @see java.sql.Driver#acceptsURL
* @param url the URL of the driver
@ -286,7 +286,8 @@ public class Driver implements java.sql.Driver
//parse the server part of the url
StringTokenizer st = new StringTokenizer(l_urlServer, ":/", true);
for (int count = 0; (st.hasMoreTokens()); count++)
int count;
for (count = 0; (st.hasMoreTokens()); count++)
{
String token = st.nextToken();
@ -357,6 +358,9 @@ public class Driver implements java.sql.Driver
}
}
}
if (count <= 1) {
return null;
}
// if we extracted an IPv6 address out earlier put it back
if (ipv6address != null)
@ -364,7 +368,7 @@ public class Driver implements java.sql.Driver
//parse the args part of the url
StringTokenizer qst = new StringTokenizer(l_urlArgs, "&");
for (int count = 0; (qst.hasMoreTokens()); count++)
for (count = 0; (qst.hasMoreTokens()); count++)
{
String token = qst.nextToken();
int l_pos = token.indexOf('=');

View File

@ -3114,7 +3114,7 @@ public abstract class AbstractJdbc1DatabaseMetaData
if ( deleteRule != null )
{
String rule = updateRule.substring(8, updateRule.length() - 4);
String rule = deleteRule.substring(8, deleteRule.length() - 4);
int action = java.sql.DatabaseMetaData.importedKeyNoAction;
if ("cascade".equals(rule))
@ -3123,6 +3123,8 @@ public abstract class AbstractJdbc1DatabaseMetaData
action = java.sql.DatabaseMetaData.importedKeySetNull;
else if ("setdefault".equals(rule))
action = java.sql.DatabaseMetaData.importedKeySetDefault;
else if ("restrict".equals(rule))
action = java.sql.DatabaseMetaData.importedKeyRestrict;
tuple[10] = Integer.toString(action).getBytes();
}

View File

@ -9,7 +9,7 @@
* Copyright (c) 2003, PostgreSQL Global Development Group
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/AbstractJdbc1ResultSet.java,v 1.22 2003/10/29 02:39:09 davec Exp $
* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/AbstractJdbc1ResultSet.java,v 1.23 2003/11/03 15:22:07 davec Exp $
*
*-------------------------------------------------------------------------
*/
@ -210,8 +210,8 @@ public abstract class AbstractJdbc1ResultSet implements BaseResultSet
public byte getByte(int columnIndex) throws SQLException
{
String s = getString(columnIndex);
if (s != null)
if (s != null )
{
try
{
@ -232,6 +232,7 @@ public abstract class AbstractJdbc1ResultSet implements BaseResultSet
s = s.trim();
break;
}
if ( s.length() == 0 ) return 0;
return Byte.parseByte(s);
}
catch (NumberFormatException e)

View File

@ -9,7 +9,7 @@ import java.sql.*;
*
* PS: Do you know how difficult it is to type on a train? ;-)
*
* $Id: DatabaseMetaDataTest.java,v 1.18 2003/05/29 04:39:48 barry Exp $
* $Id: DatabaseMetaDataTest.java,v 1.19 2003/11/03 15:22:07 davec Exp $
*/
public class DatabaseMetaDataTest extends TestCase
@ -137,6 +137,38 @@ public class DatabaseMetaDataTest extends TestCase
fail(ex.getMessage());
}
}
public void testForeignKeyActions()
{
try {
Connection conn = TestUtil.openDB();
TestUtil.createTable(conn, "pkt", "id int primary key");
TestUtil.createTable(conn, "fkt1", "id int references pkt on update restrict on delete cascade");
TestUtil.createTable(conn, "fkt2", "id int references pkt on update set null on delete set default");
DatabaseMetaData dbmd = conn.getMetaData();
ResultSet rs = dbmd.getImportedKeys(null,"","fkt1");
assertTrue(rs.next());
assertTrue(rs.getInt("UPDATE_RULE") == DatabaseMetaData.importedKeyRestrict);
assertTrue(rs.getInt("DELETE_RULE") == DatabaseMetaData.importedKeyCascade);
rs.close();
rs = dbmd.getImportedKeys(null,"","fkt2");
assertTrue(rs.next());
assertTrue(rs.getInt("UPDATE_RULE") == DatabaseMetaData.importedKeySetNull);
assertTrue(rs.getInt("DELETE_RULE") == DatabaseMetaData.importedKeySetDefault);
rs.close();
TestUtil.dropTable(conn,"fkt2");
TestUtil.dropTable(conn,"fkt1");
TestUtil.dropTable(conn,"pkt");
}
catch (SQLException ex)
{
fail(ex.getMessage());
}
}
public void testForeignKeys()
{
try

View File

@ -5,7 +5,7 @@ import junit.framework.TestCase;
import java.sql.*;
/*
* $Id: DriverTest.java,v 1.5 2002/08/14 20:35:40 barry Exp $
* $Id: DriverTest.java,v 1.6 2003/11/03 15:22:07 davec Exp $
*
* Tests the dynamically created class org.postgresql.Driver
*
@ -37,10 +37,12 @@ public class DriverTest extends TestCase
assertTrue(drv.acceptsURL("jdbc:postgresql://localhost:5432/test"));
assertTrue(drv.acceptsURL("jdbc:postgresql://127.0.0.1/anydbname"));
assertTrue(drv.acceptsURL("jdbc:postgresql://127.0.0.1:5433/hidden"));
assertTrue(drv.acceptsURL("jdbc:postgresql://[::1]:5740/db"));
// Badly formatted url's
assertTrue(!drv.acceptsURL("jdbc:postgres:test"));
assertTrue(!drv.acceptsURL("postgresql:test"));
assertTrue(!drv.acceptsURL("db"));
}
catch (SQLException ex)