mirror of https://github.com/postgres/postgres
parent
361f1e1656
commit
fd972e7f7e
@ -0,0 +1,339 @@ |
||||
package org.postgresql.test.jdbc2; |
||||
|
||||
import org.postgresql.test.TestUtil; |
||||
import junit.framework.TestCase; |
||||
import java.sql.*; |
||||
|
||||
/* |
||||
* TestCase to test the internal functionality of |
||||
* org.postgresql.jdbc2.DatabaseMetaData's various properties. |
||||
* Methods which return a ResultSet are tested elsewhere. |
||||
* This avoids a complicated setUp/tearDown for something like |
||||
* assertTrue(dbmd.nullPlusNonNullIsNull()); |
||||
*/ |
||||
|
||||
public class DatabaseMetaDataPropertiesTest extends TestCase |
||||
{ |
||||
|
||||
private Connection con; |
||||
/* |
||||
* Constructor |
||||
*/ |
||||
public DatabaseMetaDataPropertiesTest(String name) |
||||
{ |
||||
super(name); |
||||
} |
||||
|
||||
protected void setUp() throws Exception |
||||
{ |
||||
con = TestUtil.openDB(); |
||||
} |
||||
protected void tearDown() throws Exception |
||||
{ |
||||
TestUtil.closeDB( con ); |
||||
} |
||||
|
||||
/* |
||||
* The spec says this may return null, but we always do! |
||||
*/ |
||||
public void testGetMetaData() |
||||
{ |
||||
try |
||||
{ |
||||
|
||||
DatabaseMetaData dbmd = con.getMetaData(); |
||||
assertNotNull(dbmd); |
||||
|
||||
} |
||||
catch (SQLException ex) |
||||
{ |
||||
fail(ex.getMessage()); |
||||
} |
||||
} |
||||
|
||||
/* |
||||
* Test default capabilities |
||||
*/ |
||||
public void testCapabilities() |
||||
{ |
||||
try |
||||
{ |
||||
|
||||
DatabaseMetaData dbmd = con.getMetaData(); |
||||
assertNotNull(dbmd); |
||||
|
||||
assertTrue(dbmd.allProceduresAreCallable()); |
||||
assertTrue(dbmd.allTablesAreSelectable()); // not true all the time
|
||||
|
||||
// This should always be false for postgresql (at least for 7.x)
|
||||
assertTrue(!dbmd.isReadOnly()); |
||||
|
||||
// does the backend support this yet? The protocol does...
|
||||
assertTrue(!dbmd.supportsMultipleResultSets()); |
||||
|
||||
// yes, as multiple backends can have transactions open
|
||||
assertTrue(dbmd.supportsMultipleTransactions()); |
||||
|
||||
assertTrue(dbmd.supportsMinimumSQLGrammar()); |
||||
assertTrue(!dbmd.supportsCoreSQLGrammar()); |
||||
assertTrue(!dbmd.supportsExtendedSQLGrammar()); |
||||
if (TestUtil.haveMinimumServerVersion(con,"7.3")) |
||||
assertTrue(dbmd.supportsANSI92EntryLevelSQL()); |
||||
else |
||||
assertTrue(!dbmd.supportsANSI92EntryLevelSQL()); |
||||
assertTrue(!dbmd.supportsANSI92IntermediateSQL()); |
||||
assertTrue(!dbmd.supportsANSI92FullSQL()); |
||||
|
||||
assertTrue(!dbmd.supportsIntegrityEnhancementFacility()); |
||||
|
||||
} |
||||
catch (SQLException ex) |
||||
{ |
||||
fail(ex.getMessage()); |
||||
} |
||||
} |
||||
|
||||
|
||||
public void testJoins() |
||||
{ |
||||
try |
||||
{ |
||||
|
||||
DatabaseMetaData dbmd = con.getMetaData(); |
||||
assertNotNull(dbmd); |
||||
|
||||
assertTrue(dbmd.supportsOuterJoins()); |
||||
assertTrue(dbmd.supportsFullOuterJoins()); |
||||
assertTrue(dbmd.supportsLimitedOuterJoins()); |
||||
|
||||
} |
||||
catch (SQLException ex) |
||||
{ |
||||
fail(ex.getMessage()); |
||||
} |
||||
} |
||||
|
||||
public void testCursors() |
||||
{ |
||||
try |
||||
{ |
||||
|
||||
DatabaseMetaData dbmd = con.getMetaData(); |
||||
assertNotNull(dbmd); |
||||
|
||||
assertTrue(!dbmd.supportsPositionedDelete()); |
||||
assertTrue(!dbmd.supportsPositionedUpdate()); |
||||
|
||||
} |
||||
catch (SQLException ex) |
||||
{ |
||||
fail(ex.getMessage()); |
||||
} |
||||
} |
||||
|
||||
public void testValues() |
||||
{ |
||||
try { |
||||
DatabaseMetaData dbmd = con.getMetaData(); |
||||
assertNotNull(dbmd); |
||||
int indexMaxKeys = dbmd.getMaxColumnsInIndex(); |
||||
if (TestUtil.haveMinimumServerVersion(con,"7.3")) { |
||||
assertEquals(indexMaxKeys,32); |
||||
} else { |
||||
assertEquals(indexMaxKeys,16); |
||||
} |
||||
} catch (SQLException sqle) { |
||||
fail(sqle.getMessage()); |
||||
} |
||||
} |
||||
|
||||
public void testNulls() |
||||
{ |
||||
try |
||||
{ |
||||
|
||||
DatabaseMetaData dbmd = con.getMetaData(); |
||||
assertNotNull(dbmd); |
||||
|
||||
assertTrue(!dbmd.nullsAreSortedAtStart()); |
||||
assertTrue( dbmd.nullsAreSortedAtEnd() != TestUtil.haveMinimumServerVersion(con,"7.2")); |
||||
assertTrue( dbmd.nullsAreSortedHigh() == TestUtil.haveMinimumServerVersion(con,"7.2")); |
||||
assertTrue(!dbmd.nullsAreSortedLow()); |
||||
|
||||
assertTrue(dbmd.nullPlusNonNullIsNull()); |
||||
|
||||
assertTrue(dbmd.supportsNonNullableColumns()); |
||||
|
||||
} |
||||
catch (SQLException ex) |
||||
{ |
||||
fail(ex.getMessage()); |
||||
} |
||||
} |
||||
|
||||
public void testLocalFiles() |
||||
{ |
||||
try |
||||
{ |
||||
|
||||
DatabaseMetaData dbmd = con.getMetaData(); |
||||
assertNotNull(dbmd); |
||||
|
||||
assertTrue(!dbmd.usesLocalFilePerTable()); |
||||
assertTrue(!dbmd.usesLocalFiles()); |
||||
|
||||
} |
||||
catch (SQLException ex) |
||||
{ |
||||
fail(ex.getMessage()); |
||||
} |
||||
} |
||||
|
||||
public void testIdentifiers() |
||||
{ |
||||
try |
||||
{ |
||||
|
||||
DatabaseMetaData dbmd = con.getMetaData(); |
||||
assertNotNull(dbmd); |
||||
|
||||
assertTrue(!dbmd.supportsMixedCaseIdentifiers()); // always false
|
||||
assertTrue(dbmd.supportsMixedCaseQuotedIdentifiers()); // always true
|
||||
|
||||
assertTrue(!dbmd.storesUpperCaseIdentifiers()); // always false
|
||||
assertTrue(dbmd.storesLowerCaseIdentifiers()); // always true
|
||||
assertTrue(!dbmd.storesUpperCaseQuotedIdentifiers()); // always false
|
||||
assertTrue(!dbmd.storesLowerCaseQuotedIdentifiers()); // always false
|
||||
assertTrue(!dbmd.storesMixedCaseQuotedIdentifiers()); // always false
|
||||
|
||||
assertTrue(dbmd.getIdentifierQuoteString().equals("\"")); |
||||
|
||||
|
||||
} |
||||
catch (SQLException ex) |
||||
{ |
||||
fail(ex.getMessage()); |
||||
} |
||||
} |
||||
|
||||
public void testTables() |
||||
{ |
||||
try |
||||
{ |
||||
|
||||
DatabaseMetaData dbmd = con.getMetaData(); |
||||
assertNotNull(dbmd); |
||||
|
||||
// we can add columns
|
||||
assertTrue(dbmd.supportsAlterTableWithAddColumn()); |
||||
|
||||
// we can only drop columns in >= 7.3
|
||||
if (TestUtil.haveMinimumServerVersion(con,"7.3")) { |
||||
assertTrue(dbmd.supportsAlterTableWithDropColumn()); |
||||
} else { |
||||
assertTrue(!dbmd.supportsAlterTableWithDropColumn()); |
||||
} |
||||
} |
||||
catch (SQLException ex) |
||||
{ |
||||
fail(ex.getMessage()); |
||||
} |
||||
} |
||||
|
||||
public void testSelect() |
||||
{ |
||||
try |
||||
{ |
||||
|
||||
DatabaseMetaData dbmd = con.getMetaData(); |
||||
assertNotNull(dbmd); |
||||
|
||||
// yes we can?: SELECT col a FROM a;
|
||||
assertTrue(dbmd.supportsColumnAliasing()); |
||||
|
||||
// yes we can have expressions in ORDERBY
|
||||
assertTrue(dbmd.supportsExpressionsInOrderBy()); |
||||
|
||||
// Yes, an ORDER BY clause can contain columns that are not in the
|
||||
// SELECT clause.
|
||||
assertTrue(dbmd.supportsOrderByUnrelated()); |
||||
|
||||
assertTrue(dbmd.supportsGroupBy()); |
||||
assertTrue(dbmd.supportsGroupByUnrelated()); |
||||
assertTrue(dbmd.supportsGroupByBeyondSelect()); // needs checking
|
||||
|
||||
} |
||||
catch (SQLException ex) |
||||
{ |
||||
fail(ex.getMessage()); |
||||
} |
||||
} |
||||
|
||||
public void testDBParams() |
||||
{ |
||||
try |
||||
{ |
||||
|
||||
DatabaseMetaData dbmd = con.getMetaData(); |
||||
assertNotNull(dbmd); |
||||
|
||||
assertTrue(dbmd.getURL().equals(TestUtil.getURL())); |
||||
assertTrue(dbmd.getUserName().equals(TestUtil.getUser())); |
||||
|
||||
} |
||||
catch (SQLException ex) |
||||
{ |
||||
fail(ex.getMessage()); |
||||
} |
||||
} |
||||
|
||||
public void testDbProductDetails() |
||||
{ |
||||
try |
||||
{ |
||||
assertTrue(con instanceof org.postgresql.PGConnection); |
||||
org.postgresql.jdbc2.AbstractJdbc2Connection pc = (org.postgresql.jdbc2.AbstractJdbc2Connection) con; |
||||
|
||||
DatabaseMetaData dbmd = con.getMetaData(); |
||||
assertNotNull(dbmd); |
||||
|
||||
assertTrue(dbmd.getDatabaseProductName().equals("PostgreSQL")); |
||||
//The test below doesn't make sense to me, it tests that
|
||||
//the version of the driver = the version of the database it is connected to
|
||||
//since the driver should be backwardly compatible this test is commented out
|
||||
//assertTrue(dbmd.getDatabaseProductVersion().startsWith(
|
||||
// Integer.toString(pc.getDriver().getMajorVersion())
|
||||
// + "."
|
||||
// + Integer.toString(pc.getDriver().getMinorVersion())));
|
||||
assertTrue(dbmd.getDriverName().equals("PostgreSQL Native Driver")); |
||||
|
||||
} |
||||
catch (SQLException ex) |
||||
{ |
||||
fail(ex.getMessage()); |
||||
} |
||||
} |
||||
|
||||
public void testDriverVersioning() |
||||
{ |
||||
try |
||||
{ |
||||
assertTrue(con instanceof org.postgresql.PGConnection); |
||||
org.postgresql.jdbc2.AbstractJdbc2Connection pc = (org.postgresql.jdbc2.AbstractJdbc2Connection) con; |
||||
|
||||
DatabaseMetaData dbmd = con.getMetaData(); |
||||
assertNotNull(dbmd); |
||||
|
||||
assertTrue(dbmd.getDriverVersion().equals(pc.getDriver().getVersion())); |
||||
assertTrue(dbmd.getDriverMajorVersion() == pc.getDriver().getMajorVersion()); |
||||
assertTrue(dbmd.getDriverMinorVersion() == pc.getDriver().getMinorVersion()); |
||||
|
||||
|
||||
} |
||||
catch (SQLException ex) |
||||
{ |
||||
fail(ex.getMessage()); |
||||
} |
||||
} |
||||
} |
||||
|
||||
@ -0,0 +1,11 @@ |
||||
package org.postgresql.test.jdbc2; |
||||
|
||||
import java.io.Serializable; |
||||
|
||||
public class SerializeObject implements Serializable { |
||||
|
||||
public int intcol; |
||||
public double doublecol; |
||||
public String stringcol; |
||||
|
||||
} |
||||
@ -0,0 +1,47 @@ |
||||
package org.postgresql.test.jdbc2; |
||||
|
||||
import org.postgresql.test.TestUtil; |
||||
import junit.framework.TestCase; |
||||
import java.sql.*; |
||||
import org.postgresql.util.Serialize; |
||||
|
||||
public class SerializeTest extends TestCase { |
||||
|
||||
private Connection conn; |
||||
private SerializeObject serobj; |
||||
private Serialize ser; |
||||
|
||||
public SerializeTest(String name) { |
||||
super(name); |
||||
} |
||||
|
||||
protected void setUp() throws Exception { |
||||
conn = TestUtil.openDB(); |
||||
serobj = new SerializeObject(); |
||||
serobj.intcol = 1; |
||||
serobj.doublecol = 3.4; |
||||
serobj.stringcol = "Hello"; |
||||
TestUtil.dropTable(conn,Serialize.toPostgreSQL(conn,serobj.getClass().getName())); |
||||
Serialize.create(conn, serobj); |
||||
Serialize.create(conn, serobj); |
||||
ser = new Serialize(conn,serobj); |
||||
} |
||||
|
||||
protected void tearDown() throws Exception { |
||||
TestUtil.dropTable(conn,Serialize.toPostgreSQL(conn,serobj.getClass().getName())); |
||||
} |
||||
|
||||
public void testCreateSerialize() { |
||||
try { |
||||
long oid = ser.storeObject(serobj); |
||||
SerializeObject serobj2 = (SerializeObject)ser.fetch(oid); |
||||
assertNotNull(serobj2); |
||||
assertEquals(serobj.intcol,serobj2.intcol); |
||||
assertTrue(Math.abs(serobj.doublecol-serobj2.doublecol) < 0.0001); |
||||
assertTrue(serobj.stringcol.equals(serobj2.stringcol)); |
||||
} catch (SQLException sqle) { |
||||
fail(sqle.getMessage()); |
||||
} |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue