package org.insightech.er.db.impl.hsqldb;
import java.math.BigDecimal;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.insightech.er.editor.model.dbimport.ImportFromDBManagerBase;
import org.insightech.er.editor.model.diagram_contents.not_element.sequence.Sequence;
public class HSQLDBTableImportManager extends ImportFromDBManagerBase {
/**
* {@inheritDoc}
*/
@Override
protected String getViewDefinitionSQL(String schema) {
return "SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? ";
}
@Override
protected ColumnData createColumnData(ResultSet columnSet)
throws SQLException {
ColumnData columnData = super.createColumnData(columnSet);
String type = columnData.type.toLowerCase();
if (type.startsWith("decimal")) {
if (columnData.size == 128 && columnData.decimalDegits == 0) {
columnData.size = 0;
} else if (columnData.size == 646456993
&& columnData.decimalDegits == 0) {
columnData.size = 0;
}
} else if (type.startsWith("numeric")) {
if (columnData.size == 128 && columnData.decimalDegits == 0) {
columnData.size = 0;
} else if (columnData.size == 646456993
&& columnData.decimalDegits == 0) {
columnData.size = 0;
}
} else if (type.startsWith("float")) {
if (columnData.size == 17) {
columnData.size = 0;
} else if (columnData.size == 646456993
&& columnData.decimalDegits == 0) {
columnData.size = 0;
}
} else if (type.startsWith("clob")) {
if (columnData.size == 16777216) {
columnData.size = 0;
}
} else if (type.startsWith("blob")) {
if (columnData.size == 16777216) {
columnData.size = 0;
}
} else if (type.startsWith("varchar")) {
if (columnData.size == 16777216) {
columnData.size = 0;
columnData.type = "longvarchar";
}
} else if (type.startsWith("varbinary")) {
if (columnData.size == 16777216) {
columnData.size = 0;
columnData.type = "longvarbinary";
}
} else if (type.startsWith("timestamp")) {
columnData.size = columnData.size - 20;
if (columnData.size == 6) {
columnData.size = 0;
}
}
return columnData;
}
@Override
protected Sequence importSequence(String schema, String sequenceName)
throws SQLException {
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = con
.prepareStatement("SELECT * FROM INFORMATION_SCHEMA.SEQUENCES WHERE SEQUENCE_SCHEMA = ? AND SEQUENCE_NAME = ?");
stmt.setString(1, schema);
stmt.setString(2, sequenceName);
rs = stmt.executeQuery();
if (rs.next()) {
Sequence sequence = new Sequence();
sequence.setName(sequenceName);
sequence.setSchema(schema);
sequence.setIncrement(rs.getInt("INCREMENT"));
Long minValue = rs.getLong("MINIMUM_VALUE");
Long maxValue = rs.getLong("MAXIMUM_VALUE");
String dataType = rs.getString("DATA_TYPE");
sequence.setDataType(dataType);
if ("INTEGER".equals(dataType)) {
if (maxValue.intValue() == Integer.MAX_VALUE) {
maxValue = null;
}
if (minValue.intValue() == Integer.MIN_VALUE) {
minValue = null;
}
} else if ("BIGINT".equals(dataType)) {
if (maxValue.longValue() == Long.MAX_VALUE) {
maxValue = null;
}
if (minValue.intValue() == Long.MIN_VALUE) {
minValue = null;
}
}
sequence.setMinValue(minValue);
if (maxValue != null) {
sequence.setMaxValue(new BigDecimal(maxValue));
} else {
sequence.setMaxValue(null);
}
sequence.setStart(rs.getLong("START_WITH"));
boolean cycle = false;
if ("YES".equals(rs.getString("CYCLE_OPTION"))) {
cycle = true;
}
sequence.setCycle(cycle);
return sequence;
}
return null;
} finally {
this.close(rs);
this.close(stmt);
}
}
}