From acd090d811c44ce74d0728d2a478f4c174f4ef49 Mon Sep 17 00:00:00 2001
From: Chris Jaekl
Date: Sat, 3 Oct 2015 16:56:54 +0900
Subject: [PATCH] Add some unit testing of the CfbSchema.
---
prod/net/jaekl/cfb/CFB.java | 5 +
prod/net/jaekl/cfb/analyze/MessageMap.java | 2 +-
prod/net/jaekl/cfb/db/CfbSchema.java | 6 +-
prod/net/jaekl/cfb/db/Column.java | 38 +
prod/net/jaekl/cfb/db/Row.java | 1 +
.../jaekl/cfb/db/driver/PostgresqlDriver.java | 15 +-
prod/net/jaekl/cfb/store/DbStore.java | 2 +-
prod/net/jaekl/cfb/xml/LocalVariable.java | 2 +-
test/net/jaekl/cfb/db/CfbSchemaTest.java | 53 +
test/net/jaekl/cfb/db/ResultSetMock.java | 1208 +++++++++++++++++
test/net/jaekl/cfb/db/SequenceMock.java | 20 +
test/net/jaekl/cfb/db/TableMock.java | 42 +
.../jaekl/cfb/db/driver/ConnectionMock.java | 365 +++++
.../cfb/db/driver/DatabaseMetaDataMock.java | 1103 +++++++++++++++
.../net/jaekl/cfb/db/driver/DbDriverMock.java | 151 +++
test/net/jaekl/cfb/xml/MessagesXmlData.java | 227 ++++
16 files changed, 3233 insertions(+), 7 deletions(-)
create mode 100644 test/net/jaekl/cfb/db/CfbSchemaTest.java
create mode 100644 test/net/jaekl/cfb/db/ResultSetMock.java
create mode 100644 test/net/jaekl/cfb/db/SequenceMock.java
create mode 100644 test/net/jaekl/cfb/db/TableMock.java
create mode 100644 test/net/jaekl/cfb/db/driver/ConnectionMock.java
create mode 100644 test/net/jaekl/cfb/db/driver/DatabaseMetaDataMock.java
create mode 100644 test/net/jaekl/cfb/db/driver/DbDriverMock.java
create mode 100644 test/net/jaekl/cfb/xml/MessagesXmlData.java
diff --git a/prod/net/jaekl/cfb/CFB.java b/prod/net/jaekl/cfb/CFB.java
index a830b12..81c30ea 100644
--- a/prod/net/jaekl/cfb/CFB.java
+++ b/prod/net/jaekl/cfb/CFB.java
@@ -200,6 +200,11 @@ public class CFB {
String cannotConnectFormat = trans(CfbBundle.CANNOT_CONNECT);
String cannotConnect = MessageFormat.format(cannotConnectFormat, m_host, ""+m_port, m_dbName, m_user);
exc.printStackTrace(pw);
+ SQLException next = exc.getNextException();
+ while (null != next) {
+ next.printStackTrace(pw);
+ next = next.getNextException();
+ }
pw.println(cannotConnect);
}
diff --git a/prod/net/jaekl/cfb/analyze/MessageMap.java b/prod/net/jaekl/cfb/analyze/MessageMap.java
index b0f0b67..ae389ad 100644
--- a/prod/net/jaekl/cfb/analyze/MessageMap.java
+++ b/prod/net/jaekl/cfb/analyze/MessageMap.java
@@ -116,7 +116,7 @@ public class MessageMap {
}
// Parse the FindBugs messages.xml file
- void parse(InputSource xml) throws FileNotFoundException, IOException, SAXException
+ public void parse(InputSource xml) throws FileNotFoundException, IOException, SAXException
{
m_msgColl = new MessageCollection();
diff --git a/prod/net/jaekl/cfb/db/CfbSchema.java b/prod/net/jaekl/cfb/db/CfbSchema.java
index 9a6cc3b..230133b 100644
--- a/prod/net/jaekl/cfb/db/CfbSchema.java
+++ b/prod/net/jaekl/cfb/db/CfbSchema.java
@@ -50,7 +50,7 @@ public class CfbSchema extends Schema {
private static final Column[] BUGS_COLS = { BUGID, TYPE };
private static final Column[] CATEGORIES_COLS = { CATEGORYID, CATEGORY };
- private static final Column[] FOUND_COLS = { FOUNDID, BUGID, CATEGORYID, FIRSTLOCID, SECONDLOCID, THIRDLOCID, VARID_FK };
+ private static final Column[] FOUND_COLS = { FOUNDID, RUNID, BUGID, CATEGORYID, FIRSTLOCID, SECONDLOCID, THIRDLOCID, VARID_FK };
private static final Column[] LOCATIONS_COLS = { LOCID, CLASSNAME, METHODNAME, METHODROLE, STARTLINE, ENDLINE };
private static final Column[] RUNS_COLS = { RUNID, VERSION, STARTTIME, ENDTIME };
private static final Column[] VARIABLES_COLS = { VARID_PK, NAME, VARROLE };
@@ -62,7 +62,7 @@ public class CfbSchema extends Schema {
public static final Table RUNS = new Table("RUNS", RUNS_COLS);
public static final Table VARIABLES = new Table("VARIABLES", VARIABLES_COLS);
- private static final Sequence[] SEQUENCES = {
+ static final Sequence[] SEQUENCES = {
BUG_SEQ,
CATEGORY_SEQ,
FOUND_SEQ,
@@ -71,7 +71,7 @@ public class CfbSchema extends Schema {
VARIABLE_SEQ
};
- private static final Table[] TABLES = {
+ static final Table[] TABLES = {
BUGS,
CATEGORIES,
FOUND,
diff --git a/prod/net/jaekl/cfb/db/Column.java b/prod/net/jaekl/cfb/db/Column.java
index db748b2..8fc723d 100644
--- a/prod/net/jaekl/cfb/db/Column.java
+++ b/prod/net/jaekl/cfb/db/Column.java
@@ -1,5 +1,7 @@
package net.jaekl.cfb.db;
+import net.jaekl.cfb.util.Util;
+
// Copyright (C) 2015 Christian Jaekl
public class Column {
@@ -45,4 +47,40 @@ public class Column {
return new Column(name, type, width.intValue(), canBeNull);
}
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (null == obj) {
+ return false;
+ }
+ if (! (obj instanceof Column)) {
+ return false;
+ }
+ Column other = (Column)obj;
+
+ if (! Util.objsAreEqual(this.getName(), other.getName())) {
+ return false;
+ }
+ if (! Util.objsAreEqual(this.getType(), other.getType())) {
+ return false;
+ }
+ if (this.getWidth() != other.getWidth()) {
+ return false;
+ }
+ if (! Util.objsAreEqual(this.getNull(), other.getNull())) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int code = Util.objHashCode(getName())
+ ^ Util.objHashCode(getType())
+ ^ getWidth()
+ ^ Util.objHashCode(getNull());
+ return code;
+ }
}
diff --git a/prod/net/jaekl/cfb/db/Row.java b/prod/net/jaekl/cfb/db/Row.java
index f25b0ae..fa3de99 100644
--- a/prod/net/jaekl/cfb/db/Row.java
+++ b/prod/net/jaekl/cfb/db/Row.java
@@ -12,6 +12,7 @@ public class Row {
}
public int getNumColumns() { return m_columns.length; }
+ public Column getColumn(int idx) { return m_columns[idx]; }
public String getString(int index) throws TypeMismatchException {
checkType(index, Column.Type.VARCHAR);
diff --git a/prod/net/jaekl/cfb/db/driver/PostgresqlDriver.java b/prod/net/jaekl/cfb/db/driver/PostgresqlDriver.java
index 8e19fc4..fbb3285 100644
--- a/prod/net/jaekl/cfb/db/driver/PostgresqlDriver.java
+++ b/prod/net/jaekl/cfb/db/driver/PostgresqlDriver.java
@@ -8,6 +8,7 @@ import java.sql.SQLException;
import java.util.Properties;
import net.jaekl.cfb.db.Sequence;
+import net.jaekl.cfb.db.Column.Type;
public class PostgresqlDriver extends DbDriver {
@@ -34,4 +35,16 @@ public class PostgresqlDriver extends DbDriver {
{
return " SELECT NEXTVAL('" + seq.getName() + "') ";
}
-}
+
+ @Override
+ protected String typeName(Type type) {
+ // Special case: TIMESTAMPTZ stored as INTEGER (milliseconds since the epoch)
+ // Reading a TIMESTAMPTZ back from the DB, and converting it to a java.util.Date,
+ // is fraught with peril. The best way around this is to store the dates in
+ // milliseconds-since-the-epoch (01.01.1970 00:00:00.000 UTC).
+ if (Type.TIMESTAMPTZ.equals(type)) {
+ return "BIGINT";
+ }
+
+ return type.toString();
+ }}
diff --git a/prod/net/jaekl/cfb/store/DbStore.java b/prod/net/jaekl/cfb/store/DbStore.java
index 37a3898..fed1f9d 100644
--- a/prod/net/jaekl/cfb/store/DbStore.java
+++ b/prod/net/jaekl/cfb/store/DbStore.java
@@ -318,7 +318,7 @@ public class DbStore {
return prior;
}
- BugCollection getBugCollection(Long priorId) throws SQLException, TypeMismatchException
+ BugCollection getBugCollection(Long runId) throws SQLException, TypeMismatchException
{
throw new UnsupportedOperationException("Not yet implemented");
}
diff --git a/prod/net/jaekl/cfb/xml/LocalVariable.java b/prod/net/jaekl/cfb/xml/LocalVariable.java
index 277bf2d..42c282a 100644
--- a/prod/net/jaekl/cfb/xml/LocalVariable.java
+++ b/prod/net/jaekl/cfb/xml/LocalVariable.java
@@ -78,6 +78,6 @@ public class LocalVariable extends ParseResult {
@Override
public int hashCode()
{
- return ( (1 + Util.objHashCode(m_name)) * (1 + Util.objHashCode(m_role)) );
+ return ( (Util.objHashCode(m_name)) ^ (Util.objHashCode(m_role)) );
}
}
diff --git a/test/net/jaekl/cfb/db/CfbSchemaTest.java b/test/net/jaekl/cfb/db/CfbSchemaTest.java
new file mode 100644
index 0000000..9d32151
--- /dev/null
+++ b/test/net/jaekl/cfb/db/CfbSchemaTest.java
@@ -0,0 +1,53 @@
+package net.jaekl.cfb.db;
+
+import static org.junit.Assert.*;
+
+import java.io.ByteArrayInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.sql.SQLException;
+import java.util.List;
+
+import net.jaekl.cfb.analyze.MessageMap;
+import net.jaekl.cfb.db.driver.ConnectionMock;
+import net.jaekl.cfb.db.driver.DbDriverMock;
+import net.jaekl.cfb.xml.MessagesXmlData;
+
+import org.junit.Test;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+public class CfbSchemaTest {
+ @Test
+ public void testEnsureDbInitialized() throws SQLException, FileNotFoundException, IOException, SAXException {
+ ConnectionMock con;
+ DbDriverMock dbDriver;
+ CfbSchema schema;
+ con = new ConnectionMock();
+ dbDriver = new DbDriverMock();
+ schema = new CfbSchema(dbDriver);
+
+ MessageMap msgMap = new MessageMap();
+ msgMap.parse(new InputSource(new ByteArrayInputStream(MessagesXmlData.XML.getBytes("UTF-8"))));
+
+ schema.setMessageMap(msgMap);
+ schema.ensureDbInitialized(con);
+
+ for (Table table : CfbSchema.TABLES) {
+ assertTablePresent(con, dbDriver, table);
+ }
+ }
+
+ private void assertTablePresent(ConnectionMock con, DbDriverMock dbDriver, Table table)
+ throws SQLException
+ {
+ Column[] columns = new Column[table.getNumColumns()];
+ Table[] tables = new Table[] { table };
+
+ for (int i = 0; i < table.getNumColumns(); ++i) {
+ columns[i] = table.getColumn(i);
+ }
+ List result = dbDriver.select(con, columns, tables, null);
+ assertNotNull(result);
+ }
+}
diff --git a/test/net/jaekl/cfb/db/ResultSetMock.java b/test/net/jaekl/cfb/db/ResultSetMock.java
new file mode 100644
index 0000000..4592272
--- /dev/null
+++ b/test/net/jaekl/cfb/db/ResultSetMock.java
@@ -0,0 +1,1208 @@
+package net.jaekl.cfb.db;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.net.URL;
+import java.sql.Array;
+import java.sql.Blob;
+import java.sql.Clob;
+import java.sql.Date;
+import java.sql.NClob;
+import java.sql.Ref;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.RowId;
+import java.sql.SQLException;
+import java.sql.SQLWarning;
+import java.sql.SQLXML;
+import java.sql.Statement;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.Calendar;
+import java.util.Map;
+
+public class ResultSetMock implements ResultSet {
+
+ @Override
+ public boolean isWrapperFor(Class> iface) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public T unwrap(Class iface) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean absolute(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public void afterLast() throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void beforeFirst() throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void cancelRowUpdates() throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void clearWarnings() throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void close() throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void deleteRow() throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public int findColumn(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public boolean first() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public Array getArray(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Array getArray(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public InputStream getAsciiStream(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public InputStream getAsciiStream(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public BigDecimal getBigDecimal(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public BigDecimal getBigDecimal(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public BigDecimal getBigDecimal(int arg0, int arg1) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public BigDecimal getBigDecimal(String arg0, int arg1) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public InputStream getBinaryStream(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public InputStream getBinaryStream(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Blob getBlob(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Blob getBlob(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean getBoolean(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean getBoolean(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public byte getByte(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public byte getByte(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public byte[] getBytes(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public byte[] getBytes(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Reader getCharacterStream(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Reader getCharacterStream(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Clob getClob(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Clob getClob(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getConcurrency() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public String getCursorName() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Date getDate(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Date getDate(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Date getDate(int arg0, Calendar arg1) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Date getDate(String arg0, Calendar arg1) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public double getDouble(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public double getDouble(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getFetchDirection() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getFetchSize() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public float getFloat(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public float getFloat(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getHoldability() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getInt(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getInt(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public long getLong(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public long getLong(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public ResultSetMetaData getMetaData() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Reader getNCharacterStream(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Reader getNCharacterStream(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public NClob getNClob(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public NClob getNClob(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getNString(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getNString(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Object getObject(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Object getObject(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Object getObject(int arg0, Map> arg1)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Object getObject(String arg0, Map> arg1)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public T getObject(int arg0, Class arg1) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public T getObject(String arg0, Class arg1) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Ref getRef(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Ref getRef(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getRow() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public RowId getRowId(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public RowId getRowId(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public SQLXML getSQLXML(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public SQLXML getSQLXML(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public short getShort(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public short getShort(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public Statement getStatement() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getString(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getString(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Time getTime(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Time getTime(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Time getTime(int arg0, Calendar arg1) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Time getTime(String arg0, Calendar arg1) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Timestamp getTimestamp(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Timestamp getTimestamp(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Timestamp getTimestamp(int arg0, Calendar arg1) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Timestamp getTimestamp(String arg0, Calendar arg1)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getType() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public URL getURL(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public URL getURL(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public InputStream getUnicodeStream(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public InputStream getUnicodeStream(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public SQLWarning getWarnings() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void insertRow() throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public boolean isAfterLast() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isBeforeFirst() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isClosed() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isFirst() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isLast() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean last() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public void moveToCurrentRow() throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void moveToInsertRow() throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public boolean next() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean previous() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public void refreshRow() throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public boolean relative(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean rowDeleted() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean rowInserted() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean rowUpdated() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public void setFetchDirection(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setFetchSize(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateArray(int arg0, Array arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateArray(String arg0, Array arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateAsciiStream(int arg0, InputStream arg1)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateAsciiStream(String arg0, InputStream arg1)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateAsciiStream(int arg0, InputStream arg1, int arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateAsciiStream(String arg0, InputStream arg1, int arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateAsciiStream(int arg0, InputStream arg1, long arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateAsciiStream(String arg0, InputStream arg1, long arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateBigDecimal(int arg0, BigDecimal arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateBigDecimal(String arg0, BigDecimal arg1)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateBinaryStream(int arg0, InputStream arg1)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateBinaryStream(String arg0, InputStream arg1)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateBinaryStream(int arg0, InputStream arg1, int arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateBinaryStream(String arg0, InputStream arg1, int arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateBinaryStream(int arg0, InputStream arg1, long arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateBinaryStream(String arg0, InputStream arg1, long arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateBlob(int arg0, Blob arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateBlob(String arg0, Blob arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateBlob(int arg0, InputStream arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateBlob(String arg0, InputStream arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateBlob(int arg0, InputStream arg1, long arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateBlob(String arg0, InputStream arg1, long arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateBoolean(int arg0, boolean arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateBoolean(String arg0, boolean arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateByte(int arg0, byte arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateByte(String arg0, byte arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateBytes(int arg0, byte[] arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateBytes(String arg0, byte[] arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateCharacterStream(int arg0, Reader arg1)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateCharacterStream(String arg0, Reader arg1)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateCharacterStream(int arg0, Reader arg1, int arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateCharacterStream(String arg0, Reader arg1, int arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateCharacterStream(int arg0, Reader arg1, long arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateCharacterStream(String arg0, Reader arg1, long arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateClob(int arg0, Clob arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateClob(String arg0, Clob arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateClob(int arg0, Reader arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateClob(String arg0, Reader arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateClob(int arg0, Reader arg1, long arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateClob(String arg0, Reader arg1, long arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateDate(int arg0, Date arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateDate(String arg0, Date arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateDouble(int arg0, double arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateDouble(String arg0, double arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateFloat(int arg0, float arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateFloat(String arg0, float arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateInt(int arg0, int arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateInt(String arg0, int arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateLong(int arg0, long arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateLong(String arg0, long arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateNCharacterStream(int arg0, Reader arg1)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateNCharacterStream(String arg0, Reader arg1)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateNCharacterStream(int arg0, Reader arg1, long arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateNCharacterStream(String arg0, Reader arg1, long arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateNClob(int arg0, NClob arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateNClob(String arg0, NClob arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateNClob(int arg0, Reader arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateNClob(String arg0, Reader arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateNClob(int arg0, Reader arg1, long arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateNClob(String arg0, Reader arg1, long arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateNString(int arg0, String arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateNString(String arg0, String arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateNull(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateNull(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateObject(int arg0, Object arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateObject(String arg0, Object arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateObject(int arg0, Object arg1, int arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateObject(String arg0, Object arg1, int arg2)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateRef(int arg0, Ref arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateRef(String arg0, Ref arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateRow() throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateRowId(int arg0, RowId arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateRowId(String arg0, RowId arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateSQLXML(int arg0, SQLXML arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateSQLXML(String arg0, SQLXML arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateShort(int arg0, short arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateShort(String arg0, short arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateString(int arg0, String arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateString(String arg0, String arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateTime(int arg0, Time arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateTime(String arg0, Time arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateTimestamp(int arg0, Timestamp arg1) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateTimestamp(String arg0, Timestamp arg1)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public boolean wasNull() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+}
diff --git a/test/net/jaekl/cfb/db/SequenceMock.java b/test/net/jaekl/cfb/db/SequenceMock.java
new file mode 100644
index 0000000..c2208b2
--- /dev/null
+++ b/test/net/jaekl/cfb/db/SequenceMock.java
@@ -0,0 +1,20 @@
+package net.jaekl.cfb.db;
+
+public class SequenceMock extends Sequence {
+
+ long m_val;
+
+ public SequenceMock(String name) {
+ super(name);
+ m_val = 0;
+ }
+
+ public SequenceMock(Sequence seq) {
+ this(seq.getName());
+ }
+
+ public long mock_nextVal() {
+ m_val += 1;
+ return m_val;
+ }
+}
diff --git a/test/net/jaekl/cfb/db/TableMock.java b/test/net/jaekl/cfb/db/TableMock.java
new file mode 100644
index 0000000..1c91115
--- /dev/null
+++ b/test/net/jaekl/cfb/db/TableMock.java
@@ -0,0 +1,42 @@
+package net.jaekl.cfb.db;
+
+import java.util.ArrayList;
+
+import static org.junit.Assert.*;
+
+public class TableMock extends Table {
+
+ private ArrayList m_rows;
+
+ public TableMock(String name, Column[] columns) {
+ super(name, columns);
+ m_rows = new ArrayList();
+ }
+
+ public TableMock(Table table) {
+ this(table.m_name, table.m_columns.toArray(new Column[table.m_columns.size()]));
+ }
+
+ protected ArrayList mock_getRows() { return m_rows; }
+
+ public boolean mock_hasColumn(Column expectedCol) {
+ for (Column col : m_columns) {
+ if (col.equals(expectedCol)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public Column[] mock_getColumns() {
+ return m_columns.toArray(new Column[m_columns.size()]);
+ }
+
+ public void mock_insert(Row row) {
+ assertEquals(getNumColumns(), row.getNumColumns());
+ for (int i = 0; i < getNumColumns(); ++i) {
+ assertEquals(getColumn(i).getType(), row.getColumn(i).getType());
+ }
+ m_rows.add(row);
+ }
+}
diff --git a/test/net/jaekl/cfb/db/driver/ConnectionMock.java b/test/net/jaekl/cfb/db/driver/ConnectionMock.java
new file mode 100644
index 0000000..b25a3fc
--- /dev/null
+++ b/test/net/jaekl/cfb/db/driver/ConnectionMock.java
@@ -0,0 +1,365 @@
+package net.jaekl.cfb.db.driver;
+
+import java.sql.Array;
+import java.sql.Blob;
+import java.sql.CallableStatement;
+import java.sql.Clob;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.NClob;
+import java.sql.PreparedStatement;
+import java.sql.SQLClientInfoException;
+import java.sql.SQLException;
+import java.sql.SQLWarning;
+import java.sql.SQLXML;
+import java.sql.Savepoint;
+import java.sql.Statement;
+import java.sql.Struct;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.Executor;
+
+public class ConnectionMock implements Connection {
+
+ @Override
+ public boolean isWrapperFor(Class> arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public T unwrap(Class arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void abort(Executor executor) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void clearWarnings() throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void close() throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void commit() throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Array createArrayOf(String typeName, Object[] elements)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Blob createBlob() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Clob createClob() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public NClob createNClob() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public SQLXML createSQLXML() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Statement createStatement() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Statement createStatement(int resultSetType, int resultSetConcurrency)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Statement createStatement(int resultSetType,
+ int resultSetConcurrency, int resultSetHoldability)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Struct createStruct(String typeName, Object[] attributes)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean getAutoCommit() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public String getCatalog() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Properties getClientInfo() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getClientInfo(String name) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getHoldability() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public DatabaseMetaData getMetaData() throws SQLException {
+ DatabaseMetaData result = new DatabaseMetaDataMock();
+ return result;
+ }
+
+ @Override
+ public int getNetworkTimeout() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public String getSchema() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getTransactionIsolation() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public Map> getTypeMap() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public SQLWarning getWarnings() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean isClosed() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isReadOnly() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isValid(int timeout) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public String nativeSQL(String sql) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public CallableStatement prepareCall(String sql) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public CallableStatement prepareCall(String sql, int resultSetType,
+ int resultSetConcurrency) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public CallableStatement prepareCall(String sql, int resultSetType,
+ int resultSetConcurrency, int resultSetHoldability)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(String sql) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(String sql, int[] columnIndexes)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(String sql, String[] columnNames)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(String sql, int resultSetType,
+ int resultSetConcurrency) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(String sql, int resultSetType,
+ int resultSetConcurrency, int resultSetHoldability)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void releaseSavepoint(Savepoint savepoint) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void rollback() throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void rollback(Savepoint savepoint) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setAutoCommit(boolean autoCommit) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setCatalog(String catalog) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setClientInfo(Properties properties)
+ throws SQLClientInfoException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setClientInfo(String name, String value)
+ throws SQLClientInfoException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setHoldability(int holdability) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setNetworkTimeout(Executor executor, int milliseconds)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setReadOnly(boolean readOnly) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Savepoint setSavepoint() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Savepoint setSavepoint(String name) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setSchema(String schema) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setTransactionIsolation(int level) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setTypeMap(Map> map) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/test/net/jaekl/cfb/db/driver/DatabaseMetaDataMock.java b/test/net/jaekl/cfb/db/driver/DatabaseMetaDataMock.java
new file mode 100644
index 0000000..265fc1a
--- /dev/null
+++ b/test/net/jaekl/cfb/db/driver/DatabaseMetaDataMock.java
@@ -0,0 +1,1103 @@
+package net.jaekl.cfb.db.driver;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.RowIdLifetime;
+import java.sql.SQLException;
+
+import net.jaekl.cfb.db.ResultSetMock;
+
+public class DatabaseMetaDataMock implements DatabaseMetaData {
+
+ @Override
+ public boolean isWrapperFor(Class> iface) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public T unwrap(Class iface) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean allProceduresAreCallable() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean allTablesAreSelectable() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean autoCommitFailureClosesAllResultSets() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean dataDefinitionCausesTransactionCommit() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean dataDefinitionIgnoredInTransactions() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean deletesAreDetected(int type) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean doesMaxRowSizeIncludeBlobs() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean generatedKeyAlwaysReturned() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public ResultSet getAttributes(String catalog, String schemaPattern,
+ String typeNamePattern, String attributeNamePattern)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getBestRowIdentifier(String catalog, String schema,
+ String table, int scope, boolean nullable) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getCatalogSeparator() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getCatalogTerm() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getCatalogs() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getClientInfoProperties() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getColumnPrivileges(String catalog, String schema,
+ String table, String columnNamePattern) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getColumns(String catalog, String schemaPattern,
+ String tableNamePattern, String columnNamePattern)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Connection getConnection() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getCrossReference(String parentCatalog,
+ String parentSchema, String parentTable, String foreignCatalog,
+ String foreignSchema, String foreignTable) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getDatabaseMajorVersion() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getDatabaseMinorVersion() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public String getDatabaseProductName() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getDatabaseProductVersion() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getDefaultTransactionIsolation() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getDriverMajorVersion() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getDriverMinorVersion() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public String getDriverName() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getDriverVersion() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getExportedKeys(String catalog, String schema, String table)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getExtraNameCharacters() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getFunctionColumns(String catalog, String schemaPattern,
+ String functionNamePattern, String columnNamePattern)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getFunctions(String catalog, String schemaPattern,
+ String functionNamePattern) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getIdentifierQuoteString() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getImportedKeys(String catalog, String schema, String table)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getIndexInfo(String catalog, String schema, String table,
+ boolean unique, boolean approximate) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getJDBCMajorVersion() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getJDBCMinorVersion() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxBinaryLiteralLength() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxCatalogNameLength() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxCharLiteralLength() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxColumnNameLength() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxColumnsInGroupBy() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxColumnsInIndex() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxColumnsInOrderBy() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxColumnsInSelect() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxColumnsInTable() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxConnections() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxCursorNameLength() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxIndexLength() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxProcedureNameLength() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxRowSize() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxSchemaNameLength() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxStatementLength() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxStatements() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxTableNameLength() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxTablesInSelect() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getMaxUserNameLength() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public String getNumericFunctions() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getPrimaryKeys(String catalog, String schema, String table)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getProcedureColumns(String catalog, String schemaPattern,
+ String procedureNamePattern, String columnNamePattern)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getProcedureTerm() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getProcedures(String catalog, String schemaPattern,
+ String procedureNamePattern) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getPseudoColumns(String catalog, String schemaPattern,
+ String tableNamePattern, String columnNamePattern)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getResultSetHoldability() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public RowIdLifetime getRowIdLifetime() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getSQLKeywords() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getSQLStateType() throws SQLException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public String getSchemaTerm() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getSchemas() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getSchemas(String catalog, String schemaPattern)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getSearchStringEscape() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getStringFunctions() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getSuperTables(String catalog, String schemaPattern,
+ String tableNamePattern) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getSuperTypes(String catalog, String schemaPattern,
+ String typeNamePattern) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getSystemFunctions() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getTablePrivileges(String catalog, String schemaPattern,
+ String tableNamePattern) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getTableTypes() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)
+ throws SQLException
+ {
+ ResultSetMock result = new ResultSetMock();
+ return result;
+ }
+
+ @Override
+ public String getTimeDateFunctions() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getTypeInfo() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getUDTs(String catalog, String schemaPattern,
+ String typeNamePattern, int[] types) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getURL() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getUserName() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResultSet getVersionColumns(String catalog, String schema,
+ String table) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean insertsAreDetected(int type) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isCatalogAtStart() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isReadOnly() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean locatorsUpdateCopy() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean nullPlusNonNullIsNull() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean nullsAreSortedAtEnd() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean nullsAreSortedAtStart() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean nullsAreSortedHigh() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean nullsAreSortedLow() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean othersDeletesAreVisible(int type) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean othersInsertsAreVisible(int type) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean othersUpdatesAreVisible(int type) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean ownDeletesAreVisible(int type) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean ownInsertsAreVisible(int type) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean ownUpdatesAreVisible(int type) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean storesLowerCaseIdentifiers() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean storesLowerCaseQuotedIdentifiers() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean storesMixedCaseIdentifiers() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean storesMixedCaseQuotedIdentifiers() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean storesUpperCaseIdentifiers() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean storesUpperCaseQuotedIdentifiers() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsANSI92EntryLevelSQL() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsANSI92FullSQL() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsANSI92IntermediateSQL() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsAlterTableWithAddColumn() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsAlterTableWithDropColumn() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsBatchUpdates() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsCatalogsInDataManipulation() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsCatalogsInIndexDefinitions() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsCatalogsInPrivilegeDefinitions() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsCatalogsInProcedureCalls() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsCatalogsInTableDefinitions() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsColumnAliasing() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsConvert() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsConvert(int fromType, int toType)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsCoreSQLGrammar() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsCorrelatedSubqueries() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsDataDefinitionAndDataManipulationTransactions()
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsDataManipulationTransactionsOnly()
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsDifferentTableCorrelationNames() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsExpressionsInOrderBy() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsExtendedSQLGrammar() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsFullOuterJoins() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsGetGeneratedKeys() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsGroupBy() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsGroupByBeyondSelect() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsGroupByUnrelated() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsIntegrityEnhancementFacility() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsLikeEscapeClause() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsLimitedOuterJoins() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsMinimumSQLGrammar() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsMixedCaseIdentifiers() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsMixedCaseQuotedIdentifiers() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsMultipleOpenResults() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsMultipleResultSets() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsMultipleTransactions() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsNamedParameters() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsNonNullableColumns() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsOpenCursorsAcrossCommit() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsOpenCursorsAcrossRollback() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsOpenStatementsAcrossCommit() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsOpenStatementsAcrossRollback() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsOrderByUnrelated() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsOuterJoins() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsPositionedDelete() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsPositionedUpdate() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsResultSetConcurrency(int type, int concurrency)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsResultSetHoldability(int holdability)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsResultSetType(int type) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsSavepoints() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsSchemasInDataManipulation() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsSchemasInIndexDefinitions() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsSchemasInPrivilegeDefinitions() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsSchemasInProcedureCalls() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsSchemasInTableDefinitions() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsSelectForUpdate() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsStatementPooling() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsStoredFunctionsUsingCallSyntax() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsStoredProcedures() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsSubqueriesInComparisons() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsSubqueriesInExists() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsSubqueriesInIns() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsSubqueriesInQuantifieds() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsTableCorrelationNames() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsTransactionIsolationLevel(int level)
+ throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsTransactions() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsUnion() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean supportsUnionAll() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean updatesAreDetected(int type) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean usesLocalFilePerTable() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean usesLocalFiles() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+}
diff --git a/test/net/jaekl/cfb/db/driver/DbDriverMock.java b/test/net/jaekl/cfb/db/driver/DbDriverMock.java
new file mode 100644
index 0000000..833df82
--- /dev/null
+++ b/test/net/jaekl/cfb/db/driver/DbDriverMock.java
@@ -0,0 +1,151 @@
+package net.jaekl.cfb.db.driver;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import net.jaekl.cfb.db.Column;
+import net.jaekl.cfb.db.Condition;
+import net.jaekl.cfb.db.Row;
+import net.jaekl.cfb.db.Sequence;
+import net.jaekl.cfb.db.SequenceMock;
+import net.jaekl.cfb.db.Sort;
+import net.jaekl.cfb.db.Table;
+import net.jaekl.cfb.db.TableMock;
+
+public class DbDriverMock extends DbDriver {
+
+ private HashMap m_tables;
+ private HashMap m_sequences;
+
+ public DbDriverMock() {
+ super();
+ m_tables = new HashMap();
+ m_sequences = new HashMap();
+ }
+
+ @Override
+ public void load() throws ClassNotFoundException {
+ // no-op
+ }
+
+ @Override
+ public Connection connect(String host, int port, String dbName, String user, String pass)
+ throws SQLException
+ {
+ return null;
+ }
+
+ @Override
+ public boolean createTable(Connection con, Table table) throws SQLException
+ {
+ assertNotNull(con);
+ assertNotNull(table);
+ assertFalse(m_tables.containsKey(table.getName()));
+
+ TableMock tm = new TableMock(table);
+ m_tables.put(table.getName(), tm);
+ return true;
+ }
+
+ @Override
+ public void dropTable(Connection con, Table table) throws SQLException
+ {
+ assertNotNull(con);
+ assertNotNull(table);
+ assertTrue(table instanceof TableMock);
+
+ if (m_tables.containsKey(table.getName())) {
+ m_tables.remove(table.getName());
+ }
+ else {
+ throw new SQLException("Table " + table.getName() + " does not exist.");
+ }
+ }
+
+ @Override
+ public boolean createSequence(Connection con, Sequence seq) throws SQLException
+ {
+ assertNotNull(con);
+ assertNotNull(seq);
+ assertFalse(m_sequences.containsKey(seq.getName()));
+
+ SequenceMock sm = (seq instanceof SequenceMock) ? (SequenceMock)seq : new SequenceMock(seq);
+
+ m_sequences.put(seq.getName(), sm);
+ return true;
+ }
+
+ public void dropSequence(Connection con, Sequence seq) throws SQLException
+ {
+ assertNotNull(con);
+ assertNotNull(seq);
+ assertTrue(seq instanceof SequenceMock);
+
+ if (m_sequences.containsKey(seq.getName())) {
+ m_sequences.remove(seq.getName());
+ }
+ else {
+ throw new SQLException("Sequence " + seq.getName() + " does not exist.");
+ }
+ }
+
+ public List select(Connection con, Column[] columns, Table[] tables, Condition[] conditions, Sort[] sorts, int limit)
+ throws SQLException
+ {
+ assertNotNull(con);
+ assertNotNull(columns);
+ assertNotNull(tables);
+
+ // TODO: produce sensible output
+ return new ArrayList();
+ }
+
+ // Returns the number of rows inserted
+ @Override
+ public int insert(Connection con, Table table, Object[][] values) throws SQLException
+ {
+ assertNotNull(con);
+ assertNotNull(table);
+ assertNotNull(values);
+
+ TableMock tm = m_tables.get(table.getName());
+ if (null == tm) {
+ throw new SQLException("Table " + table.getName() + " does not exist.");
+ }
+ Column[] columns = tm.mock_getColumns();
+
+ for (Object[] rowVals : values) {
+ assertNotNull(rowVals);
+ assertEquals(table.getNumColumns(), rowVals.length);
+
+ tm.mock_insert(new Row(columns, rowVals));
+ }
+
+ return values.length;
+ }
+
+
+ public long nextVal(Connection con, Sequence seq) throws SQLException
+ {
+ assertNotNull(con);
+ assertNotNull(seq);
+
+ SequenceMock sm = m_sequences.get(seq.getName());
+ return sm.mock_nextVal();
+ }
+
+
+ @Override
+ protected String nextValSql(Sequence seq)
+ {
+ return "";
+ }
+}
diff --git a/test/net/jaekl/cfb/xml/MessagesXmlData.java b/test/net/jaekl/cfb/xml/MessagesXmlData.java
new file mode 100644
index 0000000..5b81dca
--- /dev/null
+++ b/test/net/jaekl/cfb/xml/MessagesXmlData.java
@@ -0,0 +1,227 @@
+package net.jaekl.cfb.xml;
+
+public class MessagesXmlData {
+ public static final String XML =
+ "\n"
+ + "\n"
+ + "\n"
+ + " Correctness\n"
+ + " C\n"
+ + " Probable bug - an apparent coding mistake\n"
+ + " resulting in code that was probably not what the\n"
+ + " developer intended. We strive for a low false positive rate. \n"
+ + " \n"
+ + " \n"
+ + " Bogus random noise\n"
+ + " N\n"
+ + " Bogus random noise: intended to be useful\n"
+ + " as a control in data mining experiments, not in finding actual bugs in software\n"
+ + " \n"
+ + " \n"
+ + " \n"
+ + " Security\n"
+ + " S\n"
+ + " A use of untrusted input in a way that could create a remotely exploitable security vulnerability.\n"
+ + " \n"
+ + " \n"
+ + " \n"
+ + " Bad practice\n"
+ + " B\n"
+ + " Violations of recommended and essential\n"
+ + " coding practice. Examples include hash code and equals\n"
+ + " problems, cloneable idiom, dropped exceptions,\n"
+ + " Serializable problems, and misuse of finalize.\n"
+ + " We strive to make this analysis accurate,\n"
+ + " although some groups may\n"
+ + " not care about some of the bad practices. \n"
+ + " \n"
+ + " \n"
+ + " Dodgy code\n"
+ + " D\n"
+ + " code that is confusing, anomalous, or\n"
+ + " written in a way that leads itself to errors.\n"
+ + " Examples include dead local stores, switch fall through,\n"
+ + " unconfirmed casts, and redundant null check of value\n"
+ + " known to be null.\n"
+ + " More false positives accepted.\n"
+ + " In previous versions of FindBugs, this category was known as Style.\n"
+ + " \n"
+ + " \n"
+ + " \n"
+ + " Performance\n"
+ + " P\n"
+ + " code that is not necessarily incorrect but may be inefficient \n"
+ + " \n"
+ + " \n"
+ + " Malicious code vulnerability\n"
+ + " V\n"
+ + " code that is vulnerable to attacks from untrusted code \n"
+ + " \n"
+ + " \n"
+ + " Multithreaded correctness\n"
+ + " M\n"
+ + " code flaws having to do with threads, locks, and volatiles \n"
+ + " \n"
+ + " \n"
+ + " Internationalization\n"
+ + " I\n"
+ + " code flaws having to do with internationalization and locale \n"
+ + " \n"
+ + " \n"
+ + " \n"
+ + " Experimental\n"
+ + " X\n"
+ + " Experimental and not fully vetted bug patterns \n"
+ + " \n"
+ + " \n"
+ + " \n"
+ + " \n"
+ + " Rough value of known constant found\n"
+ + " Rough value of {3} found: {2}\n"
+ + " \n"
+ + " It's recommended to use the predefined library constant for code clarity and better precision.
\n"
+ + " ]]>\n"
+ + " \n"
+ + " \n"
+ + " \n"
+ + " Class too big for analysis\n"
+ + " {0} is too big for analysis\n"
+ + " \n"
+ + " This class is bigger than can be effectively handled, and was not fully analyzed for errors.\n"
+ + " \n"
+ + "\n"
+ + " ]]>\n"
+ + " \n"
+ + " \n"
+ + " \n"
+ + " Bogus warning about a null pointer dereference\n"
+ + " Bogus warning about a null pointer dereference in {1}\n"
+ + " \n"
+ + " Bogus warning.\n"
+ + " ]]>\n"
+ + " \n"
+ + " \n"
+ + " \n"
+ + " Bogus warning about a method call\n"
+ + " Bogus warning about a method call {2} in {1}\n"
+ + " \n"
+ + " Bogus warning.\n"
+ + " ]]>\n"
+ + " \n"
+ + " \n"
+ + " \n"
+ + " Bogus warning about a field reference\n"
+ + " Bogus warning about a reference to {2} in {1}\n"
+ + " \n"
+ + " Bogus warning.\n"
+ + " ]]>\n"
+ + " \n"
+ + " \n"
+ + " \n"
+ + " Bogus warning about an operation\n"
+ + " Bogus warning about an operation {1}\n"
+ + " \n"
+ + " Bogus warning.\n"
+ + " ]]>\n"
+ + " \n"
+ + " \n"
+ + " \n"
+ + " BigDecimal constructed from double that isn't represented precisely\n"
+ + " BigDecimal constructed from {4} in {1}\n"
+ + " \n"
+ + " \n"
+ + " This code creates a BigDecimal from a double value that doesn't translate well to a\n"
+ + " decimal number.\n"
+ + " For example, one might assume that writing new BigDecimal(0.1) in Java creates a BigDecimal which is exactly equal to 0.1 (an unscaled value of 1, with a scale of 1), but it is actually equal to 0.1000000000000000055511151231257827021181583404541015625.\n"
+ + " You probably want to use the BigDecimal.valueOf(double d) method, which uses the String representation\n"
+ + " of the double to create the BigDecimal (e.g., BigDecimal.valueOf(0.1) gives 0.1).\n"
+ + " \n"
+ + "\n"
+ + " ]]>\n"
+ + " \n"
+ + " \n"
+ + "\n"
+ + " \n"
+ + " D'oh! A nonsensical method invocation\n"
+ + " D'oh! A nonsensical invocation of {2.nameAndSignature} in {1}\n"
+ + " \n"
+ + " \n"
+ + " This partical method invocation doesn't make sense, for reasons that should be apparent from inspection.\n"
+ + " \n"
+ + "\n"
+ + " ]]>\n"
+ + " \n"
+ + " \n"
+ + "\n"
+ + " "
+ + " Useless/vacuous call to EasyMock method"
+ + " Useless/vacuous call to {2} in {1}"
+ + " "
+ + " This call doesn't pass any objects to the EasyMock method, so the call doesn't do anything."
+ + " "
+ + ""
+ + " ]]>"
+ + " "
+ + " "
+ + " "
+ + " Creation of ScheduledThreadPoolExecutor with zero core threads"
+ + " Creation of ScheduledThreadPoolExecutor with zero core threads in {1}"
+ + " "
+ + " (Javadoc)"
+ + " A ScheduledThreadPoolExecutor with zero core threads will never execute anything; changes to the max pool size are ignored."
+ + " "
+ + ""
+ + " ]]>"
+ + " "
+ + " "
+ + " "
+ + " Futile attempt to change max pool size of ScheduledThreadPoolExecutor"
+ + " Futile attempt to change max pool size of ScheduledThreadPoolExecutor in {1}"
+ + " "
+ + " (Javadoc)"
+ + " While ScheduledThreadPoolExecutor inherits from ThreadPoolExecutor, a few of the inherited tuning methods are not useful for it. In particular, because it acts as a fixed-sized pool using corePoolSize threads and an unbounded queue, adjustments to maximumPoolSize have no useful effect."
+ + " "
+ + ""
+ + " ]]>"
+ + " "
+ + " "
+ + " "
+ + " Call to unsupported method"
+ + " Call to unsupported method {2} in {1}"
+ + " "
+ + " All targets of this method invocation throw an UnsupportedOperationException."
+ + " "
+ + ""
+ + " ]]>"
+ + " "
+ + " "
+ + " "
+ + " Empty database password"
+ + " Empty database password in {1}"
+ + " "
+ + " This code creates a database connect using a blank or empty password. This indicates that the database is not protected by a password."
+ + " "
+ + ""
+ + " ]]>"
+ + " "
+ + " "
+ + "";
+}
--
2.39.2