Пример #1
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);
        }
Пример #2
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();
            }
        }