package org.nutz.dao.impl.jdbc.h2;
import org.nutz.dao.DB;
import org.nutz.dao.entity.Entity;
import org.nutz.dao.entity.MappingField;
import org.nutz.dao.impl.entity.macro.SqlFieldMacro;
import org.nutz.dao.impl.jdbc.psql.PsqlJdbcExpert;
import org.nutz.dao.jdbc.JdbcExpertConfigFile;
import org.nutz.dao.sql.Pojo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class H2JdbcExpert extends PsqlJdbcExpert {
public H2JdbcExpert(JdbcExpertConfigFile conf) {
super(conf);
}
public String getDatabaseType() {
return DB.H2.name();
}
public Pojo fetchPojoId(Entity<?> en, MappingField idField) {
String autoSql = "SELECT IDENTITY() as $field from $view";
Pojo autoInfo = new SqlFieldMacro(idField, autoSql);
autoInfo.setEntity(en);
return autoInfo;
}
@Override
public List<String> getIndexNames(Entity<?> en, Connection conn) throws SQLException {
List<String> names = new ArrayList<String>();
String showIndexs = "SELECT * FROM INFORMATION_SCHEMA.INDEXES WHERE TABLE_NAME = ?";
PreparedStatement preparedStatement = conn.prepareStatement(showIndexs);
preparedStatement.setString(1, en.getTableName().toUpperCase());
ResultSet rest = preparedStatement.executeQuery();
while (rest.next()) {
String index = rest.getString(5);
names.add(index);
}
return names;
}
}