Skip to content

Commit

Permalink
* fixed datatype issues for import/export DDL
Browse files Browse the repository at this point in the history
* fixed misc. object import/export issues
* added support for export DDL fragments for constraints as table
elements
* adjusted/fixed unit tests for import/export vdb and ddl
  • Loading branch information
blafond committed Aug 27, 2015
1 parent 3f8e6cd commit 4593236
Show file tree
Hide file tree
Showing 19 changed files with 1,133 additions and 228 deletions.
Expand Up @@ -359,23 +359,26 @@ public void save(IProgressMonitor monitor, int totalWork ) throws Exception {
if(importManager.getModelType() == ModelType.VIRTUAL_LITERAL ) {
Properties props = new Properties();
boolean doGenerateDefaultSQL = importManager.optToGenerateDefaultSQL();
if (doGenerateDefaultSQL) {
props.put("generateDefaultSQL", doGenerateDefaultSQL); //$NON-NLS-1$
props.put("validate", doGenerateDefaultSQL); //$NON-NLS-1$
boolean doHelpCreateTransform = importManager.optToHelpCreateTransform();
if( doHelpCreateTransform ) {
if (doGenerateDefaultSQL) {
props.put("generateDefaultSQL", doGenerateDefaultSQL); //$NON-NLS-1$
props.put("validate", doGenerateDefaultSQL); //$NON-NLS-1$
}

Collection<EObject> targets = new ArrayList<EObject>();

for( Object nextObj : model.getEObjects() ) {
if( nextObj instanceof Procedure || nextObj instanceof BaseTable || nextObj instanceof View) {
try {
NewModelObjectHelperManager.helpCreate(nextObj, props);
targets.add((EObject)nextObj);
} catch (ModelerCoreException err) {
DdlImporterPlugin.UTIL.log(IStatus.ERROR, err, err.getMessage());
}
}
}
}

Collection<EObject> targets = new ArrayList<EObject>();

for( Object nextObj : model.getEObjects() ) {
if( nextObj instanceof Procedure || nextObj instanceof BaseTable || nextObj instanceof View) {
try {
NewModelObjectHelperManager.helpCreate(nextObj, props);
targets.add((EObject)nextObj);
} catch (ModelerCoreException err) {
DdlImporterPlugin.UTIL.log(IStatus.ERROR, err, err.getMessage());
}
}
}
}


Expand Down
Expand Up @@ -85,6 +85,7 @@
import org.teiid.designer.relational.model.RelationalTable;
import org.teiid.designer.relational.model.RelationalUniqueConstraint;
import org.teiid.designer.relational.model.RelationalView;
import org.teiid.designer.relational.model.RelationalViewProcedure;
import org.teiid.designer.relational.model.RelationalViewTable;
import org.teiid.designer.transformation.model.RelationalViewModelFactory;

Expand Down Expand Up @@ -298,9 +299,14 @@ public EObject createObject( RelationalReference relationalRef, ModelResource mo
modelResource.getEmfResource().getContents().add(newEObject);
} break;
case TYPES.PROCEDURE: {
newEObject = createProcedure(relationalRef, modelResource);
modelResource.getEmfResource().getContents().add(newEObject);
if( relationalRef instanceof RelationalViewProcedure) {
newEObject = VIEW_MODEL_FACTORY.buildObject(relationalRef, modelResource, new NullProgressMonitor());
} else {
newEObject = createProcedure(relationalRef, modelResource);
modelResource.getEmfResource().getContents().add(newEObject);
}
} break;

case TYPES.INDEX: {
newEObject = createIndex(relationalRef, modelResource);
modelResource.getEmfResource().getContents().add(newEObject);
Expand Down
Expand Up @@ -38,6 +38,7 @@
import org.teiid.designer.relational.model.RelationalSchema;
import org.teiid.designer.relational.model.RelationalTable;
import org.teiid.designer.relational.model.RelationalUniqueConstraint;
import org.teiid.designer.relational.model.RelationalViewProcedure;

/**
* Node importer for standard DDL
Expand Down
Expand Up @@ -14,21 +14,27 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.ecore.EObject;
import org.modeshape.sequencer.ddl.DdlConstants;
import org.modeshape.sequencer.ddl.StandardDdlLexicon;
import org.modeshape.sequencer.ddl.dialect.teiid.TeiidDdlConstants;
import org.modeshape.sequencer.ddl.dialect.teiid.TeiidDdlLexicon;
import org.modeshape.sequencer.ddl.node.AstNode;
import org.teiid.core.designer.ModelerCoreException;
import org.teiid.core.designer.util.CoreStringUtil;
import org.teiid.core.designer.util.StringUtilities;
import org.teiid.designer.core.ModelerCore;
import org.teiid.designer.core.util.NewModelObjectHelperManager;
import org.teiid.designer.ddl.DdlImporterManager;
import org.teiid.designer.ddl.importer.DdlImporterI18n;
import org.teiid.designer.ddl.importer.DdlImporterPlugin;
import org.teiid.designer.ddl.importer.TeiidDDLConstants;
import org.teiid.designer.ddl.importer.node.StandardImporter.Info;
import org.teiid.designer.extension.ExtensionPlugin;
import org.teiid.designer.extension.definition.ModelExtensionDefinition;
import org.teiid.designer.extension.registry.ModelExtensionRegistry;
Expand All @@ -45,6 +51,7 @@
import org.teiid.designer.relational.model.RelationalSchema;
import org.teiid.designer.relational.model.RelationalTable;
import org.teiid.designer.relational.model.RelationalUniqueConstraint;
import org.teiid.designer.relational.model.RelationalViewProcedure;
import org.teiid.designer.relational.model.RelationalViewTable;


Expand Down Expand Up @@ -353,6 +360,68 @@ protected RelationalProcedure createProcedure(AstNode procedureNode, RelationalM

return procedure;
}

protected RelationalProcedure createVirtualProcedure(AstNode procedureNode, RelationalModel model) throws Exception {
RelationalViewProcedure procedure = getFactory().createViewProcedure();
Info info = createInfo(procedureNode, model);
if (info.getSchema() == null)
model.addChild(procedure);
else {
info.getSchema().getProcedures().add(procedure);
procedure.setParent(info.getSchema());
}

initialize(procedure, procedureNode, info.getName());
// TODO: determine how to handle Procedure StatementOption
// TODO: determine how to handle Procedure Statement

if (procedureNode.getProperty(StandardDdlLexicon.DATATYPE_NAME) != null) {
RelationalProcedureResultSet result = getFactory().createProcedureResultSet();
procedure.setResultSet(result);
initialize(result, procedureNode);
}

List<AstNode> procOptionNodes = new ArrayList<AstNode>();

for (AstNode child : procedureNode) {
if (is(child, TeiidDdlLexicon.CreateProcedure.PARAMETER)) {
createProcedureParameter(child, procedure);
} else if(is(child, TeiidDdlLexicon.CreateProcedure.RESULT_COLUMNS)) {
RelationalProcedureResultSet result = getFactory().createProcedureResultSet();
procedure.setResultSet(result);
initialize(result, procedureNode);

for(AstNode resultCol: child) {
if(resultCol.hasMixin(TeiidDdlLexicon.CreateProcedure.RESULT_COLUMN)) {
createColumn(resultCol,result);
}
}
} else if(is(child, TeiidDdlLexicon.CreateProcedure.RESULT_DATA_TYPE)) {
RelationalProcedureResultSet result = getFactory().createProcedureResultSet();
procedure.setResultSet(result);
initialize(result, procedureNode);
createColumn(child,result);
} else if(is(child, StandardDdlLexicon.TYPE_STATEMENT_OPTION)) {
procOptionNodes.add(child);
}
}

try {
NewModelObjectHelperManager.helpCreate(procedure, new Properties());
} catch (ModelerCoreException err) {
DdlImporterPlugin.UTIL.log(IStatus.ERROR, err, err.getMessage());
}

String queryExpression = (String)procedureNode.getProperty(TeiidDdlLexicon.CreateProcedure.STATEMENT);
if( ! StringUtilities.isEmpty(queryExpression) ) {
procedure.setTransformationSQL(queryExpression);
}

// process the Procedure Options
processOptions(procOptionNodes,procedure);

return procedure;
}

@Override
protected RelationalParameter createProcedureParameter(AstNode node, RelationalProcedure procedure) throws Exception {
Expand Down Expand Up @@ -390,6 +459,8 @@ protected RelationalParameter createProcedureParameter(AstNode node, RelationalP
public RelationalModel importNode(AstNode rootNode, DdlImporterManager importManager) throws Exception {

setImporterManager(importManager);
getImporterManager().optToGenerateDefaultSQL(false);
getImporterManager().optToHelpCreateTransform(false);

// Create a RelationalModel for the imported DDL
RelationalModel model = getFactory().createModel("ddlImportedModel"); //$NON-NLS-1$
Expand Down Expand Up @@ -496,9 +567,16 @@ protected Map<AstNode,RelationalReference> createObject(AstNode node, Relational
viewTable.setTransformationSQL(queryExpression);
}

}else if (is(node, TeiidDdlLexicon.CreateProcedure.PROCEDURE_STATEMENT)
} else if (is(node, TeiidDdlLexicon.CreateProcedure.PROCEDURE_STATEMENT)
|| is(node, TeiidDdlLexicon.CreateProcedure.FUNCTION_STATEMENT)) {
createProcedure(node, model);
String modelType = (String)node.getProperty(TeiidDdlLexicon.SchemaElement.TYPE);
if( modelType != null ) {
if( modelType.equalsIgnoreCase("VIRTUAL")) {
createVirtualProcedure(node, model);
} else {
createProcedure(node, model);
}
}

// Handle Alter Table
} else if (is(node, TeiidDdlLexicon.AlterOptions.TABLE_STATEMENT)) {
Expand Down
Expand Up @@ -35,6 +35,8 @@ public class DdlImporterManager {
private boolean optToSetModelEntityDescription;

private boolean optToGenerateDefaultSQL;

private boolean optToHelpCreateTransform;

private DdlNodeImporter nodeImporter;

Expand Down Expand Up @@ -162,6 +164,20 @@ public boolean optToGenerateDefaultSQL() {
public void optToGenerateDefaultSQL(boolean value) {
this.optToGenerateDefaultSQL = value;
}

/**
* @return optToGenerateDefaultSQL
*/
public boolean optToHelpCreateTransform() {
return optToHelpCreateTransform;
}

/**
* @param value
*/
public void optToHelpCreateTransform(boolean value) {
this.optToHelpCreateTransform = value;
}

/**
* @param nodeImporter the node importer
Expand Down
Expand Up @@ -12,20 +12,22 @@
import org.teiid.core.designer.TeiidDesignerRuntimeException;
import org.teiid.core.designer.util.CoreArgCheck;
import org.teiid.core.designer.util.CoreStringUtil;
import org.teiid.core.designer.util.StringConstants;
import org.teiid.designer.core.ModelerCore;
import org.teiid.designer.core.metamodel.aspect.MetamodelEntity;
import org.teiid.designer.core.metamodel.aspect.uml.UmlProperty;
import org.teiid.designer.metamodels.relational.Column;
import org.teiid.designer.metamodels.relational.RelationalMetamodelConstants;
import org.teiid.designer.metamodels.relational.RelationalPlugin;
import org.teiid.designer.type.IDataTypeManagerService;


/**
* ColumnAspect
*
* @since 8.0
*/
public class ColumnAspect extends RelationalEntityAspect implements UmlProperty {
public class ColumnAspect extends RelationalEntityAspect implements UmlProperty, StringConstants {
/**
* Construct an instance of ColumnAspect.
* @param entity
Expand Down Expand Up @@ -74,10 +76,12 @@ public String getSignature(Object eObject, int showMask) {
ModelerCore.getDatatypeManager(col,true).getName(col.getType()) :
null;
final String dtName = (tmpName == null ? CoreStringUtil.Constants.EMPTY_STRING : tmpName);


final boolean isLengthType = ModelerCore.getTeiidDataTypeManagerService().isLengthDataType(dtName);
final boolean isStringType = col.getType() != null ?
ModelerCore.getDatatypeManager(col, true).isCharacter(col.getType()) :
false;
final boolean addLength = isStringType || isLengthType;

//case 16 is for properties, which should return an empty string, so
//it has been added in to the remaining cases where applicable.
Expand Down Expand Up @@ -108,8 +112,8 @@ public String getSignature(Object eObject, int showMask) {
if(col.getType() != null){
result.append(dtName);
final int length = col.getLength();
if ( length != 0 && isStringType ) {
result.append("(" + length + ")"); //$NON-NLS-1$ //$NON-NLS-2$
if ( length != 0 && addLength ) {
result.append(OPEN_BRACKET + length + CLOSE_BRACKET);
}
}
break;
Expand All @@ -121,8 +125,8 @@ public String getSignature(Object eObject, int showMask) {
if(col.getType() != null){
result.append(dtName);
final int length = col.getLength();
if ( length != 0 && isStringType ) {
result.append("(" + length + ")"); //$NON-NLS-1$ //$NON-NLS-2$
if ( length != 0 && addLength ) {
result.append(OPEN_BRACKET + length + CLOSE_BRACKET);
}
}
break;
Expand All @@ -136,8 +140,8 @@ public String getSignature(Object eObject, int showMask) {
if(col.getType() != null){
result.append(dtName);
final int length = col.getLength();
if ( length != 0 && isStringType ) {
result.append("(" + length + ")"); //$NON-NLS-1$ //$NON-NLS-2$
if ( length != 0 && addLength ) {
result.append(OPEN_BRACKET + length + CLOSE_BRACKET);
}
}
break;
Expand All @@ -152,8 +156,8 @@ public String getSignature(Object eObject, int showMask) {
if(col.getType() != null){
result.append(dtName);
final int length = col.getLength();
if ( length != 0 && isStringType ) {
result.append("(" + length + ")"); //$NON-NLS-1$ //$NON-NLS-2$
if ( length != 0 && addLength ) {
result.append(OPEN_BRACKET + length + CLOSE_BRACKET);
}
}
break;
Expand Down Expand Up @@ -188,8 +192,8 @@ public String getSignature(Object eObject, int showMask) {
if(col.getType() != null){
result.append(dtName);
final int length = col.getLength();
if ( length != 0 && isStringType ) {
result.append("(" + length + ")"); //$NON-NLS-1$ //$NON-NLS-2$
if ( length != 0 && addLength ) {
result.append(OPEN_BRACKET + length + CLOSE_BRACKET);
}
}
break;
Expand All @@ -201,8 +205,8 @@ public String getSignature(Object eObject, int showMask) {
if(col.getType() != null){
result.append(dtName);
final int length = col.getLength();
if ( length != 0 && isStringType ) {
result.append("(" + length + ")"); //$NON-NLS-1$ //$NON-NLS-2$
if ( length != 0 && addLength ) {
result.append(OPEN_BRACKET + length + CLOSE_BRACKET);
}
}
break;
Expand All @@ -216,8 +220,8 @@ public String getSignature(Object eObject, int showMask) {
if(col.getType() != null){
result.append(dtName);
final int length = col.getLength();
if ( length != 0 && isStringType ) {
result.append("(" + length + ")"); //$NON-NLS-1$ //$NON-NLS-2$
if ( length != 0 && addLength ) {
result.append(OPEN_BRACKET + length + CLOSE_BRACKET);
}
}
break;
Expand All @@ -232,8 +236,8 @@ public String getSignature(Object eObject, int showMask) {
if(col.getType() != null){
result.append(dtName);
final int length = col.getLength();
if ( length != 0 && isStringType ) {
result.append("(" + length + ")"); //$NON-NLS-1$ //$NON-NLS-2$
if ( length != 0 && addLength ) {
result.append(OPEN_BRACKET + length + CLOSE_BRACKET);
}
}
break;
Expand Down
Expand Up @@ -242,7 +242,11 @@ protected ModelExtensionPropertyDefinition getPropertyDefinition(final Object mo
public void setPropertyValue(final Object modelObject,
final String propId,
final String newValue) throws Exception {
super.setPropertyValue(modelObject, propId, newValue);
boolean isVirtual = ModelUtil.isVirtual(modelObject);

if( isVirtual && !PropertyName.same(PropertyName.NON_PREPARED, propId)) {
super.setPropertyValue(modelObject, propId, newValue);
}

// if setting aggregate to false remove these properties
if (PropertyName.same(PropertyName.AGGREGATE, propId) && !Boolean.parseBoolean(newValue)) {
Expand Down

0 comments on commit 4593236

Please sign in to comment.