Skip to content

Commit

Permalink
DDL importer generates inaccurate model
Browse files Browse the repository at this point in the history
  • Loading branch information
mdrillin committed Jun 5, 2014
1 parent 7ce1386 commit edb25d1
Show file tree
Hide file tree
Showing 4 changed files with 183 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -104,10 +104,25 @@ protected Map<AstNode,RelationalReference> createObject(AstNode node, Relational
*/
@Override
protected void createDeferredObjects(Map<AstNode,RelationalReference> deferredNodes, RelationalModel model) throws Exception {
Collection<RelationalReference> allRefs = model.getAllReferences();

Set<AstNode> astNodes = deferredNodes.keySet();
for(AstNode node:astNodes) {
Collection<RelationalReference> allRefs = model.getAllReferences();

// Make first pass to create the PKs
Set<AstNode> astNodes = deferredNodes.keySet();
for(AstNode node:astNodes) {
if (is(node, StandardDdlLexicon.TYPE_TABLE_CONSTRAINT)) {
RelationalTable table = (RelationalTable)deferredNodes.get(node);
createPrimaryKey(node, table, allRefs);
} else if (is(node, StandardDdlLexicon.TYPE_ALTER_TABLE_STATEMENT)) {
RelationalTable table = find(RelationalTable.class, node, null, allRefs);
for (AstNode node1 : node) {
if (is(node1, StandardDdlLexicon.TYPE_ADD_TABLE_CONSTRAINT_DEFINITION))
createPrimaryKey(node1, table, allRefs);
}
}
}

// Second pass create other constraints
for(AstNode node:astNodes) {
if (is(node, DerbyDdlLexicon.TYPE_CREATE_INDEX_STATEMENT)) {
RelationalIndex index = getFactory().createIndex();
Info info = createInfo(node, model);
Expand Down Expand Up @@ -140,8 +155,19 @@ protected void createDeferredObjects(Map<AstNode,RelationalReference> deferredNo
} catch (EntityNotFoundException error) {
addProgressMessage(error.getMessage());
}
}
}
} else if (is(node, StandardDdlLexicon.TYPE_TABLE_CONSTRAINT)) {
RelationalTable table = (RelationalTable)deferredNodes.get(node);
createConstraint(node, table, allRefs);
} else if (is(node, StandardDdlLexicon.TYPE_ALTER_TABLE_STATEMENT)) {
RelationalTable table = find(RelationalTable.class, node, null, allRefs);
for (AstNode node1 : node) {
if (is(node1, StandardDdlLexicon.TYPE_ADD_TABLE_CONSTRAINT_DEFINITION))
createConstraint(node1, table, allRefs);
else if (is(node1, StandardDdlLexicon.TYPE_ADD_COLUMN_DEFINITION))
createColumn(node1, table);
}
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,19 @@
*/
package org.teiid.designer.ddl.importer.node;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import org.modeshape.sequencer.ddl.StandardDdlLexicon;
import org.modeshape.sequencer.ddl.dialect.mysql.MySqlDdlLexicon;
import org.modeshape.sequencer.ddl.node.AstNode;
import org.teiid.designer.relational.model.RelationalIndex;
import org.teiid.designer.relational.model.RelationalModel;
import org.teiid.designer.relational.model.RelationalReference;
import org.teiid.designer.relational.model.RelationalSchema;
import org.teiid.designer.relational.model.RelationalTable;

/**
*
Expand Down Expand Up @@ -54,9 +57,25 @@ protected Map<AstNode,RelationalReference> createObject(AstNode node, Relational
*/
@Override
protected void createDeferredObjects(Map<AstNode,RelationalReference> deferredNodes, RelationalModel model) throws Exception {
Collection<RelationalReference> allRefs = model.getAllReferences();

Set<AstNode> astNodes = deferredNodes.keySet();
for(AstNode node:astNodes) {
// Make first pass to create the PKs
Set<AstNode> astNodes = deferredNodes.keySet();
for(AstNode node:astNodes) {
if (is(node, StandardDdlLexicon.TYPE_TABLE_CONSTRAINT)) {
RelationalTable table = (RelationalTable)deferredNodes.get(node);
createPrimaryKey(node, table, allRefs);
} else if (is(node, StandardDdlLexicon.TYPE_ALTER_TABLE_STATEMENT)) {
RelationalTable table = find(RelationalTable.class, node, null, allRefs);
for (AstNode node1 : node) {
if (is(node1, StandardDdlLexicon.TYPE_ADD_TABLE_CONSTRAINT_DEFINITION))
createPrimaryKey(node1, table, allRefs);
}
}
}

// Second pass create other constraints
for(AstNode node:astNodes) {
if (is(node, MySqlDdlLexicon.TYPE_CREATE_INDEX_STATEMENT)) {
RelationalIndex index = getFactory().createIndex();
Info info = createInfo(node, model);
Expand All @@ -66,8 +85,19 @@ protected void createDeferredObjects(Map<AstNode,RelationalReference> deferredNo
info.getSchema().getIndexes().add(index);

initialize(index, node, info.getName());
}
}
} else if (is(node, StandardDdlLexicon.TYPE_TABLE_CONSTRAINT)) {
RelationalTable table = (RelationalTable)deferredNodes.get(node);
createConstraint(node, table, allRefs);
} else if (is(node, StandardDdlLexicon.TYPE_ALTER_TABLE_STATEMENT)) {
RelationalTable table = find(RelationalTable.class, node, null, allRefs);
for (AstNode node1 : node) {
if (is(node1, StandardDdlLexicon.TYPE_ADD_TABLE_CONSTRAINT_DEFINITION))
createConstraint(node1, table, allRefs);
else if (is(node1, StandardDdlLexicon.TYPE_ADD_COLUMN_DEFINITION))
createColumn(node1, table);
}
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
import java.util.Map;
import java.util.Set;

import org.eclipse.emf.ecore.EObject;
import org.modeshape.sequencer.ddl.StandardDdlLexicon;
import org.modeshape.sequencer.ddl.dialect.oracle.OracleDdlLexicon;
import org.modeshape.sequencer.ddl.node.AstNode;
import org.teiid.designer.metamodels.relational.util.RelationalTypeMapping;
import org.teiid.designer.relational.model.RelationalColumn;
import org.teiid.designer.relational.model.RelationalIndex;
import org.teiid.designer.relational.model.RelationalModel;
Expand All @@ -29,7 +31,11 @@
*
*/
public class OracleImporter extends StandardImporter {


private static final String VARCHAR2_TYPE_NAME = "VARCHAR2"; //$NON-NLS-1$
private static final String NVARCHAR2_TYPE_NAME = "NVARCHAR2"; //$NON-NLS-1$
private static final String NUMBER_TYPE_NAME = "NUMBER"; //$NON-NLS-1$

@Override
protected RelationalProcedure createProcedure(AstNode procedureNode, RelationalModel model) throws Exception {
RelationalProcedure procedure = super.createProcedure(procedureNode, model);
Expand Down Expand Up @@ -112,7 +118,22 @@ protected Map<AstNode,RelationalReference> createObject(AstNode node, Relational
protected void createDeferredObjects(Map<AstNode,RelationalReference> deferredNodes, RelationalModel model) throws Exception {
Collection<RelationalReference> allRefs = model.getAllReferences();

Set<AstNode> astNodes = deferredNodes.keySet();
// Make first pass to create the PKs
Set<AstNode> astNodes = deferredNodes.keySet();
for(AstNode node:astNodes) {
if (is(node, StandardDdlLexicon.TYPE_TABLE_CONSTRAINT)) {
RelationalTable table = (RelationalTable)deferredNodes.get(node);
createPrimaryKey(node, table, allRefs);
} else if (is(node, StandardDdlLexicon.TYPE_ALTER_TABLE_STATEMENT)) {
RelationalTable table = find(RelationalTable.class, node, null, allRefs);
for (AstNode node1 : node) {
if (is(node1, StandardDdlLexicon.TYPE_ADD_TABLE_CONSTRAINT_DEFINITION))
createPrimaryKey(node1, table, allRefs);
}
}
}

// Second pass create other constraints
for(AstNode node:astNodes) {
if (is(node, OracleDdlLexicon.TYPE_CREATE_TABLE_INDEX_STATEMENT)) {
RelationalIndex index = getFactory().createIndex();
Expand Down Expand Up @@ -147,8 +168,40 @@ protected void createDeferredObjects(Map<AstNode,RelationalReference> deferredNo
}
}
}
}
} else if (is(node, StandardDdlLexicon.TYPE_TABLE_CONSTRAINT)) {
RelationalTable table = (RelationalTable)deferredNodes.get(node);
createConstraint(node, table, allRefs);
} else if (is(node, StandardDdlLexicon.TYPE_ALTER_TABLE_STATEMENT)) {
RelationalTable table = find(RelationalTable.class, node, null, allRefs);
for (AstNode node1 : node) {
if (is(node1, StandardDdlLexicon.TYPE_ADD_TABLE_CONSTRAINT_DEFINITION))
createConstraint(node1, table, allRefs);
else if (is(node1, StandardDdlLexicon.TYPE_ADD_COLUMN_DEFINITION))
createColumn(node1, table);
}
}

}
}

/**
* @param jdbcTypeName
*
* @return {@link EObject} represented by the given data type id
* @throws Exception
*/
@Override
protected String getTeiidDataTypeName(String jdbcTypeName) throws Exception {
String standardName = jdbcTypeName;
if (VARCHAR2_TYPE_NAME.equalsIgnoreCase(jdbcTypeName) || NVARCHAR2_TYPE_NAME.equalsIgnoreCase(jdbcTypeName)) {
standardName = RelationalTypeMapping.SQL_TYPE_NAMES.VARCHAR;
}

if (NUMBER_TYPE_NAME.equalsIgnoreCase(jdbcTypeName)) {
standardName = RelationalTypeMapping.SQL_TYPE_NAMES.NUMERIC;
}

return super.getTeiidDataTypeName(standardName);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,30 @@
*/
package org.teiid.designer.ddl.importer.node;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import org.eclipse.emf.ecore.EObject;
import org.modeshape.sequencer.ddl.StandardDdlLexicon;
import org.modeshape.sequencer.ddl.dialect.postgres.PostgresDdlLexicon;
import org.modeshape.sequencer.ddl.node.AstNode;
import org.teiid.designer.metamodels.relational.util.RelationalTypeMapping;
import org.teiid.designer.relational.model.RelationalIndex;
import org.teiid.designer.relational.model.RelationalModel;
import org.teiid.designer.relational.model.RelationalReference;
import org.teiid.designer.relational.model.RelationalSchema;
import org.teiid.designer.relational.model.RelationalTable;

/**
*
*/
public class PostgresImporter extends StandardImporter {

private static final String TEXT_TYPE_NAME = "TEXT"; //$NON-NLS-1$
private static final String IMAGE_TYPE_NAME = "IMAGE"; //$NON-NLS-1$

/**
* Create RelationalReference objects
* @param node the provided AstNode
Expand Down Expand Up @@ -53,9 +61,25 @@ protected Map<AstNode,RelationalReference> createObject(AstNode node, Relational
*/
@Override
protected void createDeferredObjects(Map<AstNode,RelationalReference> deferredNodes, RelationalModel model) throws Exception {

Set<AstNode> astNodes = deferredNodes.keySet();
for(AstNode node:astNodes) {
Collection<RelationalReference> allRefs = model.getAllReferences();

// Make first pass to create the PKs
Set<AstNode> astNodes = deferredNodes.keySet();
for(AstNode node:astNodes) {
if (is(node, StandardDdlLexicon.TYPE_TABLE_CONSTRAINT)) {
RelationalTable table = (RelationalTable)deferredNodes.get(node);
createPrimaryKey(node, table, allRefs);
} else if (is(node, StandardDdlLexicon.TYPE_ALTER_TABLE_STATEMENT)) {
RelationalTable table = find(RelationalTable.class, node, null, allRefs);
for (AstNode node1 : node) {
if (is(node1, StandardDdlLexicon.TYPE_ADD_TABLE_CONSTRAINT_DEFINITION))
createPrimaryKey(node1, table, allRefs);
}
}
}

// Second pass create other constraints
for(AstNode node:astNodes) {
if (is(node, PostgresDdlLexicon.TYPE_CREATE_INDEX_STATEMENT)) {
RelationalIndex index = getFactory().createIndex();
Info info = createInfo(node, model);
Expand All @@ -65,8 +89,40 @@ protected void createDeferredObjects(Map<AstNode,RelationalReference> deferredNo
info.getSchema().getIndexes().add(index);

initialize(index, node, info.getName());
}
}
} else if (is(node, StandardDdlLexicon.TYPE_TABLE_CONSTRAINT)) {
RelationalTable table = (RelationalTable)deferredNodes.get(node);
createConstraint(node, table, allRefs);
} else if (is(node, StandardDdlLexicon.TYPE_ALTER_TABLE_STATEMENT)) {
RelationalTable table = find(RelationalTable.class, node, null, allRefs);
for (AstNode node1 : node) {
if (is(node1, StandardDdlLexicon.TYPE_ADD_TABLE_CONSTRAINT_DEFINITION))
createConstraint(node1, table, allRefs);
else if (is(node1, StandardDdlLexicon.TYPE_ADD_COLUMN_DEFINITION))
createColumn(node1, table);
}
}
}

}

/**
* @param jdbcTypeName
*
* @return {@link EObject} represented by the given data type id
* @throws Exception
*/
@Override
protected String getTeiidDataTypeName(String jdbcTypeName) throws Exception {
String standardName = jdbcTypeName;
if (TEXT_TYPE_NAME.equalsIgnoreCase(jdbcTypeName)) {
standardName = RelationalTypeMapping.SQL_TYPE_NAMES.CLOB;
}

if (IMAGE_TYPE_NAME.equalsIgnoreCase(jdbcTypeName)) {
standardName = RelationalTypeMapping.SQL_TYPE_NAMES.BLOB;
}

return super.getTeiidDataTypeName(standardName);
}

}

0 comments on commit edb25d1

Please sign in to comment.