package com.querydsl.sql;
import static com.querydsl.core.Target.*;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Map;
import org.junit.Test;
import com.google.common.collect.Maps;
import com.querydsl.core.testutil.ExcludeIn;
import com.querydsl.core.types.Path;
import com.querydsl.core.types.dsl.Expressions;
import com.querydsl.sql.ddl.CreateTableClause;
import com.querydsl.sql.ddl.DropTableClause;
public class TypesBase extends AbstractBaseTest {
@Test
public void create_tables() {
Map<Class<?>, Object> instances = Maps.newLinkedHashMap();
instances.put(BigInteger.class, BigInteger.valueOf(1));
instances.put(Long.class, 1L);
instances.put(Integer.class, 1);
instances.put(Short.class, (short) 1);
instances.put(Byte.class, (byte) 1);
instances.put(BigDecimal.class, BigDecimal.valueOf(1.0));
instances.put(Double.class, 1.0);
instances.put(Float.class, 1.0f);
instances.put(Boolean.class, Boolean.TRUE);
instances.put(Character.class, 'a');
instances.put(String.class, "ABC");
for (Map.Entry<Class<?>, Object> entry : instances.entrySet()) {
String tableName = "test_" + entry.getKey().getSimpleName();
new DropTableClause(connection, configuration, tableName).execute();
CreateTableClause c = new CreateTableClause(connection, configuration, tableName)
.column("col", entry.getKey());
if (entry.getKey().equals(String.class)) {
c.size(256);
}
c.execute();
RelationalPath<Object> entityPath = new RelationalPathBase<Object>(Object.class, tableName, "PUBLIC", tableName);
Path<?> columnPath = Expressions.path(entry.getKey(), entityPath, "col");
insert(entityPath).set((Path) columnPath, entry.getValue()).execute();
new DropTableClause(connection, configuration, tableName).execute();
}
}
@Test
@ExcludeIn({CUBRID, POSTGRESQL, TERADATA})
public void dump_types() throws SQLException {
Connection conn = Connections.getConnection();
DatabaseMetaData md = conn.getMetaData();
// types
ResultSet rs = md.getUDTs(null, null, null, null);
try {
while (rs.next()) {
// cat, schema, name, classname, datatype, remarks, base_type
String cat = rs.getString(1);
String schema = rs.getString(2);
String name = rs.getString(3);
String classname = rs.getString(4);
String datatype = rs.getString(5);
String remarks = rs.getString(6);
String baseType = rs.getString(7);
System.out.println(name + " " + classname + " " + datatype + " " +
remarks + " " + baseType);
// attributes
ResultSet rs2 = md.getAttributes(cat, schema, name, null);
try {
while (rs2.next()) {
// cat, schema, name, attr_name, data_type, attr_type_name, attr_size
// decimal_digits, num_prec_radix, nullable, remarks, attr_def, sql_data_type, ordinal_position
// ...
String cat2 = rs2.getString(1);
String schema2 = rs2.getString(2);
String name2 = rs2.getString(3);
String attrName2 = rs2.getString(4);
String dataType2 = rs2.getString(5);
String attrTypeName2 = rs2.getString(6);
String attrSize2 = rs2.getString(7);
System.out.println(" " + attrName2 + " " + dataType2 + " " + attrTypeName2 + " " + attrSize2);
}
} finally {
rs2.close();
}
}
} finally {
rs.close();
}
}
}