Search in sources :

Example 16 with org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column

use of org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column in project jaxdb by jaxdb.

the class DDLxTest method recreateSchema.

// FIXME: The efficiency of this is TERRIBLE!
public static Schema recreateSchema(final Connection connection, final String ddlxFileName, final boolean unaltered) throws GeneratorExecutionException, IOException, SAXException, SQLException, TransformerException {
    final DDLx ddlx = new DDLx(ClassLoader.getSystemClassLoader().getResource(ddlxFileName + ".ddlx"));
    final Schema schema = ddlx.getMergedSchema();
    if (!unaltered) {
        final Dialect dialect = DBVendor.valueOf(connection.getMetaData()).getDialect();
        for (final $Table table : schema.getTable()) {
            if (table.getColumn() != null) {
                for (final $Column column : table.getColumn()) {
                    if (column instanceof $Decimal) {
                        final $Decimal decimal = ($Decimal) column;
                        final int maxPrecision = dialect.decimalMaxPrecision();
                        decimal.setPrecision$(new $Decimal.Precision$(maxPrecision));
                        if (decimal.getScale$() != null && decimal.getScale$().text() > maxPrecision)
                            decimal.setScale$(new $Decimal.Scale$(maxPrecision));
                    }
                }
            }
        }
    }
    final URL url = MemoryURLStreamHandler.createURL(schema.toString().getBytes());
    Schemas.recreate(connection, url);
    return schema;
}
Also used : org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Table(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Table) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Decimal(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Decimal) Schema(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.Schema) Dialect(org.jaxdb.vendor.Dialect) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column) URL(java.net.URL)

Example 17 with org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column

use of org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column in project jaxdb by jaxdb.

the class Compiler method createConstraints.

private CreateStatement createConstraints(final Map<String, ColumnRef> columnNameToColumn, final $Table table) throws GeneratorExecutionException {
    final StringBuilder constraintsBuilder = new StringBuilder();
    if (table.getConstraints() != null) {
        final $Constraints constraints = table.getConstraints();
        // UNIQUE constraint
        final List<$Columns> uniques = constraints.getUnique();
        if (uniques != null) {
            final StringBuilder uniqueString = new StringBuilder();
            final StringBuilder uniqueBuilder = new StringBuilder();
            for (final $Columns unique : uniques) {
                final List<$Named> columns = unique.getColumn();
                final int[] columnIndexes = new int[columns.size()];
                for (int i = 0, len = columns.size(); i < len; ++i) {
                    if (i > 0)
                        uniqueBuilder.append(", ");
                    final String columnName = columns.get(i).getName$().text();
                    uniqueBuilder.append(q(columnName));
                    columnIndexes[i] = columnNameToColumn.get(columnName).index;
                }
                uniqueString.append(",\n  CONSTRAINT ").append(q(getConstraintName("uq", table, null, columnIndexes))).append(" UNIQUE (").append(uniqueBuilder).append(')');
                uniqueBuilder.setLength(0);
            }
            constraintsBuilder.append(uniqueString);
        }
        // CHECK constraint
        final List<$CheckReference> checks = constraints.getCheck();
        if (checks != null) {
            final StringBuilder checkBuilder = new StringBuilder();
            for (final $CheckReference check : checks) {
                final String checkRule = recurseCheckRule(check);
                final String checkClause = checkRule.startsWith("(") ? checkRule : "(" + checkRule + ")";
                checkBuilder.append(",\n  CONSTRAINT ").append(q(getConstraintName("ck", new StringBuilder(hash(table.getName$().text() + checkClause))))).append(" CHECK ").append(checkClause);
            }
            constraintsBuilder.append(checkBuilder);
        }
        // PRIMARY KEY constraint
        final String primaryKeyConstraint = blockPrimaryKey(table, constraints, columnNameToColumn);
        if (primaryKeyConstraint != null)
            constraintsBuilder.append(primaryKeyConstraint);
        // FOREIGN KEY constraints
        final List<$ForeignKeyComposite> foreignKeyComposites = constraints.getForeignKey();
        if (foreignKeyComposites != null) {
            for (final $ForeignKeyComposite foreignKeyComposite : foreignKeyComposites) {
                final List<$ForeignKeyComposite.Column> columns = foreignKeyComposite.getColumn();
                final int[] columnIndexes = new int[columns.size()];
                final String[] foreignKeyColumns = new String[columns.size()];
                final String[] foreignKeyReferences = new String[columns.size()];
                for (int i = 0, len = columns.size(); i < len; ++i) {
                    final $ForeignKeyComposite.Column column = columns.get(i);
                    final String columnName = column.getName$().text();
                    foreignKeyColumns[i] = q(columnName);
                    foreignKeyReferences[i] = q(column.getReferences$().text());
                    columnIndexes[i] = columnNameToColumn.get(columnName).index;
                }
                constraintsBuilder.append(",\n  ").append(foreignKey(table, foreignKeyComposite.getReferences$(), columnIndexes)).append(" (").append(ArrayUtil.toString(foreignKeyColumns, ", "));
                constraintsBuilder.append(") REFERENCES ").append(q(foreignKeyComposite.getReferences$().text()));
                constraintsBuilder.append(" (").append(ArrayUtil.toString(foreignKeyReferences, ", ")).append(')');
                appendOnDeleteOnUpdate(constraintsBuilder, foreignKeyComposite);
            }
        }
    }
    if (table.getColumn() != null) {
        final List<$Column> columns = table.getColumn();
        for (int c = 0, len = columns.size(); c < len; ++c) {
            final $Column column = columns.get(c);
            final $ForeignKeyUnary foreignKey = column.getForeignKey();
            if (foreignKey != null) {
                constraintsBuilder.append(",\n  ").append(foreignKey(table, foreignKey.getReferences$(), c)).append(" (").append(q(column.getName$().text()));
                constraintsBuilder.append(") REFERENCES ").append(q(foreignKey.getReferences$().text()));
                constraintsBuilder.append(" (").append(q(foreignKey.getColumn$().text())).append(')');
                appendOnDeleteOnUpdate(constraintsBuilder, foreignKey);
            }
        }
        // Parse the min & max constraints of numeric types
        for (int c = 0, len = columns.size(); c < len; ++c) {
            final $Column column = columns.get(c);
            String minCheck = null;
            String maxCheck = null;
            if (column instanceof $Integer) {
                if (column instanceof $Tinyint) {
                    final $Tinyint type = ($Tinyint) column;
                    minCheck = type.getMin$() != null ? String.valueOf(type.getMin$().text()) : null;
                    maxCheck = type.getMax$() != null ? String.valueOf(type.getMax$().text()) : null;
                } else if (column instanceof $Smallint) {
                    final $Smallint type = ($Smallint) column;
                    minCheck = type.getMin$() != null ? String.valueOf(type.getMin$().text()) : null;
                    maxCheck = type.getMax$() != null ? String.valueOf(type.getMax$().text()) : null;
                } else if (column instanceof $Int) {
                    final $Int type = ($Int) column;
                    minCheck = type.getMin$() != null ? String.valueOf(type.getMin$().text()) : null;
                    maxCheck = type.getMax$() != null ? String.valueOf(type.getMax$().text()) : null;
                } else if (column instanceof $Bigint) {
                    final $Bigint type = ($Bigint) column;
                    minCheck = type.getMin$() != null ? String.valueOf(type.getMin$().text()) : null;
                    maxCheck = type.getMax$() != null ? String.valueOf(type.getMax$().text()) : null;
                } else {
                    throw new UnsupportedOperationException("Unsupported type: " + column.getClass().getName());
                }
            } else if (column instanceof $Float) {
                final $Float type = ($Float) column;
                minCheck = type.getMin$() != null ? String.valueOf(type.getMin$().text()) : null;
                maxCheck = type.getMax$() != null ? String.valueOf(type.getMax$().text()) : null;
            } else if (column instanceof $Double) {
                final $Double type = ($Double) column;
                minCheck = type.getMin$() != null ? String.valueOf(type.getMin$().text()) : null;
                maxCheck = type.getMax$() != null ? String.valueOf(type.getMax$().text()) : null;
            } else if (column instanceof $Decimal) {
                final $Decimal type = ($Decimal) column;
                minCheck = type.getMin$() != null ? String.valueOf(type.getMin$().text()) : null;
                maxCheck = type.getMax$() != null ? String.valueOf(type.getMax$().text()) : null;
            }
            final String minCheckExp = minCheck == null ? null : q(column.getName$().text()) + " >= " + minCheck;
            final String maxCheckExp = maxCheck == null ? null : q(column.getName$().text()) + " <= " + maxCheck;
            if (minCheck != null) {
                if (maxCheck != null)
                    constraintsBuilder.append(",\n  ").append(check(table, c, Operator.GTE, minCheck, Operator.LTE, maxCheck)).append(" (").append(minCheckExp).append(" AND ").append(maxCheckExp).append(')');
                else
                    constraintsBuilder.append(",\n  ").append(check(table, c, Operator.GTE, minCheck, null, null)).append(" (").append(minCheckExp).append(')');
            } else if (maxCheck != null) {
                constraintsBuilder.append(",\n  ").append(check(table, c, Operator.LTE, maxCheck, null, null)).append(" (").append(maxCheckExp).append(')');
            }
        }
        // parse the <check/> element per type
        for (int c = 0, len = columns.size(); c < len; ++c) {
            final $Column column = columns.get(c);
            Operator operator = null;
            String condition = null;
            if (column instanceof $Char) {
                final $Char type = ($Char) column;
                if (type.getCheck() != null) {
                    operator = Operator.valueOf(type.getCheck().getOperator$().text());
                    condition = "'" + type.getCheck().getValue$().text() + "'";
                }
            } else if (column instanceof $Tinyint) {
                final $Tinyint type = ($Tinyint) column;
                if (type.getCheck() != null) {
                    operator = Operator.valueOf(type.getCheck().getOperator$().text());
                    condition = String.valueOf(type.getCheck().getValue$().text());
                }
            } else if (column instanceof $Smallint) {
                final $Smallint type = ($Smallint) column;
                if (type.getCheck() != null) {
                    operator = Operator.valueOf(type.getCheck().getOperator$().text());
                    condition = String.valueOf(type.getCheck().getValue$().text());
                }
            } else if (column instanceof $Int) {
                final $Int type = ($Int) column;
                if (type.getCheck() != null) {
                    operator = Operator.valueOf(type.getCheck().getOperator$().text());
                    condition = String.valueOf(type.getCheck().getValue$().text());
                }
            } else if (column instanceof $Bigint) {
                final $Bigint type = ($Bigint) column;
                if (type.getCheck() != null) {
                    operator = Operator.valueOf(type.getCheck().getOperator$().text());
                    condition = String.valueOf(type.getCheck().getValue$().text());
                }
            } else if (column instanceof $Float) {
                final $Float type = ($Float) column;
                if (type.getCheck() != null) {
                    operator = Operator.valueOf(type.getCheck().getOperator$().text());
                    condition = String.valueOf(type.getCheck().getValue$().text());
                }
            } else if (column instanceof $Double) {
                final $Double type = ($Double) column;
                if (type.getCheck() != null) {
                    operator = Operator.valueOf(type.getCheck().getOperator$().text());
                    condition = String.valueOf(type.getCheck().getValue$().text());
                }
            } else if (column instanceof $Decimal) {
                final $Decimal type = ($Decimal) column;
                if (type.getCheck() != null) {
                    operator = Operator.valueOf(type.getCheck().getOperator$().text());
                    condition = String.valueOf(type.getCheck().getValue$().text());
                }
            }
            if (operator != null) {
                if (condition != null)
                    constraintsBuilder.append(",\n  ").append(check(table, c, operator, condition, null, null)).append(" (").append(q(column.getName$().text())).append(' ').append(operator.symbol).append(' ').append(condition).append(')');
                else
                    throw new UnsupportedOperationException("Unsupported 'null' condition encountered on column '" + column.getName$().text());
            } else if (condition != null) {
                throw new UnsupportedOperationException("Unsupported 'null' operator encountered on column '" + column.getName$().text());
            }
        }
    }
    return constraintsBuilder.length() == 0 ? null : new CreateStatement(constraintsBuilder.toString());
}
Also used : org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Char(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Char) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Tinyint(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Tinyint) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Decimal(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Decimal) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$ForeignKeyUnary(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$ForeignKeyUnary) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$ForeignKeyComposite(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$ForeignKeyComposite) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Bigint(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Bigint) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$CheckReference(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$CheckReference) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Constraints(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Constraints) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Named(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Named) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Smallint(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Smallint) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Integer(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Integer) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Float(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Float) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Columns(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Columns) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Double(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Double) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Tinyint(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Tinyint) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Bigint(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Bigint) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Smallint(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Smallint) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Int(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Int)

Example 18 with org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column

use of org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column in project jaxdb by jaxdb.

the class Compiler method $default.

String $default(final $Column column) {
    if (column instanceof $Char) {
        final $Char type = ($Char) column;
        if (type.getDefault$() == null)
            return null;
        if (type.getDefault$().text().length() > type.getLength$().text())
            throw new IllegalArgumentException(type.name().getPrefix() + ":" + type.name().getLocalPart() + " column '" + column.getName$().text() + "' DEFAULT '" + type.getDefault$().text() + "' is longer than declared LENGTH(" + type.getLength$().text() + ")");
        return "'" + type.getDefault$().text() + "'";
    }
    if (column instanceof $Binary) {
        final $Binary type = ($Binary) column;
        if (type.getDefault$() == null)
            return null;
        if (type.getDefault$().text().getBytes().length > type.getLength$().text())
            throw new IllegalArgumentException(type.name().getPrefix() + ":" + type.name().getLocalPart() + " column '" + column.getName$().text() + "' DEFAULT '" + type.getDefault$().text() + "' is longer than declared LENGTH " + type.getLength$().text());
        return compileBinary(type.getDefault$().text().toString());
    }
    if (column instanceof $Integer) {
        final Number _default;
        final Byte precision;
        final Number min;
        final Number max;
        if (column instanceof $Tinyint) {
            final $Tinyint type = ($Tinyint) column;
            _default = type.getDefault$() == null ? null : type.getDefault$().text();
            precision = type.getPrecision$() == null ? null : type.getPrecision$().text();
            min = type.getMin$() == null ? null : type.getMin$().text();
            max = type.getMax$() == null ? null : type.getMax$().text();
        } else if (column instanceof $Smallint) {
            final $Smallint type = ($Smallint) column;
            _default = type.getDefault$() == null ? null : type.getDefault$().text();
            precision = type.getPrecision$() == null ? null : type.getPrecision$().text();
            min = type.getMin$() == null ? null : type.getMin$().text();
            max = type.getMax$() == null ? null : type.getMax$().text();
        } else if (column instanceof $Int) {
            final $Int type = ($Int) column;
            _default = type.getDefault$() == null ? null : type.getDefault$().text();
            precision = type.getPrecision$() == null ? null : type.getPrecision$().text();
            min = type.getMin$() == null ? null : type.getMin$().text();
            max = type.getMax$() == null ? null : type.getMax$().text();
        } else if (column instanceof $Bigint) {
            final $Bigint type = ($Bigint) column;
            _default = type.getDefault$() == null ? null : type.getDefault$().text();
            precision = type.getPrecision$() == null ? null : type.getPrecision$().text();
            min = type.getMin$() == null ? null : type.getMin$().text();
            max = type.getMax$() == null ? null : type.getMax$().text();
        } else {
            throw new UnsupportedOperationException("Unsupported type: " + column.getClass().getName());
        }
        if (_default == null)
            return null;
        checkNumericDefault(column, precision == null ? null : Integer.valueOf(precision), _default, min, max);
        return String.valueOf(_default);
    }
    if (column instanceof $Float) {
        final $Float type = ($Float) column;
        if (type.getDefault$() == null)
            return null;
        checkNumericDefault(type, null, type.getDefault$().text(), type.getMin$() == null ? null : type.getMin$().text(), type.getMax$() == null ? null : type.getMax$().text());
        return type.getDefault$().text().toString();
    }
    if (column instanceof $Double) {
        final $Double type = ($Double) column;
        if (type.getDefault$() == null)
            return null;
        checkNumericDefault(type, null, type.getDefault$().text(), type.getMin$() == null ? null : type.getMin$().text(), type.getMax$() == null ? null : type.getMax$().text());
        return type.getDefault$().text().toString();
    }
    if (column instanceof $Decimal) {
        final $Decimal type = ($Decimal) column;
        if (type.getDefault$() == null)
            return null;
        checkNumericDefault(type, type.getPrecision$() == null ? null : type.getPrecision$().text(), type.getDefault$().text(), type.getMin$() == null ? null : type.getMin$().text(), type.getMax$() == null ? null : type.getMax$().text());
        return type.getDefault$().text().toString();
    }
    if (column instanceof $Date) {
        final $Date type = ($Date) column;
        return type.getDefault$() == null ? null : compileDate(type.getDefault$().text());
    }
    if (column instanceof $Time) {
        final $Time type = ($Time) column;
        return type.getDefault$() == null ? null : compileTime(type.getDefault$().text());
    }
    if (column instanceof $Datetime) {
        final $Datetime type = ($Datetime) column;
        return type.getDefault$() == null ? null : compileDateTime(type.getDefault$().text());
    }
    if (column instanceof $Boolean) {
        final $Boolean type = ($Boolean) column;
        return type.getDefault$() == null ? null : type.getDefault$().text().toString();
    }
    if (column instanceof $Enum) {
        final $Enum type = ($Enum) column;
        return type.getDefault$() == null ? null : "'" + type.getDefault$().text() + "'";
    }
    if (column instanceof $Clob || column instanceof $Blob)
        return null;
    throw new UnsupportedOperationException("Unknown type: " + column.getClass().getName());
}
Also used : org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Char(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Char) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Integer(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Integer) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Tinyint(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Tinyint) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Decimal(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Decimal) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Float(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Float) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Double(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Double) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Date(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Date) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Bigint(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Bigint) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Time(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Time) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Enum(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Enum) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Int(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Int) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Boolean(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Boolean) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Clob(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Clob) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Blob(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Blob) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Datetime(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Datetime) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Binary(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Binary) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Smallint(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Smallint)

Example 19 with org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column

use of org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column in project jaxdb by jaxdb.

the class Compiler method indexes.

List<CreateStatement> indexes(final $Table table, final Map<String, ColumnRef> columnNameToColumn) {
    final List<CreateStatement> statements = new ArrayList<>();
    if (table.getIndexes() != null) {
        for (final $Table.Indexes.Index index : table.getIndexes().getIndex()) {
            final List<$Named> columns = index.getColumn();
            final int[] columnIndexes = new int[columns.size()];
            for (int c = 0, len = columns.size(); c < len; ++c) {
                final $Named column = columns.get(c);
                columnIndexes[c] = columnNameToColumn.get(column.getName$().text()).index;
            }
            final CreateStatement createIndex = createIndex(index.getUnique$() != null && index.getUnique$().text(), getIndexName(table, index, columnIndexes), index.getType$(), table.getName$().text(), index.getColumn().toArray(new $Named[index.getColumn().size()]));
            if (createIndex != null)
                statements.add(createIndex);
        }
    }
    if (table.getColumn() != null) {
        final List<$Column> columns = table.getColumn();
        for (int c = 0, len = columns.size(); c < len; ++c) {
            final $Column column = columns.get(c);
            if (column.getIndex() != null) {
                final CreateStatement createIndex = createIndex(column.getIndex().getUnique$() != null && column.getIndex().getUnique$().text(), getIndexName(table, column.getIndex(), c), column.getIndex().getType$(), table.getName$().text(), column);
                if (createIndex != null)
                    statements.add(createIndex);
            }
        }
    }
    return statements;
}
Also used : org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Named(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Named) ArrayList(java.util.ArrayList) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Tinyint(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Tinyint) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Bigint(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Bigint) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Smallint(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Smallint) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column)

Example 20 with org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column

use of org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column in project jaxdb by jaxdb.

the class DDLx method topologicalSort.

private static Schema topologicalSort(final Schema schema) {
    final List<$Table> tables = new ArrayList<>(schema.getTable());
    schema.getTable().clear();
    tables.sort(tableNameComparator);
    final RefDigraph<$Table, String> digraph = new RefDigraph<>(table -> table.getName$().text().toLowerCase());
    for (final $Table table : tables) {
        digraph.add(table);
        if (table.getColumn() != null)
            for (final $Column column : table.getColumn()) if (column.getForeignKey() != null)
                digraph.add(table, column.getForeignKey().getReferences$().text().toLowerCase());
        if (table.getConstraints() != null && table.getConstraints().getForeignKey() != null)
            for (final $ForeignKeyComposite foreignKey : table.getConstraints().getForeignKey()) digraph.add(table, foreignKey.getReferences$().text().toLowerCase());
    }
    if (digraph.hasCycle())
        throw new IllegalStateException("Cycle exists in relational model: " + CollectionUtil.toString(digraph.getCycle(), " -> "));
    final List<$Table> topologialOrder = digraph.getTopologicalOrder();
    final ListIterator<$Table> topological = topologialOrder.listIterator(digraph.size());
    while (topological.hasPrevious()) schema.getTable().add(topological.previous());
    return schema;
}
Also used : org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Table(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Table) RefDigraph(org.libj.util.RefDigraph) ArrayList(java.util.ArrayList) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$ForeignKeyComposite(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$ForeignKeyComposite) org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column(org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column)

Aggregations

org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column (org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Column)21 ArrayList (java.util.ArrayList)19 org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Bigint (org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Bigint)16 org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Smallint (org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Smallint)16 HashMap (java.util.HashMap)14 org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Tinyint (org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Tinyint)13 List (java.util.List)11 Column (org.molgenis.emx2.Column)11 Column (com.google.bigtable.v2.Column)9 org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Integer (org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Integer)9 Family (com.google.bigtable.v2.Family)8 org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Decimal (org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Decimal)8 org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Enum (org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Enum)8 org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Table (org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Table)8 Test (org.junit.Test)8 org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Boolean (org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Boolean)7 org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Char (org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Char)7 org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Double (org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Double)7 org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Float (org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Float)7 org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Named (org.jaxdb.www.ddlx_0_5.xLygluGCXAA.$Named)7