You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ka...@apache.org on 2013/07/22 10:10:15 UTC
[02/64] [partial] Hard rename of all 'org/eobjects' folders to
'org/apache'.
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/test/integrationtests/org/eobjects/metamodel/OracleTest.java
----------------------------------------------------------------------
diff --git a/jdbc/src/test/integrationtests/org/eobjects/metamodel/OracleTest.java b/jdbc/src/test/integrationtests/org/eobjects/metamodel/OracleTest.java
deleted file mode 100644
index 4717873..0000000
--- a/jdbc/src/test/integrationtests/org/eobjects/metamodel/OracleTest.java
+++ /dev/null
@@ -1,222 +0,0 @@
-package org.eobjects.metamodel;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.ResultSet;
-import java.util.Arrays;
-
-import javax.swing.table.TableModel;
-
-import junit.framework.TestCase;
-
-import org.eobjects.metamodel.data.DataSet;
-import org.eobjects.metamodel.data.DataSetTableModel;
-import org.eobjects.metamodel.jdbc.JdbcDataContext;
-import org.eobjects.metamodel.query.FromItem;
-import org.eobjects.metamodel.query.JoinType;
-import org.eobjects.metamodel.query.Query;
-import org.eobjects.metamodel.schema.Relationship;
-import org.eobjects.metamodel.schema.Schema;
-import org.eobjects.metamodel.schema.Table;
-import org.eobjects.metamodel.schema.TableType;
-
-/**
- * Test case that tests oracle interaction. An express edition of the oracle
- * database can be used to run these tests.
- *
- * The test requires the "human resources" schema that is provided ass a sample
- * schema for Oracle default installations.
- *
- * The script for installing it can be found in:
- *
- * <pre>
- * $ORACLE_HOME / demo / schema / human_resources / hr_main.sql
- * </pre>
- *
- * Install with something like:
- *
- * <pre>
- * $ORACLE_HOME/bin/sqlplus -S "/ as sysdba" @hr_main.sql
- * </pre>
- *
- * The JDBC driver is not available in the Maven repository so you will have to
- * download and attach it to the eclipse project yourself.
- *
- * @see http://www.oracle.com/technology/products/bi/samples
- * @see http
- * ://www.oracle.com/technology/software/products/database/xe/index.html
- */
-public class OracleTest extends TestCase {
-
- private static final String CONNECTION_STRING = "jdbc:oracle:thin:@localhost:1521:XE";
- private static final String USERNAME = "HR";
- private static final String PASSWORD = "eobjects";
- private Connection _connection;
- private DataContext _dataContext;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- Class.forName("oracle.jdbc.OracleDriver");
- _connection = DriverManager.getConnection(CONNECTION_STRING, USERNAME,
- PASSWORD);
- _connection.setReadOnly(true);
- _dataContext = new JdbcDataContext(_connection);
- }
-
- @Override
- protected void tearDown() throws Exception {
- super.tearDown();
- _connection.close();
- }
-
- /**
- * Ticket #170: getIndexInfo causes SQLException. We test that resultsets
- * are closed properly.
- */
- public void testIndexInfo() throws Exception {
- Schema schema = new JdbcDataContext(_connection,
- new TableType[] { TableType.TABLE }, null)
- .getSchemaByName("SYS");
- assertEquals(12, schema.getTableCount());
- }
-
- public void testGetSchemaNames() throws Exception {
- DataContext dc = new JdbcDataContext(_connection);
- String[] schemaNames = dc.getSchemaNames();
-
- String concatSchemas = Arrays.toString(schemaNames);
-
- // In order to allow the database to be used for other purposes than
- // this integration test, we will not make an exact assertion as to
- // which schema names exist, but just assert that HR and the default
- // oracle schemas exist.
- assertTrue(concatSchemas.indexOf("foobar_schema_that_does_not_exist") == -1);
- assertTrue(concatSchemas.indexOf("HR") != -1);
- assertTrue(concatSchemas.indexOf("SYSTEM") != -1);
- assertTrue(concatSchemas.indexOf("XDB") != -1);
- assertTrue(schemaNames.length > 8);
-
- Schema schema = dc.getDefaultSchema();
- assertEquals("HR", schema.getName());
- }
-
- /**
- * Really only tests the JDBC implementation, used to help localize the
- * cause for Ticket #144
- */
- public void testGetImportedKeys() throws Exception {
- ResultSet rs = _connection.getMetaData().getImportedKeys(null, "HR",
- "EMPLOYEES");
- int count = 0;
- while (rs.next()) {
- count++;
- assertEquals("HR", rs.getString(2));
- String pkTableName = rs.getString(3);
- String pkColumnName = rs.getString(4);
- String fkTableName = rs.getString(7);
- assertEquals("EMPLOYEES", fkTableName);
- String fkColumnName = rs.getString(8);
- System.out.println("Found primary key relation: pkTableName="
- + pkTableName + ",pkColumnName=" + pkColumnName
- + ",fkTableName=" + fkTableName + ",fkColumnName="
- + fkColumnName);
- }
- rs.close();
- assertEquals(3, count);
-
- rs = _connection.getMetaData().getImportedKeys(null, "HR",
- "DEPARTMENTS");
- count = 0;
- while (rs.next()) {
- count++;
- assertEquals("HR", rs.getString(2));
- String pkTableName = rs.getString(3);
- String pkColumnName = rs.getString(4);
- String fkTableName = rs.getString(7);
- assertEquals("DEPARTMENTS", fkTableName);
- String fkColumnName = rs.getString(8);
- System.out.println("Found primary key relation: pkTableName="
- + pkTableName + ",pkColumnName=" + pkColumnName
- + ",fkTableName=" + fkTableName + ",fkColumnName="
- + fkColumnName);
- }
- rs.close();
- assertEquals(2, count);
- }
-
- public void testGetSchema() throws Exception {
- Schema schema = _dataContext.getSchemaByName("HR");
- assertNotNull(schema);
- assertEquals(
- "{JdbcTable[name=COUNTRIES,type=TABLE,remarks=<null>],"
- + "JdbcTable[name=DEPARTMENTS,type=TABLE,remarks=<null>]"
- + ",JdbcTable[name=EMPLOYEES,type=TABLE,remarks=<null>]"
- + ",JdbcTable[name=JOBS,type=TABLE,remarks=<null>]"
- + ",JdbcTable[name=JOB_HISTORY,type=TABLE,remarks=<null>]"
- + ",JdbcTable[name=LOCATIONS,type=TABLE,remarks=<null>]"
- + ",JdbcTable[name=REGIONS,type=TABLE,remarks=<null>]"
- + ",JdbcTable[name=EMP_DETAILS_VIEW,type=VIEW,remarks=<null>]}",
- Arrays.toString(schema.getTables()));
-
- Relationship[] employeeRelationships = schema.getTableByName(
- "EMPLOYEES").getRelationships();
- assertEquals(
- "{Relationship[primaryTable=EMPLOYEES,primaryColumns={EMPLOYEE_ID},foreignTable=DEPARTMENTS,foreignColumns={MANAGER_ID}],"
- + "Relationship[primaryTable=DEPARTMENTS,primaryColumns={DEPARTMENT_ID},foreignTable=EMPLOYEES,foreignColumns={DEPARTMENT_ID}],"
- + "Relationship[primaryTable=EMPLOYEES,primaryColumns={EMPLOYEE_ID},foreignTable=EMPLOYEES,foreignColumns={MANAGER_ID}],"
- + "Relationship[primaryTable=JOBS,primaryColumns={JOB_ID},foreignTable=EMPLOYEES,foreignColumns={JOB_ID}],"
- + "Relationship[primaryTable=EMPLOYEES,primaryColumns={EMPLOYEE_ID},foreignTable=JOB_HISTORY,foreignColumns={EMPLOYEE_ID}]}",
- Arrays.toString(employeeRelationships));
-
- assertEquals(
- "{JdbcColumn[name=EMPLOYEE_ID,columnNumber=0,type=DECIMAL,nullable=false,nativeType=NUMBER,columnSize=6],"
- + "JdbcColumn[name=FIRST_NAME,columnNumber=1,type=VARCHAR,nullable=true,nativeType=VARCHAR2,columnSize=20],"
- + "JdbcColumn[name=LAST_NAME,columnNumber=2,type=VARCHAR,nullable=false,nativeType=VARCHAR2,columnSize=25],"
- + "JdbcColumn[name=EMAIL,columnNumber=3,type=VARCHAR,nullable=false,nativeType=VARCHAR2,columnSize=25],"
- + "JdbcColumn[name=PHONE_NUMBER,columnNumber=4,type=VARCHAR,nullable=true,nativeType=VARCHAR2,columnSize=20],"
- + "JdbcColumn[name=HIRE_DATE,columnNumber=5,type=DATE,nullable=false,nativeType=DATE,columnSize=7],"
- + "JdbcColumn[name=JOB_ID,columnNumber=6,type=VARCHAR,nullable=false,nativeType=VARCHAR2,columnSize=10],"
- + "JdbcColumn[name=SALARY,columnNumber=7,type=DECIMAL,nullable=true,nativeType=NUMBER,columnSize=8],"
- + "JdbcColumn[name=COMMISSION_PCT,columnNumber=8,type=DECIMAL,nullable=true,nativeType=NUMBER,columnSize=2],"
- + "JdbcColumn[name=MANAGER_ID,columnNumber=9,type=DECIMAL,nullable=true,nativeType=NUMBER,columnSize=6],"
- + "JdbcColumn[name=DEPARTMENT_ID,columnNumber=10,type=DECIMAL,nullable=true,nativeType=NUMBER,columnSize=4]}",
- Arrays.toString(schema.getTableByName("EMPLOYEES").getColumns()));
-
- assertEquals(
- "{JdbcColumn[name=DEPARTMENT_ID,columnNumber=0,type=DECIMAL,nullable=false,nativeType=NUMBER,columnSize=4],"
- + "JdbcColumn[name=DEPARTMENT_NAME,columnNumber=1,type=VARCHAR,nullable=false,nativeType=VARCHAR2,columnSize=30],"
- + "JdbcColumn[name=MANAGER_ID,columnNumber=2,type=DECIMAL,nullable=true,nativeType=NUMBER,columnSize=6],"
- + "JdbcColumn[name=LOCATION_ID,columnNumber=3,type=DECIMAL,nullable=true,nativeType=NUMBER,columnSize=4]}",
- Arrays.toString(schema.getTableByName("DEPARTMENTS")
- .getColumns()));
- }
-
- public void testExecuteQuery() throws Exception {
- Schema schema = _dataContext.getSchemaByName("HR");
- Table employeeTable = schema.getTableByName("EMPLOYEES");
- Table departmentsTable = schema.getTableByName("DEPARTMENTS");
- Relationship relationship = employeeTable
- .getRelationships(departmentsTable)[0];
- assertEquals(
- "Relationship[primaryTable=EMPLOYEES,primaryColumns={EMPLOYEE_ID},foreignTable=DEPARTMENTS,foreignColumns={MANAGER_ID}]",
- relationship.toString());
-
- Query q = new Query().from(new FromItem(JoinType.INNER, relationship))
- .select(employeeTable.getColumnByName("EMAIL"),
- departmentsTable.getColumnByName("DEPARTMENT_NAME"));
- q.getSelectClause().getItem(0).setAlias("e-mail");
-
- assertEquals(
- "SELECT \"EMPLOYEES\".\"EMAIL\" AS e-mail, \"DEPARTMENTS\".\"DEPARTMENT_NAME\" FROM HR.\"EMPLOYEES\" INNER JOIN HR.\"DEPARTMENTS\" ON \"EMPLOYEES\".\"EMPLOYEE_ID\" = \"DEPARTMENTS\".\"MANAGER_ID\"",
- q.toString());
-
- DataSet data = _dataContext.executeQuery(q);
- assertNotNull(data);
- TableModel tableModel = new DataSetTableModel(data);
- assertEquals(2, tableModel.getColumnCount());
- assertEquals(11, tableModel.getRowCount());
- assertEquals("JWHALEN", tableModel.getValueAt(0, 0).toString());
- assertEquals("Administration", tableModel.getValueAt(0, 1).toString());
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/test/integrationtests/org/eobjects/metamodel/PostgresqlTest.java
----------------------------------------------------------------------
diff --git a/jdbc/src/test/integrationtests/org/eobjects/metamodel/PostgresqlTest.java b/jdbc/src/test/integrationtests/org/eobjects/metamodel/PostgresqlTest.java
deleted file mode 100644
index 9c8cf34..0000000
--- a/jdbc/src/test/integrationtests/org/eobjects/metamodel/PostgresqlTest.java
+++ /dev/null
@@ -1,810 +0,0 @@
-package org.eobjects.metamodel;
-
-import java.lang.reflect.Method;
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.DriverManager;
-import java.util.Arrays;
-import java.util.List;
-
-import javax.swing.table.TableModel;
-
-import junit.framework.TestCase;
-
-import org.eobjects.metamodel.data.DataSet;
-import org.eobjects.metamodel.data.DataSetTableModel;
-import org.eobjects.metamodel.insert.RowInsertionBuilder;
-import org.eobjects.metamodel.jdbc.JdbcDataContext;
-import org.eobjects.metamodel.jdbc.JdbcTestTemplates;
-import org.eobjects.metamodel.jdbc.QuerySplitter;
-import org.eobjects.metamodel.query.FilterItem;
-import org.eobjects.metamodel.query.FunctionType;
-import org.eobjects.metamodel.query.OperatorType;
-import org.eobjects.metamodel.query.OrderByItem;
-import org.eobjects.metamodel.query.Query;
-import org.eobjects.metamodel.query.SelectItem;
-import org.eobjects.metamodel.schema.Column;
-import org.eobjects.metamodel.schema.ColumnType;
-import org.eobjects.metamodel.schema.Relationship;
-import org.eobjects.metamodel.schema.Schema;
-import org.eobjects.metamodel.schema.Table;
-import org.junit.Ignore;
-
-/**
- * Test case that tests postgresql interaction. The test requires the
- * "dellstore2" sample database that can be found at pgfoundry.
- *
- * @see http://pgfoundry.org/projects/dbsamples/
- */
-public class PostgresqlTest extends TestCase {
-
- private static final String CONNECTION_STRING = "jdbc:postgresql://localhost/dellstore2";
- private static final String USERNAME = "eobjects";
- private static final String PASSWORD = "eobjects";
- private Connection _connection;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- Class.forName("org.postgresql.Driver");
- _connection = DriverManager.getConnection(CONNECTION_STRING, USERNAME, PASSWORD);
- }
-
- @Override
- protected void tearDown() throws Exception {
- super.tearDown();
- _connection.close();
- }
-
- public void testInterpretationOfNull() throws Exception {
- JdbcTestTemplates.interpretationOfNulls(_connection);
- }
-
- private JdbcDataContext createLimitAndOffsetTestData() {
- final JdbcDataContext dc = new JdbcDataContext(_connection);
-
- if (dc.getTableByQualifiedLabel("test_table") != null) {
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback callback) {
- callback.dropTable("test_table").execute();
- }
- });
- }
-
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback callback) {
- Table table = callback.createTable(dc.getDefaultSchema(), "test_table").withColumn("foo")
- .ofType(ColumnType.INTEGER).withColumn("bar").ofType(ColumnType.VARCHAR).execute();
- callback.insertInto(table).value("foo", 1).value("bar", "hello").execute();
- callback.insertInto(table).value("foo", 2).value("bar", "there").execute();
- callback.insertInto(table).value("foo", 3).value("bar", "world").execute();
- }
- });
-
- dc.refreshSchemas();
-
- return dc;
- }
-
- public void testLimit() throws Exception {
- JdbcDataContext dc = createLimitAndOffsetTestData();
- Schema schema = dc.getDefaultSchema();
- Table productsTable = schema.getTableByName("test_table");
-
- DataSet ds = dc.query().from(productsTable).select("foo").limit(2).execute();
- assertTrue(ds.next());
- assertEquals("Row[values=[1]]", ds.getRow().toString());
- assertTrue(ds.next());
- assertEquals("Row[values=[2]]", ds.getRow().toString());
- assertFalse(ds.next());
- ds.close();
- }
-
- public void testOffset() throws Exception {
- JdbcDataContext dc = createLimitAndOffsetTestData();
- Schema schema = dc.getDefaultSchema();
- Table productsTable = schema.getTableByName("test_table");
-
- DataSet ds = dc.query().from(productsTable).select("foo").offset(1).execute();
- assertTrue(ds.next());
- assertEquals("Row[values=[2]]", ds.getRow().toString());
- assertTrue(ds.next());
- assertEquals("Row[values=[3]]", ds.getRow().toString());
- assertFalse(ds.next());
- ds.close();
- }
-
- public void testLimitAndOffset() throws Exception {
- JdbcDataContext dc = createLimitAndOffsetTestData();
- Schema schema = dc.getDefaultSchema();
- Table productsTable = schema.getTableByName("test_table");
-
- DataSet ds = dc.query().from(productsTable).select("foo").limit(1).offset(1).execute();
- assertTrue(ds.next());
- assertEquals("Row[values=[2]]", ds.getRow().toString());
- assertFalse(ds.next());
-
- ds.close();
- }
-
- public void testQuotedInsertSyntax() throws Exception {
- try {
- _connection.createStatement().execute("DROP TABLE my_table");
- } catch (Exception e) {
- // do nothing
- }
-
- JdbcDataContext dc = new JdbcDataContext(_connection);
- final Schema schema = dc.getDefaultSchema();
-
- // create table
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback cb) {
- Table table = cb.createTable(schema, "my_table").withColumn("id").asPrimaryKey()
- .ofType(ColumnType.INTEGER).ofNativeType("SERIAL").nullable(false).withColumn("name")
- .ofType(ColumnType.VARCHAR).ofSize(10).withColumn("foo").ofType(ColumnType.BOOLEAN)
- .nullable(true).withColumn("bar").ofType(ColumnType.BOOLEAN).nullable(true).execute();
-
- assertEquals("my_table", table.getName());
- }
- });
-
- assertTrue(dc.getColumnByQualifiedLabel("my_table.id").isPrimaryKey());
- assertFalse(dc.getColumnByQualifiedLabel("my_table.name").isPrimaryKey());
-
- // insert records
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback callback) {
- RowInsertionBuilder builder = callback.insertInto("my_table").value("name", "row 1").value("foo", true);
-
- try {
- Method method = builder.getClass().getDeclaredMethod("createSqlStatement");
- method.setAccessible(true);
- Object result = method.invoke(builder);
- assertEquals("INSERT INTO \"public\".\"my_table\" (name,foo) VALUES (?,?)", result.toString());
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
-
- builder.execute();
-
- callback.insertInto("my_table").value("name", "row 2").value("foo", false).execute();
- }
- });
-
- // query
- DataSet ds = dc.query().from("my_table").select("name").where("foo").eq(true).execute();
- assertTrue(ds.next());
- assertEquals("Row[values=[row 1]]", ds.getRow().toString());
- assertFalse(ds.next());
- ds.close();
-
- // drop
- dc.executeUpdate(new UpdateScript() {
-
- @Override
- public void run(UpdateCallback callback) {
- callback.dropTable("my_table").execute();
- }
- });
- }
-
- public void testInsertOfDifferentTypes() throws Exception {
- try {
- _connection.createStatement().execute("DROP TABLE my_table");
- } catch (Exception e) {
- // do nothing
- }
-
- JdbcDataContext dc = new JdbcDataContext(_connection);
- final Schema schema = dc.getDefaultSchema();
-
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback cb) {
- Table table = cb.createTable(schema, "my_table").withColumn("id").ofType(ColumnType.INTEGER)
- .ofNativeType("SERIAL").nullable(false).withColumn("name").ofType(ColumnType.VARCHAR)
- .ofSize(10).withColumn("foo").ofType(ColumnType.BOOLEAN).nullable(true).withColumn("bar")
- .ofType(ColumnType.BOOLEAN).nullable(true).execute();
-
- assertEquals("my_table", table.getName());
- }
- });
-
- try {
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback callback) {
- callback.insertInto("my_table").value("name", "row 1").value("foo", true).execute();
-
- callback.insertInto("my_table").value("name", "row 2").value("bar", true).execute();
-
- callback.insertInto("my_table").value("name", "row 3").value("foo", true).execute();
-
- callback.insertInto("my_table").value("name", "row 4").value("foo", true).execute();
-
- callback.insertInto("my_table").value("name", "row 5").value("bar", true).execute();
-
- callback.insertInto("my_table").value("name", "row 6").value("foo", true).value("bar", true)
- .execute();
-
- callback.insertInto("my_table").value("name", "row 7").value("foo", true).value("bar", true)
- .execute();
-
- callback.insertInto("my_table").value("name", "row 8").value("foo", false).value("bar", false)
- .execute();
- }
- });
-
- DataSet ds = dc.query().from("my_table").select("id").and("name").execute();
- assertTrue(ds.next());
- assertEquals("Row[values=[1, row 1]]", ds.getRow().toString());
- assertTrue(ds.next());
- assertEquals("Row[values=[2, row 2]]", ds.getRow().toString());
- assertTrue(ds.next());
- assertEquals("Row[values=[3, row 3]]", ds.getRow().toString());
- assertTrue(ds.next());
- assertEquals("Row[values=[4, row 4]]", ds.getRow().toString());
- assertTrue(ds.next());
- assertEquals("Row[values=[5, row 5]]", ds.getRow().toString());
- assertTrue(ds.next());
- assertEquals("Row[values=[6, row 6]]", ds.getRow().toString());
- assertTrue(ds.next());
- assertEquals("Row[values=[7, row 7]]", ds.getRow().toString());
- assertTrue(ds.next());
- assertEquals("Row[values=[8, row 8]]", ds.getRow().toString());
- assertFalse(ds.next());
- ds.close();
- } finally {
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback callback) {
- callback.dropTable("my_table").execute();
- }
- });
- }
- }
-
- /**
- * Tests some inconsistencies dealing with booleans.
- *
- * @see http://eobjects.org/trac/ticket/829
- */
- public void testBoolean() throws Exception {
- JdbcDataContext dc = new JdbcDataContext(_connection);
-
- final Schema schema = dc.getDefaultSchema();
-
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback cb) {
- Table table = cb.createTable(schema, "my_table").withColumn("id").ofType(ColumnType.INTEGER)
- .ofNativeType("SERIAL").nullable(false).withColumn("some_bool").ofType(ColumnType.BOOLEAN)
- .nullable(false).execute();
- assertEquals("my_table", table.getName());
-
- cb.insertInto(table).value("id", 1).value("some_bool", true).execute();
- cb.insertInto(table).value("id", 2).value("some_bool", false).execute();
- }
- });
-
- DataSet ds = dc.query().from("my_table").select("some_bool").execute();
-
- assertTrue(ds.next());
- assertEquals("Row[values=[true]]", ds.getRow().toString());
- assertTrue(ds.next());
- assertEquals("Row[values=[false]]", ds.getRow().toString());
- assertFalse(ds.next());
-
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback cb) {
- cb.dropTable("my_table").execute();
- }
- });
- }
-
- public void testBlob() throws Exception {
- JdbcDataContext dc = new JdbcDataContext(_connection);
- final Schema schema = dc.getDefaultSchema();
-
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback cb) {
- Table table = cb.createTable(schema, "my_table").withColumn("id").ofType(ColumnType.INTEGER)
- .ofNativeType("SERIAL").nullable(false).withColumn("some_bytes").ofType(ColumnType.BLOB)
- .execute();
- assertEquals("my_table", table.getName());
- }
- });
-
- try {
- dc.refreshSchemas();
- final Column column = dc.getColumnByQualifiedLabel("my_table.some_bytes");
- assertEquals("Column[name=some_bytes,columnNumber=1,type=BINARY,nullable=true,"
- + "nativeType=bytea,columnSize=2147483647]", column.toString());
-
- final Table table = column.getTable();
-
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback callback) {
- callback.insertInto(table).value(column, new byte[] { 1, 2, 3 }).execute();
- callback.insertInto(table).value(column, "hello world".getBytes()).execute();
- }
- });
-
- byte[] bytes;
-
- DataSet ds = dc.query().from(table).select(table.getColumns()).execute();
-
- assertTrue(ds.next());
- assertEquals(1, ds.getRow().getValue(0));
- bytes = (byte[]) ds.getRow().getValue(1);
- assertEquals(3, bytes.length);
- assertEquals(1, bytes[0]);
- assertEquals(2, bytes[1]);
- assertEquals(3, bytes[2]);
-
- assertTrue(ds.next());
- assertEquals(2, ds.getRow().getValue(0));
- bytes = (byte[]) ds.getRow().getValue(1);
-
- assertEquals("hello world", new String(bytes));
- assertFalse(ds.next());
-
- } finally {
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback cb) {
- cb.dropTable("my_table").execute();
- }
- });
- }
- }
-
- public void testCreateTableAndWriteRecords() throws Exception {
- JdbcDataContext dc = new JdbcDataContext(_connection);
- final Schema schema = dc.getDefaultSchema();
- try {
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback cb) {
- Table table = cb.createTable(schema, "my_table").withColumn("id").ofType(ColumnType.INTEGER)
- .ofNativeType("SERIAL").nullable(false).withColumn("person name").ofSize(255)
- .withColumn("age").ofType(ColumnType.INTEGER).execute();
- assertEquals("[id, person name, age]", Arrays.toString(table.getColumnNames()));
- assertEquals(
- "Column[name=id,columnNumber=0,type=INTEGER,nullable=false,nativeType=serial,columnSize=10]",
- table.getColumnByName("id").toString());
- assertEquals(
- "Column[name=person name,columnNumber=1,type=VARCHAR,nullable=true,nativeType=varchar,columnSize=255]",
- table.getColumnByName("person name").toString());
- assertEquals(
- "Column[name=age,columnNumber=2,type=INTEGER,nullable=true,nativeType=int4,columnSize=10]",
- table.getColumnByName("age").toString());
-
- cb.insertInto(table).value("person name", "John Doe").value("age", 42).execute();
- cb.insertInto(table).value("age", 43).value("person name", "Jane Doe").execute();
-
- }
- });
-
- final Table table = schema.getTableByName("my_table");
- Query query = dc.query().from(table).select(table.getColumns()).toQuery();
- DataSet ds = dc.executeQuery(query);
- assertTrue(ds.next());
- assertEquals("Row[values=[1, John Doe, 42]]", ds.getRow().toString());
- assertTrue(ds.next());
- assertEquals("Row[values=[2, Jane Doe, 43]]", ds.getRow().toString());
- assertFalse(ds.next());
- ds.close();
-
- dc.executeUpdate(new UpdateScript() {
-
- @Override
- public void run(UpdateCallback callback) {
- callback.update(table).value("age", 102).where("id").eq(1).execute();
- callback.deleteFrom(table).where("id").eq(2).execute();
- }
- });
-
- ds = dc.executeQuery(query);
- assertTrue(ds.next());
- assertEquals("Row[values=[1, John Doe, 102]]", ds.getRow().toString());
- assertFalse(ds.next());
- ds.close();
- } finally {
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback callback) {
- callback.dropTable("my_table").execute();
- }
- });
- assertNull(dc.getTableByQualifiedLabel("my_table"));
- }
- }
-
- public void testCreateTableInsertValueFloatForIntColumn() throws Exception {
- JdbcDataContext dc = new JdbcDataContext(_connection);
- final Schema schema = dc.getDefaultSchema();
- try {
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback cb) {
- Table table = cb.createTable(schema, "my_table").withColumn("id").ofType(ColumnType.INTEGER)
- .ofNativeType("SERIAL").nullable(false).withColumn("person name").ofSize(255)
- .withColumn("age").ofType(ColumnType.INTEGER).execute();
- assertEquals("[id, person name, age]", Arrays.toString(table.getColumnNames()));
- assertEquals(
- "Column[name=id,columnNumber=0,type=INTEGER,nullable=false,nativeType=serial,columnSize=10]",
- table.getColumnByName("id").toString());
- assertEquals(
- "Column[name=person name,columnNumber=1,type=VARCHAR,nullable=true,nativeType=varchar,columnSize=255]",
- table.getColumnByName("person name").toString());
- assertEquals(
- "Column[name=age,columnNumber=2,type=INTEGER,nullable=true,nativeType=int4,columnSize=10]",
- table.getColumnByName("age").toString());
-
- cb.insertInto(table).value("person name", "John Doe").value("age", 42.4673).execute();
- cb.insertInto(table).value("age", 43.5673).value("person name", "Jane Doe").execute();
- }
- });
-
- Table table = schema.getTableByName("my_table");
- Query query = dc.query().from(table).select(table.getColumns()).toQuery();
- DataSet ds = dc.executeQuery(query);
- assertTrue(ds.next());
- // Float value input will be rounded down into integer number.
- assertEquals("Row[values=[1, John Doe, 42]]", ds.getRow().toString());
- assertTrue(ds.next());
- // The age will be incremented as float value input will be rounded
- // up.
- assertEquals("Row[values=[2, Jane Doe, 44]]", ds.getRow().toString());
- assertFalse(ds.next());
-
- ds.close();
- } finally {
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback cb) {
- cb.dropTable("my_table").execute();
- }
- });
- }
- }
-
- public void testInsertFailureForStringValueForIntegerColumn() throws Exception {
- JdbcDataContext dc = new JdbcDataContext(_connection);
- final Schema schema = dc.getDefaultSchema();
- try {
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback cb) {
- Table table = cb.createTable(schema, "my_table").withColumn("id").ofType(ColumnType.INTEGER)
- .ofNativeType("SERIAL").nullable(false).withColumn("person name").ofSize(255)
- .withColumn("age").ofType(ColumnType.INTEGER).execute();
- assertEquals("[id, person name, age]", Arrays.toString(table.getColumnNames()));
- assertEquals(
- "Column[name=id,columnNumber=0,type=INTEGER,nullable=false,nativeType=serial,columnSize=10]",
- table.getColumnByName("id").toString());
- assertEquals(
- "Column[name=person name,columnNumber=1,type=VARCHAR,nullable=true,nativeType=varchar,columnSize=255]",
- table.getColumnByName("person name").toString());
- assertEquals(
- "Column[name=age,columnNumber=2,type=INTEGER,nullable=true,nativeType=int4,columnSize=10]",
- table.getColumnByName("age").toString());
-
- cb.insertInto(table).value("person name", "John Doe").value("age", "42").execute();
- }
- });
-
- } catch (Exception e) {
- assertEquals(
- "Could not execute batch: INSERT INTO \"public\".\"my_table\" (\"person name\",age) VALUES ('John Doe','42'): Batch entry 0 INSERT INTO \"public\".\"my_table\" (\"person name\",age) VALUES ('John Doe','42') was aborted. Call getNextException to see the cause.",
- e.getMessage());
- } finally {
- dc.refreshSchemas();
- if (dc.getTableByQualifiedLabel("my_table") != null) {
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback cb) {
- cb.dropTable("my_table").execute();
- }
- });
- }
- }
- }
-
- public void testDatabaseProductName() throws Exception {
- String databaseProductName = _connection.getMetaData().getDatabaseProductName();
- assertEquals(JdbcDataContext.DATABASE_PRODUCT_POSTGRESQL, databaseProductName);
- }
-
- public void testGetDefaultSchema() throws Exception {
- DataContext dc = new JdbcDataContext(_connection);
- Schema schema = dc.getDefaultSchema();
- assertEquals("public", schema.getName());
- }
-
- public void testGetSchema() throws Exception {
- DataContext dc = new JdbcDataContext(_connection);
- Schema[] schemas = dc.getSchemas();
- assertTrue(schemas.length >= 3);
-
- assertNotNull(dc.getSchemaByName("information_schema"));
- assertNotNull(dc.getSchemaByName("pg_catalog"));
- assertNotNull(dc.getSchemaByName("public"));
-
- Schema schema = dc.getSchemaByName("public");
-
- assertEquals("[Table[name=categories,type=TABLE,remarks=null], "
- + "Table[name=cust_hist,type=TABLE,remarks=null], " + "Table[name=customers,type=TABLE,remarks=null], "
- + "Table[name=inventory,type=TABLE,remarks=null], "
- + "Table[name=orderlines,type=TABLE,remarks=null], " + "Table[name=orders,type=TABLE,remarks=null], "
- + "Table[name=products,type=TABLE,remarks=null], " + "Table[name=reorder,type=TABLE,remarks=null]]",
- Arrays.toString(schema.getTables()));
-
- Table productsTable = schema.getTableByName("products");
- assertEquals(
- "[Column[name=prod_id,columnNumber=0,type=INTEGER,nullable=false,nativeType=serial,columnSize=10], "
- + "Column[name=category,columnNumber=1,type=INTEGER,nullable=false,nativeType=int4,columnSize=10], "
- + "Column[name=title,columnNumber=2,type=VARCHAR,nullable=false,nativeType=varchar,columnSize=50], "
- + "Column[name=actor,columnNumber=3,type=VARCHAR,nullable=false,nativeType=varchar,columnSize=50], "
- + "Column[name=price,columnNumber=4,type=NUMERIC,nullable=false,nativeType=numeric,columnSize=12], "
- + "Column[name=special,columnNumber=5,type=SMALLINT,nullable=true,nativeType=int2,columnSize=5], "
- + "Column[name=common_prod_id,columnNumber=6,type=INTEGER,nullable=false,nativeType=int4,columnSize=10]]",
- Arrays.toString(productsTable.getColumns()));
- Table customersTable = schema.getTableByName("customers");
- assertEquals(
- "[Column[name=customerid,columnNumber=0,type=INTEGER,nullable=false,nativeType=serial,columnSize=10], "
- + "Column[name=firstname,columnNumber=1,type=VARCHAR,nullable=false,nativeType=varchar,columnSize=50], "
- + "Column[name=lastname,columnNumber=2,type=VARCHAR,nullable=false,nativeType=varchar,columnSize=50], "
- + "Column[name=address1,columnNumber=3,type=VARCHAR,nullable=false,nativeType=varchar,columnSize=50], "
- + "Column[name=address2,columnNumber=4,type=VARCHAR,nullable=true,nativeType=varchar,columnSize=50], "
- + "Column[name=city,columnNumber=5,type=VARCHAR,nullable=false,nativeType=varchar,columnSize=50], "
- + "Column[name=state,columnNumber=6,type=VARCHAR,nullable=true,nativeType=varchar,columnSize=50], "
- + "Column[name=zip,columnNumber=7,type=INTEGER,nullable=true,nativeType=int4,columnSize=10], "
- + "Column[name=country,columnNumber=8,type=VARCHAR,nullable=false,nativeType=varchar,columnSize=50], "
- + "Column[name=region,columnNumber=9,type=SMALLINT,nullable=false,nativeType=int2,columnSize=5], "
- + "Column[name=email,columnNumber=10,type=VARCHAR,nullable=true,nativeType=varchar,columnSize=50], "
- + "Column[name=phone,columnNumber=11,type=VARCHAR,nullable=true,nativeType=varchar,columnSize=50], "
- + "Column[name=creditcardtype,columnNumber=12,type=INTEGER,nullable=false,nativeType=int4,columnSize=10], "
- + "Column[name=creditcard,columnNumber=13,type=VARCHAR,nullable=false,nativeType=varchar,columnSize=50], "
- + "Column[name=creditcardexpiration,columnNumber=14,type=VARCHAR,nullable=false,nativeType=varchar,columnSize=50], "
- + "Column[name=username,columnNumber=15,type=VARCHAR,nullable=false,nativeType=varchar,columnSize=50], "
- + "Column[name=password,columnNumber=16,type=VARCHAR,nullable=false,nativeType=varchar,columnSize=50], "
- + "Column[name=age,columnNumber=17,type=SMALLINT,nullable=true,nativeType=int2,columnSize=5], "
- + "Column[name=income,columnNumber=18,type=INTEGER,nullable=true,nativeType=int4,columnSize=10], "
- + "Column[name=gender,columnNumber=19,type=VARCHAR,nullable=true,nativeType=varchar,columnSize=1]]",
- Arrays.toString(customersTable.getColumns()));
- Relationship[] relations = customersTable.getRelationships();
- assertEquals(2, relations.length);
- assertEquals(
- "[Relationship[primaryTable=customers,primaryColumns=[customerid],foreignTable=cust_hist,foreignColumns=[customerid]], "
- + "Relationship[primaryTable=customers,primaryColumns=[customerid],foreignTable=orders,foreignColumns=[customerid]]]",
- Arrays.toString(relations));
- assertEquals("Table[name=customers,type=TABLE,remarks=null]", relations[0].getPrimaryTable().toString());
- assertEquals("Table[name=cust_hist,type=TABLE,remarks=null]", relations[0].getForeignTable().toString());
- assertEquals("Table[name=customers,type=TABLE,remarks=null]", relations[1].getPrimaryTable().toString());
- assertEquals("Table[name=orders,type=TABLE,remarks=null]", relations[1].getForeignTable().toString());
-
- Table ordersTable = schema.getTableByName("orderlines");
- assertEquals(
- "[Column[name=orderlineid,columnNumber=0,type=INTEGER,nullable=false,nativeType=int4,columnSize=10], "
- + "Column[name=orderid,columnNumber=1,type=INTEGER,nullable=false,nativeType=int4,columnSize=10], "
- + "Column[name=prod_id,columnNumber=2,type=INTEGER,nullable=false,nativeType=int4,columnSize=10], "
- + "Column[name=quantity,columnNumber=3,type=SMALLINT,nullable=false,nativeType=int2,columnSize=5], "
- + "Column[name=orderdate,columnNumber=4,type=DATE,nullable=false,nativeType=date,columnSize=13]]",
- Arrays.toString(ordersTable.getColumns()));
- }
-
- public void testExecuteQueryInPublicSchema() throws Exception {
- DataContext dc = new JdbcDataContext(_connection);
- Query q = new Query();
- Schema schema = dc.getSchemaByName("public");
- Table productsTable = schema.getTableByName("products");
- q.from(productsTable);
-
- Column titleColumn = productsTable.getColumnByName("title");
- Column productPriceColumn = productsTable.getColumnByName("price");
- q.select(titleColumn, productPriceColumn);
- q.getSelectClause().getItem(0).setAlias("product-title");
-
- DataSet data = dc.executeQuery(q);
- TableModel tableModel = new DataSetTableModel(data);
- assertEquals(2, tableModel.getColumnCount());
- assertEquals(10000, tableModel.getRowCount());
-
- assertEquals("ACADEMY ACADEMY", tableModel.getValueAt(0, 0).toString());
- assertEquals("25.99", tableModel.getValueAt(0, 1).toString());
-
- assertEquals("ACADEMY HORN", tableModel.getValueAt(432, 0).toString());
- assertEquals("16.99", tableModel.getValueAt(6346, 1).toString());
-
- assertEquals("ALADDIN ZORRO", tableModel.getValueAt(9999, 0).toString());
- assertEquals("10.99", tableModel.getValueAt(9999, 1).toString());
-
- data = null;
- tableModel = null;
-
- Column prodIdColumn = productsTable.getColumnByName("prod_id");
- Table orderlinesTable = schema.getTableByName("orderlines");
- Column commonProdIdColumn = orderlinesTable.getColumnByName("prod_id");
- Column quantityColumn = orderlinesTable.getColumnByName("quantity");
-
- q.from(orderlinesTable);
- q.where(new FilterItem(new SelectItem(prodIdColumn), OperatorType.EQUALS_TO, new SelectItem(commonProdIdColumn)));
- q.groupBy(titleColumn);
- q.getSelectClause().removeItem(q.getSelectClause().getSelectItem(productPriceColumn));
- SelectItem quantitySum = new SelectItem(FunctionType.SUM, quantityColumn).setAlias("orderAmount");
- q.select(quantitySum);
- q.having(new FilterItem(quantitySum, OperatorType.GREATER_THAN, 25));
- q.orderBy(new OrderByItem(q.getSelectClause().getItem(0)));
-
- assertEquals("SELECT \"products\".\"title\" AS product-title, SUM(\"orderlines\".\"quantity\") AS orderAmount "
- + "FROM public.\"products\", public.\"orderlines\" "
- + "WHERE \"products\".\"prod_id\" = \"orderlines\".\"prod_id\" " + "GROUP BY \"products\".\"title\" "
- + "HAVING SUM(\"orderlines\".\"quantity\") > 25 " + "ORDER BY \"products\".\"title\" ASC", q.toString());
- data = dc.executeQuery(q);
- tableModel = new DataSetTableModel(data);
- assertEquals(2, tableModel.getColumnCount());
- assertEquals(136, tableModel.getRowCount());
-
- assertEquals("ACADEMY ALABAMA", tableModel.getValueAt(0, 0).toString());
- assertEquals("27", tableModel.getValueAt(0, 1).toString());
-
- assertEquals("AIRPORT MOURNING", tableModel.getValueAt(99, 0).toString());
- assertEquals("29", tableModel.getValueAt(99, 1).toString());
-
- assertEquals("ALADDIN WORKER", tableModel.getValueAt(135, 0).toString());
- assertEquals("27", tableModel.getValueAt(135, 1).toString());
- }
-
- public void testWhiteSpaceColumns() throws Exception {
- DatabaseMetaData metaData = _connection.getMetaData();
- assertEquals("\"", metaData.getIdentifierQuoteString());
- }
-
- public void testCreateTableAndInsert1MRecords() throws Exception {
- JdbcDataContext dc = new JdbcDataContext(_connection);
- final Schema schema = dc.getDefaultSchema();
- try {
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback cb) {
- Table table = cb.createTable(schema, "my_table").withColumn("id").ofType(ColumnType.INTEGER)
- .ofNativeType("SERIAL").nullable(false).withColumn("person name").ofSize(255)
- .withColumn("age").ofType(ColumnType.INTEGER).execute();
- assertEquals("[id, person name, age]", Arrays.toString(table.getColumnNames()));
- assertEquals(
- "Column[name=id,columnNumber=0,type=INTEGER,nullable=false,nativeType=serial,columnSize=10]",
- table.getColumnByName("id").toString());
- assertEquals(
- "Column[name=person name,columnNumber=1,type=VARCHAR,nullable=true,nativeType=varchar,columnSize=255]",
- table.getColumnByName("person name").toString());
- assertEquals(
- "Column[name=age,columnNumber=2,type=INTEGER,nullable=true,nativeType=int4,columnSize=10]",
- table.getColumnByName("age").toString());
-
- for (int i = 0; i < 1000000; i++) {
- cb.insertInto(table).value("person name", "John Doe").value("age", i + 10).execute();
- }
-
- }
- });
-
- Table table = schema.getTableByName("my_table");
- Query query = dc.query().from(table).selectCount().toQuery();
- DataSet ds = dc.executeQuery(query);
- assertTrue(ds.next());
- assertEquals("Row[values=[1000000]]", ds.getRow().toString());
- assertFalse(ds.next());
- ds.close();
- } finally {
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback cb) {
- cb.dropTable("my_table").execute();
- }
- });
- }
- }
-
- public void testCharOfSizeOne() throws Exception {
- JdbcTestTemplates.meaningOfOneSizeChar(_connection);
- }
-
- /**
- * Splits a huge query into 146 pieces and executes them to test that the
- * collective result are equal to the original one in size
- */
- @Ignore
- public void testSplitHugeQueryExecute146() throws Exception {
- DataContext dc = new JdbcDataContext(_connection);
- Query q = new Query();
- Schema schema = dc.getSchemaByName("public");
- Table productsTable = schema.getTableByName("products");
- Table customerTable = schema.getTableByName("customers");
- q.from(productsTable, "p").from(customerTable, "c");
-
- Column titleColumn = productsTable.getColumnByName("title");
- Column priceColumn = productsTable.getColumnByName("price");
- Column cityColumn = customerTable.getColumnByName("city");
- Column ageColumn = customerTable.getColumnByName("age");
- q.select(titleColumn, priceColumn, cityColumn);
-
- q.where(new FilterItem(new SelectItem(priceColumn), OperatorType.GREATER_THAN, 27));
- q.where(new FilterItem(new SelectItem(ageColumn), OperatorType.GREATER_THAN, 55));
-
- assertEquals(
- "SELECT p.\"title\", p.\"price\", c.\"city\" FROM public.\"products\" p, public.\"customers\" c WHERE p.\"price\" > 27 AND c.\"age\" > 55",
- q.toString());
-
- QuerySplitter qs = new QuerySplitter(dc, q);
- qs.setMaxRows(100000);
- assertEquals(14072278, qs.getRowCount());
-
- List<Query> splitQueries = qs.splitQuery();
- assertEquals(146, splitQueries.size());
- assertEquals(
- "SELECT p.\"title\", p.\"price\", c.\"city\" FROM public.\"products\" p, public.\"customers\" c WHERE p.\"price\" > 27 AND c.\"age\" > 55 AND (c.\"customerid\" < 143 OR c.\"customerid\" IS NULL) AND (p.\"category\" < 8 OR p.\"category\" IS NULL)",
- splitQueries.get(0).toString());
- assertEquals(
- "SELECT p.\"title\", p.\"price\", c.\"city\" FROM public.\"products\" p, public.\"customers\" c WHERE p.\"price\" > 27 AND c.\"age\" > 55 AND (c.\"customerid\" > 19739 OR c.\"customerid\" = 19739)",
- splitQueries.get(145).toString());
-
- assertEquals(
- "[45954, 55752, 52122, 55480, 49770, 53410, 60434, 51590, 97284, 94336, 86966, 76648, 98758, 84018, 98758, 95810, 92862, 91388, 39798, 79596, "
- + "91388, 48642, 60434, 106128, 94336, 94336, 86966, 79596, 85492, 94336, 104654, 97284, 84018, 101706, 109076, 89914, 110550, 107602, 98758, "
- + "112024, 100232, 101706, 95810, 92862, 107602, 100232, 86966, 98758, 106128, 91388, 107602, 104654, 107602, 81070, 114972, 79596, 100232, 97284, "
- + "103180, 98758, 113498, 103180, 89914, 104654, 97284, 109076, 114972, 103180, 86966, 106128, 101706, 95810, 103180, 88440, 112024, 91388, 106128, "
- + "82544, 122342, 98758, 104654, 103180, 104654, 89914, 106128, 88440, 103180, 100232, 98758, 100232, 89914, 101706, 100232, 107602, 88440, 89914, "
- + "91388, 103180, 100232, 104654, 120868, 106128, 100232, 107602, 97284, 103180, 106128, 91388, 100232, 106128, 100232, 109076, 94336, 106128, 94336, "
- + "106128, 104654, 116446, 98758, 113498, 107602, 104654, 107602, 88440, 100232, 92862, 89914, 110550, 109076, 100232, 92862, 100232, 104654, 103180, "
- + "89914, 103180, 103180, 107602, 85492, 112024, 85492, 101706, 92862, 86966, 104654, 201938]",
- Arrays.toString(getCounts(dc, splitQueries)));
- assertSameCount(dc, qs, splitQueries);
-
- DataSet data = qs.executeQueries(splitQueries);
- int count = 0;
- while (data.next()) {
- count++;
- }
- data.close();
- assertEquals(14072278, count);
- System.out.println("Successfully iterated 14072278 rows! :)");
- }
-
- /**
- * Utility method for asserting that a query and it's splitted queries have
- * the same total count
- */
- private void assertSameCount(DataContext dc, QuerySplitter qs, List<Query> queries) {
- long count1 = qs.getRowCount();
- long count2 = 0;
- for (Query q : queries) {
- count2 += getCount(dc, q);
- }
- assertEquals(count1, count2);
- }
-
- public long[] getCounts(DataContext dc, List<Query> queries) {
- long[] result = new long[queries.size()];
- for (int i = 0; i < result.length; i++) {
- result[i] = getCount(dc, queries.get(i));
- }
- return result;
- }
-
- /**
- * Gets the count of a query
- */
- private long getCount(DataContext dc, Query query) {
- return new QuerySplitter(dc, query).getRowCount();
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/test/integrationtests/org/eobjects/metamodel/SQLServerJtdsDriverTest.java
----------------------------------------------------------------------
diff --git a/jdbc/src/test/integrationtests/org/eobjects/metamodel/SQLServerJtdsDriverTest.java b/jdbc/src/test/integrationtests/org/eobjects/metamodel/SQLServerJtdsDriverTest.java
deleted file mode 100644
index a488549..0000000
--- a/jdbc/src/test/integrationtests/org/eobjects/metamodel/SQLServerJtdsDriverTest.java
+++ /dev/null
@@ -1,208 +0,0 @@
-package org.eobjects.metamodel;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.SQLException;
-import java.util.Arrays;
-
-import junit.framework.TestCase;
-
-import org.eobjects.metamodel.data.DataSet;
-import org.eobjects.metamodel.jdbc.JdbcDataContext;
-import org.eobjects.metamodel.jdbc.JdbcTestTemplates;
-import org.eobjects.metamodel.jdbc.dialects.IQueryRewriter;
-import org.eobjects.metamodel.jdbc.dialects.SQLServerQueryRewriter;
-import org.eobjects.metamodel.query.Query;
-import org.eobjects.metamodel.query.SelectItem;
-import org.eobjects.metamodel.schema.ColumnType;
-import org.eobjects.metamodel.schema.Schema;
-import org.eobjects.metamodel.schema.Table;
-import org.eobjects.metamodel.schema.TableType;
-
-/**
- * Test case that tests MS SQL Server interaction. The test uses the
- * "AdventureWorks" sample database which can be downloaded from codeplex.
- *
- * This testcase uses the JTDS driver.
- *
- * @link{http://www.codeplex.com/MSFTDBProdSamples
- * */
-public class SQLServerJtdsDriverTest extends TestCase {
-
- private Connection _connection;
- private String _databaseName = "AdventureWorks";
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- Class.forName("net.sourceforge.jtds.jdbc.Driver");
- _connection = DriverManager.getConnection(
- "jdbc:jtds:sqlserver://localhost:1433/AdventureWorks;instance=SQLEXPRESS", "eobjects", "eobjects");
-
- }
-
- @Override
- protected void tearDown() throws Exception {
- super.tearDown();
- _connection.close();
- }
-
- public void testWorkingWithDates() throws Exception {
- assertFalse(_connection.isReadOnly());
-
- JdbcDataContext dc = new JdbcDataContext(_connection);
- final Schema schema = dc.getSchemaByName("Person");
-
- JdbcTestTemplates.createInsertAndUpdateDateTypes(dc, schema, "test_table");
- }
-
- public void testAutomaticConversionWhenInsertingString() throws Exception {
- assertNotNull(_connection);
-
- try {
- // clean up, if nescesary
- _connection.createStatement().execute("DROP TABLE Person.test_table");
- } catch (SQLException e) {
- // do nothing
- }
-
- assertFalse(_connection.isReadOnly());
-
- JdbcDataContext dc = new JdbcDataContext(_connection);
- final Schema schema = dc.getSchemaByName("Person");
- assertEquals("Person", schema.getName());
-
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback cb) {
- Table table = cb.createTable(schema, "test_table").withColumn("id").asPrimaryKey()
- .ofType(ColumnType.INTEGER).withColumn("birthdate").ofType(ColumnType.DATE).execute();
-
- cb.insertInto(table).value("id", "1").execute();
- cb.insertInto(table).value("id", 2).value("birthdate", "2011-12-21").execute();
- }
- });
-
- Table table = schema.getTableByName("test_table");
-
- assertTrue(table.getColumnByName("id").isPrimaryKey());
- assertFalse(table.getColumnByName("birthdate").isPrimaryKey());
-
- // the jdbc driver represents the date as a VARCHAR
- assertEquals(
- "[Column[name=id,columnNumber=0,type=INTEGER,nullable=false,nativeType=int,columnSize=10], "
- + "Column[name=birthdate,columnNumber=1,type=VARCHAR,nullable=true,nativeType=date,columnSize=10]]",
- Arrays.toString(table.getColumns()));
-
- DataSet ds = dc.query().from(table).select("id").and("birthdate").execute();
- assertTrue(ds.next());
- assertEquals("Row[values=[1, null]]", ds.getRow().toString());
- assertEquals("java.lang.Integer", ds.getRow().getValue(0).getClass().getName());
- assertTrue(ds.next());
- assertEquals("Row[values=[2, 2011-12-21]]", ds.getRow().toString());
- assertEquals("java.lang.String", ds.getRow().getValue(1).getClass().getName());
- assertFalse(ds.next());
- ds.close();
-
- _connection.createStatement().execute("DROP TABLE Person.test_table");
- }
-
- public void testQueryUsingExpressions() throws Exception {
- JdbcDataContext strategy = new JdbcDataContext(_connection,
- new TableType[] { TableType.TABLE, TableType.VIEW }, _databaseName);
- Query q = new Query().select("Name").from("Production.Product").where("COlor IS NOT NULL").setMaxRows(5);
- DataSet dataSet = strategy.executeQuery(q);
- assertEquals("[Name]", Arrays.toString(dataSet.getSelectItems()));
- assertTrue(dataSet.next());
- assertEquals("Row[values=[LL Crankarm]]", dataSet.getRow().toString());
- assertTrue(dataSet.next());
- assertTrue(dataSet.next());
- assertTrue(dataSet.next());
- assertTrue(dataSet.next());
- assertFalse(dataSet.next());
- }
-
- public void testGetSchemaNormalTableTypes() throws Exception {
- JdbcDataContext dc = new JdbcDataContext(_connection, new TableType[] { TableType.TABLE, TableType.VIEW },
- _databaseName);
- Schema[] schemas = dc.getSchemas();
-
- assertEquals(8, schemas.length);
- assertEquals("Schema[name=HumanResources]", schemas[0].toString());
- assertEquals(13, schemas[0].getTableCount());
- assertEquals("Schema[name=INFORMATION_SCHEMA]", schemas[1].toString());
- assertEquals(20, schemas[1].getTableCount());
- assertEquals("Schema[name=Person]", schemas[2].toString());
- assertEquals(8, schemas[2].getTableCount());
- assertEquals("Schema[name=Production]", schemas[3].toString());
- assertEquals(28, schemas[3].getTableCount());
- assertEquals("Schema[name=Purchasing]", schemas[4].toString());
- assertEquals(8, schemas[4].getTableCount());
- assertEquals("Schema[name=Sales]", schemas[5].toString());
- assertEquals(27, schemas[5].getTableCount());
-
- }
-
- public void testGetSchemaAllTableTypes() throws Exception {
- JdbcDataContext strategy = new JdbcDataContext(_connection, new TableType[] { TableType.OTHER,
- TableType.GLOBAL_TEMPORARY }, _databaseName);
- Schema schema = strategy.getDefaultSchema();
- assertEquals("dbo", schema.getName());
-
- assertEquals("[Sales, HumanResources, dbo, Purchasing, sys, Production, INFORMATION_SCHEMA, Person]",
- Arrays.toString(strategy.getSchemaNames()));
- }
-
- public void testQueryRewriterQuoteAliases() throws Exception {
- JdbcDataContext dc = new JdbcDataContext(_connection, TableType.DEFAULT_TABLE_TYPES, _databaseName);
- IQueryRewriter queryRewriter = dc.getQueryRewriter();
- assertSame(SQLServerQueryRewriter.class, queryRewriter.getClass());
-
- Schema schema = dc.getSchemaByName("Sales");
- Table customersTable = schema.getTableByName("CUSTOMER");
-
- Query q = new Query().from(customersTable, "cus-tomers").select(
- new SelectItem(customersTable.getColumnByName("AccountNumber")).setAlias("c|o|d|e"));
- q.setMaxRows(5);
-
- assertEquals("SELECT cus-tomers.\"AccountNumber\" AS c|o|d|e FROM Sales.\"Customer\" cus-tomers", q.toString());
-
- String queryString = queryRewriter.rewriteQuery(q);
- assertEquals(
- "SELECT TOP 5 \"cus-tomers\".\"AccountNumber\" AS \"c|o|d|e\" FROM Sales.\"Customer\" \"cus-tomers\"",
- queryString);
-
- // We have to test that no additional quoting characters are added every
- // time we run the rewriting
- queryString = queryRewriter.rewriteQuery(q);
- queryString = queryRewriter.rewriteQuery(q);
- assertEquals(
- "SELECT TOP 5 \"cus-tomers\".\"AccountNumber\" AS \"c|o|d|e\" FROM Sales.\"Customer\" \"cus-tomers\"",
- queryString);
-
- // Test that the original query is still the same (ie. it has been
- // cloned for execution)
- assertEquals("SELECT cus-tomers.\"AccountNumber\" AS c|o|d|e FROM Sales.\"Customer\" cus-tomers", q.toString());
-
- DataSet data = dc.executeQuery(q);
- assertNotNull(data);
- data.close();
- }
-
- public void testQuotedString() throws Exception {
- JdbcDataContext dc = new JdbcDataContext(_connection, TableType.DEFAULT_TABLE_TYPES, _databaseName);
- IQueryRewriter queryRewriter = dc.getQueryRewriter();
- assertSame(SQLServerQueryRewriter.class, queryRewriter.getClass());
-
- Query q = dc.query().from("Production", "Product").select("Name").where("Color").eq("R'ed").toQuery();
-
- DataSet ds = dc.executeQuery(q);
- assertNotNull(ds);
- assertFalse(ds.next());
- ds.close();
-
- assertEquals(
- "SELECT Production.\"Product\".\"Name\" FROM Production.\"Product\" WHERE Production.\"Product\".\"Color\" = 'R''ed'",
- queryRewriter.rewriteQuery(q));
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/test/integrationtests/org/eobjects/metamodel/SQLServerMicrosoftDriverTest.java
----------------------------------------------------------------------
diff --git a/jdbc/src/test/integrationtests/org/eobjects/metamodel/SQLServerMicrosoftDriverTest.java b/jdbc/src/test/integrationtests/org/eobjects/metamodel/SQLServerMicrosoftDriverTest.java
deleted file mode 100644
index ee0a664..0000000
--- a/jdbc/src/test/integrationtests/org/eobjects/metamodel/SQLServerMicrosoftDriverTest.java
+++ /dev/null
@@ -1,141 +0,0 @@
-package org.eobjects.metamodel;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.util.Arrays;
-
-import junit.framework.TestCase;
-
-import org.eobjects.metamodel.data.DataSet;
-import org.eobjects.metamodel.jdbc.JdbcDataContext;
-import org.eobjects.metamodel.jdbc.dialects.IQueryRewriter;
-import org.eobjects.metamodel.jdbc.dialects.SQLServerQueryRewriter;
-import org.eobjects.metamodel.query.Query;
-import org.eobjects.metamodel.query.SelectItem;
-import org.eobjects.metamodel.schema.Schema;
-import org.eobjects.metamodel.schema.Table;
-import org.eobjects.metamodel.schema.TableType;
-
-/**
- * Test case that tests MS SQL Server interaction. The test uses the
- * "AdventureWorks" sample database which can be downloaded from codeplex.
- *
- * This testcase uses the official MS SQL Server driver.
- *
- * @link{http://www.codeplex.com/MSFTDBProdSamples
- * */
-public class SQLServerMicrosoftDriverTest extends TestCase {
-
- private Connection _connection;
- private String _databaseName = "AdventureWorks";
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
- _connection = DriverManager.getConnection("jdbc:sqlserver://localhost\\SQLEXPRESS;databaseName="
- + _databaseName, "eobjects", "eobjects");
- _connection.setReadOnly(true);
-
- }
-
- @Override
- protected void tearDown() throws Exception {
- super.tearDown();
- _connection.close();
- }
-
- public void testQueryUsingExpressions() throws Exception {
- JdbcDataContext strategy = new JdbcDataContext(_connection,
- new TableType[] { TableType.TABLE, TableType.VIEW }, _databaseName);
- Query q = new Query().select("Name").from("Production.Product").where("COlor IS NOT NULL").setMaxRows(5);
- DataSet dataSet = strategy.executeQuery(q);
- assertEquals("[Name]", Arrays.toString(dataSet.getSelectItems()));
- assertTrue(dataSet.next());
- assertEquals("Row[values=[LL Crankarm]]", dataSet.getRow().toString());
- assertTrue(dataSet.next());
- assertTrue(dataSet.next());
- assertTrue(dataSet.next());
- assertTrue(dataSet.next());
- assertFalse(dataSet.next());
- }
-
- public void testGetSchemaNormalTableTypes() throws Exception {
- JdbcDataContext dc = new JdbcDataContext(_connection, new TableType[] { TableType.TABLE, TableType.VIEW },
- _databaseName);
- Schema[] schemas = dc.getSchemas();
-
- assertEquals(8, schemas.length);
- assertEquals("Schema[name=HumanResources]", schemas[0].toString());
- assertEquals(13, schemas[0].getTableCount());
- assertEquals("Schema[name=INFORMATION_SCHEMA]", schemas[1].toString());
- assertEquals(20, schemas[1].getTableCount());
- assertEquals("Schema[name=Person]", schemas[2].toString());
- assertEquals(8, schemas[2].getTableCount());
- assertEquals("Schema[name=Production]", schemas[3].toString());
- assertEquals(28, schemas[3].getTableCount());
- assertEquals("Schema[name=Purchasing]", schemas[4].toString());
- assertEquals(8, schemas[4].getTableCount());
- assertEquals("Schema[name=Sales]", schemas[5].toString());
- assertEquals(27, schemas[5].getTableCount());
-
- }
-
- public void testGetSchemaAllTableTypes() throws Exception {
- JdbcDataContext strategy = new JdbcDataContext(_connection, new TableType[] { TableType.OTHER,
- TableType.GLOBAL_TEMPORARY }, _databaseName);
-
- assertEquals("[Sales, HumanResources, dbo, Purchasing, sys, Production, INFORMATION_SCHEMA, Person]",
- Arrays.toString(strategy.getSchemaNames()));
-
- assertEquals("Schema[name=dbo]", strategy.getDefaultSchema().toString());
- }
-
- public void testQueryRewriterQuoteAliases() throws Exception {
- JdbcDataContext strategy = new JdbcDataContext(_connection, TableType.DEFAULT_TABLE_TYPES, _databaseName);
- IQueryRewriter queryRewriter = strategy.getQueryRewriter();
- assertSame(SQLServerQueryRewriter.class, queryRewriter.getClass());
-
- Schema schema = strategy.getSchemaByName("Sales");
- Table customersTable = schema.getTableByName("CUSTOMER");
-
- Query q = new Query().from(customersTable, "cus-tomers").select(
- new SelectItem(customersTable.getColumnByName("AccountNumber")).setAlias("c|o|d|e"));
- q.setMaxRows(5);
-
- assertEquals("SELECT cus-tomers.\"AccountNumber\" AS c|o|d|e FROM Sales.\"Customer\" cus-tomers", q.toString());
-
- String queryString = queryRewriter.rewriteQuery(q);
- assertEquals(
- "SELECT TOP 5 \"cus-tomers\".\"AccountNumber\" AS \"c|o|d|e\" FROM Sales.\"Customer\" \"cus-tomers\"",
- queryString);
-
- // We have to test that no additional quoting characters are added every
- // time we run the rewriting
- queryString = queryRewriter.rewriteQuery(q);
- queryString = queryRewriter.rewriteQuery(q);
- assertEquals(
- "SELECT TOP 5 \"cus-tomers\".\"AccountNumber\" AS \"c|o|d|e\" FROM Sales.\"Customer\" \"cus-tomers\"",
- queryString);
-
- // Test that the original query is still the same (ie. it has been
- // cloned for execution)
- assertEquals("SELECT cus-tomers.\"AccountNumber\" AS c|o|d|e FROM Sales.\"Customer\" cus-tomers", q.toString());
-
- DataSet data = strategy.executeQuery(q);
- assertNotNull(data);
- data.close();
- }
-
- public void testQuotedString() throws Exception {
- JdbcDataContext dc = new JdbcDataContext(_connection, TableType.DEFAULT_TABLE_TYPES, _databaseName);
- IQueryRewriter queryRewriter = dc.getQueryRewriter();
- assertSame(SQLServerQueryRewriter.class, queryRewriter.getClass());
-
- Query q = dc.query().from("Production", "Product").select("Name").where("Color").eq("R'ed").toQuery();
-
- assertEquals(
- "SELECT \"Product\".\"Name\" FROM Production.\"Product\" Product WHERE Product.\"Color\" = 'R''ed'",
- queryRewriter.rewriteQuery(q));
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/test/java/org/apache/metamodel/dbmains/PostgresqlMain.java
----------------------------------------------------------------------
diff --git a/jdbc/src/test/java/org/apache/metamodel/dbmains/PostgresqlMain.java b/jdbc/src/test/java/org/apache/metamodel/dbmains/PostgresqlMain.java
new file mode 100644
index 0000000..cc01766
--- /dev/null
+++ b/jdbc/src/test/java/org/apache/metamodel/dbmains/PostgresqlMain.java
@@ -0,0 +1,92 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.eobjects.metamodel.dbmains;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
+import org.eobjects.metamodel.MetaModelException;
+import org.eobjects.metamodel.UpdateCallback;
+import org.eobjects.metamodel.UpdateScript;
+import org.eobjects.metamodel.data.DataSet;
+import org.eobjects.metamodel.jdbc.JdbcDataContext;
+import org.eobjects.metamodel.query.Query;
+import org.eobjects.metamodel.schema.ColumnType;
+import org.eobjects.metamodel.schema.Schema;
+import org.eobjects.metamodel.schema.Table;
+
+public class PostgresqlMain {
+
+ private static final String CONNECTION_STRING = "jdbc:postgresql://localhost/dellstore2";
+ private static final String USERNAME = "eobjects";
+ private static final String PASSWORD = "eobjects";
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+ Connection connection = null;
+ try {
+ Class.forName("org.postgresql.Driver");
+ connection = DriverManager.getConnection(CONNECTION_STRING,
+ USERNAME, PASSWORD);
+
+ JdbcDataContext dc = new JdbcDataContext(connection);
+ final Schema schema = dc.getDefaultSchema();
+ dc.executeUpdate(new UpdateScript() {
+ @Override
+ public void run(UpdateCallback cb) {
+ Table table = cb.createTable(schema, "my_table")
+ .withColumn("id").ofType(ColumnType.INTEGER)
+ .ofNativeType("SERIAL").nullable(false)
+ .withColumn("person name").ofSize(255)
+ .withColumn("age").ofType(ColumnType.INTEGER)
+ .execute();
+
+ for (int i = 0; i < 1000000; i++) {
+ cb.insertInto(table).value("person name", "John Doe")
+ .value("age", i + 10).execute();
+ }
+
+ }
+ });
+
+ Table table = schema.getTableByName("my_table");
+ Query query = dc.query().from(table).selectCount().toQuery();
+ DataSet ds = dc.executeQuery(query);
+ ds.close();
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ if (connection != null) {
+ connection.createStatement().execute("DROP TABLE my_table");
+ }
+ } catch (SQLException e) {
+ throw new MetaModelException(
+ "Failed to execute INSERT statement", e);
+ }
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/test/java/org/apache/metamodel/dialects/AbstractQueryRewriterTest.java
----------------------------------------------------------------------
diff --git a/jdbc/src/test/java/org/apache/metamodel/dialects/AbstractQueryRewriterTest.java b/jdbc/src/test/java/org/apache/metamodel/dialects/AbstractQueryRewriterTest.java
new file mode 100644
index 0000000..f880401
--- /dev/null
+++ b/jdbc/src/test/java/org/apache/metamodel/dialects/AbstractQueryRewriterTest.java
@@ -0,0 +1,66 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.eobjects.metamodel.dialects;
+
+import junit.framework.TestCase;
+
+import org.eobjects.metamodel.jdbc.dialects.AbstractQueryRewriter;
+import org.eobjects.metamodel.jdbc.dialects.DefaultQueryRewriter;
+import org.eobjects.metamodel.query.FilterItem;
+import org.eobjects.metamodel.query.FromItem;
+import org.eobjects.metamodel.query.OperatorType;
+import org.eobjects.metamodel.query.Query;
+import org.eobjects.metamodel.query.SelectItem;
+import org.eobjects.metamodel.schema.MutableColumn;
+import org.eobjects.metamodel.schema.MutableTable;
+
+public class AbstractQueryRewriterTest extends TestCase {
+
+ public void testRewriteQuery() throws Exception {
+ Query q = new Query().selectCount().from(new MutableTable("foobar"))
+ .where(new MutableColumn("foob"), OperatorType.EQUALS_TO, null).groupBy(new MutableColumn("col1"))
+ .having(new FilterItem(new SelectItem(new MutableColumn("col2")), OperatorType.GREATER_THAN, 40))
+ .orderBy(new MutableColumn("bla"));
+ assertEquals("SELECT COUNT(*) FROM foobar WHERE foob IS NULL GROUP BY col1 HAVING col2 > 40 ORDER BY bla ASC",
+ q.toString());
+
+ AbstractQueryRewriter rewriter = new DefaultQueryRewriter(null) {
+
+ };
+
+ assertEquals("SELECT COUNT(*) FROM foobar WHERE foob IS NULL GROUP BY col1 HAVING col2 > 40 ORDER BY bla ASC",
+ rewriter.rewriteQuery(q));
+
+ rewriter = new DefaultQueryRewriter(null) {
+ @Override
+ protected String rewriteFromItem(Query query, FromItem item) {
+ return "mytable";
+ }
+ };
+
+ assertEquals("SELECT COUNT(*) FROM mytable WHERE foob IS NULL GROUP BY col1 HAVING col2 > 40 ORDER BY bla ASC",
+ rewriter.rewriteQuery(q));
+
+ q.getSelectClause().setDistinct(true);
+
+ assertEquals(
+ "SELECT DISTINCT COUNT(*) FROM mytable WHERE foob IS NULL GROUP BY col1 HAVING col2 > 40 ORDER BY bla ASC",
+ rewriter.rewriteQuery(q));
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/test/java/org/apache/metamodel/dialects/DB2QueryRewriterTest.java
----------------------------------------------------------------------
diff --git a/jdbc/src/test/java/org/apache/metamodel/dialects/DB2QueryRewriterTest.java b/jdbc/src/test/java/org/apache/metamodel/dialects/DB2QueryRewriterTest.java
new file mode 100644
index 0000000..c511b7c
--- /dev/null
+++ b/jdbc/src/test/java/org/apache/metamodel/dialects/DB2QueryRewriterTest.java
@@ -0,0 +1,150 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.eobjects.metamodel.dialects;
+
+import java.util.Arrays;
+
+import junit.framework.TestCase;
+
+import org.eobjects.metamodel.jdbc.dialects.DB2QueryRewriter;
+import org.eobjects.metamodel.query.FunctionType;
+import org.eobjects.metamodel.query.OperatorType;
+import org.eobjects.metamodel.query.Query;
+import org.eobjects.metamodel.schema.ColumnType;
+import org.eobjects.metamodel.schema.MutableColumn;
+import org.eobjects.metamodel.schema.MutableSchema;
+import org.eobjects.metamodel.schema.MutableTable;
+import org.eobjects.metamodel.schema.TableType;
+
+public class DB2QueryRewriterTest extends TestCase {
+
+ private MutableSchema schema;
+ private MutableTable table;
+ private MutableColumn col;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ schema = new MutableSchema("sch");
+ table = new MutableTable("foo").setSchema(schema);
+ schema.addTable(table);
+ col = new MutableColumn("bar").setTable(table);
+ table.addColumn(col);
+ }
+
+ public void testRewriteMaxRowsNoFirstRow() throws Exception {
+ Query q = new Query().from(table).select(col).setMaxRows(400);
+ String str = new DB2QueryRewriter(null).rewriteQuery(q);
+ assertEquals("SELECT sch.foo.bar FROM sch.foo FETCH FIRST 400 ROWS ONLY", str);
+ }
+
+ public void testRewriteMaxRowsFirstRowIsOne() throws Exception {
+ Query q = new Query().from(table).select(col).setMaxRows(200).setFirstRow(1);
+ String str = new DB2QueryRewriter(null).rewriteQuery(q);
+ assertEquals("SELECT sch.foo.bar FROM sch.foo FETCH FIRST 200 ROWS ONLY", str);
+ }
+
+ public void testRewriteFirstRow() throws Exception {
+ Query q = new Query().from(table).select(col).setFirstRow(401);
+ String str = new DB2QueryRewriter(null).rewriteQuery(q);
+
+ assertEquals(
+ "SELECT metamodel_subquery.bar FROM (SELECT sch.foo.bar, ROW_NUMBER() OVER() AS metamodel_row_number FROM sch.foo) metamodel_subquery WHERE metamodel_row_number > 400",
+ str);
+ }
+
+ public void testRewriteFirstRowAndMaxRows() throws Exception {
+ Query q = new Query().from(table).select(col).setFirstRow(401).setMaxRows(400);
+ String str = new DB2QueryRewriter(null).rewriteQuery(q);
+ assertEquals(
+ "SELECT metamodel_subquery.bar FROM (SELECT sch.foo.bar, ROW_NUMBER() OVER() AS metamodel_row_number FROM sch.foo) metamodel_subquery WHERE metamodel_row_number BETWEEN 401 AND 800",
+ str);
+ }
+
+ public void testRewriteColumnType() throws Exception {
+ assertEquals("SMALLINT", new DB2QueryRewriter(null).rewriteColumnType(ColumnType.BOOLEAN));
+
+ assertEquals("VARCHAR", new DB2QueryRewriter(null).rewriteColumnType(ColumnType.VARCHAR));
+ }
+
+ public void testRewriteSelectItems() throws Exception {
+
+ Query q = new Query().from(table).select(col).where(col, OperatorType.EQUALS_TO, "foob");
+ String queryString = new DB2QueryRewriter(null).rewriteQuery(q);
+ assertEquals("SELECT sch.foo.bar FROM sch.foo WHERE sch.foo.bar = 'foob'", queryString);
+ }
+
+ public void testEscapeFilterItemQuotes() throws Exception {
+ Query q = new Query().from(table).select(col).where(col, OperatorType.EQUALS_TO, "foo'bar");
+ String queryString = new DB2QueryRewriter(null).rewriteQuery(q);
+ assertEquals("SELECT sch.foo.bar FROM sch.foo WHERE sch.foo.bar = 'foo\\'bar'", queryString);
+
+ q = new Query().from(table).select(col)
+ .where(col, OperatorType.IN, Arrays.asList("foo'bar", "foo", "bar", "eobject's"));
+ queryString = new DB2QueryRewriter(null).rewriteQuery(q);
+ assertEquals("SELECT sch.foo.bar FROM sch.foo WHERE sch.foo.bar IN ('foo\\'bar' , 'foo' , 'bar' , 'eobject\\'s')",
+ queryString);
+ }
+
+ public void testFullyQualifiedColumnNames() throws Exception {
+ final MutableSchema schema = new MutableSchema("sch");
+ final MutableTable table = new MutableTable("tab", TableType.TABLE, schema);
+ final MutableColumn nameColumn = new MutableColumn("name", ColumnType.VARCHAR).setTable(table);
+ final MutableColumn ageColumn = new MutableColumn("age", ColumnType.INTEGER).setTable(table);
+ schema.addTable(table);
+ table.addColumn(nameColumn);
+ table.addColumn(ageColumn);
+
+ final Query q = new Query();
+ q.select(ageColumn).selectCount();
+ q.from(table);
+ q.where(ageColumn, OperatorType.GREATER_THAN, 18);
+ q.groupBy(ageColumn);
+ q.having(FunctionType.COUNT, nameColumn, OperatorType.LESS_THAN, 100);
+ q.orderBy(ageColumn);
+
+ final String sql = new DB2QueryRewriter(null).rewriteQuery(q);
+
+ assertEquals("SELECT sch.tab.age, COUNT(*) FROM sch.tab WHERE sch.tab.age > 18 "
+ + "GROUP BY sch.tab.age HAVING COUNT(sch.tab.name) < 100 ORDER BY sch.tab.age ASC", sql);
+ }
+
+ public void testFullyQualifiedColumnNamesWithFilterItemContainingTimestamp() throws Exception {
+ final MutableSchema schema = new MutableSchema("sch");
+ final MutableTable table = new MutableTable("tab", TableType.TABLE, schema);
+ final MutableColumn nameColumn = new MutableColumn("name", ColumnType.VARCHAR).setTable(table);
+ final MutableColumn dateColumn = new MutableColumn("age", ColumnType.TIMESTAMP).setTable(table);
+ schema.addTable(table);
+ table.addColumn(nameColumn);
+ table.addColumn(dateColumn);
+
+ final Query q = new Query();
+ q.select(dateColumn).selectCount();
+ q.from(table);
+ q.where(dateColumn, OperatorType.GREATER_THAN, "2012-10-31 08:09:54");
+ q.groupBy(dateColumn);
+ q.having(FunctionType.COUNT, nameColumn, OperatorType.LESS_THAN, 100);
+ q.orderBy(dateColumn);
+
+ final String sql = new DB2QueryRewriter(null).rewriteQuery(q);
+
+ assertEquals("SELECT sch.tab.age, COUNT(*) FROM sch.tab WHERE sch.tab.age > TIMESTAMP ('2012-10-31 08:09:54') "
+ + "GROUP BY sch.tab.age HAVING COUNT(sch.tab.name) < 100 ORDER BY sch.tab.age ASC", sql);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/test/java/org/apache/metamodel/dialects/MysqlQueryRewriterTest.java
----------------------------------------------------------------------
diff --git a/jdbc/src/test/java/org/apache/metamodel/dialects/MysqlQueryRewriterTest.java b/jdbc/src/test/java/org/apache/metamodel/dialects/MysqlQueryRewriterTest.java
new file mode 100644
index 0000000..c643337
--- /dev/null
+++ b/jdbc/src/test/java/org/apache/metamodel/dialects/MysqlQueryRewriterTest.java
@@ -0,0 +1,46 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.eobjects.metamodel.dialects;
+
+import junit.framework.TestCase;
+
+import org.eobjects.metamodel.jdbc.dialects.MysqlQueryRewriter;
+import org.eobjects.metamodel.query.OperatorType;
+import org.eobjects.metamodel.query.Query;
+import org.eobjects.metamodel.schema.MutableColumn;
+import org.eobjects.metamodel.schema.MutableTable;
+
+public class MysqlQueryRewriterTest extends TestCase {
+
+ public void testRewriteLimit() throws Exception {
+ Query q = new Query().from(new MutableTable("foo"))
+ .select(new MutableColumn("bar")).setMaxRows(25).setFirstRow(6);
+ String queryString = new MysqlQueryRewriter(null).rewriteQuery(q);
+ assertEquals("SELECT bar FROM foo LIMIT 25 OFFSET 5", queryString);
+ }
+
+ public void testRewriteFilterOperandQuote() throws Exception {
+ MutableColumn col = new MutableColumn("bar");
+ Query q = new Query().from(new MutableTable("foo")).select(col)
+ .where(col, OperatorType.EQUALS_TO, "M'jellow strain'ger");
+ String queryString = new MysqlQueryRewriter(null).rewriteQuery(q);
+ assertEquals("SELECT bar FROM foo WHERE bar = 'M\\'jellow strain\\'ger'",
+ queryString);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/e2e2b37a/jdbc/src/test/java/org/apache/metamodel/dialects/PostgresqlQueryRewriterTest.java
----------------------------------------------------------------------
diff --git a/jdbc/src/test/java/org/apache/metamodel/dialects/PostgresqlQueryRewriterTest.java b/jdbc/src/test/java/org/apache/metamodel/dialects/PostgresqlQueryRewriterTest.java
new file mode 100644
index 0000000..1bc8c58
--- /dev/null
+++ b/jdbc/src/test/java/org/apache/metamodel/dialects/PostgresqlQueryRewriterTest.java
@@ -0,0 +1,58 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.eobjects.metamodel.dialects;
+
+import java.sql.Types;
+
+import junit.framework.TestCase;
+
+import org.eobjects.metamodel.jdbc.dialects.PostgresqlQueryRewriter;
+import org.eobjects.metamodel.query.FromItem;
+import org.eobjects.metamodel.query.Query;
+import org.eobjects.metamodel.schema.ColumnType;
+import org.eobjects.metamodel.schema.MutableColumn;
+import org.eobjects.metamodel.schema.MutableSchema;
+import org.eobjects.metamodel.schema.MutableTable;
+
+public class PostgresqlQueryRewriterTest extends TestCase {
+
+ public void testRewriteLimit() throws Exception {
+ MutableTable table = new MutableTable("foo");
+ table.setSchema(new MutableSchema("MY_SCHEMA"));
+ table.setQuote("\"");
+ MutableColumn column = new MutableColumn("bar");
+ column.setQuote("\"");
+ column.setTable(table);
+ Query q = new Query().from(table).select(column).setMaxRows(25).setFirstRow(5);
+ String queryString = new PostgresqlQueryRewriter(null).rewriteQuery(q);
+ assertEquals("SELECT \"foo\".\"bar\" FROM \"MY_SCHEMA\".\"foo\" LIMIT 25 OFFSET 4", queryString);
+ }
+
+ public void testRewriteFromItem() throws Exception {
+ PostgresqlQueryRewriter rewriter = new PostgresqlQueryRewriter(null);
+
+ assertEquals("\"public\".foo",
+ rewriter.rewriteFromItem(new FromItem(new MutableTable("foo").setSchema(new MutableSchema("public")))));
+ }
+
+ public void testGetColumnType() throws Exception {
+ PostgresqlQueryRewriter rewriter = new PostgresqlQueryRewriter(null);
+ assertEquals(ColumnType.BOOLEAN, rewriter.getColumnType(Types.BIT, "bool", -1));
+ }
+}
\ No newline at end of file