monetdb-java: default - Corrected implementation of java.sql.Wra...

2022-01-27 Thread Martin van Dinther
Changeset: 8e57d20b5e80 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/8e57d20b5e80
Added Files:
tests/Test_Wrapper.java
Modified Files:
ChangeLog
src/main/java/nl/cwi/monetdb/jdbc/MonetWrapper.java
tests/build.xml
Branch: default
Log Message:

Corrected implementation of java.sql.Wrapper methods isWrapperFor() and 
unwrap().
They now properly return expected results instead of always return false or 
throw an SQLException.
Added test program Test_Wrapper.java


diffs (276 lines):

diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,11 @@
 # ChangeLog file for java
 # This file is updated with Maddlog
 
+* Thu Oct 13 2016 Martin van Dinther 
+- Corrected implementation of java.sql.Wrapper methods isWrapperFor()
+  and unwrap().  They now properly return expected results instead of
+  always return false or throw an SQLException.
+
 * Thu Oct  6 2016 Martin van Dinther 
 - Corrected return values of DatabaseMetaData methods nullsAreSortedHigh(),
   nullsAreSortedLow(), getMaxCursorNameLength(), getMaxProcedureNameLength(),
diff --git a/src/main/java/nl/cwi/monetdb/jdbc/MonetWrapper.java 
b/src/main/java/nl/cwi/monetdb/jdbc/MonetWrapper.java
--- a/src/main/java/nl/cwi/monetdb/jdbc/MonetWrapper.java
+++ b/src/main/java/nl/cwi/monetdb/jdbc/MonetWrapper.java
@@ -8,66 +8,71 @@
 
 package nl.cwi.monetdb.jdbc;
 
-import java.sql.*;
+import java.sql.SQLException;
 
 /**
- * A Wrapper class that implements nothing.
- * 
- * This Class is used to simply provide JDBC4 Wrapper functions, for as
- * long as we don't really understand that they are for and what they
- * are supposed to do.  Hence the implementations are very stupid and
- * non-useful, ignoring any argument and claiming stuff doesn't work, or
- * won't work out.
+ * A Wrapper class which provide the ability to retrieve the delegate instance
+ * when the instance in question is in fact a proxy class.
  *
- * @author Fabian Groffen
- * @version 1.0
+ * The wrapper pattern is employed by many JDBC driver implementations to 
provide
+ * extensions beyond the traditional JDBC API that are specific to a data 
source.
+ * Developers may wish to gain access to these resources that are wrapped (the 
delegates)
+ * as proxy class instances representing the the actual resources.
+ * This class contains a standard mechanism to access these wrapped resources
+ * represented by their proxy, to permit direct access to the resource 
delegates.
+ *
+ * @author Fabian Groffen, Martin van Dinther
+ * @version 1.1
  */
-public class MonetWrapper implements Wrapper {
+public class MonetWrapper implements java.sql.Wrapper {
/**
 * Returns true if this either implements the interface argument or
 * is directly or indirectly a wrapper for an object that does.
 * Returns false otherwise. If this implements the interface then
 * return true, else if this is a wrapper then return the result of
-* recursively calling isWrapperFor on the wrapped object. If this
-* does not implement the interface and is not a wrapper, return
+* recursively calling isWrapperFor on the wrapped object.
+* If this does not implement the interface and is not a wrapper, return
 * false. This method should be implemented as a low-cost operation
-* compared to unwrap so that callers can use this method to avoid
-* expensive unwrap calls that may fail. If this method returns true
-* then calling unwrap with the same argument should succeed.
+* compared to unwrap so that callers can use this method 
to avoid
+* expensive unwrap calls that may fail.
+* If this method returns true then calling unwrap with 
the same argument should succeed.
 *
 * @param iface a Class defining an interface.
-* @return true if this implements the interface or directly or
-* indirectly wraps an object that does.
-* @throws SQLException if an error occurs while determining
-* whether this is a wrapper for an object with the given
-* interface.
+* @return true if this implements the interface or directly or 
indirectly wraps an object that does.
+* @throws SQLException if an error occurs while determining whether 
this is a wrapper
+*  for an object with the given interface.
+* @since 1.6
 */
@Override
public boolean isWrapperFor(Class iface) throws SQLException {
-   return false;
+   return iface != null && iface.isAssignableFrom(getClass());
}
 
/**
 * Returns an object that implements the given interface to allow
-* access to non-standard methods, or standard methods not exposed
-* by the proxy. If the receiver implements the interface then the
-* result is the receiver or a proxy for the receiver. If the
-* recei

monetdb-java: default - Corrected implementation of java.sql.Wra...

2016-10-13 Thread Martin van Dinther
Changeset: 8e57d20b5e80 for monetdb-java
URL: http://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=8e57d20b5e80
Added Files:
tests/Test_Wrapper.java
Modified Files:
ChangeLog
src/main/java/nl/cwi/monetdb/jdbc/MonetWrapper.java
tests/build.xml
Branch: default
Log Message:

Corrected implementation of java.sql.Wrapper methods isWrapperFor() and 
unwrap().
They now properly return expected results instead of always return false or 
throw an SQLException.
Added test program Test_Wrapper.java


diffs (276 lines):

diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,11 @@
 # ChangeLog file for java
 # This file is updated with Maddlog
 
+* Thu Oct 13 2016 Martin van Dinther 
+- Corrected implementation of java.sql.Wrapper methods isWrapperFor()
+  and unwrap().  They now properly return expected results instead of
+  always return false or throw an SQLException.
+
 * Thu Oct  6 2016 Martin van Dinther 
 - Corrected return values of DatabaseMetaData methods nullsAreSortedHigh(),
   nullsAreSortedLow(), getMaxCursorNameLength(), getMaxProcedureNameLength(),
diff --git a/src/main/java/nl/cwi/monetdb/jdbc/MonetWrapper.java 
b/src/main/java/nl/cwi/monetdb/jdbc/MonetWrapper.java
--- a/src/main/java/nl/cwi/monetdb/jdbc/MonetWrapper.java
+++ b/src/main/java/nl/cwi/monetdb/jdbc/MonetWrapper.java
@@ -8,66 +8,71 @@
 
 package nl.cwi.monetdb.jdbc;
 
-import java.sql.*;
+import java.sql.SQLException;
 
 /**
- * A Wrapper class that implements nothing.
- * 
- * This Class is used to simply provide JDBC4 Wrapper functions, for as
- * long as we don't really understand that they are for and what they
- * are supposed to do.  Hence the implementations are very stupid and
- * non-useful, ignoring any argument and claiming stuff doesn't work, or
- * won't work out.
+ * A Wrapper class which provide the ability to retrieve the delegate instance
+ * when the instance in question is in fact a proxy class.
  *
- * @author Fabian Groffen
- * @version 1.0
+ * The wrapper pattern is employed by many JDBC driver implementations to 
provide
+ * extensions beyond the traditional JDBC API that are specific to a data 
source.
+ * Developers may wish to gain access to these resources that are wrapped (the 
delegates)
+ * as proxy class instances representing the the actual resources.
+ * This class contains a standard mechanism to access these wrapped resources
+ * represented by their proxy, to permit direct access to the resource 
delegates.
+ *
+ * @author Fabian Groffen, Martin van Dinther
+ * @version 1.1
  */
-public class MonetWrapper implements Wrapper {
+public class MonetWrapper implements java.sql.Wrapper {
/**
 * Returns true if this either implements the interface argument or
 * is directly or indirectly a wrapper for an object that does.
 * Returns false otherwise. If this implements the interface then
 * return true, else if this is a wrapper then return the result of
-* recursively calling isWrapperFor on the wrapped object. If this
-* does not implement the interface and is not a wrapper, return
+* recursively calling isWrapperFor on the wrapped object.
+* If this does not implement the interface and is not a wrapper, return
 * false. This method should be implemented as a low-cost operation
-* compared to unwrap so that callers can use this method to avoid
-* expensive unwrap calls that may fail. If this method returns true
-* then calling unwrap with the same argument should succeed.
+* compared to unwrap so that callers can use this method 
to avoid
+* expensive unwrap calls that may fail.
+* If this method returns true then calling unwrap with 
the same argument should succeed.
 *
 * @param iface a Class defining an interface.
-* @return true if this implements the interface or directly or
-* indirectly wraps an object that does.
-* @throws SQLException if an error occurs while determining
-* whether this is a wrapper for an object with the given
-* interface.
+* @return true if this implements the interface or directly or 
indirectly wraps an object that does.
+* @throws SQLException if an error occurs while determining whether 
this is a wrapper
+*  for an object with the given interface.
+* @since 1.6
 */
@Override
public boolean isWrapperFor(Class iface) throws SQLException {
-   return false;
+   return iface != null && iface.isAssignableFrom(getClass());
}
 
/**
 * Returns an object that implements the given interface to allow
-* access to non-standard methods, or standard methods not exposed
-* by the proxy. If the receiver implements the interface then the
-* result is the receiver or a proxy for the receiver. If the
-