Search in sources :

Example 1 with UniqueIndex

use of org.jumpmind.db.model.UniqueIndex in project symmetric-ds by JumpMind.

the class DatabaseXmlUtil method nextTable.

public static Table nextTable(XmlPullParser parser, String catalog, String schema) {
    try {
        Table table = null;
        ForeignKey fk = null;
        IIndex index = null;
        boolean done = false;
        int eventType = parser.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT && !done) {
            switch(eventType) {
                case XmlPullParser.START_TAG:
                    String name = parser.getName();
                    if (name.equalsIgnoreCase("table")) {
                        table = new Table();
                        table.setCatalog(catalog);
                        table.setSchema(schema);
                        for (int i = 0; i < parser.getAttributeCount(); i++) {
                            String attributeName = parser.getAttributeName(i);
                            String attributeValue = parser.getAttributeValue(i);
                            if (attributeName.equalsIgnoreCase("name")) {
                                table.setName(attributeValue);
                            } else if (attributeName.equalsIgnoreCase("description")) {
                                table.setDescription(attributeValue);
                            }
                        }
                    } else if (name.equalsIgnoreCase("column")) {
                        Column column = new Column();
                        for (int i = 0; i < parser.getAttributeCount(); i++) {
                            String attributeName = parser.getAttributeName(i);
                            String attributeValue = parser.getAttributeValue(i);
                            if (attributeName.equalsIgnoreCase("name")) {
                                column.setName(attributeValue);
                            } else if (attributeName.equalsIgnoreCase("primaryKey")) {
                                column.setPrimaryKey(FormatUtils.toBoolean(attributeValue));
                            } else if (attributeName.equalsIgnoreCase("required")) {
                                column.setRequired(FormatUtils.toBoolean(attributeValue));
                            } else if (attributeName.equalsIgnoreCase("type")) {
                                column.setMappedType(attributeValue);
                            } else if (attributeName.equalsIgnoreCase("size")) {
                                column.setSize(attributeValue);
                            } else if (attributeName.equalsIgnoreCase("default")) {
                                if (StringUtils.isNotBlank(attributeValue)) {
                                    column.setDefaultValue(attributeValue);
                                }
                            } else if (attributeName.equalsIgnoreCase("autoIncrement")) {
                                column.setAutoIncrement(FormatUtils.toBoolean(attributeValue));
                            } else if (attributeName.equalsIgnoreCase("javaName")) {
                                column.setJavaName(attributeValue);
                            } else if (attributeName.equalsIgnoreCase("description")) {
                                column.setDescription(attributeValue);
                            } else if (attributeName.equalsIgnoreCase("unique")) {
                                column.setUnique(FormatUtils.toBoolean(attributeValue));
                            }
                        }
                        if (table != null) {
                            table.addColumn(column);
                        }
                    } else if (name.equalsIgnoreCase("platform-column")) {
                        PlatformColumn platformColumn = new PlatformColumn();
                        for (int i = 0; i < parser.getAttributeCount(); i++) {
                            String attributeName = parser.getAttributeName(i);
                            String attributeValue = parser.getAttributeValue(i);
                            if (attributeName.equalsIgnoreCase("name")) {
                                platformColumn.setName(attributeValue);
                            } else if (attributeName.equalsIgnoreCase("type")) {
                                platformColumn.setType(attributeValue);
                            } else if (attributeName.equalsIgnoreCase("default")) {
                                platformColumn.setDefaultValue(attributeValue);
                            } else if (attributeName.equalsIgnoreCase("size")) {
                                if (isNotBlank(attributeValue)) {
                                    platformColumn.setSize(Integer.parseInt(attributeValue));
                                }
                            } else if (attributeName.equalsIgnoreCase("decimalDigits")) {
                                if (isNotBlank(attributeValue)) {
                                    platformColumn.setDecimalDigits(Integer.parseInt(attributeValue));
                                }
                            }
                        }
                        if (table != null && table.getColumnCount() > 0) {
                            table.getColumn(table.getColumnCount() - 1).addPlatformColumn(platformColumn);
                        }
                    } else if (name.equalsIgnoreCase("foreign-key")) {
                        fk = new ForeignKey();
                        for (int i = 0; i < parser.getAttributeCount(); i++) {
                            String attributeName = parser.getAttributeName(i);
                            String attributeValue = parser.getAttributeValue(i);
                            if (attributeName.equalsIgnoreCase("name")) {
                                fk.setName(attributeValue);
                            } else if (attributeName.equalsIgnoreCase("foreignTable")) {
                                fk.setForeignTableName(attributeValue);
                            }
                        }
                        table.addForeignKey(fk);
                    } else if (name.equalsIgnoreCase("reference")) {
                        Reference ref = new Reference();
                        for (int i = 0; i < parser.getAttributeCount(); i++) {
                            String attributeName = parser.getAttributeName(i);
                            String attributeValue = parser.getAttributeValue(i);
                            if (attributeName.equalsIgnoreCase("local")) {
                                ref.setLocalColumnName(attributeValue);
                            } else if (attributeName.equalsIgnoreCase("foreign")) {
                                ref.setForeignColumnName(attributeValue);
                            }
                        }
                        fk.addReference(ref);
                    } else if (name.equalsIgnoreCase("index") || name.equalsIgnoreCase("unique")) {
                        if (name.equalsIgnoreCase("index")) {
                            index = new NonUniqueIndex();
                        } else {
                            index = new UniqueIndex();
                        }
                        for (int i = 0; i < parser.getAttributeCount(); i++) {
                            String attributeName = parser.getAttributeName(i);
                            String attributeValue = parser.getAttributeValue(i);
                            if (attributeName.equalsIgnoreCase("name")) {
                                index.setName(attributeValue);
                            }
                        }
                        table.addIndex(index);
                    } else if (name.equalsIgnoreCase("index-column") || name.equalsIgnoreCase("unique-column")) {
                        IndexColumn indexColumn = new IndexColumn();
                        for (int i = 0; i < parser.getAttributeCount(); i++) {
                            String attributeName = parser.getAttributeName(i);
                            String attributeValue = parser.getAttributeValue(i);
                            if (attributeName.equalsIgnoreCase("name")) {
                                indexColumn.setName(attributeValue);
                            } else if (attributeName.equalsIgnoreCase("size")) {
                                indexColumn.setSize(attributeValue);
                            }
                        }
                        indexColumn.setColumn(table.getColumnWithName(indexColumn.getName()));
                        if (index != null) {
                            index.addColumn(indexColumn);
                        }
                    }
                    break;
                case XmlPullParser.END_TAG:
                    name = parser.getName();
                    if (name.equalsIgnoreCase("table")) {
                        done = true;
                    } else if (name.equalsIgnoreCase("index") || name.equalsIgnoreCase("unique")) {
                        index = null;
                    } else if (name.equalsIgnoreCase("table")) {
                        table = null;
                    } else if (name.equalsIgnoreCase("foreign-key")) {
                        fk = null;
                    }
                    break;
            }
            if (!done) {
                eventType = parser.next();
            }
        }
        return table;
    } catch (XmlPullParserException e) {
        throw new IoException(e);
    } catch (IOException e) {
        throw new IoException(e);
    }
}
Also used : IIndex(org.jumpmind.db.model.IIndex) Table(org.jumpmind.db.model.Table) NonUniqueIndex(org.jumpmind.db.model.NonUniqueIndex) Reference(org.jumpmind.db.model.Reference) IOException(java.io.IOException) ForeignKey(org.jumpmind.db.model.ForeignKey) PlatformColumn(org.jumpmind.db.model.PlatformColumn) IndexColumn(org.jumpmind.db.model.IndexColumn) Column(org.jumpmind.db.model.Column) IndexColumn(org.jumpmind.db.model.IndexColumn) PlatformColumn(org.jumpmind.db.model.PlatformColumn) IoException(org.jumpmind.exception.IoException) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) NonUniqueIndex(org.jumpmind.db.model.NonUniqueIndex) UniqueIndex(org.jumpmind.db.model.UniqueIndex)

Example 2 with UniqueIndex

use of org.jumpmind.db.model.UniqueIndex in project symmetric-ds by JumpMind.

the class AbstractJdbcDdlReader method readIndex.

/*
     * Reads the next index spec from the result set.
     * 
     * @param metaData The database meta data
     * 
     * @param values The index meta data as defined by {@link
     * #getColumnsForIndex()}
     * 
     * @param knownIndices The already read indices for the current table
     */
protected void readIndex(DatabaseMetaDataWrapper metaData, Map<String, Object> values, Map<String, IIndex> knownIndices) throws SQLException {
    Short indexType = (Short) values.get("TYPE");
    // we're ignoring statistic indices
    if ((indexType != null) && (indexType.shortValue() == DatabaseMetaData.tableIndexStatistic)) {
        return;
    }
    String indexName = (String) values.get("INDEX_NAME");
    if (indexName != null) {
        IIndex index = (IIndex) knownIndices.get(indexName);
        if (index == null) {
            if (((Boolean) values.get("NON_UNIQUE")).booleanValue()) {
                index = new NonUniqueIndex();
            } else {
                index = new UniqueIndex();
            }
            index.setName(indexName);
            knownIndices.put(indexName, index);
        }
        IndexColumn indexColumn = new IndexColumn();
        String columnName = (String) values.get("COLUMN_NAME");
        if (columnName.startsWith("\"") && columnName.endsWith("\"")) {
            columnName = columnName.substring(1, columnName.length() - 1);
        }
        indexColumn.setName(columnName);
        if (values.containsKey("ORDINAL_POSITION")) {
            indexColumn.setOrdinalPosition(((Short) values.get("ORDINAL_POSITION")).intValue());
        }
        index.addColumn(indexColumn);
    }
}
Also used : IIndex(org.jumpmind.db.model.IIndex) NonUniqueIndex(org.jumpmind.db.model.NonUniqueIndex) NonUniqueIndex(org.jumpmind.db.model.NonUniqueIndex) UniqueIndex(org.jumpmind.db.model.UniqueIndex) IndexColumn(org.jumpmind.db.model.IndexColumn)

Aggregations

IIndex (org.jumpmind.db.model.IIndex)2 IndexColumn (org.jumpmind.db.model.IndexColumn)2 NonUniqueIndex (org.jumpmind.db.model.NonUniqueIndex)2 UniqueIndex (org.jumpmind.db.model.UniqueIndex)2 IOException (java.io.IOException)1 Column (org.jumpmind.db.model.Column)1 ForeignKey (org.jumpmind.db.model.ForeignKey)1 PlatformColumn (org.jumpmind.db.model.PlatformColumn)1 Reference (org.jumpmind.db.model.Reference)1 Table (org.jumpmind.db.model.Table)1 IoException (org.jumpmind.exception.IoException)1 XmlPullParserException (org.xmlpull.v1.XmlPullParserException)1