/** * 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.jena.jdbc.statements.metadata; import java.sql.ParameterMetaData; import java.sql.SQLException; import java.sql.SQLFeatureNotSupportedException; import java.sql.Types; import org.apache.jena.atlas.iterator.Iter; import org.apache.jena.graph.Node ; import org.apache.jena.jdbc.statements.JenaPreparedStatement; import org.apache.jena.query.ParameterizedSparqlString ; /** * Implementation of {@link ParameterMetaData} for {@link ParameterizedSparqlString} instances to support {@link JenaPreparedStatement} * */ public class JenaParameterMetadata implements ParameterMetaData { private ParameterizedSparqlString sparqlStr; private int paramCount; /** * Creates new parameter metadata * @param sparqlStr Parameterized SPARQL String * @throws SQLException */ public JenaParameterMetadata(ParameterizedSparqlString sparqlStr) throws SQLException { if (sparqlStr == null) throw new SQLException("Parameterized SPARQL String cannot be null"); this.sparqlStr = sparqlStr; this.paramCount = (int) Iter.count(this.sparqlStr.getEligiblePositionalParameters()); } @Override public boolean isWrapperFor(Class<?> arg0) throws SQLException { throw new SQLFeatureNotSupportedException(); } @Override public <T> T unwrap(Class<T> arg0) throws SQLException { throw new SQLFeatureNotSupportedException(); } @Override public String getParameterClassName(int param) throws SQLException { // Remember that JDBC used a 1 based index if (param < 1 || param > this.paramCount) throw new SQLException("Parameter Index is out of bounds"); // All parameters are typed as Node return Node.class.getCanonicalName(); } @Override public int getParameterCount() { return this.paramCount; } @Override public int getParameterMode(int param) throws SQLException { // Remember that JDBC used a 1 based index if (param < 1 || param > this.paramCount) throw new SQLException("Parameter Index is out of bounds"); return parameterModeIn; } @Override public int getParameterType(int param) throws SQLException { // Remember that JDBC used a 1 based index if (param < 1 || param > this.paramCount) throw new SQLException("Parameter Index is out of bounds"); // Treat all parameters as being typed as Java Objects return Types.JAVA_OBJECT; } @Override public String getParameterTypeName(int param) throws SQLException { // Remember that JDBC used a 1 based index if (param < 1 || param > this.paramCount) throw new SQLException("Parameter Index is out of bounds"); // All parameters are typed as Node return Node.class.getCanonicalName(); } @Override public int getPrecision(int param) throws SQLException { // Remember that JDBC used a 1 based index if (param < 1 || param > this.paramCount) throw new SQLException("Parameter Index is out of bounds"); // Return zero since parameters aren't typed as numerics return 0; } @Override public int getScale(int param) throws SQLException { // Remember that JDBC used a 1 based index if (param < 1 || param > this.paramCount) throw new SQLException("Parameter Index is out of bounds"); // Return zero since parameters aren't typed as numerics return 0; } @Override public int isNullable(int param) throws SQLException { // Remember that JDBC used a 1 based index if (param < 1 || param > this.paramCount) throw new SQLException("Parameter Index is out of bounds"); // Parameters are not nullable return parameterNoNulls; } @Override public boolean isSigned(int param) throws SQLException { // Remember that JDBC used a 1 based index if (param < 1 || param > this.paramCount) throw new SQLException("Parameter Index is out of bounds"); // Return false since parameters aren't typed as numerics return false; } }