/*
* Copyright 2012 pcal.net
*
* Licensed 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 com.googlecode.sqlsheet.stream;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Date;
/**
* SqlSheet implementation of java.sql.ResultSetMetaData.
*
* @author <a href='http://www.pcal.net'>pcal</a>
* @author <a href='http://code.google.com/p/sqlsheet'>sqlsheet</a>
*/
public class XlsStreamingResultSetMetaData implements ResultSetMetaData {
private AbstractXlsSheetIterator iterator;
public XlsStreamingResultSetMetaData(AbstractXlsSheetIterator iterator) throws SQLException {
this.iterator = iterator;
}
public int getColumnCount() {
return iterator.getColumns().size();
}
public String getColumnLabel(int jdbcCol) {
return iterator.getColumns().get(jdbcCol - 1).stringValue;
}
public String getColumnName(int jdbcCol) {
return iterator.getColumns().get(jdbcCol - 1).stringValue;
}
public String getCatalogName(int arg0) throws SQLException {
return "";
}
public String getColumnClassName(int jdbcCol) throws SQLException {
return iterator.getCurrentRowValue(jdbcCol - 1).getType().getName();
}
public int getColumnDisplaySize(int arg0) {
return 0;
}
public int getColumnType(int jdbcCol) throws SQLException {
if (iterator.getCurrentRowValue(jdbcCol - 1).getType().isAssignableFrom(String.class)) {
return Types.VARCHAR;
} else if (iterator.getCurrentRowValue(jdbcCol - 1).getType().isAssignableFrom(Double.class)) {
return Types.DOUBLE;
} else if (iterator.getCurrentRowValue(jdbcCol - 1).getType().isAssignableFrom(Date.class)) {
return Types.DATE;
}
return Types.OTHER;
}
public String getColumnTypeName(int jdbcCol) throws SQLException {
if(iterator.getCurrentIteratorRowIndex() ==0) {
return iterator.getNextRowValue(jdbcCol - 1).getType().getName();
} else{
return iterator.getCurrentRowValue(jdbcCol - 1).getType().getName();
}
}
public int getPrecision(int arg0) throws SQLException {
return 0;
}
public int getScale(int arg0) throws SQLException {
return 0;
}
public String getSchemaName(int arg0) throws SQLException {
return "";
}
public String getTableName(int arg0) throws SQLException {
return iterator.getSheetName();
}
public boolean isAutoIncrement(int arg0) throws SQLException {
return false;
}
public boolean isCaseSensitive(int arg0) throws SQLException {
return false;
}
public boolean isCurrency(int arg0) throws SQLException {
return false;
}
public boolean isDefinitelyWritable(int arg0) throws SQLException {
return false;
}
public int isNullable(int arg0) throws SQLException {
return 0;
}
public boolean isReadOnly(int arg0) throws SQLException {
return false;
}
public boolean isSearchable(int arg0) throws SQLException {
return false;
}
public boolean isSigned(int arg0) throws SQLException {
return false;
}
public boolean isWritable(int arg0) throws SQLException {
return false;
}
public boolean isWrapperFor(Class<?> iface) throws SQLException {
return false;
}
public <T> T unwrap(Class<T> iface) throws SQLException {
return null;
}
}