You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by kr...@apache.org on 2016/04/20 17:04:28 UTC
lucene-solr:branch_6x: SOLR-8809: Implement
Connection.prepareStatement
Repository: lucene-solr
Updated Branches:
refs/heads/branch_6x 0ee231986 -> 6276fe5ec
SOLR-8809: Implement Connection.prepareStatement
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/6276fe5e
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/6276fe5e
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/6276fe5e
Branch: refs/heads/branch_6x
Commit: 6276fe5ec7bcbdd30e30059391707084b9c8e989
Parents: 0ee2319
Author: Kevin Risden <kr...@apache.org>
Authored: Tue Apr 19 13:15:23 2016 -0500
Committer: Kevin Risden <kr...@apache.org>
Committed: Wed Apr 20 10:03:54 2016 -0500
----------------------------------------------------------------------
solr/CHANGES.txt | 2 +
.../client/solrj/io/sql/ConnectionImpl.java | 6 +-
.../solrj/io/sql/PreparedStatementImpl.java | 394 +++++++++++++++++++
.../solr/client/solrj/io/sql/StatementImpl.java | 10 +-
.../solr/client/solrj/io/sql/JdbcTest.java | 32 ++
5 files changed, 438 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6276fe5e/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 672a9b7..40dde9e 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -71,6 +71,8 @@ New Features
* SOLR-8349: Allow sharing of large in memory data structures across cores (Gus Heck, noble)
+* SOLR-8809: Implement Connection.prepareStatement (Kevin Risden)
+
Bug Fixes
----------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6276fe5e/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/ConnectionImpl.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/ConnectionImpl.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/ConnectionImpl.java
index aa78e14..5139527 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/ConnectionImpl.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/ConnectionImpl.java
@@ -88,17 +88,17 @@ class ConnectionImpl implements Connection {
@Override
public PreparedStatement prepareStatement(String sql) throws SQLException {
- return null;
+ return new PreparedStatementImpl(this, sql);
}
@Override
public CallableStatement prepareCall(String sql) throws SQLException {
- return null;
+ throw new UnsupportedOperationException();
}
@Override
public String nativeSQL(String sql) throws SQLException {
- return null;
+ throw new UnsupportedOperationException();
}
@Override
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6276fe5e/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/PreparedStatementImpl.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/PreparedStatementImpl.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/PreparedStatementImpl.java
new file mode 100644
index 0000000..b3e7c9e
--- /dev/null
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/PreparedStatementImpl.java
@@ -0,0 +1,394 @@
+/*
+ * 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.solr.client.solrj.io.sql;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.net.URL;
+import java.sql.Array;
+import java.sql.Blob;
+import java.sql.Clob;
+import java.sql.Date;
+import java.sql.NClob;
+import java.sql.ParameterMetaData;
+import java.sql.PreparedStatement;
+import java.sql.Ref;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.RowId;
+import java.sql.SQLException;
+import java.sql.SQLXML;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.Calendar;
+
+class PreparedStatementImpl extends StatementImpl implements PreparedStatement {
+ private final String sql;
+
+ PreparedStatementImpl(ConnectionImpl connection, String sql) {
+ super(connection);
+ this.sql = sql;
+ }
+
+ @Override
+ public ResultSet executeQuery() throws SQLException {
+ return super.executeQuery(this.sql);
+ }
+
+ @Override
+ public int executeUpdate() throws SQLException {
+ return super.executeUpdate(this.sql);
+ }
+
+ @Override
+ public boolean execute() throws SQLException {
+ return super.execute(this.sql);
+ }
+
+ @Override
+ public void clearParameters() throws SQLException {
+
+ }
+
+ @Override
+ public ResultSetMetaData getMetaData() throws SQLException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public ParameterMetaData getParameterMetaData() throws SQLException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void addBatch() throws SQLException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void setNull(int parameterIndex, int sqlType) throws SQLException {
+
+ }
+
+ @Override
+ public void setBoolean(int parameterIndex, boolean x) throws SQLException {
+
+ }
+
+ @Override
+ public void setByte(int parameterIndex, byte x) throws SQLException {
+
+ }
+
+ @Override
+ public void setShort(int parameterIndex, short x) throws SQLException {
+
+ }
+
+ @Override
+ public void setInt(int parameterIndex, int x) throws SQLException {
+
+ }
+
+ @Override
+ public void setLong(int parameterIndex, long x) throws SQLException {
+
+ }
+
+ @Override
+ public void setFloat(int parameterIndex, float x) throws SQLException {
+
+ }
+
+ @Override
+ public void setDouble(int parameterIndex, double x) throws SQLException {
+
+ }
+
+ @Override
+ public void setBigDecimal(int parameterIndex, BigDecimal x) throws SQLException {
+
+ }
+
+ @Override
+ public void setString(int parameterIndex, String x) throws SQLException {
+
+ }
+
+ @Override
+ public void setBytes(int parameterIndex, byte[] x) throws SQLException {
+
+ }
+
+ @Override
+ public void setDate(int parameterIndex, Date x) throws SQLException {
+
+ }
+
+ @Override
+ public void setTime(int parameterIndex, Time x) throws SQLException {
+
+ }
+
+ @Override
+ public void setTimestamp(int parameterIndex, Timestamp x) throws SQLException {
+
+ }
+
+ @Override
+ public void setAsciiStream(int parameterIndex, InputStream x, int length) throws SQLException {
+
+ }
+
+ @Override
+ public void setUnicodeStream(int parameterIndex, InputStream x, int length) throws SQLException {
+
+ }
+
+ @Override
+ public void setBinaryStream(int parameterIndex, InputStream x, int length) throws SQLException {
+
+ }
+
+ @Override
+ public void setObject(int parameterIndex, Object x, int targetSqlType) throws SQLException {
+
+ }
+
+ @Override
+ public void setObject(int parameterIndex, Object x) throws SQLException {
+
+ }
+
+ @Override
+ public void setCharacterStream(int parameterIndex, Reader reader, int length) throws SQLException {
+
+ }
+
+ @Override
+ public void setRef(int parameterIndex, Ref x) throws SQLException {
+
+ }
+
+ @Override
+ public void setBlob(int parameterIndex, Blob x) throws SQLException {
+
+ }
+
+ @Override
+ public void setClob(int parameterIndex, Clob x) throws SQLException {
+
+ }
+
+ @Override
+ public void setArray(int parameterIndex, Array x) throws SQLException {
+
+ }
+
+ @Override
+ public void setDate(int parameterIndex, Date x, Calendar cal) throws SQLException {
+
+ }
+
+ @Override
+ public void setTime(int parameterIndex, Time x, Calendar cal) throws SQLException {
+
+ }
+
+ @Override
+ public void setTimestamp(int parameterIndex, Timestamp x, Calendar cal) throws SQLException {
+
+ }
+
+ @Override
+ public void setNull(int parameterIndex, int sqlType, String typeName) throws SQLException {
+
+ }
+
+ @Override
+ public void setURL(int parameterIndex, URL x) throws SQLException {
+
+ }
+
+ @Override
+ public void setRowId(int parameterIndex, RowId x) throws SQLException {
+
+ }
+
+ @Override
+ public void setNString(int parameterIndex, String value) throws SQLException {
+
+ }
+
+ @Override
+ public void setNCharacterStream(int parameterIndex, Reader value, long length) throws SQLException {
+
+ }
+
+ @Override
+ public void setNClob(int parameterIndex, NClob value) throws SQLException {
+
+ }
+
+ @Override
+ public void setClob(int parameterIndex, Reader reader, long length) throws SQLException {
+
+ }
+
+ @Override
+ public void setBlob(int parameterIndex, InputStream inputStream, long length) throws SQLException {
+
+ }
+
+ @Override
+ public void setNClob(int parameterIndex, Reader reader, long length) throws SQLException {
+
+ }
+
+ @Override
+ public void setSQLXML(int parameterIndex, SQLXML xmlObject) throws SQLException {
+
+ }
+
+ @Override
+ public void setObject(int parameterIndex, Object x, int targetSqlType, int scaleOrLength) throws SQLException {
+
+ }
+
+ @Override
+ public void setAsciiStream(int parameterIndex, InputStream x, long length) throws SQLException {
+
+ }
+
+ @Override
+ public void setBinaryStream(int parameterIndex, InputStream x, long length) throws SQLException {
+
+ }
+
+ @Override
+ public void setCharacterStream(int parameterIndex, Reader reader, long length) throws SQLException {
+
+ }
+
+ @Override
+ public void setAsciiStream(int parameterIndex, InputStream x) throws SQLException {
+
+ }
+
+ @Override
+ public void setBinaryStream(int parameterIndex, InputStream x) throws SQLException {
+
+ }
+
+ @Override
+ public void setCharacterStream(int parameterIndex, Reader reader) throws SQLException {
+
+ }
+
+ @Override
+ public void setNCharacterStream(int parameterIndex, Reader value) throws SQLException {
+
+ }
+
+ @Override
+ public void setClob(int parameterIndex, Reader reader) throws SQLException {
+
+ }
+
+ @Override
+ public void setBlob(int parameterIndex, InputStream inputStream) throws SQLException {
+
+ }
+
+ @Override
+ public void setNClob(int parameterIndex, Reader reader) throws SQLException {
+
+ }
+
+ // Methods below cannot be called from a PreparedStatement based on JDBC spec
+
+ @Override
+ public ResultSet executeQuery(String sql) throws SQLException {
+ throw new SQLException("Cannot be called from PreparedStatement");
+ }
+
+ @Override
+ public int executeUpdate(String sql) throws SQLException {
+ throw new SQLException("Cannot be called from PreparedStatement");
+ }
+
+ @Override
+ public boolean execute(String sql) throws SQLException {
+ throw new SQLException("Cannot be called from PreparedStatement");
+ }
+
+ @Override
+ public void addBatch( String sql ) throws SQLException {
+ throw new SQLException("Cannot be called from PreparedStatement");
+ }
+
+ @Override
+ public int executeUpdate(String sql, int autoGeneratedKeys) throws SQLException {
+ throw new SQLException("Cannot be called from PreparedStatement");
+ }
+
+ @Override
+ public int executeUpdate(String sql, int columnIndexes[]) throws SQLException {
+ throw new SQLException("Cannot be called from PreparedStatement");
+ }
+
+ @Override
+ public int executeUpdate(String sql, String columnNames[]) throws SQLException {
+ throw new SQLException("Cannot be called from PreparedStatement");
+ }
+
+ @Override
+ public boolean execute(String sql, int autoGeneratedKeys) throws SQLException {
+ throw new SQLException("Cannot be called from PreparedStatement");
+ }
+
+ @Override
+ public boolean execute(String sql, int columnIndexes[]) throws SQLException {
+ throw new SQLException("Cannot be called from PreparedStatement");
+ }
+
+ @Override
+ public boolean execute(String sql, String columnNames[]) throws SQLException {
+ throw new SQLException("Cannot be called from PreparedStatement");
+ }
+
+ @Override
+ public long executeLargeUpdate(String sql) throws SQLException {
+ throw new SQLException("Cannot be called from PreparedStatement");
+ }
+
+ @Override
+ public long executeLargeUpdate(String sql, int autoGeneratedKeys) throws SQLException {
+ throw new SQLException("Cannot be called from PreparedStatement");
+ }
+
+ @Override
+ public long executeLargeUpdate(String sql, int columnIndexes[]) throws SQLException {
+ throw new SQLException("Cannot be called from PreparedStatement");
+ }
+
+ @Override
+ public long executeLargeUpdate(String sql, String columnNames[]) throws SQLException {
+ throw new SQLException("Cannot be called from PreparedStatement");
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6276fe5e/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/StatementImpl.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/StatementImpl.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/StatementImpl.java
index 6af58da..24b20a4 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/StatementImpl.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/StatementImpl.java
@@ -51,8 +51,7 @@ class StatementImpl implements Statement {
this.connection = connection;
}
- @Override
- public ResultSet executeQuery(String sql) throws SQLException {
+ private ResultSet executeQueryImpl(String sql) throws SQLException {
try {
if(this.currentResultSet != null) {
this.currentResultSet.close();
@@ -108,6 +107,11 @@ class StatementImpl implements Statement {
}
@Override
+ public ResultSet executeQuery(String sql) throws SQLException {
+ return this.executeQueryImpl(sql);
+ }
+
+ @Override
public int executeUpdate(String sql) throws SQLException {
return 0;
}
@@ -203,7 +207,7 @@ class StatementImpl implements Statement {
@Override
public ResultSet getResultSet() throws SQLException {
- return this.executeQuery(this.currentSQL);
+ return this.executeQueryImpl(this.currentSQL);
}
@Override
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6276fe5e/solr/solrj/src/test/org/apache/solr/client/solrj/io/sql/JdbcTest.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/io/sql/JdbcTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/io/sql/JdbcTest.java
index 200c971..40d14a1 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/sql/JdbcTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/sql/JdbcTest.java
@@ -20,6 +20,7 @@ import java.io.File;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
+import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
@@ -530,6 +531,37 @@ public class JdbcTest extends AbstractFullDistribZkTestBase {
assertFalse(statement.getMoreResults());
}
+
+ try (PreparedStatement statement = con.prepareStatement(sql)) {
+ assertEquals(con, statement.getConnection());
+
+ assertNull(statement.getWarnings());
+ statement.clearWarnings();
+ assertNull(statement.getWarnings());
+
+ assertEquals(0, statement.getFetchSize());
+ statement.setFetchSize(0);
+ assertEquals(0, statement.getFetchSize());
+
+ try (ResultSet rs = statement.executeQuery()) {
+ assertEquals(statement, rs.getStatement());
+
+ checkResultSetMetadata(rs);
+ checkResultSet(rs);
+ }
+
+ assertTrue(statement.execute());
+ assertEquals(-1, statement.getUpdateCount());
+
+ try (ResultSet rs = statement.getResultSet()) {
+ assertEquals(statement, rs.getStatement());
+
+ checkResultSetMetadata(rs);
+ checkResultSet(rs);
+ }
+
+ assertFalse(statement.getMoreResults());
+ }
}
}