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;
		}
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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;
		}