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); }
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); }
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); }
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); }
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"); }
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()); }