Search in sources :

Example 6 with Column

use of org.openforis.collect.relational.model.Column in project collect by openforis.

the class JooqRelationalSchemaCreator method createDataTableView.

private void createDataTableView(RelationalSchema schema, DataTable dataTable, Connection conn) {
    CollectDSLContext dsl = new CollectDSLContext(conn);
    List<Field<?>> fields = new ArrayList<Field<?>>();
    List<TableLike<?>> tables = new ArrayList<TableLike<?>>();
    List<Condition> conditions = new ArrayList<Condition>();
    DataTable currentTable = dataTable;
    while (currentTable != null) {
        org.jooq.Table<Record> currentJooqTable = jooqTable(schema, currentTable, !dsl.isSchemaLess());
        tables.add(currentJooqTable);
        List<Column<?>> columns = currentTable.getColumns();
        for (Column<?> column : columns) {
            if (!(column instanceof DataAncestorFKColumn)) {
                fields.add(field(name(currentJooqTable.getName(), column.getName())));
            }
        }
        // add parent table join condition
        DataTable parentTable = currentTable.getParent();
        if (parentTable != null) {
            // names are duplicate, use the table name as prefix in the join condition
            Condition parentTableJoinCondition = field(currentJooqTable.getName() + "." + currentTable.getParentFKColumn().getName()).eq(field(parentTable.getName() + "." + parentTable.getPrimaryKeyColumn().getName()));
            conditions.add(parentTableJoinCondition);
        }
        currentTable = parentTable;
    }
    Select<?> select = dsl.select(fields).from(tables).where(conditions);
    Name name;
    if (dsl.isSchemaLess()) {
        name = name(dataTable.getName() + "_view");
    } else {
        name = name(schema.getName(), dataTable.getName() + "_view");
    }
    dsl.createView(DSL.table(name), fields.toArray(new Field[fields.size()])).as(select).execute();
}
Also used : Condition(org.jooq.Condition) DataTable(org.openforis.collect.relational.model.DataTable) TableLike(org.jooq.TableLike) ArrayList(java.util.ArrayList) CollectDSLContext(org.openforis.collect.persistence.jooq.CollectDSLContext) DataAncestorFKColumn(org.openforis.collect.relational.model.DataAncestorFKColumn) Name(org.jooq.Name) Field(org.jooq.Field) DataAncestorFKColumn(org.openforis.collect.relational.model.DataAncestorFKColumn) Column(org.openforis.collect.relational.model.Column) CodeListCodeColumn(org.openforis.collect.relational.model.CodeListCodeColumn) Record(org.jooq.Record)

Example 7 with Column

use of org.openforis.collect.relational.model.Column in project collect by openforis.

the class JooqRelationalSchemaCreator method createForeignKeys.

private void createForeignKeys(RelationalSchema schema, CollectDSLContext dsl) {
    for (org.openforis.collect.relational.model.Table<?> table : schema.getTables()) {
        List<ReferentialConstraint> fks = table.getReferentialContraints();
        for (ReferentialConstraint fk : fks) {
            Field<?>[] fields = toJooqFields(fk.getColumns());
            org.jooq.Table<Record> jooqTable = jooqTable(schema, table, !dsl.isSchemaLess());
            org.jooq.Table<Record> referencedJooqTable = jooqTable(schema, fk.getReferencedKey().getTable(), !dsl.isSchemaLess());
            List<Column<?>> referencedColumns = fk.getReferencedKey().getColumns();
            dsl.alterTable(jooqTable).add(constraint(fk.getName()).foreignKey(fields).references(referencedJooqTable, toJooqFields(referencedColumns))).execute();
        }
    }
}
Also used : ReferentialConstraint(org.openforis.collect.relational.model.ReferentialConstraint) Field(org.jooq.Field) DataAncestorFKColumn(org.openforis.collect.relational.model.DataAncestorFKColumn) Column(org.openforis.collect.relational.model.Column) CodeListCodeColumn(org.openforis.collect.relational.model.CodeListCodeColumn) Record(org.jooq.Record)

Example 8 with Column

use of org.openforis.collect.relational.model.Column in project collect by openforis.

the class RDBSchemaPrintTask method writeTable.

private void writeTable(Table<?> table) throws IOException {
    writer.write("CREATE TABLE ");
    if (!isSchemaless()) {
        writer.write(doubleQuote(schema.getName()));
        writer.write('.');
    }
    writer.write(doubleQuote(table.getName()));
    writer.write(" (");
    writer.write('\n');
    List<Column<?>> columns = table.getColumns();
    for (int i = 0; i < columns.size(); i++) {
        if (i > 0) {
            writer.write(',');
            writer.write('\n');
        }
        Column<?> column = columns.get(i);
        writeColumn(column);
    }
    if (includeForeignKeysInCreateTable && !table.getReferentialContraints().isEmpty()) {
        writer.write(',');
        writer.write('\n');
        List<ReferentialConstraint> fks = table.getReferentialContraints();
        for (int i = 0; i < fks.size(); i++) {
            ReferentialConstraint fk = fks.get(i);
            writer.write('\t');
            writeForeignKeyConstraint(fk);
            if (i < fks.size() - 1) {
                writer.write(", \n");
            }
        }
    }
    writer.write('\n');
    writer.write(");");
    writer.write('\n');
}
Also used : Column(org.openforis.collect.relational.model.Column) PrimaryKeyColumn(org.openforis.collect.relational.model.PrimaryKeyColumn) ReferentialConstraint(org.openforis.collect.relational.model.ReferentialConstraint) PrimaryKeyConstraint(org.openforis.collect.relational.model.PrimaryKeyConstraint) ReferentialConstraint(org.openforis.collect.relational.model.ReferentialConstraint) UniquenessConstraint(org.openforis.collect.relational.model.UniquenessConstraint)

Aggregations

Column (org.openforis.collect.relational.model.Column)8 CodeListCodeColumn (org.openforis.collect.relational.model.CodeListCodeColumn)4 Row (org.openforis.collect.relational.data.Row)3 DataAncestorFKColumn (org.openforis.collect.relational.model.DataAncestorFKColumn)3 ReferentialConstraint (org.openforis.collect.relational.model.ReferentialConstraint)3 Field (org.jooq.Field)2 Record (org.jooq.Record)2 CodeLabelColumn (org.openforis.collect.relational.model.CodeLabelColumn)2 CodeListDescriptionColumn (org.openforis.collect.relational.model.CodeListDescriptionColumn)2 CodeParentKeyColumn (org.openforis.collect.relational.model.CodeParentKeyColumn)2 CodePrimaryKeyColumn (org.openforis.collect.relational.model.CodePrimaryKeyColumn)2 PrimaryKeyColumn (org.openforis.collect.relational.model.PrimaryKeyColumn)2 PrimaryKeyConstraint (org.openforis.collect.relational.model.PrimaryKeyConstraint)2 UniquenessConstraint (org.openforis.collect.relational.model.UniquenessConstraint)2 ArrayList (java.util.ArrayList)1 DatabaseIO (org.apache.ddlutils.io.DatabaseIO)1 Database (org.apache.ddlutils.model.Database)1 Condition (org.jooq.Condition)1 Name (org.jooq.Name)1 TableLike (org.jooq.TableLike)1