mirror of
https://github.com/openjdk/jdk.git
synced 2026-02-28 19:20:33 +00:00
8059411: RowSetWarning does not chain warnings
Reviewed-by: darcy, smarks, mchung
This commit is contained in:
parent
dc60e274ff
commit
fc36466f8f
@ -55,11 +55,6 @@ import java.sql.SQLException;
|
||||
*/
|
||||
public class RowSetWarning extends SQLException {
|
||||
|
||||
/**
|
||||
* RowSetWarning object handle.
|
||||
*/
|
||||
private RowSetWarning rwarning;
|
||||
|
||||
/**
|
||||
* Constructs a <code>RowSetWarning</code> object
|
||||
* with the given value for the reason; SQLState defaults to null,
|
||||
@ -128,7 +123,15 @@ public class RowSetWarning extends SQLException {
|
||||
* @see #setNextWarning
|
||||
*/
|
||||
public RowSetWarning getNextWarning() {
|
||||
return rwarning;
|
||||
SQLException warning = getNextException();
|
||||
if ( warning == null || warning instanceof RowSetWarning) {
|
||||
return (RowSetWarning)warning;
|
||||
} else {
|
||||
// The chained value isn't a RowSetWarning.
|
||||
// This is a programming error by whoever added it to
|
||||
// the RowSetWarning chain. We throw a Java "Error".
|
||||
throw new Error("RowSetWarning chain holds value that is not a RowSetWarning: ");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -141,7 +144,7 @@ public class RowSetWarning extends SQLException {
|
||||
* @see #getNextWarning
|
||||
*/
|
||||
public void setNextWarning(RowSetWarning warning) {
|
||||
rwarning = warning;
|
||||
setNextException(warning);
|
||||
}
|
||||
|
||||
static final long serialVersionUID = 6678332766434564774L;
|
||||
|
||||
238
jdk/test/javax/sql/testng/test/rowset/RowSetWarningTests.java
Normal file
238
jdk/test/javax/sql/testng/test/rowset/RowSetWarningTests.java
Normal file
@ -0,0 +1,238 @@
|
||||
/*
|
||||
* Copyright (c) 2014, 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;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import javax.sql.rowset.RowSetWarning;
|
||||
import static org.testng.Assert.*;
|
||||
import org.testng.annotations.Test;
|
||||
import util.BaseTest;
|
||||
|
||||
public class RowSetWarningTests extends BaseTest {
|
||||
|
||||
private final String[] warnings = {"Warning 1", "cause 1", "Warning 2",
|
||||
"Warning 3", "cause 2"};
|
||||
|
||||
/*
|
||||
* Create RowSetWarning and setting all objects to null
|
||||
*/
|
||||
@Test
|
||||
public void test() {
|
||||
RowSetWarning e = new RowSetWarning(null, null, errorCode);
|
||||
assertTrue(e.getMessage() == null && e.getSQLState() == null
|
||||
&& e.getCause() == null && e.getErrorCode() == errorCode);
|
||||
}
|
||||
|
||||
/*
|
||||
* Create RowSetWarning with no-arg constructor
|
||||
*/
|
||||
@Test
|
||||
public void test01() {
|
||||
RowSetWarning ex = new RowSetWarning();
|
||||
assertTrue(ex.getMessage() == null
|
||||
&& ex.getSQLState() == null
|
||||
&& ex.getCause() == null
|
||||
&& ex.getErrorCode() == 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Create RowSetWarning with message
|
||||
*/
|
||||
@Test
|
||||
public void test02() {
|
||||
RowSetWarning ex = new RowSetWarning(reason);
|
||||
assertTrue(ex.getMessage().equals(reason)
|
||||
&& ex.getSQLState() == null
|
||||
&& ex.getCause() == null
|
||||
&& ex.getErrorCode() == 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Create RowSetWarning with message, and SQLState
|
||||
*/
|
||||
@Test
|
||||
public void test03() {
|
||||
|
||||
RowSetWarning ex = new RowSetWarning(reason, state);
|
||||
assertTrue(ex.getMessage().equals(reason)
|
||||
&& ex.getSQLState().equals(state)
|
||||
&& ex.getCause() == null
|
||||
&& ex.getErrorCode() == 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Create RowSetWarning with message, SQLState, and error code
|
||||
*/
|
||||
@Test
|
||||
public void test04() {
|
||||
RowSetWarning ex = new RowSetWarning(reason, state, errorCode);
|
||||
assertTrue(ex.getMessage().equals(reason)
|
||||
&& ex.getSQLState().equals(state)
|
||||
&& ex.getCause() == null
|
||||
&& ex.getErrorCode() == errorCode);
|
||||
}
|
||||
|
||||
/*
|
||||
* Serialize a RowSetWarning and make sure you can read it back properly
|
||||
*/
|
||||
@Test
|
||||
public void test05() throws Exception {
|
||||
RowSetWarning e = new RowSetWarning(reason, state, errorCode);
|
||||
e.initCause(t);
|
||||
RowSetWarning ex1 = createSerializedException(e);
|
||||
assertTrue(reason.equals(ex1.getMessage())
|
||||
&& ex1.getSQLState().equals(state)
|
||||
&& cause.equals(ex1.getCause().toString())
|
||||
&& ex1.getErrorCode() == errorCode);
|
||||
}
|
||||
|
||||
/*
|
||||
* Validate that the ordering of the returned Exceptions is correct using
|
||||
* for-each loop
|
||||
*/
|
||||
@Test
|
||||
public void test06() {
|
||||
RowSetWarning ex = new RowSetWarning("Exception 1");
|
||||
ex.initCause(t1);
|
||||
RowSetWarning ex1 = new RowSetWarning("Exception 2");
|
||||
RowSetWarning ex2 = new RowSetWarning("Exception 3");
|
||||
ex2.initCause(t2);
|
||||
ex.setNextException(ex1);
|
||||
ex.setNextException(ex2);
|
||||
int num = 0;
|
||||
for (Throwable e : ex) {
|
||||
assertTrue(msgs[num++].equals(e.getMessage()));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Validate that the ordering of the returned Exceptions is correct using
|
||||
* traditional while loop
|
||||
*/
|
||||
@Test
|
||||
public void test07() {
|
||||
RowSetWarning ex = new RowSetWarning("Exception 1");
|
||||
ex.initCause(t1);
|
||||
RowSetWarning ex1 = new RowSetWarning("Exception 2");
|
||||
RowSetWarning ex2 = new RowSetWarning("Exception 3");
|
||||
ex2.initCause(t2);
|
||||
ex.setNextException(ex1);
|
||||
ex.setNextException(ex2);
|
||||
int num = 0;
|
||||
SQLException sqe = ex;
|
||||
while (sqe != null) {
|
||||
assertTrue(msgs[num++].equals(sqe.getMessage()));
|
||||
Throwable c = sqe.getCause();
|
||||
while (c != null) {
|
||||
assertTrue(msgs[num++].equals(c.getMessage()));
|
||||
c = c.getCause();
|
||||
}
|
||||
sqe = sqe.getNextException();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Validate that the ordering of the returned RowSetWarning is correct using
|
||||
* for-each loop
|
||||
*/
|
||||
@Test
|
||||
public void test08() {
|
||||
RowSetWarning ex = new RowSetWarning("Warning 1");
|
||||
ex.initCause(t1);
|
||||
RowSetWarning ex1 = new RowSetWarning("Warning 2");
|
||||
RowSetWarning ex2 = new RowSetWarning("Warning 3");
|
||||
ex2.initCause(t2);
|
||||
ex.setNextWarning(ex1);
|
||||
ex.setNextWarning(ex2);
|
||||
int num = 0;
|
||||
for (Throwable e : ex) {
|
||||
assertTrue(warnings[num++].equals(e.getMessage()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate that the ordering of the returned RowSetWarning is correct using
|
||||
* traditional while loop
|
||||
*/
|
||||
@Test
|
||||
public void test09() {
|
||||
RowSetWarning ex = new RowSetWarning("Warning 1");
|
||||
ex.initCause(t1);
|
||||
RowSetWarning ex1 = new RowSetWarning("Warning 2");
|
||||
RowSetWarning ex2 = new RowSetWarning("Warning 3");
|
||||
ex2.initCause(t2);
|
||||
ex.setNextWarning(ex1);
|
||||
ex.setNextWarning(ex2);
|
||||
int num = 0;
|
||||
RowSetWarning sqe = ex;
|
||||
while (sqe != null) {
|
||||
assertTrue(warnings[num++].equals(sqe.getMessage()));
|
||||
Throwable c = sqe.getCause();
|
||||
while (c != null) {
|
||||
assertTrue(msgs[num++].equals(c.getMessage()));
|
||||
c = c.getCause();
|
||||
}
|
||||
sqe = sqe.getNextWarning();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Serialize a RowSetWarning and make sure you can read it back properly
|
||||
*/
|
||||
@Test
|
||||
public void test10() throws Exception {
|
||||
RowSetWarning e = new RowSetWarning(reason, state, errorCode);
|
||||
RowSetWarning ex1 = createSerializedException(e);
|
||||
assertTrue(reason.equals(ex1.getMessage())
|
||||
&& ex1.getSQLState().equals(state)
|
||||
&& ex1.getCause() == null
|
||||
&& ex1.getErrorCode() == errorCode);
|
||||
}
|
||||
|
||||
/*
|
||||
* Serialize a RowSetWarning and make sure you can read it back properly.
|
||||
* Validate that the ordering of the returned RowSetWarning is correct using
|
||||
* traditional while loop
|
||||
*/
|
||||
@Test
|
||||
public void test11() throws Exception {
|
||||
RowSetWarning ex = new RowSetWarning("Warning 1");
|
||||
ex.initCause(t1);
|
||||
RowSetWarning ex1 = new RowSetWarning("Warning 2");
|
||||
RowSetWarning ex2 = new RowSetWarning("Warning 3");
|
||||
ex2.initCause(t2);
|
||||
ex.setNextWarning(ex1);
|
||||
ex.setNextWarning(ex2);
|
||||
int num = 0;
|
||||
RowSetWarning sqe = createSerializedException(ex);
|
||||
while (sqe != null) {
|
||||
assertTrue(warnings[num++].equals(sqe.getMessage()));
|
||||
Throwable c = sqe.getCause();
|
||||
while (c != null) {
|
||||
assertTrue(msgs[num++].equals(c.getMessage()));
|
||||
c = c.getCause();
|
||||
}
|
||||
sqe = sqe.getNextWarning();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user