blob: b84453e9a3bd8581d04e0159eddf44b3d2ea607d [file] [log] [blame]
/*
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package test.rowset.joinrowset;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;
import javax.sql.RowSet;
import javax.sql.rowset.CachedRowSet;
import javax.sql.rowset.JoinRowSet;
import javax.sql.rowset.RowSetMetaDataImpl;
import javax.sql.rowset.WebRowSet;
import static org.testng.Assert.assertEquals;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import test.rowset.webrowset.CommonWebRowSetTests;
public class JoinRowSetTests extends CommonWebRowSetTests {
private final String SUPPLIERS_TABLE = "SUPPLIERS";
// Expected COF_IDs to be found
private final Object[] EXPECTED = {4, 1};
// SUPPLIERS Primary Key to use to validate the joins
private final int SUP_ID = 101;
// Join Column between the SUPPLIERS and COFFEES table
private final String JOIN_COLNAME = "SUP_ID";
// Column index in COFFEES table which contains SUP_ID
private final int COFFEES_JOIN_COLUMN_INDEX = 3;
// Column index in SUPPLIERS table which contains SUP_ID
private final int SUPPLIERS_JOIN_COLUMN_INDEX = 1;
@Override
protected JoinRowSet newInstance() throws SQLException {
return rsf.createJoinRowSet();
}
/*
* Initializes the SUPPLIERS metadata
*/
private void initSuppliersMetaData(CachedRowSet crs) throws SQLException {
RowSetMetaDataImpl rsmd = new RowSetMetaDataImpl();
/*
* CREATE TABLE SUPPLIERS (
* SUP_ID INTEGER NOT NULL,
* SUP_NAME VARCHAR(32) NOT NULL,
* STREET VARCHAR(32) NOT NULL,
* CITY VARCHAR(32) NOT NULL,
* STATE CHAR(2) NOT NULL,
* ZIP CHAR(5) NOT NULL,
* PRIMARY KEY (SUP_ID))
*/
rsmd.setColumnCount(6);
rsmd.setColumnName(1, "SUP_ID");
rsmd.setColumnName(2, "SUP_NAME");
rsmd.setColumnName(3, "STREET");
rsmd.setColumnName(4, "CITY");
rsmd.setColumnName(5, "STATE");
rsmd.setColumnName(6, "ZIP");
rsmd.setColumnType(1, Types.INTEGER);
rsmd.setColumnType(2, Types.VARCHAR);
rsmd.setColumnType(3, Types.VARCHAR);
rsmd.setColumnType(4, Types.VARCHAR);
rsmd.setColumnType(5, Types.CHAR);
rsmd.setColumnType(6, Types.CHAR);
crs.setMetaData(rsmd);
crs.setTableName(SUPPLIERS_TABLE);
}
/*
* Add rows to SUPPLIERS table
*/
protected void createSuppiersRows(RowSet rs) throws SQLException {
// insert into SUPPLIERS values(49, 'Superior Coffee', '1 Party Place',
// 'Mendocino', 'CA', '95460')
rs.moveToInsertRow();
rs.updateInt(1, 49);
rs.updateString(2, "Superior Coffee");
rs.updateString(3, "1 Party Place");
rs.updateString(4, "Mendocino");
rs.updateString(5, "CA");
rs.updateString(6, "95460");
rs.insertRow();
// insert into SUPPLIERS values(101, 'Acme, Inc.', '99 Market Street',
// 'Groundsville', 'CA', '95199')
rs.moveToInsertRow();
rs.updateInt(1, 101);
rs.updateString(2, "Acme, Inc.");
rs.updateString(3, "99 Market Street");
rs.updateString(4, "Groundsville");
rs.updateString(5, "CA");
rs.updateString(6, "95199");
rs.insertRow();
// insert into SUPPLIERS values(150, 'The High Ground',
// '100 Coffee Lane', 'Meadows', 'CA', '93966')
rs.moveToInsertRow();
rs.updateInt(1, 150);
rs.updateString(2, "The High Ground");
rs.updateString(3, "100 Coffee Lane");
rs.updateString(4, "Meadows");
rs.updateString(5, "CA");
rs.updateString(6, "93966");
rs.insertRow();
// insert into SUPPLIERS values(456," 'Restaurant Supplies, Inc.',
// '200 Magnolia Street', 'Meadows', 'CA', '93966')
rs.moveToInsertRow();
rs.updateInt(1, 456);
rs.updateString(2, "Restaurant Supplies, Inc.");
rs.updateString(3, "200 Magnolia Stree");
rs.updateString(4, "Meadows");
rs.updateString(5, "CA");
rs.updateString(6, "93966");
rs.insertRow();
// insert into SUPPLIERS values(927, 'Professional Kitchen',
// '300 Daisy Avenue', 'Groundsville'," 'CA', '95199')
rs.moveToInsertRow();
rs.updateInt(1, 927);
rs.updateString(2, "Professional Kitchen");
rs.updateString(3, "300 Daisy Avenue");
rs.updateString(4, "Groundsville");
rs.updateString(5, "CA");
rs.updateString(6, "95199");
rs.insertRow();
}
/*
* DataProvider used to set parameters for basic types that are supported
*/
@DataProvider(name = "createCachedRowSetsToUse")
private Object[][] createCachedRowSetsToUse() throws SQLException {
CachedRowSet crs = rsf.createCachedRowSet();
initCoffeesMetaData(crs);
createCoffeesRows(crs);
// Make sure you are not on the insertRow
crs.moveToCurrentRow();
CachedRowSet crs1 = rsf.createCachedRowSet();
initSuppliersMetaData(crs1);
createSuppiersRows(crs1);
// Make sure you are not on the insertRow
crs1.moveToCurrentRow();
return new Object[][]{
{crs, crs1}
};
}
/*
* Validate that the correct coffees are returned for SUP_ID
*/
private void validateResults(final JoinRowSet jrs) throws SQLException {
List<Integer> results = new ArrayList<>();
jrs.beforeFirst();
while (jrs.next()) {
if (jrs.getInt(JOIN_COLNAME) == SUP_ID) {
results.add(jrs.getInt("COF_ID"));
}
}
assertEquals(results.toArray(), EXPECTED);
}
/*
* Join two CachedRowSets specifying a column name to join against
*/
@Test(dataProvider = "createCachedRowSetsToUse")
public void joinRowSetTests0000(CachedRowSet crs, CachedRowSet crs1)
throws Exception {
try (JoinRowSet jrs = newInstance()) {
jrs.addRowSet(crs, JOIN_COLNAME);
jrs.addRowSet(crs1, JOIN_COLNAME);
validateResults(jrs);
crs.close();
crs1.close();
}
}
/*
* Join two CachedRowSets specifying a column index to join against
*/
@Test(dataProvider = "createCachedRowSetsToUse")
public void joinRowSetTests0001(CachedRowSet crs, CachedRowSet crs1)
throws Exception {
try (JoinRowSet jrs = newInstance()) {
jrs.addRowSet(crs, COFFEES_JOIN_COLUMN_INDEX);
jrs.addRowSet(crs1, SUPPLIERS_JOIN_COLUMN_INDEX);
validateResults(jrs);
crs.close();
crs1.close();
}
}
/*
* Join two CachedRowSets specifying a column name to join against
*/
@Test(dataProvider = "createCachedRowSetsToUse")
public void joinRowSetTests0002(CachedRowSet crs, CachedRowSet crs1)
throws Exception {
try (JoinRowSet jrs = newInstance()) {
RowSet[] rowsets = {crs, crs1};
String[] joinCols = {JOIN_COLNAME, JOIN_COLNAME};
jrs.addRowSet(rowsets, joinCols);
validateResults(jrs);
crs.close();
crs1.close();
}
}
/*
* Join two CachedRowSets specifying a column index to join against
*/
@Test(dataProvider = "createCachedRowSetsToUse")
public void joinRowSetTests0003(CachedRowSet crs, CachedRowSet crs1)
throws Exception {
try (JoinRowSet jrs = newInstance()) {
RowSet[] rowsets = {crs, crs1};
int[] joinCols = {COFFEES_JOIN_COLUMN_INDEX,
SUPPLIERS_JOIN_COLUMN_INDEX};
jrs.addRowSet(rowsets, joinCols);
validateResults(jrs);
crs.close();
crs1.close();
}
}
/*
* Join two CachedRowSets specifying a column name to join against
*/
@Test(dataProvider = "createCachedRowSetsToUse")
public void joinRowSetTests0005(CachedRowSet crs, CachedRowSet crs1)
throws Exception {
try (JoinRowSet jrs = newInstance()) {
crs.setMatchColumn(JOIN_COLNAME);
crs1.setMatchColumn(JOIN_COLNAME);
jrs.addRowSet(crs);
jrs.addRowSet(crs1);
validateResults(jrs);
crs.close();
crs1.close();
}
}
/*
* Join two CachedRowSets specifying a column index to join against
*/
@Test(dataProvider = "createCachedRowSetsToUse")
public void joinRowSetTests0006(CachedRowSet crs, CachedRowSet crs1)
throws Exception {
try (JoinRowSet jrs = newInstance()) {
crs.setMatchColumn(COFFEES_JOIN_COLUMN_INDEX);
crs1.setMatchColumn(SUPPLIERS_JOIN_COLUMN_INDEX);
jrs.addRowSet(crs);
jrs.addRowSet(crs1);
validateResults(jrs);
crs.close();
crs1.close();
}
}
// Disabled tests due to bugs in JoinRowSet
@Test(dataProvider = "rowSetType", enabled = false)
public void commonCachedRowSetTest0004(CachedRowSet rs) throws Exception {
}
@Test(dataProvider = "rowSetType", enabled = false)
public void commonCachedRowSetTest0005(CachedRowSet rs) throws Exception {
}
@Test(dataProvider = "rowSetType", enabled = false)
public void commonCachedRowSetTest0008(CachedRowSet rs) throws Exception {
}
@Test(dataProvider = "rowSetType", enabled = false)
public void commonCachedRowSetTest0026(CachedRowSet rs) throws Exception {
}
@Test(dataProvider = "rowSetType", enabled = false)
public void commonCachedRowSetTest0027(CachedRowSet rs) throws Exception {
}
@Test(dataProvider = "rowSetType", enabled = false)
public void commonCachedRowSetTest0053(CachedRowSet rs) throws Exception {
}
@Test(dataProvider = "rowSetType", enabled = false)
public void commonCachedRowSetTest0054(CachedRowSet rs) throws Exception {
}
@Test(dataProvider = "rowSetType", enabled = false)
public void commonCachedRowSetTest0055(CachedRowSet rs) throws Exception {
}
@Test(dataProvider = "rowSetType")
public void WebRowSetTest0009(WebRowSet wrs1) throws Exception {
}
}