Search in sources :

Example 66 with TableDefinition

use of org.jooq.meta.TableDefinition in project jOOQ by jOOQ.

the class XMLGenerator method generate0.

@Override
public void generate0(Database db) {
    logDatabaseParameters(db);
    log.info("");
    logGenerationRemarks(db);
    log.info("");
    log.info("----------------------------------------------------------");
    TextWriter out = new TextWriter(getStrategy().getFile("information_schema.xml"), targetEncoding);
    log.info("");
    log.info("Generating XML", out.file().getName());
    log.info("==========================================================");
    InformationSchema is = new InformationSchema();
    boolean hasNonDefaultCatalogs = false;
    for (CatalogDefinition c : db.getCatalogs()) {
        if (!StringUtils.isBlank(c.getName())) {
            hasNonDefaultCatalogs = true;
            break;
        }
    }
    for (CatalogDefinition c : db.getCatalogs()) {
        String catalogName = c.getOutputName();
        if (hasNonDefaultCatalogs)
            is.getCatalogs().add(new Catalog().withCatalogName(catalogName).withComment(generateCommentsOnCatalogs() ? c.getComment() : null));
        for (SchemaDefinition s : c.getSchemata()) {
            String schemaName = s.getOutputName();
            Schema schema = new Schema();
            schema.setCatalogName(catalogName);
            schema.setSchemaName(schemaName);
            if (generateCommentsOnSchemas())
                schema.setComment(s.getComment());
            is.getSchemata().add(schema);
            for (TableDefinition t : s.getTables()) {
                String tableName = t.getOutputName();
                Table table = new Table();
                table.setTableCatalog(catalogName);
                table.setTableSchema(schemaName);
                table.setTableName(tableName);
                table.setTableType(t.isView() ? TableType.VIEW : t.isTemporary() ? TableType.GLOBAL_TEMPORARY : TableType.BASE_TABLE);
                if (generateCommentsOnTables())
                    table.setComment(t.getComment());
                is.getTables().add(table);
                if (t.isView()) {
                    View view = new View();
                    view.setTableCatalog(catalogName);
                    view.setTableSchema(schemaName);
                    view.setTableName(tableName);
                    if (generateSourcesOnViews())
                        view.setViewDefinition(t.getSource());
                    is.getViews().add(view);
                }
                for (ColumnDefinition co : t.getColumns()) {
                    String columnName = co.getOutputName();
                    DataTypeDefinition type = co.getType();
                    Column column = new Column();
                    column.setTableCatalog(catalogName);
                    column.setTableSchema(schemaName);
                    column.setTableName(tableName);
                    column.setColumnName(columnName);
                    if (generateCommentsOnColumns())
                        column.setComment(co.getComment());
                    column.setCharacterMaximumLength(type.getLength());
                    column.setColumnDefault(type.getDefaultValue());
                    column.setDataType(type.getType());
                    if (co.isIdentity())
                        column.setIdentityGeneration("YES");
                    column.setIsNullable(type.isNullable());
                    column.setNumericPrecision(type.getPrecision());
                    column.setNumericScale(type.getScale());
                    column.setOrdinalPosition(co.getPosition());
                    column.setReadonly(co.isReadonly());
                    if (type.isComputed()) {
                        column.setIsGenerated(type.isComputed());
                        column.setGenerationExpression(type.getGeneratedAlwaysAs());
                        column.setGenerationOption(type.getGenerationOption() == VIRTUAL ? "VIRTUAL" : type.getGenerationOption() == STORED ? "STORED" : null);
                    }
                    is.getColumns().add(column);
                }
            }
            for (IndexDefinition i : db.getIndexes(s)) {
                String indexName = i.getOutputName();
                TableDefinition table = i.getTable();
                List<IndexColumnDefinition> columns = i.getIndexColumns();
                Index index = new Index();
                index.setIndexCatalog(catalogName);
                index.setIndexSchema(schemaName);
                index.setIndexName(indexName);
                if (generateCommentsOnKeys())
                    index.setComment(i.getComment());
                index.setTableCatalog(table.getCatalog().getOutputName());
                index.setTableSchema(table.getSchema().getOutputName());
                index.setTableName(table.getOutputName());
                index.setIsUnique(i.isUnique());
                is.getIndexes().add(index);
                for (int j = 0; j < columns.size(); j++) {
                    IndexColumnDefinition indexColumn = columns.get(j);
                    ColumnDefinition column = indexColumn.getColumn();
                    IndexColumnUsage ic = new IndexColumnUsage();
                    ic.setIndexCatalog(catalogName);
                    ic.setIndexSchema(schemaName);
                    ic.setIndexName(indexName);
                    ic.setColumnName(column.getOutputName());
                    ic.setOrdinalPosition(j + 1);
                    ic.setIsDescending(indexColumn.getSortOrder() == SortOrder.DESC);
                    ic.setTableCatalog(table.getCatalog().getOutputName());
                    ic.setTableSchema(table.getSchema().getOutputName());
                    ic.setTableName(table.getOutputName());
                    is.getIndexColumnUsages().add(ic);
                }
            }
            for (UniqueKeyDefinition u : db.getKeys(s)) {
                String constraintName = u.getOutputName();
                TableDefinition table = u.getTable();
                List<ColumnDefinition> columns = u.getKeyColumns();
                TableConstraint tc = new TableConstraint();
                tc.setConstraintCatalog(catalogName);
                tc.setConstraintSchema(schemaName);
                tc.setConstraintName(constraintName);
                tc.setConstraintType(u.isPrimaryKey() ? PRIMARY_KEY : UNIQUE);
                if (generateCommentsOnKeys())
                    tc.setComment(u.getComment());
                tc.setTableCatalog(table.getCatalog().getOutputName());
                tc.setTableSchema(table.getSchema().getOutputName());
                tc.setTableName(table.getOutputName());
                tc.setEnforced(u.enforced());
                is.getTableConstraints().add(tc);
                for (int i = 0; i < columns.size(); i++) {
                    ColumnDefinition column = columns.get(i);
                    KeyColumnUsage kc = new KeyColumnUsage();
                    kc.setConstraintCatalog(catalogName);
                    kc.setConstraintSchema(schemaName);
                    kc.setConstraintName(constraintName);
                    kc.setColumnName(column.getOutputName());
                    kc.setOrdinalPosition(i + 1);
                    kc.setTableCatalog(table.getCatalog().getOutputName());
                    kc.setTableSchema(table.getSchema().getOutputName());
                    kc.setTableName(table.getOutputName());
                    is.getKeyColumnUsages().add(kc);
                }
            }
            for (ForeignKeyDefinition f : db.getForeignKeys(s)) {
                String constraintName = f.getOutputName();
                UniqueKeyDefinition referenced = f.getReferencedKey();
                TableDefinition table = f.getKeyTable();
                List<ColumnDefinition> columns = f.getKeyColumns();
                TableConstraint tc = new TableConstraint();
                tc.setConstraintCatalog(catalogName);
                tc.setConstraintSchema(schemaName);
                tc.setConstraintName(constraintName);
                tc.setConstraintType(FOREIGN_KEY);
                if (generateCommentsOnKeys())
                    tc.setComment(f.getComment());
                tc.setTableCatalog(table.getCatalog().getOutputName());
                tc.setTableSchema(table.getSchema().getOutputName());
                tc.setTableName(table.getOutputName());
                tc.setEnforced(f.enforced());
                ReferentialConstraint rc = new ReferentialConstraint();
                rc.setConstraintCatalog(catalogName);
                rc.setConstraintSchema(schemaName);
                rc.setConstraintName(constraintName);
                rc.setUniqueConstraintCatalog(referenced.getCatalog().getOutputName());
                rc.setUniqueConstraintSchema(referenced.getSchema().getOutputName());
                rc.setUniqueConstraintName(referenced.getOutputName());
                is.getTableConstraints().add(tc);
                is.getReferentialConstraints().add(rc);
                for (int i = 0; i < columns.size(); i++) {
                    ColumnDefinition column = columns.get(i);
                    KeyColumnUsage kc = new KeyColumnUsage();
                    kc.setConstraintCatalog(catalogName);
                    kc.setConstraintSchema(schemaName);
                    kc.setConstraintName(constraintName);
                    kc.setColumnName(column.getOutputName());
                    kc.setOrdinalPosition(i + 1);
                    kc.setTableCatalog(table.getCatalog().getOutputName());
                    kc.setTableSchema(table.getSchema().getOutputName());
                    kc.setTableName(table.getOutputName());
                    is.getKeyColumnUsages().add(kc);
                }
            }
            for (CheckConstraintDefinition ch : db.getCheckConstraints(s)) {
                String constraintName = ch.getOutputName();
                TableDefinition table = ch.getTable();
                TableConstraint tc = new TableConstraint();
                tc.setConstraintCatalog(catalogName);
                tc.setConstraintSchema(schemaName);
                tc.setConstraintName(constraintName);
                tc.setConstraintType(CHECK);
                if (generateCommentsOnKeys())
                    tc.setComment(ch.getComment());
                tc.setTableCatalog(table.getCatalog().getOutputName());
                tc.setTableSchema(table.getSchema().getOutputName());
                tc.setTableName(table.getOutputName());
                tc.setEnforced(ch.enforced());
                is.getTableConstraints().add(tc);
                CheckConstraint cc = new CheckConstraint();
                cc.setConstraintCatalog(catalogName);
                cc.setConstraintSchema(schemaName);
                cc.setConstraintName(constraintName);
                cc.setCheckClause(ch.getCheckClause());
                is.getCheckConstraints().add(cc);
            }
            for (SequenceDefinition se : db.getSequences(s)) {
                String sequenceName = se.getOutputName();
                DataTypeDefinition type = se.getType();
                Sequence sequence = new Sequence();
                sequence.setSequenceCatalog(catalogName);
                sequence.setSequenceSchema(schemaName);
                sequence.setSequenceName(sequenceName);
                if (generateCommentsOnSequences())
                    sequence.setComment(se.getComment());
                sequence.setCharacterMaximumLength(type.getLength());
                sequence.setDataType(type.getType());
                sequence.setNumericPrecision(type.getPrecision());
                sequence.setNumericScale(type.getScale());
                sequence.setStartValue(Convert.convert(se.getStartWith(), BigInteger.class));
                sequence.setIncrement(Convert.convert(se.getIncrementBy(), BigInteger.class));
                sequence.setMinimumValue(Convert.convert(se.getMinvalue(), BigInteger.class));
                sequence.setMaximumValue(Convert.convert(se.getMaxvalue(), BigInteger.class));
                sequence.setCycleOption(se.getCycle());
                sequence.setCache(Convert.convert(se.getCache(), BigInteger.class));
                is.getSequences().add(sequence);
            }
            for (PackageDefinition pkg : db.getPackages(s)) for (RoutineDefinition r : pkg.getRoutines()) exportRoutine(is, r, catalogName, schemaName);
            for (RoutineDefinition r : db.getRoutines(s)) exportRoutine(is, r, catalogName, schemaName);
        }
    }
    StringWriter writer = new StringWriter();
    MiniJAXB.marshal(is, writer);
    out.print(writer.toString());
    out.close();
}
Also used : RoutineDefinition(org.jooq.meta.RoutineDefinition) CheckConstraintDefinition(org.jooq.meta.CheckConstraintDefinition) SequenceDefinition(org.jooq.meta.SequenceDefinition) PackageDefinition(org.jooq.meta.PackageDefinition) InformationSchema(org.jooq.util.xml.jaxb.InformationSchema) Schema(org.jooq.util.xml.jaxb.Schema) InformationSchema(org.jooq.util.xml.jaxb.InformationSchema) Index(org.jooq.util.xml.jaxb.Index) DataTypeDefinition(org.jooq.meta.DataTypeDefinition) IndexColumnUsage(org.jooq.util.xml.jaxb.IndexColumnUsage) ForeignKeyDefinition(org.jooq.meta.ForeignKeyDefinition) KeyColumnUsage(org.jooq.util.xml.jaxb.KeyColumnUsage) IndexDefinition(org.jooq.meta.IndexDefinition) StringWriter(java.io.StringWriter) Column(org.jooq.util.xml.jaxb.Column) TableDefinition(org.jooq.meta.TableDefinition) CheckConstraint(org.jooq.util.xml.jaxb.CheckConstraint) SchemaDefinition(org.jooq.meta.SchemaDefinition) Table(org.jooq.util.xml.jaxb.Table) UniqueKeyDefinition(org.jooq.meta.UniqueKeyDefinition) ReferentialConstraint(org.jooq.util.xml.jaxb.ReferentialConstraint) Sequence(org.jooq.util.xml.jaxb.Sequence) View(org.jooq.util.xml.jaxb.View) Catalog(org.jooq.util.xml.jaxb.Catalog) CheckConstraint(org.jooq.util.xml.jaxb.CheckConstraint) ReferentialConstraint(org.jooq.util.xml.jaxb.ReferentialConstraint) TableConstraint(org.jooq.util.xml.jaxb.TableConstraint) ColumnDefinition(org.jooq.meta.ColumnDefinition) IndexColumnDefinition(org.jooq.meta.IndexColumnDefinition) CatalogDefinition(org.jooq.meta.CatalogDefinition) IndexColumnDefinition(org.jooq.meta.IndexColumnDefinition) BigInteger(java.math.BigInteger) TableConstraint(org.jooq.util.xml.jaxb.TableConstraint)

Example 67 with TableDefinition

use of org.jooq.meta.TableDefinition in project jOOQ by jOOQ.

the class JavaGenerator method generateRoutines.

protected void generateRoutines(SchemaDefinition schema) {
    log.info("Generating routines and table-valued functions");
    if (generateGlobalRoutineReferences()) {
        JavaWriter out = newJavaWriter(getStrategy().getGlobalReferencesFile(schema, RoutineDefinition.class));
        printGlobalReferencesPackage(out, schema, RoutineDefinition.class);
        if (!kotlin) {
            printClassJavadoc(out, "Convenience access to all stored procedures and functions in " + schemaNameOrDefault(schema) + ".");
            printClassAnnotations(out, schema, Mode.DEFAULT);
        }
        final String referencesClassName = getStrategy().getGlobalReferencesJavaClassName(schema, RoutineDefinition.class);
        if (scala)
            out.println("%sobject %s {", visibility(), referencesClassName);
        else if (kotlin) {
        } else
            out.println("%sclass %s {", visibility(), referencesClassName);
        for (RoutineDefinition routine : database.getRoutines(schema)) printRoutine(out, routine);
        for (TableDefinition table : database.getTables(schema)) if (table.isTableValuedFunction())
            printTableValuedFunction(out, table, getStrategy().getJavaMethodName(table, Mode.DEFAULT));
        generateRoutinesClassFooter(schema, out);
        if (!kotlin)
            out.println("}");
        closeJavaWriter(out);
    }
    for (RoutineDefinition routine : database.getRoutines(schema)) {
        try {
            generateRoutine(schema, routine);
        } catch (Exception e) {
            log.error("Error while generating routine " + routine, e);
        }
    }
    watch.splitInfo("Routines generated");
}
Also used : RoutineDefinition(org.jooq.meta.RoutineDefinition) PostgresRoutineDefinition(org.jooq.meta.postgres.PostgresRoutineDefinition) TableDefinition(org.jooq.meta.TableDefinition) IOException(java.io.IOException) SQLDialectNotSupportedException(org.jooq.exception.SQLDialectNotSupportedException) ReflectException(org.jooq.tools.reflect.ReflectException)

Aggregations

TableDefinition (org.jooq.meta.TableDefinition)67 SchemaDefinition (org.jooq.meta.SchemaDefinition)47 Record (org.jooq.Record)44 ArrayList (java.util.ArrayList)23 IndexColumnDefinition (org.jooq.meta.IndexColumnDefinition)16 IndexDefinition (org.jooq.meta.IndexDefinition)14 List (java.util.List)12 ColumnDefinition (org.jooq.meta.ColumnDefinition)12 IOException (java.io.IOException)10 DefaultIndexColumnDefinition (org.jooq.meta.DefaultIndexColumnDefinition)10 Result (org.jooq.Result)9 CatalogDefinition (org.jooq.meta.CatalogDefinition)9 EnumDefinition (org.jooq.meta.EnumDefinition)9 RoutineDefinition (org.jooq.meta.RoutineDefinition)9 Arrays.asList (java.util.Arrays.asList)8 TableType (org.jooq.TableOptions.TableType)8 AbstractIndexDefinition (org.jooq.meta.AbstractIndexDefinition)8 DefaultCheckConstraintDefinition (org.jooq.meta.DefaultCheckConstraintDefinition)8 PackageDefinition (org.jooq.meta.PackageDefinition)8 SequenceDefinition (org.jooq.meta.SequenceDefinition)8