/******************************************************************************* * 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.drill.jdbc.impl; 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.Ref; import java.sql.SQLException; import java.sql.SQLXML; import java.sql.Time; import java.sql.Timestamp; import java.util.Calendar; import java.util.Map; import org.apache.calcite.avatica.util.Cursor.Accessor; /** * Wraps Avatica {@code Accessor} instances to catch convertion exception * which are thrown as {@code RuntimeException} and throws {@code SQLException} * instead * */ class WrappedAccessor implements Accessor { private final Accessor delegate; public WrappedAccessor(Accessor delegate) { this.delegate = delegate; } @Override public boolean wasNull() throws SQLException { return delegate.wasNull(); } @Override public String getString() throws SQLException { try { return delegate.getString(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public boolean getBoolean() throws SQLException { try { return delegate.getBoolean(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public byte getByte() throws SQLException { try { return delegate.getByte(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public short getShort() throws SQLException { try { return delegate.getShort(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public int getInt() throws SQLException { try { return delegate.getInt(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public long getLong() throws SQLException { try { return delegate.getLong(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public float getFloat() throws SQLException { try { return delegate.getFloat(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public double getDouble() throws SQLException { try { return delegate.getDouble(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public BigDecimal getBigDecimal() throws SQLException { try { return delegate.getBigDecimal(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public BigDecimal getBigDecimal(int scale) throws SQLException { try { return delegate.getBigDecimal(scale); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public byte[] getBytes() throws SQLException { try { return delegate.getBytes(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public InputStream getAsciiStream() throws SQLException { try { return delegate.getAsciiStream(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public InputStream getUnicodeStream() throws SQLException { try { return delegate.getUnicodeStream(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public InputStream getBinaryStream() throws SQLException { try { return delegate.getBinaryStream(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public Object getObject() throws SQLException { try { return delegate.getObject(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public Reader getCharacterStream() throws SQLException { try { return delegate.getCharacterStream(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public Object getObject(Map<String, Class<?>> map) throws SQLException { try { return delegate.getObject(map); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public Ref getRef() throws SQLException { try { return delegate.getRef(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public Blob getBlob() throws SQLException { try { return delegate.getBlob(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public Clob getClob() throws SQLException { try { return delegate.getClob(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public Array getArray() throws SQLException { try { return delegate.getArray(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public Date getDate(Calendar calendar) throws SQLException { try { return delegate.getDate(calendar); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public Time getTime(Calendar calendar) throws SQLException { try { return delegate.getTime(calendar); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public Timestamp getTimestamp(Calendar calendar) throws SQLException { try { return delegate.getTimestamp(calendar); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public URL getURL() throws SQLException { try { return delegate.getURL(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public NClob getNClob() throws SQLException { try { return delegate.getNClob(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public SQLXML getSQLXML() throws SQLException { try { return delegate.getSQLXML(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public String getNString() throws SQLException { try { return delegate.getNString(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public Reader getNCharacterStream() throws SQLException { try { return delegate.getNCharacterStream(); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } @Override public <T> T getObject(Class<T> type) throws SQLException { try { return delegate.getObject(type); } catch(RuntimeException e) { String message = e.getMessage(); if (message != null && message.startsWith("cannot convert to")) { throw new SQLException(e.getMessage(), e); } throw e; } } }