/* This file is part of VoltDB. * Copyright (C) 2008-2017 VoltDB Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with VoltDB. If not, see <http://www.gnu.org/licenses/>. */ package org.voltdb.jdbc; import java.sql.SQLException; import java.sql.Statement; public class JDBC4ParameterMetaData implements java.sql.ParameterMetaData { private final Statement owner; private final int parameterCount; JDBC4ParameterMetaData(Statement owner, int parameterCount) throws SQLException { this.owner = owner; this.parameterCount = parameterCount; } private void checkClosed() throws SQLException { if (this.owner.isClosed()) throw SQLError.get(SQLError.CONNECTION_CLOSED); } // Retrieves the fully-qualified name of the Java class whose instances should be passed to the method PreparedStatement.setObject. public String getParameterClassName(int param) throws SQLException { checkClosed(); throw SQLError.noSupport(); } // Retrieves the number of parameters in the PreparedStatement object for which this ParameterMetaData object contains information. public int getParameterCount() throws SQLException { checkClosed(); return this.parameterCount; } // Retrieves the designated parameter's mode. public int getParameterMode(int param) throws SQLException { checkClosed(); return parameterModeIn; // Only mode supported by provider } // Retrieves the designated parameter's SQL type. public int getParameterType(int param) throws SQLException { checkClosed(); throw SQLError.noSupport(); } // Retrieves the designated parameter's database-specific type name. public String getParameterTypeName(int param) throws SQLException { checkClosed(); throw SQLError.noSupport(); } // Retrieves the designated parameter's specified column size. public int getPrecision(int param) throws SQLException { checkClosed(); throw SQLError.noSupport(); } // Retrieves the designated parameter's number of digits to right of the decimal point. public int getScale(int param) throws SQLException { checkClosed(); throw SQLError.noSupport(); } // Retrieves whether null values are allowed in the designated parameter. public int isNullable(int param) throws SQLException { checkClosed(); return parameterNullable; // Always permissible in principle (no provider control at the statement-level; the statement itself might fail validity constraints upon execution however!) } // Retrieves whether values for the designated parameter can be signed numbers. public boolean isSigned(int param) throws SQLException { checkClosed(); throw SQLError.noSupport(); } // Returns true if this either implements the interface argument or is directly or indirectly a wrapper for an object that does. public boolean isWrapperFor(Class<?> iface) throws SQLException { return iface.isInstance(this); } // Returns an object that implements the given interface to allow access to non-standard methods, or standard methods not exposed by the proxy. public <T> T unwrap(Class<T> iface) throws SQLException { try { return iface.cast(this); } catch (ClassCastException cce) { throw SQLError.get(SQLError.ILLEGAL_ARGUMENT, iface.toString()); } } }