package org.insightech.er.db.impl.db2; 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 DB2TableImportManager extends ImportFromDBManagerBase { /** * {@inheritDoc} */ @Override protected String getViewDefinitionSQL(String schema) { return "SELECT TEXT FROM SYSCAT.VIEWS WHERE VIEWSCHEMA = ? AND VIEWNAME = ?"; } @Override protected ColumnData createColumnData(ResultSet columnSet) throws SQLException { ColumnData columnData = super.createColumnData(columnSet); String type = columnData.type.toLowerCase(); if (type.equals("decimal")) { if (columnData.size == 5 && columnData.decimalDegits == 0) { columnData.size = 0; } } else if (type.equals("clob")) { if (columnData.size == 1048576) { columnData.size = 0; } } else if (type.equals("blob")) { if (columnData.size == 1048576) { columnData.size = 0; } } else if (type.equals("dbclob")) { if (columnData.size == 2097152) { columnData.size = 0; } } else if (type.equals("decfloat")) { if (columnData.size == 34) { 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 SYSCAT.SEQUENCES WHERE SEQSCHEMA = ? AND SEQNAME = ?"); 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")); sequence.setMinValue(rs.getLong("MINVALUE")); BigDecimal maxValue = rs.getBigDecimal("MAXVALUE"); int dataTypeId = rs.getInt("DATATYPEID"); String dataType = null; if (dataTypeId == 16) { dataType = "DECIMAL(p)"; sequence.setDecimalSize(rs.getInt("PRECISION")); } else if (dataTypeId == 24) { dataType = "INTEGER"; if (maxValue.intValue() == Integer.MAX_VALUE) { maxValue = null; } } else if (dataTypeId == 20) { dataType = "BIGINT"; if (maxValue.longValue() == Long.MAX_VALUE) { maxValue = null; } } else if (dataTypeId == 28) { dataType = "SMALLINT"; if (maxValue.intValue() == Short.MAX_VALUE) { maxValue = null; } } else { dataType = ""; } sequence.setDataType(dataType); sequence.setMaxValue(maxValue); sequence.setStart(rs.getLong("START")); sequence.setCache(rs.getInt("CACHE")); boolean cycle = false; if ("Y".equals(rs.getString("CYCLE"))) { cycle = true; } sequence.setCycle(cycle); boolean order = false; if ("Y".equals(rs.getString("ORDER"))) { order = true; } sequence.setOrder(order); return sequence; } return null; } finally { this.close(rs); this.close(stmt); } } }