/* * 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 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 { } }