コード例 #1
0
        public void ハテナによるSQL文字の展開()
        {
            var source = File.ReadAllText("TestFiles\\Question.tmpl.sql");
            var result = new CSharpScriptCodeParser(source).Parse();

            Assert.Equal(File.ReadAllText("TestFiles\\Question.code.txt"), result.Code);
        }
コード例 #2
0
        public void エクスクラメーションによるコメント()
        {
            var source = File.ReadAllText("TestFiles\\Comment.tmpl.sql");
            var result = new CSharpScriptCodeParser(source).Parse();

            Assert.Equal(File.ReadAllText("TestFiles\\Comment.code.txt"), result.Code);
        }
コード例 #3
0
        public void SQLの文字列内のコメントとエスケープ()
        {
            var source = File.ReadAllText("TestFiles\\Strings.tmpl.sql");
            var result = new CSharpScriptCodeParser(source).Parse();

            Assert.Equal(File.ReadAllText("TestFiles\\Strings.code.txt"), result.Code);
        }
コード例 #4
0
        public void シンプルな読み込み()
        {
            var source = File.ReadAllText("TestFiles\\Simple.tmpl.sql");
            var result = new CSharpScriptCodeParser(source).Parse();

            Assert.Equal(File.ReadAllText("TestFiles\\Simple.code.txt"), result.Code);
        }
コード例 #5
0
        public void iによるインポート()
        {
            var source = File.ReadAllText("TestFiles\\Simple-using.tmpl.sql");
            var result = new CSharpScriptCodeParser(source).Parse();

            Assert.Equal(File.ReadAllText("TestFiles\\Simple-using.code.txt"), result.Code);
            Assert.Equal(result.Imports.First(), "Km.Toi.Template.Test");
        }
コード例 #6
0
        public async Task <SqlDefinition> ExecuteAsync(string sqlTemplate, object model, TemplateOptions options)
        {
            Throws.NotEmpty(sqlTemplate, nameof(sqlTemplate));
            Throws.NotNull(model, nameof(model));

            if (options == null)
            {
                options = TemplateOptions.Default;
            }

            var modelType = model.GetType();

            ValidateModel(modelType, model);

            var globalsType = typeof(Globals <>).MakeGenericType(modelType);

            var runner = pool.GetOrAdd(Tuple.Create(sqlTemplate, modelType), v =>
            {
                var parser        = new CSharpScriptCodeParser(sqlTemplate);
                var parseResult   = parser.Parse();
                var scriptOptions = ScriptOptions.Default.AddReferences(
                    typeof(SqlTemplateEngine).GetTypeInfo().Assembly,
                    modelType.GetTypeInfo().Assembly
                    ).AddImports("Km.Toi.Template", "System", "System.Linq")
                                    .AddImports(parseResult.Imports);

                return(CSharpScript.Create(parseResult.Code, scriptOptions, globalsType).CreateDelegate());
            });

            var builder = new SqlDefinitionBuilder(options);
            var global  = Activator.CreateInstance(globalsType, model, builder) as IGlobals;

            await runner(global);

            return(builder.Build());
        }