Hi Roger
Thank you for the feedback
On Nov 24, 2015, at 4:11 PM, Roger Riggs <roger.ri...@oracle.com
<mailto:roger.ri...@oracle.com>> wrote:
Hi Lance,
Statement.java:
- "contains a {@code null} character or double quote, and is not a
simple SQL identifier."
The "," is not needed and changes the semantics if it is present.
+1518:
- "The string is between 1 and 128 characters in length"
OK changed to
* <li>The string is between 1 and 128 characters in length
inclusive</li>
You might want to add the word inclusive, otherwise I interpret the
length to be value >=2 and <= 127.
The rest is fine.
Here is the change:
-------
ljanders% hg diff src/java.sql/share/classes/java/sql/Statement.java
diff -r b39bfadab299 src/java.sql/share/classes/java/sql/Statement.java
--- a/src/java.sql/share/classes/java/sql/Statement.javaSat Nov 14
11:00:40 2015 +0800
+++ b/src/java.sql/share/classes/java/sql/Statement.javaTue Nov 24
17:16:48 2015 -0500
@@ -1397,9 +1397,10 @@
* @param val a character string
* @return A string enclosed by single quotes with every single quote
* converted to two single quotes
- * @throws NullPointerException if val is null
+ * @throws NullPointerException if val is {@code null}
+ * @throws SQLException if a database access error occurs
*/
- default String enquoteLiteral(String val) {
+ default String enquoteLiteral(String val) throws SQLException {
return "'" + val.replace("'", "''") + "'";
}
@@ -1437,7 +1438,7 @@
*
* The default implementation will throw a {@code SQLException} if:
* <ul>
- * <li>{@code identifier} contains a null character or double
quote, and is not
+ * <li>{@code identifier} contains a {@code null} character or
double quote and is not
* a simple SQL identifier.</li>
* <li>The length of {@code identifier} is less than 1 or greater
than 128 characters
* </ul>
@@ -1501,14 +1502,14 @@
* @throws SQLException if identifier is not a valid identifier
* @throws SQLFeatureNotSupportedException if the datasource does
not support
* delimited identifiers
- * @throws NullPointerException if identifier is null
+ * @throws NullPointerException if identifier is {@code null}
*/
default String enquoteIdentifier(String identifier, boolean
alwaysQuote) throws SQLException {
int len = identifier.length();
if (len < 1 || len > 128) {
throw new SQLException("Invalid name");
}
- if
(Pattern.compile("[\\p{Alpha}][\\p{Alnum}_]+").matcher(identifier).matches())
{
+ if
(Pattern.compile("[\\p{Alpha}][\\p{Alnum}_]*").matcher(identifier).matches())
{
return alwaysQuote ? "\"" + identifier + "\"" : identifier;
}
if (identifier.matches("^\".+\"$")) {
@@ -1520,4 +1521,65 @@
throw new SQLException("Invalid name");
}
}
+
+ /**
+ * Retrieves whether {@code identifier} is a simple SQL identifier.
+ *
+ * @implSpec The default implementation uses the following
criteria to
+ * determine a valid simple SQL identifier:
+ * <ul>
+ * <li>The string is not enclosed in double quotes</li>
+ * <li>The first character is an alphabetic character from a
through z, or
+ * from A through Z</li>
+ * <li>The string only contains alphanumeric characters or the
character
+ * "_"</li>
+ * <li>The string is between 1 and 128 characters in length
inclusive</li>
+ * </ul>
+ *
+ * <blockquote>
+ * <table border = 1 cellspacing=0 cellpadding=5 >
+ * <caption>Examples of the conversion:</caption>
+ * <tr>
+ * <th>identifier</th>
+ * <th>Simple Identifier</th>
+ *
+ * <tr>
+ * <td align='center'>Hello</td>
+ * <td align='center'>true</td>
+ * </tr>
+ * <tr>
+ * <td align='center'>G'Day</td>
+ * <td align='center'>false</td>
+ * </tr>
+ * <tr>
+ * <td align='center'>"Bruce Wayne"</td>
+ * <td align='center'>false</td>
+ * </tr>
+ * <tr>
+ * <td align='center'>GoodDay$</td>
+ * <td align='center'>false</td>
+ * </tr>
+ * <tr>
+ * <td align='center'>Hello"World</td>
+ * <td align='center'>false</td>
+ * </tr>
+ * <tr>
+ * <td align='center'>"Hello"World"</td>
+ * <td align='center'>false</td>
+ * </tr>
+ * </table>
+ * </blockquote>
+ * @implNote JDBC driver implementations may need to provide
their own
+ * implementation of this method in order to meet the
requirements of the
+ * underlying datasource.
+ * @param identifier a SQL identifier
+ * @return true if a simple SQL identifier, false otherwise
+ * @throws NullPointerException if identifier is {@code null}
+ * @throws SQLException if a database access error occurs
+ */
+ default boolean isSimpleIdentifier(String identifier) throws
SQLException {
+ int len = identifier.length();
+ return len >= 1 && len <= 128
+ &&
Pattern.compile("[\\p{Alpha}][\\p{Alnum}_]*").matcher(identifier).matches();
+ }
}
-------
Roger
On 11/24/2015 2:48 PM, Lance Andersen wrote:
Hi,
Please provide a review for
http://cr.openjdk.java.net/~lancea/8143165/webrev.00/
<http://cr.openjdk.java.net/%7Elancea/8143165/webrev.00/>. This
adds Statement.isSimpleIdentifier, adds a throws SQLException to
Statement.enquoteLiteral and includes a few additional tests
Best
Lance
Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037
Oracle Java Engineering
1 Network Drive
Burlington, MA 01803
lance.ander...@oracle.com <mailto:lance.ander...@oracle.com>
<http://oracle.com/us/design/oracle-email-sig-198324.gif>
<http://oracle.com/us/design/oracle-email-sig-198324.gif><http://oracle.com/us/design/oracle-email-sig-198324.gif>
<http://oracle.com/us/design/oracle-email-sig-198324.gif>Lance
Andersen| Principal Member of Technical Staff | +1.781.442.2037
Oracle Java Engineering
1 Network Drive
Burlington, MA 01803
lance.ander...@oracle.com <mailto:lance.ander...@oracle.com>