blob: 147283cb72292bc7d49ef4382590a7235a66f968 [file] [log] [blame]
/*
Derby - Class org.apache.derby.impl.load.ImportResultSetMetaData
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.derby.impl.load;
import java.sql.SQLException;
import java.util.HashMap;
import org.apache.derby.vti.VTIMetaDataTemplate;
import org.apache.derby.iapi.reference.Limits;
class ImportResultSetMetaData extends VTIMetaDataTemplate {
private final int numberOfColumns;
private final String[] columnNames;
private final int[] columnWidths;
// types of the table columns that the data is imported.
private final int[] tableColumnTypes ;
private final String[] columnTypeNames;
private final HashMap udtClasses;
public ImportResultSetMetaData(int numberOfColumns,
String[] columnNames,
int[] columnWidths,
int[] tableColumnTypes,
String[] columnTypeNames,
HashMap udtClasses ) {
this.numberOfColumns = numberOfColumns;
this.columnNames = columnNames;
this.columnWidths = columnWidths;
this.tableColumnTypes = tableColumnTypes;
this.columnTypeNames = columnTypeNames;
this.udtClasses = udtClasses;
}
public int getColumnCount() {
return numberOfColumns;
}
public String getColumnName(int column) {
return columnNames[column-1];
}
public int getColumnType(int column) {
/* By default all the data in the import file is assumed
* to be in varchar format. Appropriate casting is applied
* while executing the select on the import VTI. Using this
* approach import vti does not have to do the data conversion,
* casting will do that.
*
* But for some types like binary types there is no casting
* support from varchar or the data in the file is hex format,
* so data needs to be converted to binary format first. And
* incase of blobs/clobs stored in an exteranl file memory usage
* will be less if data is supplied as stream, instead of
* materializing the column data as one string. For these
* types import vti result set will return resultset column
* type is same as the column type of the import table. Data
* for the blob, clob or binary type columns is returned by
* the getXXX() calls used by the VTI Resultset to read the
* data for that particular type. For example, Blob data
* is read using getBlob() method, which will return a
* Blob object that contains the data in the import file
* for a column.
*/
int colType;
switch (tableColumnTypes[column -1])
{
case java.sql.Types.BLOB:
// blob
colType = java.sql.Types.BLOB;
break;
case java.sql.Types.CLOB:
// clob
colType = java.sql.Types.CLOB;
break;
case java.sql.Types.LONGVARBINARY:
// LONG VARCHAR FOR BIT DATA
colType = java.sql.Types.LONGVARBINARY;
break;
case java.sql.Types.VARBINARY:
// VARCHAR FOR BIT DATA
colType = java.sql.Types.VARBINARY;
break;
case java.sql.Types.BINARY:
// CHAR FOR BIT DATA
colType = java.sql.Types.BINARY;
break;
case java.sql.Types.JAVA_OBJECT:
// User-defined type
colType = java.sql.Types.JAVA_OBJECT;
break;
default:
// all other data in the import file is
// assumed to be in varchar format.
colType = java.sql.Types.VARCHAR;
}
return colType;
}
public int isNullable(int column) {
return columnNullableUnknown;
}
public int getColumnDisplaySize(int column) {
if (columnWidths == null)
return Limits.DB2_VARCHAR_MAXWIDTH;
else
return columnWidths[column-1];
}
public String getColumnTypeName(int column) throws SQLException
{
return columnTypeNames[ column - 1 ];
}
/**
* Get the class bound to a UDT column.
*/
Class getUDTClass( int column ) throws SQLException
{
String columnName = getColumnName( column );
return (Class) udtClasses.get( getColumnName( column ) );
}
}