package org.aksw.sparqlify.config.v0_2.bridge;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
public class BasicTableProviderJdbc
implements BasicTableInfoProvider
{
protected Connection conn;
public BasicTableProviderJdbc(Connection conn) {
super();
this.conn = conn;
}
@Override
public BasicTableInfo getBasicTableInfo(String queryStr) {
BasicTableInfo result;
try {
result = getRawTypes(conn, queryStr);
} catch(Exception e) {
throw new RuntimeException(e);
}
return result;
}
public static BasicTableInfo getRawTypes(Connection conn, String queryStr)
throws Exception
{
Map<String, String> rawTypeMap = new LinkedHashMap<String,String>();
// TODO We need full column metadata after all I guess
//Map<String, Integer> paddingMap = new HashMap<String, String>();
Set<String> nullableColumns = new HashSet<String>();
ResultSet rs = conn.createStatement().executeQuery(queryStr);
try {
ResultSetMetaData meta = rs.getMetaData();
for(int i = 1; i <= meta.getColumnCount(); ++i) {
//String name = meta.getColumnName(i);
String name = meta.getColumnLabel(i);
int isNullable = meta.isNullable(i);
if(isNullable != ResultSetMetaData.columnNoNulls) {
nullableColumns.add(name);
}
//int type = meta.getColumnType(i);
String typeName = meta.getColumnTypeName(i);
//int displaySize = meta.getColumnDisplaySize(i);
//System.out.println("TypeName: " + typeName);
rawTypeMap.put(name, typeName);
}
} finally {
rs.close();
}
/*
System.out.println(SqlDatatypeBoolean.getInstance().hashCode());
System.out.println(SqlDatatypeInteger.getInstance().hashCode());
System.out.println(SqlDatatypeString.getInstance().hashCode());
*/
BasicTableInfo result = new BasicTableInfo(rawTypeMap, nullableColumns);
return result;
}
}