Search in sources :

Example 11 with Column

use of org.obeonetwork.dsl.database.Column in project InformationSystem by ObeoNetwork.

the class DefaultDataBaseBuilder method buildIndex.

protected void buildIndex(DatabaseMetaData metaData, Table table, ResultSet rs, Map<Object, Object> indices) throws SQLException {
    int indexType = rs.getInt(7);
    String indexName = rs.getString(6);
    if (indexType != 0) {
        Index index = (Index) indices.get(indexName);
        if (index == null) {
            index = CreationUtils.createIndex(table, indexName);
            String indexQualifier = rs.getString(5);
            index.setQualifier(indexQualifier);
            index.setUnique(!(rs.getBoolean(4)));
            indices.put(indexName, index);
        }
        String indexColumnName = rs.getString(9);
        Column indexColumn = queries.getColumn(table, indexColumnName);
        if (indexColumn != null) {
            IndexElement element = CreationUtils.createIndexElement(index);
            element.setColumn(indexColumn);
            String order = rs.getString(10);
            Boolean inAscendingOrder = isInAscendingOrder(metaData, order, table, index, indexColumnName);
            if (inAscendingOrder == null) {
                element.setAsc(true);
            } else {
                element.setAsc(inAscendingOrder);
            }
        } else {
            System.err.println("indexColumn not found -> table=" + table.getName() + "indexName=" + indexName + " indexColumnName=" + indexColumnName + " indexColumn=" + indexColumn + " qualifier=" + rs.getString(5));
        }
    }
}
Also used : Column(org.obeonetwork.dsl.database.Column) Index(org.obeonetwork.dsl.database.Index) IndexElement(org.obeonetwork.dsl.database.IndexElement)

Example 12 with Column

use of org.obeonetwork.dsl.database.Column in project InformationSystem by ObeoNetwork.

the class DefaultDataBaseBuilder method buildColumn.

protected void buildColumn(DatabaseMetaData metaData, TableContainer owner, NativeTypesLibrary nativeTypesLibrary, AbstractTable table, ResultSet rs) throws SQLException {
    if (table instanceof View) {
        return;
    }
    String columnName = rs.getString(4);
    Column column = CreationUtils.createColumn(table, columnName);
    // TODO optimize search
    String columnType = rs.getString(6);
    int columnSize = rs.getInt(7);
    int decimalDigits = rs.getInt(9);
    TypeInstance typeInstance = createTypeInstance(nativeTypesLibrary, columnType, columnSize, decimalDigits);
    column.setType(typeInstance);
    String defaultValue = rs.getString(13);
    if (defaultValue == null || defaultValue.length() == 0) {
        defaultValue = "";
    }
    column.setDefaultValue(defaultValue.trim());
    if (rs.getMetaData().getColumnCount() >= 23) {
        column.setAutoincrement("YES".equals(rs.getString(23)));
    }
    String columnComments = getRealComments(getColumnComments(metaData, rs, owner.getName(), table.getName(), columnName));
    if (columnComments == null || columnComments.length() == 0) {
        column.setComments(null);
    } else {
        column.setComments(columnComments);
    }
    String isNullableValue = rs.getString(18);
    boolean isNullable = false;
    // Fix Oracle compatibility
    if (isNullableValue.equals("YES")) {
        isNullable = true;
    } else if (isNullableValue.equals("NO")) {
        isNullable = false;
    } else {
        isNullable = rs.getBoolean(18);
    }
    column.setNullable(isNullable);
    buildColumnConstraint(metaData, owner, column);
}
Also used : Column(org.obeonetwork.dsl.database.Column) TypeInstance(org.obeonetwork.dsl.typeslibrary.TypeInstance) View(org.obeonetwork.dsl.database.View)

Example 13 with Column

use of org.obeonetwork.dsl.database.Column in project InformationSystem by ObeoNetwork.

the class H2DataBaseBuilder method buildSequences.

private void buildSequences(DatabaseMetaData metaData, TableContainer owner) {
    ResultSet rs = null;
    PreparedStatement pstmt = null;
    try {
        // TODO récupérer cycle avec IS_CYCLE
        // TODO récupérer Cache
        PreparedStatement psmt = metaData.getConnection().prepareStatement("SELECT SEQUENCE_NAME, INCREMENT, MIN_VALUE, MAX_VALUE, CURRENT_VALUE " + "FROM INFORMATION_SCHEMA.SEQUENCES");
        rs = psmt.executeQuery();
        while (rs.next()) {
            String name = rs.getString(1);
            BigInteger increment = getBigIntValueForColumn(rs, 2);
            BigInteger minValue = getBigIntValueForColumn(rs, 3);
            BigInteger maxValue = getBigIntValueForColumn(rs, 4);
            BigInteger start = getBigIntValueForColumn(rs, 5);
            Sequence sequence = CreationUtils.createSequence(owner, name, increment, minValue, maxValue, start, false, null);
            // Look for a table that could correspond to the sequence
            if (name.endsWith("_SEQ")) {
                String tableName = name.substring(0, name.length() - "_SEQ".length());
                AbstractTable abstractTable = queries.getTable(tableName);
                if (abstractTable != null && abstractTable instanceof Table) {
                    Table table = (Table) abstractTable;
                    if (table.getPrimaryKey() != null && table.getPrimaryKey().getColumns().size() == 1) {
                        Column column = table.getPrimaryKey().getColumns().get(0);
                        column.setSequence(sequence);
                    }
                }
            }
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    } finally {
        JdbcUtils.closeStatement(pstmt);
        JdbcUtils.closeResultSet(rs);
    }
}
Also used : AbstractTable(org.obeonetwork.dsl.database.AbstractTable) Table(org.obeonetwork.dsl.database.Table) AbstractTable(org.obeonetwork.dsl.database.AbstractTable) Column(org.obeonetwork.dsl.database.Column) ResultSet(java.sql.ResultSet) BigInteger(java.math.BigInteger) PreparedStatement(java.sql.PreparedStatement) Sequence(org.obeonetwork.dsl.database.Sequence) SQLException(java.sql.SQLException)

Example 14 with Column

use of org.obeonetwork.dsl.database.Column in project InformationSystem by ObeoNetwork.

the class PostGresDataBaseBuilder method buildSequences.

private void buildSequences(TableContainer owner) {
    ResultSet rs = null;
    PreparedStatement pstmt = null;
    try {
        PreparedStatement psmt = metaData.getConnection().prepareStatement("SELECT s.SEQUENCE_NAME, s.INCREMENT, s.MINIMUM_VALUE, s.MAXIMUM_VALUE, s.START_VALUE, s.CYCLE_OPTION , pg_catalog.obj_description(c.oid) " + "FROM INFORMATION_SCHEMA.SEQUENCES s " + "LEFT JOIN PG_CATALOG.pg_class c " + "ON c.relname = s.SEQUENCE_NAME " + "AND c.relkind = 'S' " + "WHERE s.SEQUENCE_SCHEMA = '" + schemaName + "'");
        rs = psmt.executeQuery();
        while (rs.next()) {
            String name = rs.getString(1);
            BigInteger increment = getBigIntValueForColumn(rs, 2);
            BigInteger minValue = getBigIntValueForColumn(rs, 3);
            BigInteger maxValue = getBigIntValueForColumn(rs, 4);
            BigInteger start = getBigIntValueForColumn(rs, 5);
            String cycleAsString = rs.getString(6);
            boolean cycle = "YES".equals(cycleAsString);
            String comment = rs.getString(7);
            // Retrieve CACHE value
            BigInteger cacheValue = null;
            PreparedStatement psmtCache = metaData.getConnection().prepareStatement("SELECT CACHE_VALUE FROM " + schemaName + "." + name);
            ResultSet rsCache = psmtCache.executeQuery();
            if (rsCache.next()) {
                cacheValue = getBigIntValueForColumn(rsCache, 1);
            }
            Sequence sequence = CreationUtils.createSequence(owner, name, increment, minValue, maxValue, start, cycle, cacheValue);
            sequence.setComments(comment);
            // Look for a table that could correspond to the sequence
            if (name.endsWith("_seq")) {
                String tableName = name.substring(0, name.length() - "_seq".length());
                AbstractTable abstractTable = queries.getTable(tableName);
                if (abstractTable != null && abstractTable instanceof Table) {
                    Table table = (Table) abstractTable;
                    if (table.getPrimaryKey() != null && table.getPrimaryKey().getColumns().size() == 1) {
                        Column column = table.getPrimaryKey().getColumns().get(0);
                        column.setSequence(sequence);
                    }
                }
            }
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    } finally {
        JdbcUtils.closeStatement(pstmt);
        JdbcUtils.closeResultSet(rs);
    }
}
Also used : AbstractTable(org.obeonetwork.dsl.database.AbstractTable) Table(org.obeonetwork.dsl.database.Table) AbstractTable(org.obeonetwork.dsl.database.AbstractTable) Column(org.obeonetwork.dsl.database.Column) ResultSet(java.sql.ResultSet) BigInteger(java.math.BigInteger) PreparedStatement(java.sql.PreparedStatement) Sequence(org.obeonetwork.dsl.database.Sequence) SQLException(java.sql.SQLException)

Example 15 with Column

use of org.obeonetwork.dsl.database.Column in project InformationSystem by ObeoNetwork.

the class SQLServerDataBaseBuilder method buildColumn.

@Override
protected void buildColumn(DatabaseMetaData metaData, TableContainer owner, NativeTypesLibrary nativeTypesLibrary, AbstractTable table, ResultSet rs) throws SQLException {
    String columnName = rs.getString(4);
    Column column = CreationUtils.createColumn(table, columnName);
    String columnType = rs.getString(6);
    int indexIdentity = columnType.indexOf("identity");
    Identity identity = null;
    if (indexIdentity != -1) {
        identity = getIdentity(columnType);
        columnType = columnType.substring(0, indexIdentity).trim();
    }
    int columnSize = rs.getInt(7);
    int decimalDigits = rs.getInt(9);
    TypeInstance typeInstance = createTypeInstance(nativeTypesLibrary, columnType, columnSize, decimalDigits);
    column.setType(typeInstance);
    if (identity != null) {
        // buildSequence(owner, table, column, identity);
        column.setAutoincrement(true);
    }
    String defaultValue = rs.getString(13);
    if (defaultValue == null || defaultValue.length() == 0) {
        defaultValue = "";
    }
    column.setDefaultValue(defaultValue.trim());
    String columnComments = getRealComments(getColumnComments(metaData, rs, owner.getName(), table.getName(), columnName));
    if (columnComments == null || columnComments.length() == 0) {
        column.setComments(null);
    } else {
        column.setComments(columnComments);
    }
    String isNullableValue = rs.getString(18);
    boolean isNullable = false;
    // Fix Oracle compatibility
    if (isNullableValue.equals("YES")) {
        isNullable = true;
    } else if (isNullableValue.equals("NO")) {
        isNullable = false;
    } else {
        isNullable = rs.getBoolean(18);
    }
    column.setNullable(isNullable);
    buildColumnConstraint(metaData, owner, column);
}
Also used : Column(org.obeonetwork.dsl.database.Column) TypeInstance(org.obeonetwork.dsl.typeslibrary.TypeInstance)

Aggregations

Column (org.obeonetwork.dsl.database.Column)83 Table (org.obeonetwork.dsl.database.Table)41 Test (org.junit.Test)31 AbstractTest (org.obeonetwork.database.m2doc.services.common.AbstractTest)31 TypeInstance (org.obeonetwork.dsl.typeslibrary.TypeInstance)11 EObject (org.eclipse.emf.ecore.EObject)9 AbstractTable (org.obeonetwork.dsl.database.AbstractTable)8 ForeignKey (org.obeonetwork.dsl.database.ForeignKey)7 ArrayList (java.util.ArrayList)6 Constraint (org.obeonetwork.dsl.database.Constraint)6 ForeignKeyElement (org.obeonetwork.dsl.database.ForeignKeyElement)6 Sequence (org.obeonetwork.dsl.database.Sequence)6 BigInteger (java.math.BigInteger)5 ResultSet (java.sql.ResultSet)5 SQLException (java.sql.SQLException)5 NativeType (org.obeonetwork.dsl.typeslibrary.NativeType)5 PreparedStatement (java.sql.PreparedStatement)4 Viewer (org.eclipse.jface.viewers.Viewer)4 ViewerFilter (org.eclipse.jface.viewers.ViewerFilter)4 IndexElement (org.obeonetwork.dsl.database.IndexElement)4