You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by lv...@apache.org on 2008/03/19 09:14:46 UTC
svn commit: r638741 - in /harmony/enhanced/classlib/trunk/modules/sql/src:
main/java/org/apache/harmony/sql/internal/nls/
main/java/org/apache/harmony/sql/internal/rowset/
test/java/org/apache/harmony/sql/tests/internal/rowset/
Author: lvjing
Date: Wed Mar 19 01:14:45 2008
New Revision: 638741
URL: http://svn.apache.org/viewvc?rev=638741&view=rev
Log:
Apply patch for HARMONY-5616,[classlib][sql] add event support in CachedRowSetImpl
Added:
harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetListenerTest.java (with props)
Modified:
harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/nls/messages.properties
harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/rowset/CachedRow.java
harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/rowset/CachedRowSetImpl.java
harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/rowset/SyncResolverImpl.java
harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetImplTest.java
harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetPagingTest.java
harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetTestCase.java
harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetUpdateTest.java
Modified: harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/nls/messages.properties
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/nls/messages.properties?rev=638741&r1=638740&r2=638741&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/nls/messages.properties (original)
+++ harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/nls/messages.properties Wed Mar 19 01:14:45 2008
@@ -77,3 +77,8 @@
rowset.14=Positioned updates not supported
rowset.15=Columns being unset are not the same as set
rowset.16=Not a valid command
+rowset.17=The Result Set is CONCUR_READ_ONLY
+rowset.18=None column is updated
+rowset.19=Populate data before calling
+rowset.20=Match columns should be greater than 0
+rowset.21=Not Updateable of the CurrentRow
Modified: harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/rowset/CachedRow.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/rowset/CachedRow.java?rev=638741&r1=638740&r2=638741&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/rowset/CachedRow.java (original)
+++ harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/rowset/CachedRow.java Wed Mar 19 01:14:45 2008
@@ -20,6 +20,8 @@
import java.sql.SQLWarning;
import java.util.BitSet;
+import org.apache.harmony.sql.internal.nls.Messages;
+
public class CachedRow implements Cloneable {
private Object[] columnData;
@@ -121,8 +123,8 @@
public void updateObject(int columnIndex, Object x) throws SQLException {
if (nonUpdateable) {
- // TODO load message from resource file
- throw new SQLException("Not Updateable of the CurrentRow");
+ // rowset.21=Not Updateable of the CurrentRow
+ throw new SQLException(Messages.getString("rowset.21")); //$NON-NLS-1$
}
columnData[columnIndex - 1] = x;
Modified: harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/rowset/CachedRowSetImpl.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/rowset/CachedRowSetImpl.java?rev=638741&r1=638740&r2=638741&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/rowset/CachedRowSetImpl.java (original)
+++ harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/rowset/CachedRowSetImpl.java Wed Mar 19 01:14:45 2008
@@ -143,7 +143,9 @@
private Connection conn;
- private static Map<Integer, Class> TYPE_MAPPING = initialTypeMapping();
+ private boolean isNotifyListener = true;
+
+ private static Map<Integer, Class<?>> TYPE_MAPPING = initialTypeMapping();
public static final String PROVIDER_ID = "Apache Harmony HYOptimisticProvider"; //$NON-NLS-1$
@@ -152,8 +154,8 @@
initialProperties();
}
- private static Map<Integer, Class> initialTypeMapping() {
- HashMap<Integer, Class> map = new HashMap<Integer, Class>();
+ private static Map<Integer, Class<?>> initialTypeMapping() {
+ HashMap<Integer, Class<?>> map = new HashMap<Integer, Class<?>>();
map.put(Integer.valueOf(Types.ARRAY), Array.class);
map.put(Integer.valueOf(Types.BIGINT), Long.class);
map.put(Integer.valueOf(Types.BINARY), byte[].class);
@@ -215,7 +217,7 @@
public void acceptChanges() throws SyncProviderException {
if (isCursorOnInsert) {
// rowset.11=Illegal operation on an insert row
- throw new SyncProviderException(Messages.getString("rowset.11"));
+ throw new SyncProviderException(Messages.getString("rowset.11")); //$NON-NLS-1$
}
Connection currentConn = null;
@@ -315,7 +317,9 @@
absolute(index);
}
- notifyRowSetChanged();
+ if (isNotifyListener) {
+ notifyRowSetChanged();
+ }
} catch (SyncProviderException e) {
throw e;
@@ -381,12 +385,12 @@
output = (CachedRowSetImpl) super.clone();
// BaseRowSet.params
Field paramsField = output.getClass().getSuperclass()
- .getDeclaredField("params");
+ .getDeclaredField("params"); //$NON-NLS-1$
paramsField.setAccessible(true);
paramsField.set(output, paramsHashtable);
// BaseRowSet.listeners
Field listenersField = output.getClass().getSuperclass()
- .getDeclaredField("listeners");
+ .getDeclaredField("listeners"); //$NON-NLS-1$
listenersField.setAccessible(true);
listenersField.set(output, listeners);
// BaseRowSet.map
@@ -438,14 +442,11 @@
return output;
} catch (CloneNotSupportedException e) {
- // TODO add error message
- throw new SQLException();
+ throw new SQLException(e.getMessage());
} catch (NoSuchFieldException e) {
- // TODO add error message
- throw new SQLException();
+ throw new SQLException(e.getMessage());
} catch (IllegalAccessException e) {
- // TODO add error message
- throw new SQLException();
+ throw new SQLException(e.getMessage());
}
}
@@ -479,22 +480,21 @@
try {
result = (RowSet) super.clone();
} catch (CloneNotSupportedException e) {
- // TODO add error message
- throw new SQLException();
+ throw new SQLException(e.getMessage());
}
return result;
}
- public void execute(Connection conn) throws SQLException {
+ public void execute(Connection connection) throws SQLException {
String localCommand = getCommand();
if (localCommand == null || getParams() == null) {
// rowset.16=Not a valid command
- throw new SQLException(Messages.getString("rowset.16"));
+ throw new SQLException(Messages.getString("rowset.16")); //$NON-NLS-1$
}
- this.conn = conn;
- PreparedStatement ps = conn.prepareStatement(localCommand);
+ conn = connection;
+ PreparedStatement ps = connection.prepareStatement(localCommand);
Object[] params = getParams();
for (int i = 0; i < params.length; i++)
ps.setObject(i + 1, params[i]);
@@ -515,7 +515,15 @@
}
public int[] getKeyColumns() throws SQLException {
- return keyCols == null ? null : keyCols.clone();
+ if (rows == null) {
+ // TODO add error messages
+ throw new SQLException();
+ }
+ if (keyCols == null) {
+ return new int[0];
+ }
+
+ return keyCols;
}
public ResultSet getOriginal() throws SQLException {
@@ -560,9 +568,8 @@
*/
public boolean nextPage() throws SQLException {
if (rows == null || nextPageRowIndex == -1 || getPageSize() == 0) {
- // TODO load message from resource file
- throw new SQLException(
- "Using execute() method populate data before calling");
+ // rowset.19=Populate data before calling
+ throw new SQLException(Messages.getString("rowset.19")); //$NON-NLS-1$
}
if (cachedResultSet == null) {
@@ -586,7 +593,10 @@
index++;
}
+ isNotifyListener = false;
doPopulate(rs, true);
+ notifyRowSetChanged();
+ isNotifyListener = true;
if (rows.size() == 0) {
return false;
@@ -602,7 +612,11 @@
if (cachedResultSet.absolute(nextPageRowIndex)) {
cachedResultSet.previous();
+
+ isNotifyListener = false;
doPopulate(cachedResultSet, true);
+ notifyRowSetChanged();
+ isNotifyListener = true;
if (rows.size() == 0) {
return false;
@@ -655,6 +669,7 @@
}
private void doPopulate(ResultSet rs, boolean isPaging) throws SQLException {
+ isNotifyListener = false;
meta = copyMetaData(rs.getMetaData());
columnCount = meta.getColumnCount();
@@ -698,6 +713,11 @@
// recovery the states
beforeFirst();
+
+ isNotifyListener = true;
+ if (isNotifyListener) {
+ notifyRowSetChanged();
+ }
}
// deep copy of ResultSetMetaData
@@ -744,9 +764,8 @@
public boolean previousPage() throws SQLException {
if (rows == null || previousPageRowIndex == -1 || getPageSize() == 0) {
- // TODO load message from resource file
- throw new SQLException(
- "Using execute() method populate data before calling");
+ // rowset.19=Populate data before calling
+ throw new SQLException(Messages.getString("rowset.19")); //$NON-NLS-1$
}
if (previousPageRowIndex == 0) {
@@ -788,7 +807,10 @@
&& previousPageRowIndex - startIndex + 1 != prePageSize) {
setPageSize(previousPageRowIndex - startIndex + 1);
}
+ isNotifyListener = false;
doPopulate(rs, true);
+ notifyRowSetChanged();
+ isNotifyListener = true;
setPageSize(prePageSize);
@@ -834,8 +856,8 @@
}
public void release() throws SQLException {
- // TODO send a rowSetChanged event to all listeners
rows = new ArrayList<CachedRow>();
+ notifyRowSetChanged();
}
public void restoreOriginal() throws SQLException {
@@ -843,6 +865,7 @@
return;
}
+ isNotifyListener = false;
List<CachedRow> insertedRows = new ArrayList<CachedRow>();
for (CachedRow row : rows) {
if (row.isInsert()) {
@@ -857,8 +880,8 @@
deletedRowCount = 0;
first();
-
- // TODO fire rowSetChanged event
+ isNotifyListener = true;
+ notifyRowSetChanged();
}
public void rollback() throws SQLException {
@@ -881,7 +904,22 @@
}
public void setKeyColumns(int[] keys) throws SQLException {
- keyCols = keys.clone();
+ if (keys == null) {
+ throw new NullPointerException();
+ }
+
+ if (rows == null) {
+ keyCols = keys.clone();
+ } else {
+ for (int key : keys) {
+ if (key <= 0 || key > columnCount) {
+ // sql.27=Invalid column index :{0}
+ throw new SQLException(Messages.getString("sql.27", key)); //$NON-NLS-1$
+ }
+ }
+
+ keyCols = keys.clone();
+ }
}
public void setMetaData(RowSetMetaData md) throws SQLException {
@@ -936,9 +974,9 @@
public Collection<?> toCollection() throws SQLException {
if (rows == null) {
// sql.38=Object is invalid
- throw new SQLException(Messages.getString("sql.38"));
+ throw new SQLException(Messages.getString("sql.38")); //$NON-NLS-1$
}
- List<Vector> list = new ArrayList<Vector>();
+ List<Vector<Object>> list = new ArrayList<Vector<Object>>();
if (rows.size() > 0) {
Vector<Object> vector = null;
for (int i = 0; i < rows.size(); i++) {
@@ -956,12 +994,12 @@
public Collection<?> toCollection(int column) throws SQLException {
if (rows == null) {
// sql.38=Object is invalid
- throw new SQLException(Messages.getString("sql.38"));
+ throw new SQLException(Messages.getString("sql.38")); //$NON-NLS-1$
}
if (column <= 0 || column > columnCount) {
// sql.42=Illegal Argument
- throw new SQLException(Messages.getString("sql.42"));
+ throw new SQLException(Messages.getString("sql.42")); //$NON-NLS-1$
}
Vector<Object> vector = new Vector<Object>();
@@ -979,47 +1017,57 @@
public void undoDelete() throws SQLException {
if (isAfterLast() || isBeforeFirst()) {
- // TODO add error messages
- throw new SQLException();
+ // rowset.7=Not a valid cursor
+ throw new SQLException(Messages.getString("rowset.7")); //$NON-NLS-1$
}
if (currentRow != null && !currentRow.isDelete()) {
- // TODO add error messages
- throw new SQLException();
+ // rowset.0=Not a valid position
+ throw new SQLException(Messages.getString("rowset.0")); //$NON-NLS-1$
}
if (currentRow != null && currentRow.isDelete()) {
currentRow.undoDelete();
deletedRowCount--;
}
+
+ if (isNotifyListener) {
+ notifyRowChanged();
+ }
}
public void undoInsert() throws SQLException {
- // TODO notify listener
checkValidRow();
if (isCursorOnInsert) {
// rowset.11=Illegal operation on an insert row
- throw new SQLException(Messages.getString("rowset.11"));
+ throw new SQLException(Messages.getString("rowset.11")); //$NON-NLS-1$
}
if (!rowInserted()) {
// rowset.4=Not an insert row
- throw new SQLException(Messages.getString("rowset.4"));
+ throw new SQLException(Messages.getString("rowset.4")); //$NON-NLS-1$
}
rows.remove(currentRow);
next();
+ if (isNotifyListener) {
+ notifyRowChanged();
+ }
}
public void undoUpdate() throws SQLException {
checkValidRow();
if (isCursorOnInsert && insertRow == null) {
// rowset.11=Illegal operation on an insert row
- throw new SQLException(Messages.getString("rowset.11"));
+ throw new SQLException(Messages.getString("rowset.11")); //$NON-NLS-1$
}
if (currentRow == insertRow) {
currentRow = new CachedRow(new Object[columnCount]);
} else if (rowUpdated()) {
currentRow.restoreOriginal();
}
+
+ if (isNotifyListener) {
+ notifyRowChanged();
+ }
}
public int[] getMatchColumnIndexes() throws SQLException {
@@ -1044,7 +1092,8 @@
public void setMatchColumn(int columnIdx) throws SQLException {
if (columnIdx < 0) {
// TODO why is 0 valid? load message from resource files
- throw new SQLException("Match columns should be greater than 0");
+ // rowset.20=Match columns should be greater than 0
+ throw new SQLException(Messages.getString("rowset.20")); //$NON-NLS-1$
}
if (matchColumnIndexes == null) {
@@ -1067,7 +1116,8 @@
for (int i : columnIdxes) {
if (i < 0) {
// TODO why is 0 valid? load message from resource files
- throw new SQLException("Match columns should be greater than 0");
+ // rowset.20=Match columns should be greater than 0
+ throw new SQLException(Messages.getString("rowset.20")); //$NON-NLS-1$
}
}
@@ -1219,6 +1269,9 @@
throw new SQLException(Messages.getString("rowset.0")); //$NON-NLS-1$
}
if (rows == null || rows.size() == 0) {
+ if (isNotifyListener) {
+ notifyCursorMoved();
+ }
return false;
}
@@ -1234,17 +1287,26 @@
if (row <= 0) {
currentRowIndex = 0;
currentRow = null;
+ if (isNotifyListener) {
+ notifyCursorMoved();
+ }
return false;
}
if (row > rows.size()) {
currentRowIndex = rows.size() + 1;
currentRow = null;
+ if (isNotifyListener) {
+ notifyCursorMoved();
+ }
return false;
}
currentRowIndex = row;
currentRow = rows.get(currentRowIndex - 1);
+ if (isNotifyListener) {
+ notifyCursorMoved();
+ }
return true;
}
@@ -1261,13 +1323,18 @@
}
public void cancelRowUpdates() throws SQLException {
- if (currentRow == null || currentRow == insertRow) {
- // TODO add error message
- throw new SQLException();
+ if (currentRow == null) {
+ // rowset.7=Not a valid cursor
+ throw new SQLException(Messages.getString("rowset.7")); //$NON-NLS-1$
+ }
+ if (isCursorOnInsert) {
+ // rowset.11=Illegal operation on an insert row
+ throw new SQLException(Messages.getString("rowset.11")); //$NON-NLS-1$
}
if (rowUpdated()) {
currentRow.restoreOriginal();
+ notifyRowChanged();
}
}
@@ -1295,12 +1362,15 @@
public void deleteRow() throws SQLException {
checkValidRow();
- if (currentRow == insertRow) {
- // TODO add error message
- throw new SQLException();
+ if (isCursorOnInsert) {
+ // rowset.11=Illegal operation on an insert row
+ throw new SQLException(Messages.getString("rowset.11")); //$NON-NLS-1$
}
currentRow.setDelete();
deletedRowCount++;
+ if (isNotifyListener) {
+ notifyRowChanged();
+ }
}
private void checkValidRow() throws SQLException {
@@ -1400,7 +1470,7 @@
return (Array) obj;
} catch (ClassCastException e) {
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
}
}
@@ -1454,7 +1524,7 @@
return new BigDecimal(obj.toString());
} catch (NumberFormatException e) {
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
}
}
@@ -1503,7 +1573,7 @@
return (Blob) obj;
} catch (ClassCastException e) {
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
}
}
@@ -1522,7 +1592,7 @@
return Boolean.parseBoolean(obj.toString());
} catch (Exception e) {
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
}
}
@@ -1541,7 +1611,7 @@
return Byte.parseByte(obj.toString());
} catch (NumberFormatException e) {
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
}
}
@@ -1560,7 +1630,7 @@
return (byte[]) obj;
} catch (ClassCastException e) {
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
}
}
@@ -1587,7 +1657,7 @@
return new StringReader(new String((char[]) obj));
}
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
}
public Reader getCharacterStream(String columnName) throws SQLException {
@@ -1605,7 +1675,7 @@
return (Clob) obj;
} catch (ClassCastException e) {
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
}
}
@@ -1619,7 +1689,7 @@
*/
if (cursorName == null) {
// rowset.14=Positioned updates not supported
- throw new SQLException(Messages.getString("rowset.14"));
+ throw new SQLException(Messages.getString("rowset.14")); //$NON-NLS-1$
}
return cursorName;
}
@@ -1638,10 +1708,10 @@
return new Date(((Timestamp) obj).getTime());
}
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
} catch (Exception e) {
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
}
}
@@ -1668,7 +1738,7 @@
return Double.parseDouble(obj.toString());
} catch (NumberFormatException e) {
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
}
}
@@ -1687,7 +1757,7 @@
return Float.parseFloat(obj.toString());
} catch (NumberFormatException e) {
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
}
}
@@ -1706,7 +1776,7 @@
return Integer.parseInt(obj.toString());
} catch (NumberFormatException e) {
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
}
}
@@ -1725,7 +1795,7 @@
return Long.parseLong(obj.toString());
} catch (NumberFormatException e) {
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
}
}
@@ -1740,11 +1810,11 @@
public Object getObject(int columnIndex) throws SQLException {
if (meta == null || currentRow == null) {
// rowset.7=Not a valid cursor
- throw new SQLException(Messages.getString("rowset.7"));
+ throw new SQLException(Messages.getString("rowset.7")); //$NON-NLS-1$
}
if (columnIndex <= 0 || columnIndex > columnCount) {
// sql.27=Invalid column index :{0}
- throw new SQLException(Messages.getString("sql.27", columnIndex));
+ throw new SQLException(Messages.getString("sql.27", columnIndex)); //$NON-NLS-1$
}
Object obj = currentRow.getObject(columnIndex);
if (obj == null) {
@@ -1780,7 +1850,7 @@
return (Ref) obj;
} catch (Exception e) {
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
}
}
@@ -1824,7 +1894,7 @@
return Short.parseShort(obj.toString());
} catch (NumberFormatException e) {
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
}
}
@@ -1848,7 +1918,7 @@
return obj.toString();
} catch (Exception e) {
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
}
}
@@ -1878,10 +1948,10 @@
return new Time(((Timestamp) obj).getTime());
}
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
} catch (Exception e) {
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
}
}
@@ -1913,7 +1983,7 @@
return Timestamp.valueOf(obj.toString());
} catch (Exception e) {
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
}
}
@@ -1942,7 +2012,7 @@
return (java.net.URL) obj;
} catch (Exception e) {
// rowset.10=Data Type Mismatch
- throw new SQLException(Messages.getString("rowset.10"));
+ throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
}
}
@@ -1950,6 +2020,7 @@
return getURL(getIndexByName(columnName));
}
+ @SuppressWarnings("deprecation")
public InputStream getUnicodeStream(int columnIndex) throws SQLException {
Object obj = getObject(columnIndex);
if (obj == null) {
@@ -2003,12 +2074,15 @@
}
}
if (!isValueSet) {
- // TODO add error message
- throw new SQLException();
+ // rowset.18=None column is updated
+ throw new SQLException(Messages.getString("rowset.18")); //$NON-NLS-1$
}
insertRow.setInsert();
rows.add(insertRow);
insertRow = null;
+ if (isNotifyListener) {
+ notifyRowChanged();
+ }
}
public boolean isAfterLast() throws SQLException {
@@ -2141,8 +2215,9 @@
checkValidRow();
if (isCursorOnInsert) {
// rowset.0=Not a valid position
- throw new SQLException(Messages.getString("rowset.0"));
+ throw new SQLException(Messages.getString("rowset.0")); //$NON-NLS-1$
}
+ currentRow.restoreOriginal();
}
public boolean relative(int moveRows) throws SQLException {
@@ -2228,7 +2303,7 @@
currentRow = insertRow;
}
- Class type = columnTypes[columnIndex - 1];
+ Class<?> type = columnTypes[columnIndex - 1];
if (type != null && !type.equals(String.class)
&& !type.equals(byte[].class)) {
// rowset.10=Data Type Mismatch
@@ -2280,7 +2355,7 @@
currentRow = insertRow;
}
- Class type = columnTypes[columnIndex - 1];
+ Class<?> type = columnTypes[columnIndex - 1];
if (type != null && !type.equals(byte[].class)) {
// rowset.10=Data Type Mismatch
throw new SQLException(Messages.getString("rowset.10")); //$NON-NLS-1$
@@ -2353,7 +2428,7 @@
currentRow = insertRow;
}
- Class type = columnTypes[columnIndex - 1];
+ Class<?> type = columnTypes[columnIndex - 1];
if (type != null && !type.equals(String.class)
&& !type.equals(byte[].class)) {
// rowset.10=Data Type Mismatch
@@ -2458,7 +2533,7 @@
throws SQLException {
checkValidRow();
checkColumnValid(columnIndex);
- Class type = columnTypes[columnIndex - 1];
+ Class<?> type = columnTypes[columnIndex - 1];
// ava.sql.Types.DECIMA or java.sql.Types.NUMERIC types
if (type.equals(BigDecimal.class)) {
/*
@@ -2501,13 +2576,18 @@
}
public void updateRow() throws SQLException {
- if ((currentRow == insertRow)
- || (getConcurrency() == (ResultSet.CONCUR_READ_ONLY))) {
- // TODO add error messages
- throw new SQLException();
+ if (isCursorOnInsert) {
+ // rowset.11=Illegal operation on an insert row
+ throw new SQLException(Messages.getString("rowset.11")); //$NON-NLS-1$
+ }
+ if (getConcurrency() == (ResultSet.CONCUR_READ_ONLY)) {
+ // rowset.17=The Result Set is CONCUR_READ_ONLY
+ throw new SQLException(Messages.getString("rowset.17")); //$NON-NLS-1$
}
currentRow.setUpdate();
- notifyRowChanged();
+ if (isNotifyListener) {
+ notifyRowChanged();
+ }
}
public void updateShort(int columnIndex, short x) throws SQLException {
@@ -2554,6 +2634,7 @@
* @param value
* the new value to be updated
*/
+ @SuppressWarnings("boxing")
private Object convertUpdateValue(int columnIndex, Object value)
throws SQLException {
@@ -2561,7 +2642,7 @@
return value;
}
- Class type = columnTypes[columnIndex - 1];
+ Class<?> type = columnTypes[columnIndex - 1];
/*
* TODO if type == null, the type mapping is not supported by Harmony
@@ -2714,6 +2795,43 @@
if (type.equals(BigDecimal.class)) {
return value;
+ }
+
+ if (type.equals(Date.class)) {
+ if (value instanceof Timestamp) {
+ Timestamp timestamp = (Timestamp) value;
+ return new Date(timestamp.getTime());
+ }
+
+ if (value instanceof String) {
+ return value;
+ }
+ }
+
+ if (type.equals(Time.class)) {
+ if (value instanceof Timestamp) {
+ Timestamp timestamp = (Timestamp) value;
+ return new Time(timestamp.getTime());
+ }
+
+ if (value instanceof String) {
+ return value;
+ }
+ }
+
+ if (type.equals(Timestamp.class)) {
+ if (value instanceof Date) {
+ Date date = (Date) value;
+ return new Timestamp(date.getTime());
+ }
+ if (value instanceof Time) {
+ Time time = (Time) value;
+ return new Timestamp(time.getTime());
+ }
+
+ if (value instanceof String) {
+ return value;
+ }
}
// rowset.10=Data Type Mismatch
Modified: harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/rowset/SyncResolverImpl.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/rowset/SyncResolverImpl.java?rev=638741&r1=638740&r2=638741&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/rowset/SyncResolverImpl.java (original)
+++ harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/rowset/SyncResolverImpl.java Wed Mar 19 01:14:45 2008
@@ -36,7 +36,6 @@
import java.util.List;
import java.util.Map;
-import javax.sql.RowSetMetaData;
import javax.sql.rowset.BaseRowSet;
import javax.sql.rowset.spi.SyncResolver;
@@ -163,7 +162,7 @@
}
}
// rowset.1=Not a valid column name
- throw new SQLException(Messages.getString("rowset.1"));
+ throw new SQLException(Messages.getString("rowset.1")); //$NON-NLS-1$
}
public void execute() throws SQLException {
Modified: harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetImplTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetImplTest.java?rev=638741&r1=638740&r2=638741&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetImplTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetImplTest.java Wed Mar 19 01:14:45 2008
@@ -181,6 +181,27 @@
assertEquals(DEFAULT_ROW_COUNT, crset.size());
// before populate should return 0
assertEquals(0, noInitialCrset.size());
+
+ crset.absolute(3);
+ assertFalse(crset.getShowDeleted());
+ crset.deleteRow();
+ assertEquals(DEFAULT_ROW_COUNT, crset.size());
+
+ crset = newNoInitialInstance();
+ rs = st.executeQuery("select * from USER_INFO");
+
+ crset.populate(rs);
+ crset.setShowDeleted(true);
+ assertTrue(crset.getShowDeleted());
+ assertEquals(DEFAULT_ROW_COUNT, crset.size());
+
+ crset.absolute(3);
+ crset.deleteRow();
+ assertEquals(DEFAULT_ROW_COUNT, crset.size());
+
+ crset.acceptChanges(conn);
+
+ assertEquals(DEFAULT_ROW_COUNT - 1, crset.size());
}
public void testAcceptChanges() throws SQLException {
@@ -314,8 +335,9 @@
Listener listener = new Listener(); // a class implements RowSetListener
crset.addRowSetListener(listener);
crset.absolute(3); // move to the third row for testing
- // TODO: when the cursor moved, notifyCursorMoved() should be called
- // assertEquals("cursorMoved", listener.getTag());
+ assertEquals(CachedRowSetListenerTest.EVENT_CURSOR_MOVED, listener
+ .getTag());
+ listener.clear();
CachedRowSet crsetShared = (CachedRowSet) crset.createShared();
assertEquals("testUsername", crsetShared.getUsername());
@@ -340,8 +362,10 @@
assertEquals("modify3", crsetShared.getString(2));
assertEquals("modify3", crset.getString(2));
crsetShared.updateRow();
+ listener.clear();
crsetShared.acceptChanges();
- assertEquals("rowSetChanged", listener.getTag());
+ assertEquals(CachedRowSetListenerTest.EVENT_ROWSET_CHANGED, listener
+ .getTag());
// when move the duplicate's cursor, the original shouldn't be affected
crsetShared.absolute(1);
@@ -350,7 +374,6 @@
}
public void testcreateCopyNoConstraints() throws Exception {
-
crset.setConcurrency(ResultSet.CONCUR_READ_ONLY);
crset.setType(ResultSet.TYPE_SCROLL_SENSITIVE);
crset.setEscapeProcessing(false);
@@ -365,6 +388,10 @@
crset.setMaxFieldSize(10);
crset.setFetchDirection(ResultSet.FETCH_UNKNOWN);
+ /*
+ * NOTICE: when run on RI, if add the listener first, then it will go
+ * wrong when call createCopySchema().It's said that clone failed.
+ */
CachedRowSet copy = crset.createCopyNoConstraints();
// default is ResultSet.CONCUR_UPDATABLE
@@ -391,9 +418,8 @@
// default is null
assertNull(copy.getTypeMap());
- if (crset.getKeyColumns() == null) {
- assertNull(copy.getKeyColumns());
- } else {
+ if (crset.getKeyColumns() != null && crset.getKeyColumns().length != 0) {
+
int[] keyColumns = crset.getKeyColumns();
int[] copyKeyColumns = copy.getKeyColumns();
@@ -413,31 +439,6 @@
assertEquals(crset.isLast(), copy.isLast());
assertEquals(crset.getRow(), copy.getRow());
- // TODO uncomment them after implemented
- // assertNotSame(crset.getWarnings(), copy.getWarnings());
- // assertEquals(crset.getStatement(), copy.getStatement());
- // try {
- // assertEquals(crset.getCursorName(), copy.getCursorName());
- // fail("Should throw SQLException");
- // } catch (SQLException e) {
- // // expected
- // }
- //
- // try {
- // assertEquals(crset.getMatchColumnIndexes(), copy
- // .getMatchColumnIndexes());
- // fail("Should throw SQLException");
- // } catch (SQLException e) {
- // // expected
- // }
- //
- // try {
- // assertEquals(crset.getMatchColumnNames(), copy
- // .getMatchColumnNames());
- // } catch (SQLException e) {
- // // expected
- // }
-
assertEquals(crset.isReadOnly(), copy.isReadOnly());
assertEquals(crset.size(), copy.size());
@@ -485,7 +486,12 @@
assertEquals(DERBY_URL, crset.getUrl());
assertNull(crset.getUsername());
assertTrue(crset.getEscapeProcessing());
- assertNull(crset.getKeyColumns());
+ if ("true".equals(System.getProperty("Testing Harmony"))) {
+ assertNotNull(crset.getKeyColumns());
+ assertEquals(0, crset.getKeyColumns().length);
+ } else {
+ assertNull(crset.getKeyColumns());
+ }
// set value
crset.setCommand("testCommand");
@@ -579,8 +585,6 @@
// compare the meta data between the duplicate and the original
assertNotSame(crset.getMetaData(), crsetCopySchema.getMetaData());
assertNotSame(crset.getOriginal(), crsetCopySchema.getOriginal());
- // assertNotSame(crset.getSyncProvider(), crsetCopySchema
- // .getSyncProvider());
assertEquals("USER_INFO", crset.getTableName());
assertEquals("USER_INFO", rsmdCopySchema.getTableName(1));
@@ -589,7 +593,12 @@
// check the primary key
// TODO: RI doesn't evalute the keyColumns. The value of
// crset.getKeyColumns() is null.
- assertEquals(crset.getKeyColumns(), crsetCopySchema.getKeyColumns());
+ if ("true".equals(System.getProperty("Testing Harmony"))) {
+ assertNotNull(crset.getKeyColumns());
+ assertEquals(0, crset.getKeyColumns().length);
+ } else {
+ assertNull(crset.getKeyColumns());
+ }
// check the attributes in the duplicate. These are supposed to be the
// same as the original
@@ -613,7 +622,7 @@
// TODO: in the Harmony implementation, need to call notifyRowSetChanged
// at the suitable place
// assertEquals("rowSetChanged", listener.getTag());
- listener.setTag(null);
+ listener.clear();
// the move of the original's cursor shouldn't affect the duplicate
crset.next();
assertNull(listener.getTag());
@@ -737,9 +746,7 @@
.getEscapeProcessing());
assertEquals(crset.getFetchDirection(), crsetCopy.getFetchDirection());
assertEquals(crset.getFetchSize(), crsetCopy.getFetchSize());
- if (crset.getKeyColumns() == null) {
- assertNull(crsetCopy.getKeyColumns());
- } else {
+ if (crset.getKeyColumns() != null && crset.getKeyColumns().length != 0) {
int[] keyColumns = crset.getKeyColumns();
int[] copyKeyColumns = crsetCopy.getKeyColumns();
@@ -853,7 +860,8 @@
CachedRowSet crsetCopy = crset.createCopy();
crsetCopy.execute();
- assertEquals(DEFAULT_COLUMN_COUNT, crsetCopy.getMetaData().getColumnCount());
+ assertEquals(DEFAULT_COLUMN_COUNT, crsetCopy.getMetaData()
+ .getColumnCount());
assertTrue(crsetCopy.next());
assertEquals("test3", crsetCopy.getString(2));
assertFalse(crsetCopy.next());
@@ -1185,7 +1193,16 @@
assertEquals(ResultSet.FETCH_FORWARD, noInitialCrset
.getFetchDirection());
assertEquals(0, noInitialCrset.getFetchSize());
- assertNull(noInitialCrset.getKeyColumns());
+ if ("true".equals(System.getProperty("Testing Harmony"))) {
+ try {
+ noInitialCrset.getKeyColumns();
+ fail("Should throw SQLException");
+ } catch (SQLException e) {
+ // expected
+ }
+ } else {
+ assertNull(noInitialCrset.getKeyColumns());
+ }
assertEquals(0, noInitialCrset.getMaxFieldSize());
assertEquals(0, noInitialCrset.getMaxRows());
@@ -2358,6 +2375,20 @@
noInitialCrset.refreshRow();
assertEquals(3, noInitialCrset.getInt(1));
assertEquals("test3", noInitialCrset.getString(2));
+
+ noInitialCrset.updateString(2, "update33");
+ noInitialCrset.refreshRow();
+ assertEquals("test3", noInitialCrset.getString(2));
+
+ noInitialCrset.updateString(2, "update33");
+ noInitialCrset.updateRow();
+ noInitialCrset.beforeFirst();
+ assertTrue(noInitialCrset.absolute(3));
+ assertEquals("update33", noInitialCrset.getString(2));
+ assertTrue(noInitialCrset.rowUpdated());
+ noInitialCrset.refreshRow();
+ assertEquals("test3", noInitialCrset.getString(2));
+ assertFalse(noInitialCrset.rowUpdated());
}
public void testToCollection() throws Exception {
@@ -2567,34 +2598,195 @@
}
}
- public class Listener implements RowSetListener, Cloneable {
+ public void testGetKeyColumns() throws Exception {
+ int[] columns = null;
+ /*
+ * TODO spec says SQLException should be thrown when CachedRowSet object
+ * is empty, while RI return null, Harmony follow spec
+ */
+ if ("true".equals(System.getProperty("Testing Harmony"))) {
+ try {
+ columns = noInitialCrset.getKeyColumns();
+ fail("Should throw SQLException");
+ } catch (SQLException e) {
+ // expected
+ }
+
+ } else {
+ columns = noInitialCrset.getKeyColumns();
+ assertNull(columns);
+ }
+
+ columns = crset.getKeyColumns();
+
+ /*
+ * TODO spec says empty array should be return when on key columns is
+ * setted, while RI return null, Harmony follow spec
+ */
+ if ("true".equals(System.getProperty("Testing Harmony"))) {
+ assertNotNull(columns);
+ assertEquals(0, columns.length);
+ } else {
+ assertNull(columns);
+ }
+
+ }
+
+ public void testSetKeyColumns() throws Exception {
+ try {
+ noInitialCrset.setKeyColumns(null);
+ fail("Should throw NullPointerException");
+ } catch (NullPointerException e) {
+ // expected
+ }
+
+ int[] columns = null;
+
+ noInitialCrset.setKeyColumns(new int[0]);
+ noInitialCrset.setKeyColumns(new int[] { 1, 100 });
- private String tag = null;
+ rs = st.executeQuery("select * from user_info");
- public void cursorMoved(RowSetEvent theEvent) {
- tag = "cursorMoved";
+ noInitialCrset.populate(rs);
+
+ /*
+ * populate doesn't initial keyColumns, it's not reasonable, but we
+ * follow RI here
+ */
+ columns = noInitialCrset.getKeyColumns();
+ assertNotNull(columns);
+ assertEquals(2, columns.length);
+ assertEquals(1, columns[0]);
+ assertEquals(100, columns[1]);
+
+ try {
+ crset.setKeyColumns(null);
+ fail("Should throw NullPointerException");
+ } catch (NullPointerException e) {
+ // expected
}
- public void rowChanged(RowSetEvent theEvent) {
- tag = "rowChanged";
+ crset.setKeyColumns(new int[0]);
+ columns = crset.getKeyColumns();
+ assertNotNull(columns);
+ assertEquals(0, columns.length);
+
+ try {
+ crset.setKeyColumns(new int[] { 1, 100 });
+ fail("Should throw SQLException");
+ } catch (SQLException e) {
+ // expected, Invalid column index 100
}
- public void rowSetChanged(RowSetEvent theEvent) {
- tag = "rowSetChanged";
+ crset.setKeyColumns(new int[] { 1, 2 });
+ columns = crset.getKeyColumns();
+ assertNotNull(columns);
+ assertEquals(2, columns.length);
+ assertEquals(1, columns[0]);
+ assertEquals(2, columns[1]);
+
+ try {
+ crset.getMatchColumnIndexes();
+ fail("Should throw SQLException");
+ } catch (SQLException e) {
+ // expected
+ }
+
+ crset.setMatchColumn(3);
+ int[] matchColumns = crset.getMatchColumnIndexes();
+ assertEquals(3, matchColumns[0]);
+ for (int i = 1; i < 10; ++i) {
+ assertEquals(-1, matchColumns[i]);
}
- public String getTag() {
- return tag;
+ crset.setKeyColumns(new int[] { 4, 5 });
+ columns = crset.getKeyColumns();
+ assertNotNull(columns);
+ assertEquals(2, columns.length);
+ assertEquals(4, columns[0]);
+ assertEquals(5, columns[1]);
+
+ // setKeyColumns doesn't effect match columns
+ matchColumns = crset.getMatchColumnIndexes();
+ assertEquals(3, matchColumns[0]);
+ for (int i = 1; i < 10; ++i) {
+ assertEquals(-1, matchColumns[i]);
+ }
+
+ int[] args = new int[] { 6, 7 };
+ crset.setKeyColumns(args);
+ columns = crset.getKeyColumns();
+ assertNotNull(columns);
+ assertEquals(2, columns.length);
+ assertEquals(6, columns[0]);
+ assertEquals(7, columns[1]);
+
+ assertNotSame(args, columns);
+
+ // getKeyColumns doesn't do clone
+ assertSame(crset.getKeyColumns(), crset.getKeyColumns());
+ columns = crset.getKeyColumns();
+ assertEquals(6, columns[0]);
+ assertEquals(7, columns[1]);
+
+ columns[1] = 8;
+
+ args = crset.getKeyColumns();
+ assertEquals(8, args[1]);
+
+ }
+}
+
+class Listener implements RowSetListener, Cloneable {
+
+ private String tag = null;
+
+ private boolean isPrint = false;
+
+ private int count = 0;
+
+ public void cursorMoved(RowSetEvent theEvent) {
+ if (isPrint) {
+ System.out.println("cursorMoved");
}
+ tag = CachedRowSetListenerTest.EVENT_CURSOR_MOVED;
+ count++;
+ }
- public void setTag(String tag) {
- this.tag = tag;
+ public void rowChanged(RowSetEvent theEvent) {
+ if (isPrint) {
+ System.out.println("rowChanged");
}
+ tag = CachedRowSetListenerTest.EVENT_ROW_CHANGED;
+ count++;
+ }
- public Listener clone() throws CloneNotSupportedException {
- Listener listener = (Listener) super.clone();
- listener.tag = tag;
- return listener;
+ public void rowSetChanged(RowSetEvent theEvent) {
+ if (isPrint) {
+ System.out.println("rowSetChanged");
}
+ tag = CachedRowSetListenerTest.EVENT_ROWSET_CHANGED;
+ count++;
+ }
+
+ public String getTag() {
+ return tag;
+ }
+
+ public void clear() {
+ tag = null;
+ }
+
+ public void setPrint(boolean isPrint) {
+ this.isPrint = isPrint;
+ }
+
+ public int getCount() {
+ return count;
+ }
+
+ public Listener clone() throws CloneNotSupportedException {
+ Listener listener = (Listener) super.clone();
+ return listener;
}
}
Added: harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetListenerTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetListenerTest.java?rev=638741&view=auto
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetListenerTest.java (added)
+++ harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetListenerTest.java Wed Mar 19 01:14:45 2008
@@ -0,0 +1,300 @@
+/*
+ * 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.apache.harmony.sql.tests.internal.rowset;
+
+public class CachedRowSetListenerTest extends CachedRowSetTestCase {
+
+ public static final String EVENT_CURSOR_MOVED = "cursorMoved";
+
+ public static final String EVENT_ROW_CHANGED = "rowChanged";
+
+ public static final String EVENT_ROWSET_CHANGED = "rowSetChanged";
+
+ public void testCursorMoved() throws Exception {
+ Listener listener = new Listener();
+ noInitialCrset = newNoInitialInstance();
+ noInitialCrset.addRowSetListener(listener);
+ assertNull(listener.getTag());
+
+ rs = st.executeQuery("SELECT * FROM USER_INFO");
+ noInitialCrset.populate(rs);
+
+ /*
+ * absolute() - cursorMoved
+ */
+ assertTrue(noInitialCrset.absolute(1));
+ assertEquals(EVENT_CURSOR_MOVED, listener.getTag());
+ listener.clear();
+
+ assertTrue(noInitialCrset.absolute(1));
+ assertEquals(EVENT_CURSOR_MOVED, listener.getTag());
+ listener.clear();
+
+ /*
+ * relative() - cursorMoved
+ */
+ assertTrue(noInitialCrset.relative(1));
+ assertEquals(EVENT_CURSOR_MOVED, listener.getTag());
+ listener.clear();
+
+ assertTrue(noInitialCrset.relative(1));
+ assertEquals(EVENT_CURSOR_MOVED, listener.getTag());
+ listener.clear();
+
+ /*
+ * next() - cursorMoved
+ */
+ assertTrue(noInitialCrset.next());
+ assertEquals(EVENT_CURSOR_MOVED, listener.getTag());
+ listener.clear();
+
+ /*
+ * previous() - cursorMoved
+ */
+ assertTrue(noInitialCrset.previous());
+ assertEquals(EVENT_CURSOR_MOVED, listener.getTag());
+ listener.clear();
+
+ /*
+ * first() - cursorMoved
+ */
+ assertTrue(noInitialCrset.first());
+ assertEquals(EVENT_CURSOR_MOVED, listener.getTag());
+ listener.clear();
+
+ /*
+ * last() - cursorMoved
+ */
+ assertTrue(noInitialCrset.last());
+ assertEquals(EVENT_CURSOR_MOVED, listener.getTag());
+ listener.clear();
+
+ assertTrue(noInitialCrset.last());
+ assertEquals(EVENT_CURSOR_MOVED, listener.getTag());
+ listener.clear();
+
+ /*
+ * beforeFirst() - cursorMoved
+ */
+ noInitialCrset.beforeFirst();
+ assertEquals(EVENT_CURSOR_MOVED, listener.getTag());
+ listener.clear();
+
+ noInitialCrset.beforeFirst();
+ assertEquals(EVENT_CURSOR_MOVED, listener.getTag());
+ listener.clear();
+
+ /*
+ * afterLast() - cursorMoved
+ */
+ noInitialCrset.afterLast();
+ assertEquals(EVENT_CURSOR_MOVED, listener.getTag());
+ listener.clear();
+ }
+
+ public void testRowChanged() throws Exception {
+ Listener listener = new Listener();
+ noInitialCrset = newNoInitialInstance();
+ noInitialCrset.addRowSetListener(listener);
+ assertNull(listener.getTag());
+
+ rs = st.executeQuery("SELECT * FROM USER_INFO");
+ noInitialCrset.populate(rs);
+
+ assertTrue(noInitialCrset.absolute(1));
+ listener.clear();
+ noInitialCrset.setOriginalRow();
+ assertNull(listener.getTag());
+
+ /*
+ * updateRow() - rowChanged
+ */
+ assertTrue(noInitialCrset.absolute(3));
+ listener.clear();
+ noInitialCrset.updateString(2, "abc");
+ assertNull(listener.getTag());
+ noInitialCrset.updateRow();
+ assertEquals(EVENT_ROW_CHANGED, listener.getTag());
+
+ assertTrue(noInitialCrset.next());
+ listener.clear();
+ noInitialCrset.updateRow();
+ assertEquals(EVENT_ROW_CHANGED, listener.getTag());
+ listener.clear();
+
+ noInitialCrset.setOriginalRow();
+ assertNull(listener.getTag());
+
+ /*
+ * deleteRow() - rowChanged
+ */
+ noInitialCrset.deleteRow();
+ assertEquals(EVENT_ROW_CHANGED, listener.getTag());
+
+ /*
+ * insertRow() - rowChanged
+ */
+ assertTrue(noInitialCrset.first());
+ listener.clear();
+ noInitialCrset.moveToInsertRow();
+ noInitialCrset.updateInt(1, 9);
+ noInitialCrset.updateString(2, "insert");
+ assertNull(listener.getTag());
+ noInitialCrset.insertRow();
+ assertEquals(EVENT_ROW_CHANGED, listener.getTag());
+ noInitialCrset.moveToCurrentRow();
+ listener.clear();
+
+ assertTrue(noInitialCrset.absolute(3));
+ listener.clear();
+ noInitialCrset.refreshRow();
+ noInitialCrset.updateString(2, "update3");
+ noInitialCrset.refreshRow();
+ assertNull(listener.getTag());
+ noInitialCrset.updateString(2, "update3");
+ noInitialCrset.updateRow();
+ listener.clear();
+ noInitialCrset.refreshRow();
+ assertNull(listener.getTag());
+
+ /*
+ * undoDelete() - rowChanged
+ */
+ crset.addRowSetListener(listener);
+ crset.setShowDeleted(true);
+ assertTrue(crset.absolute(3));
+ crset.deleteRow();
+ assertTrue(crset.rowDeleted());
+ assertTrue(crset.absolute(1));
+ assertTrue(crset.absolute(3));
+ assertEquals(3, crset.getInt(1));
+ assertTrue(crset.rowDeleted());
+ listener.clear();
+ crset.undoDelete();
+ assertEquals(EVENT_ROW_CHANGED, listener.getTag());
+ assertFalse(crset.rowDeleted());
+
+ /*
+ * undoUpdate() - rowChanged
+ */
+ assertTrue(crset.absolute(3));
+ crset.moveToInsertRow();
+ crset.updateInt(1, 10);
+ crset.updateString(2, "insert10");
+ crset.insertRow();
+ crset.moveToCurrentRow();
+ if ("true".equals(System.getProperty("Testing Harmony"))) {
+ assertTrue(crset.last());
+ } else {
+ assertTrue(crset.next());
+ }
+ assertEquals("insert10", crset.getString(2));
+ assertTrue(crset.rowInserted());
+ listener.clear();
+ crset.undoUpdate();
+ assertEquals(EVENT_ROW_CHANGED, listener.getTag());
+
+ /*
+ * undoInsert() - rowChanged
+ */
+ assertTrue(crset.absolute(3));
+ crset.moveToInsertRow();
+ crset.updateInt(1, 11);
+ crset.updateString(2, "insert11");
+ crset.insertRow();
+ crset.moveToCurrentRow();
+ if ("true".equals(System.getProperty("Testing Harmony"))) {
+ assertTrue(crset.last());
+ } else {
+ assertTrue(crset.next());
+ }
+ assertTrue(crset.rowInserted());
+ listener.clear();
+ crset.undoInsert();
+ assertEquals(EVENT_ROW_CHANGED, listener.getTag());
+ }
+
+ public void testRowSetChanged() throws Exception {
+ Listener listener = new Listener();
+ noInitialCrset = newNoInitialInstance();
+ noInitialCrset.addRowSetListener(listener);
+
+ rs = st.executeQuery("SELECT * FROM USER_INFO");
+ assertNull(listener.getTag());
+ /*
+ * populate() - rowSetChanged
+ */
+ noInitialCrset.populate(rs);
+ assertEquals(EVENT_ROWSET_CHANGED, listener.getTag());
+ listener.clear();
+
+ /*
+ * acceptChanges(Connection) - rowSetChanged
+ */
+ noInitialCrset.acceptChanges(conn);
+ assertEquals(EVENT_ROWSET_CHANGED, listener.getTag());
+ listener.clear();
+
+ /*
+ * acceptChanges() - rowSetChanged
+ */
+ noInitialCrset.setUrl(DERBY_URL);
+ noInitialCrset.setCommand("SELECT * FROM USER_INFO");
+ noInitialCrset.acceptChanges();
+ assertEquals(EVENT_ROWSET_CHANGED, listener.getTag());
+ listener.clear();
+
+ /*
+ * execute() - rowSetChanged
+ */
+ noInitialCrset.execute();
+ assertEquals(EVENT_ROWSET_CHANGED, listener.getTag());
+ listener.clear();
+
+ /*
+ * execute(Connection) - rowSetChanged
+ */
+ noInitialCrset.execute(conn);
+ assertEquals(EVENT_ROWSET_CHANGED, listener.getTag());
+ listener.clear();
+
+ assertTrue(noInitialCrset.first());
+ listener.clear();
+ noInitialCrset.getOriginalRow();
+ assertNull(listener.getTag());
+
+ /*
+ * nextPage() and previousPage() - rowSetChanged. See
+ * CachedRowSetPagingTest.
+ */
+
+ /*
+ * restoreOriginal() - rowSetChanged
+ */
+ noInitialCrset.restoreOriginal();
+ assertEquals(EVENT_ROWSET_CHANGED, listener.getTag());
+ listener.clear();
+
+ /*
+ * release() - rowSetChanged
+ */
+ noInitialCrset.release();
+ assertEquals(EVENT_ROWSET_CHANGED, listener.getTag());
+ listener.clear();
+ }
+}
Propchange: harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetListenerTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetPagingTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetPagingTest.java?rev=638741&r1=638740&r2=638741&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetPagingTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetPagingTest.java Wed Mar 19 01:14:45 2008
@@ -31,6 +31,8 @@
public void testPagingInMemory() throws Exception {
insertMoreData(10);
crset = newNoInitialInstance();
+ Listener listener = new Listener();
+ crset.addRowSetListener(listener);
st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
@@ -52,7 +54,10 @@
assertEquals(i, crset.getInt(1));
}
+ listener.clear();
assertTrue(crset.nextPage());
+ assertEquals(CachedRowSetListenerTest.EVENT_ROWSET_CHANGED, listener
+ .getTag());
crset.beforeFirst();
@@ -71,6 +76,8 @@
insertMoreData(4);
crset = newNoInitialInstance();
+ Listener listener = new Listener();
+ crset.addRowSetListener(listener);
st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
@@ -118,9 +125,14 @@
assertFalse(crset.next());
assertTrue(crset.isAfterLast());
+ listener.clear();
assertFalse(crset.nextPage());
+ assertNull(listener.getTag());
+ listener.clear();
assertTrue(crset.previousPage());
+ assertEquals(CachedRowSetListenerTest.EVENT_ROWSET_CHANGED, listener
+ .getTag());
if (!"true".equals(System.getProperty("Testing Harmony"))) {
// RI need previousPage one more time
Modified: harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetTestCase.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetTestCase.java?rev=638741&r1=638740&r2=638741&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetTestCase.java (original)
+++ harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetTestCase.java Wed Mar 19 01:14:45 2008
@@ -256,4 +256,7 @@
crset.setUrl(DERBY_URL);
}
+ public void testTestCase() throws Exception {
+ // do nothing
+ }
}
Modified: harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetUpdateTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetUpdateTest.java?rev=638741&r1=638740&r2=638741&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetUpdateTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/sql/src/test/java/org/apache/harmony/sql/tests/internal/rowset/CachedRowSetUpdateTest.java Wed Mar 19 01:14:45 2008
@@ -169,6 +169,8 @@
public void testCancelRowUpdates() throws Exception {
noInitialCrset = newNoInitialInstance();
+ Listener listener = new Listener();
+ noInitialCrset.addRowSetListener(listener);
try {
noInitialCrset.cancelRowUpdates();
fail("should throw exception");
@@ -214,7 +216,9 @@
assertTrue(noInitialCrset.absolute(3));
noInitialCrset.updateString(2, "update3");
// call cancelRowUpdates() before updateRow(), no effect here
+ listener.clear();
noInitialCrset.cancelRowUpdates();
+ assertNull(listener.getTag());
assertEquals("update3", noInitialCrset.getString(2));
noInitialCrset.updateRow();
noInitialCrset.acceptChanges(conn);
@@ -226,7 +230,11 @@
noInitialCrset.updateRow();
assertEquals("update4", noInitialCrset.getString(2));
// call cancelRowUpdates() after updateRow(), it works here
+
+ listener.clear();
noInitialCrset.cancelRowUpdates();
+ assertEquals(CachedRowSetListenerTest.EVENT_ROW_CHANGED, listener
+ .getTag());
assertEquals("test4", noInitialCrset.getString(2));
noInitialCrset.acceptChanges(conn);
assertEquals("test4", noInitialCrset.getString(2));
@@ -841,7 +849,24 @@
crset.updateBigDecimal(2, new BigDecimal(12));
assertEquals(new BigDecimal(12).toString(), crset.getObject(2));
-
+
+ crset.updateLong(3, 444423L);
+ crset.updateBigDecimal(4, new BigDecimal(12));
+ crset.updateBigDecimal(5, new BigDecimal(23));
+ crset.updateLong(6, 33);
+ crset.updateFloat(7, 4.8F);
+ crset.updateFloat(8, 4.888F);
+ crset.updateDouble(9, 4.9999);
+ crset.updateDate(10, new Date(965324512));
+ crset.updateTime(11, new Time(452368512));
+ crset.updateTimestamp(12, new Timestamp(874532105));
+ }
+
+ public void testUpdateDate() throws Exception {
+ crset.moveToInsertRow();
+
+ crset.updateInt(1, 50);
+ crset.updateString(2, "test100");
crset.updateLong(3, 444423L);
crset.updateBigDecimal(4, new BigDecimal(12));
crset.updateBigDecimal(5, new BigDecimal(23));
@@ -849,8 +874,155 @@
crset.updateFloat(7, 4.8F);
crset.updateFloat(8, 4.888F);
crset.updateDouble(9, 4.9999);
+
crset.updateDate(10, new Date(965324512));
+ try {
+ crset.updateInt(10, 12345);
+ fail("Should throw SQLException");
+ } catch (SQLException e) {
+ // expected, Data Type Mismatch
+ }
+
+ try {
+ crset.updateLong(10, 123456789L);
+ fail("Should throw SQLException");
+ } catch (SQLException e) {
+ // expected, Data Type Mismatch
+ }
+
+ try {
+ crset.updateDouble(10, 123456789.2398);
+ fail("Should throw SQLException");
+ } catch (SQLException e) {
+ // expected, Data Type Mismatch
+ }
+
+ try {
+ crset.updateTime(10, new Time(452368512));
+ fail("Should throw SQLException");
+ } catch (SQLException e) {
+ // expected, Data Type Mismatch
+ }
+
+ crset.updateString(10, "test");
+ assertTrue(crset.getObject(10) instanceof String);
+ assertEquals("test", crset.getObject(10));
+
+ crset.updateTimestamp(10, new Timestamp(874532105));
+ assertTrue(crset.getObject(10) instanceof Date);
+ assertEquals(new Timestamp(874532105).getTime(), crset.getDate(10)
+ .getTime());
+
crset.updateTime(11, new Time(452368512));
crset.updateTimestamp(12, new Timestamp(874532105));
+ }
+
+ public void testUpdateTime() throws Exception {
+ crset.moveToInsertRow();
+
+ crset.updateInt(1, 50);
+ crset.updateString(2, "test100");
+ crset.updateLong(3, 444423L);
+ crset.updateBigDecimal(4, new BigDecimal(12));
+ crset.updateBigDecimal(5, new BigDecimal(23));
+ crset.updateLong(6, 33);
+ crset.updateFloat(7, 4.8F);
+ crset.updateFloat(8, 4.888F);
+ crset.updateDouble(9, 4.9999);
+ crset.updateDate(10, new Date(965324512));
+
+ crset.updateTime(11, new Time(452368512));
+
+ try {
+ crset.updateInt(11, 12345);
+ fail("Should throw SQLException");
+ } catch (SQLException e) {
+ // expected, Data Type Mismatch
+ }
+
+ try {
+ crset.updateLong(11, 123456789L);
+ fail("Should throw SQLException");
+ } catch (SQLException e) {
+ // expected, Data Type Mismatch
+ }
+
+ try {
+ crset.updateDouble(11, 123456789.2398);
+ fail("Should throw SQLException");
+ } catch (SQLException e) {
+ // expected, Data Type Mismatch
+ }
+
+ try {
+ crset.updateDate(11, new Date(452368512));
+ fail("Should throw SQLException");
+ } catch (SQLException e) {
+ // expected, Data Type Mismatch
+ }
+
+ crset.updateString(11, "test");
+ assertTrue(crset.getObject(11) instanceof String);
+ assertEquals("test", crset.getObject(11));
+
+ crset.updateTimestamp(11, new Timestamp(874532105));
+ assertTrue(crset.getObject(11) instanceof Time);
+ assertEquals(new Timestamp(874532105).getTime(), crset.getTime(11)
+ .getTime());
+
+ crset.updateTimestamp(12, new Timestamp(874532105));
+ }
+
+ public void testUpdateTimestamp() throws Exception {
+ crset.moveToInsertRow();
+
+ crset.updateInt(1, 50);
+ crset.updateString(2, "test100");
+ crset.updateLong(3, 444423L);
+ crset.updateBigDecimal(4, new BigDecimal(12));
+ crset.updateBigDecimal(5, new BigDecimal(23));
+ crset.updateLong(6, 33);
+ crset.updateFloat(7, 4.8F);
+ crset.updateFloat(8, 4.888F);
+ crset.updateDouble(9, 4.9999);
+ crset.updateDate(10, new Date(965324512));
+ crset.updateTime(11, new Time(452368512));
+
+ crset.updateTimestamp(12, new Timestamp(874532105));
+
+ try {
+ crset.updateInt(12, 12345);
+ fail("Should throw SQLException");
+ } catch (SQLException e) {
+ // expected, Data Type Mismatch
+ }
+
+ try {
+ crset.updateLong(12, 123456789L);
+ fail("Should throw SQLException");
+ } catch (SQLException e) {
+ // expected, Data Type Mismatch
+ }
+
+ try {
+ crset.updateDouble(12, 123456789.2398);
+ fail("Should throw SQLException");
+ } catch (SQLException e) {
+ // expected, Data Type Mismatch
+ }
+
+ crset.updateString(12, "test");
+ assertTrue(crset.getObject(12) instanceof String);
+ assertEquals("test", crset.getObject(12));
+
+ crset.updateDate(12, new Date(452368512));
+ assertTrue(crset.getObject(12) instanceof Timestamp);
+ assertEquals(new Date(452368512).getTime(), crset.getTimestamp(12)
+ .getTime());
+
+ crset.updateTime(12, new Time(874532105));
+ assertTrue(crset.getObject(12) instanceof Timestamp);
+ assertEquals(new Timestamp(874532105).getTime(), crset.getTimestamp(12)
+ .getTime());
}
}