private Model.Statements TranslateLibrary(SQLTranslationContext context, String localName, Library library) { var result = new Model.Statements(); if (!translatedLibraries.ContainsKey(library.Name)) { context.StartArtifact(localName); try { // Libraries foreach (LibraryRef libraryRef in library.Libraries) { TranslateLibrary(context, libraryRef.Name, LibraryFactory.ResolveLibrary(libraryRef, null)); } // TODO: CodeSystems // TODO: ValueSets // TODO: Parameters // ExpressionDefs foreach (ExpressionDef expressionDef in library.Expressions) { result.Add(TranslateExpressionDef(context, localName, expressionDef)); } // TODO: Functions } finally { context.EndArtifact(); } } return result; }
private Model.Statements TranslateLibrary(SQLTranslationContext context, String localName, Library library) { var result = new Model.Statements(); if (!translatedLibraries.ContainsKey(library.Name)) { context.StartArtifact(localName); try { // Libraries foreach (LibraryRef libraryRef in library.Libraries) { TranslateLibrary(context, libraryRef.Name, LibraryFactory.ResolveLibrary(libraryRef, null)); } // TODO: CodeSystems // TODO: ValueSets // TODO: Parameters // ExpressionDefs foreach (ExpressionDef expressionDef in library.Expressions) { result.Add(TranslateExpressionDef(context, localName, expressionDef)); } // TODO: Functions } finally { context.EndArtifact(); } } return(result); }
private Model.Statement TranslateCondition(SQLTranslationContext context, string artifactName, string conditionName, ASTNode condition) { var result = new SQLModel.CreateViewStatement(); result.ViewName = context.GetExpressionObjectName(String.Format("{0}.{1}", artifactName, conditionName)); result.Expression = SQLTranslationUtilities.EnsureSelectExpression(context.TranslateNode(condition)); return(result); }
private Model.Statement TranslateExpressionDef(SQLTranslationContext context, string artifactName, ExpressionDef expressionDef) { var result = new SQLModel.CreateViewStatement(); result.ViewName = context.GetExpressionObjectName(String.Format("{0}.{1}", artifactName, expressionDef.Name)); var translatedExpression = context.TranslateNode(expressionDef.Expression); if (DataTypes.Equal(expressionDef.Expression.ResultType, DataTypes.Boolean)) { translatedExpression = SQLTranslationUtilities.PromoteBooleanValuedExpression(translatedExpression); } result.Expression = SQLTranslationUtilities.EnsureSelectExpression(translatedExpression); return(result); }
public object Translate(Artifact source) { var result = new SQLModel.Batch(); var context = new SQLTranslationContext(this); var identifier = source.MetaData.Children.First(c => c.Name == "identifiers").Children.First(c => c.Name == "identifier"); context.StartArtifact(identifier.GetAttribute <string>("root")); try { // Libraries foreach (LibraryRef libraryRef in source.Libraries) { // Okay to pass null for the verification context here, each of the referenced libraries should already be verified at this point. result.Statements.AddRange(TranslateLibrary(context, libraryRef.Name, LibraryFactory.ResolveLibrary(libraryRef, null))); } // TODO: Parameters // ExpressionDefs foreach (ExpressionDef expression in source.Expressions) { result.Statements.Add(TranslateExpressionDef(context, source.MetaData.Name, expression)); } // Criteria // Criteria are translated as "create view <artifact name>_<condition><conditionNumber>" int conditionNumber = 0; foreach (ASTNode condition in source.Conditions) { conditionNumber++; result.Statements.Add(TranslateCondition(context, source.MetaData.Name, String.Format("Condition{0}", conditionNumber), condition)); } // TODO: Assertion return(result); } finally { context.EndArtifact(); } }
public object Translate(Artifact source) { var result = new SQLModel.Batch(); var context = new SQLTranslationContext(this); var identifier = source.MetaData.Children.First(c => c.Name == "identifiers").Children.First(c => c.Name == "identifier"); context.StartArtifact(identifier.GetAttribute<string>("root")); try { // Libraries foreach (LibraryRef libraryRef in source.Libraries) { // Okay to pass null for the verification context here, each of the referenced libraries should already be verified at this point. result.Statements.AddRange(TranslateLibrary(context, libraryRef.Name, LibraryFactory.ResolveLibrary(libraryRef, null))); } // TODO: Parameters // ExpressionDefs foreach (ExpressionDef expression in source.Expressions) { result.Statements.Add(TranslateExpressionDef(context, source.MetaData.Name, expression)); } // Criteria // Criteria are translated as "create view <artifact name>_<condition><conditionNumber>" int conditionNumber = 0; foreach (ASTNode condition in source.Conditions) { conditionNumber++; result.Statements.Add(TranslateCondition(context, source.MetaData.Name, String.Format("Condition{0}", conditionNumber), condition)); } // TODO: Assertion return result; } finally { context.EndArtifact(); } }
private Model.Statement TranslateCondition(SQLTranslationContext context, string artifactName, string conditionName, ASTNode condition) { var result = new SQLModel.CreateViewStatement(); result.ViewName = context.GetExpressionObjectName(String.Format("{0}.{1}", artifactName, conditionName)); result.Expression = SQLTranslationUtilities.EnsureSelectExpression(context.TranslateNode(condition)); return result; }
private Model.Statement TranslateExpressionDef(SQLTranslationContext context, string artifactName, ExpressionDef expressionDef) { var result = new SQLModel.CreateViewStatement(); result.ViewName = context.GetExpressionObjectName(String.Format("{0}.{1}", artifactName, expressionDef.Name)); var translatedExpression = context.TranslateNode(expressionDef.Expression); if (DataTypes.Equal(expressionDef.Expression.ResultType, DataTypes.Boolean)) { translatedExpression = SQLTranslationUtilities.PromoteBooleanValuedExpression(translatedExpression); } result.Expression = SQLTranslationUtilities.EnsureSelectExpression(translatedExpression); return result; }