Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6467662

api/javax_sql/rowset/impl/FilteredRowSet/index.html#FilteredRowSet[notifyCursorMovedTest3] fails b98

    Details

    • Subcomponent:
    • Resolved In Build:
      b01
    • CPU:
      generic
    • OS:
      generic
    • Verification:
      Verified

      Backports

        Description

        JCK : JCK6.0 b30
        J2SE : FAIL - mustang b98
        Platform[s] : FAIL - windows
        switch/Mode : FAIL - default

        Test api/javax_sql/rowset/impl/FilteredRowSet/index.html#FilteredRowSet[notifyCursorMovedTest3] fails because method relative(1) doesn't notify listener on cursor move (but next() still does). According to specification these methods should do the same ("Note: Calling the method relative(1) is identical to calling the method next() and calling the method relative(-1) is identical to calling the method previous().").


        steps to reproduce: run the following code:

        import java.io.PrintWriter;
        import java.sql.*;
        import javax.sql.*;
        import javax.sql.rowset.*;
        import java.math.BigDecimal;


        public class RowsetTest{
            private static final int UNDEFINED = -1;
            private static final int CONSTRUCTOR = 0;
            private static final int FACTORY = 1;

            protected int mechanism = UNDEFINED;

        public static void main (String[] args){

                try {
        RowSet rs = getRowSetImpl();
        System.out.println("Initialized...");

                   SimpleListener listener = new SimpleListener();
                   rs.addRowSetListener(listener);

        System.out.println("first()");
                   rs.first();
        System.out.println("relative(1)");
                   rs.relative(1);
        System.out.println("first()");
        rs.first();
        System.out.println("next()");
                   rs.next();

                } catch (Exception e) {
        e.printStackTrace();
          return;
                }
                System.out.println("OK");


        }


            protected static RowSet getRowSetImpl() throws Exception {
                try {
                    RowSet rs = newInstance();
                    initRowSet(rs);
                    return rs;
                } catch (SQLException e) {
                    e.printStackTrace();
        throw new RuntimeException(e);
                }
            }

            protected static void initRowSet(RowSet rs) throws SQLException {
                CachedRowSet crs = (CachedRowSet) rs;
                RowSetMetaDataImpl rsmdi = new RowSetMetaDataImpl();
                crs.setType(RowSet.TYPE_SCROLL_INSENSITIVE);

                rsmdi.setColumnCount(18);
                

                rsmdi.setColumnName(1, "_bit_");
                rsmdi.setColumnName(2, "_object_");
                rsmdi.setColumnName(3, "_char_");
                rsmdi.setColumnName(4, "_date_");
                rsmdi.setColumnName(5, "_decimal_");
                rsmdi.setColumnName(6, "_double_");
                rsmdi.setColumnName(7, "_float_");
                rsmdi.setColumnName(8, "_integer_");
                rsmdi.setColumnName(9, "_numeric_");
                rsmdi.setColumnName(10, "_real_");
                rsmdi.setColumnName(11, "_ref_");
                rsmdi.setColumnName(12, "_smallint_");
                rsmdi.setColumnName(13, "_time_");
                rsmdi.setColumnName(14, "_timestamp_");
                rsmdi.setColumnName(15, "_timyint_");
                rsmdi.setColumnName(16, "_varchar_");
                rsmdi.setColumnName(17, "_bin_");
                rsmdi.setColumnName(18, "_bigint_");


                rsmdi.setNullable(1, ResultSetMetaData.columnNoNulls);
                rsmdi.setNullable(2, ResultSetMetaData.columnNullable);
                rsmdi.setNullable(3, ResultSetMetaData.columnNullable);
                rsmdi.setNullable(11, ResultSetMetaData.columnNullable);

                
                rsmdi.setColumnType(1, Types.BIT);
                rsmdi.setColumnType(2, Types.JAVA_OBJECT);
                rsmdi.setColumnType(3, Types.CHAR);
                rsmdi.setColumnType(4, Types.DATE);
                rsmdi.setColumnType(5, Types.DECIMAL);
                rsmdi.setColumnType(6, Types.DOUBLE);
                rsmdi.setColumnType(7, Types.FLOAT);
                rsmdi.setColumnType(8, Types.INTEGER);
                rsmdi.setColumnType(9, Types.NUMERIC);
                rsmdi.setColumnType(10, Types.REAL);
                rsmdi.setColumnType(11, Types.REF);
                rsmdi.setColumnType(12, Types.SMALLINT);
                rsmdi.setColumnType(13, Types.TIME);
                rsmdi.setColumnType(14, Types.TIMESTAMP);
                rsmdi.setColumnType(15, Types.TINYINT);
                rsmdi.setColumnType(16, Types.VARCHAR);
                rsmdi.setColumnType(17, Types.BINARY);
                rsmdi.setColumnType(18, Types.BIGINT);
                crs.setMetaData(rsmdi);

                // ========== add a few rows
                final byte[] buf = {0x01, 0x02};
                
                crs.moveToInsertRow();

                crs.updateBoolean(1, false);
        // crs.updateBoolean(2, true);
                crs.updateString(3, "Char value");
                crs.updateDate(4, new Date(432423434L));
                crs.updateBigDecimal(5, new BigDecimal(0));
                crs.updateDouble(6, 3.14);
                crs.updateDouble(7, 3.1415);
                crs.updateInt(8, 13);
                crs.updateBigDecimal(9, new BigDecimal(0));
                crs.updateFloat(10, 0.0f);
                crs.updateNull(11);
                crs.updateShort(12, (short )0 );
                crs.updateTime(13, new Time(34324));
                crs.updateTimestamp(14, new Timestamp(34322));
                crs.updateByte(15, (byte)1);
                crs.updateString(16, "varchar value");
                crs.updateBytes(17, buf);
                crs.updateLong(18, Long.MAX_VALUE - 1);
                crs.insertRow();

                crs.moveToInsertRow();

                crs.updateBoolean(1, false);
          // crs.updateBoolean(2, true);
                crs.updateString(3, "Char value 1");
                crs.updateDate(4, new Date(436576L));
                crs.updateBigDecimal(5, new BigDecimal(10));
                crs.updateDouble(6, 3.14);
                crs.updateDouble(7, 3.1415);
                crs.updateInt(8, 13);
                crs.updateBigDecimal(9, new BigDecimal(15));
                crs.updateFloat(10, 10.0f);
                crs.updateNull(11);
                crs.updateShort(12, (short )13 );
                crs.updateTime(13, new Time(777));
                crs.updateTimestamp(14, new Timestamp(45654));
                crs.updateByte(15, (byte)17);
                crs.updateString(16, "varchar value 1");
                crs.updateBytes(17, buf);
                crs.updateLong(18, Long.MAX_VALUE);
                crs.insertRow();

                crs.moveToCurrentRow();
                crs.beforeFirst();


            }

            protected static RowSet newInstance() throws Exception {
                    return (RowSet)(Class.forName("com.sun.rowset.FilteredRowSetImpl").newInstance());
            }


            public static void registerListenerTest(RowSet rs) throws Exception {
                
                SimpleListener listener = new SimpleListener();
                //rs.addRowSetListener(listener);
                rs.execute();
            }

        public static class SimpleListener implements RowSetListener {

            boolean rowSetChanged;
            boolean rowChanged;
            boolean cursorMoved;

            public boolean wasRowSetChanged() {
                return rowSetChanged;
            }

            public boolean wasRowChanged() {
                return rowChanged;
            }

            public boolean wasCursorMoved() {
        System.out.println("wasCursorMoved");
                return cursorMoved;
            }

            public void reset() {
                rowSetChanged = false;
                rowChanged = false;
                cursorMoved = false;
            }

            public void rowSetChanged(RowSetEvent event) {
                rowSetChanged = true;
            }

            public void rowChanged(RowSetEvent event) {
                rowChanged = true;
            }

            public void cursorMoved(RowSetEvent event) {
        System.out.println("cursorMoved");
                cursorMoved = true;
            }
        }

        }

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  lancea Lance Andersen
                  Reporter:
                  pastepan Pavel Stepanov (Inactive)
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  0 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved:
                    Imported:
                    Indexed: