// public void test() // { // Views.View v = new Views.View(); // v.SchemaColumns = new ViewRowDefinition(); // v.Name = "test"; // v.FireOnTypes = new List<string>(); // v.FireOnTypes.Add("BizFX.Entity.Return, BizFX.Entity, Version=2.0.0.0, Culture=neutral, PublicKeyToken=e5d192f5e46064af"); // v.SchemaColumns.Columns.Add("Name", DataTypes.String); // v.SchemaColumns.Columns.Add("BirthDay", DataTypes.DateTime); // v.SchemaColumns.Columns.Add("Address", DataTypes.String); // v.SchemaColumns.Columns.Add("Code", DataTypes.Int); // v.MapFunctionCode = @" //List<object[]> q = api.Query(""someview"",""a=1"",0, -1); //foreach(object[] rr in q) //{ // testRow r = new testRow(rr); // emit(data.GUID, r.Name, r.BirthDay, r.Address, r.Code*2); //} //if(data.IsOK) // emit(data.GUID, ""ppp"",DateTime.Now,""hello"",123); //else // api.Log(""error""); //"; // //v.SchemaColumns = v.Name; // //v.ViewsUsed = new List<Views.ViewRowDefinition>(); // //v.ViewsUsed.Add(v.SchemaColumns); // Compile(v,"RaptorDB\\Views\\"); // } #region [ M A P C O M P I L E R ] public void Compile(Views.ViewBase view, string mapfolder) { Directory.CreateDirectory(mapfolder); CodeDomProvider cs = CodeDomProvider.CreateProvider("CSharp"); var _Parameters = new CompilerParameters(); // create source file string code = CreateSourceFile(view, _Parameters); // Compile code _Parameters.IncludeDebugInformation = false; _Parameters.GenerateExecutable = false; _Parameters.CompilerOptions = "/optimize"; _Parameters.OutputAssembly = mapfolder + view.Name + //DocID.ToString().Replace("-", "") + ".dll"; var compilerresult = cs.CompileAssemblyFromSource(_Parameters, code); if (compilerresult.Errors.HasErrors) { foreach (var p in compilerresult.Errors) { _log.Error(p.ToString()); } } else { _mapcache.Remove(mapfolder + view.Name + ".dll"); } }
private string CreateSourceFile(Views.ViewBase view, CompilerParameters _Parameters) { // create source file from template string code = Properties.Resources.CodeTemplate .Replace("%USER_CODE%", view.MapFunctionCode) .Replace("%COLUMN_COUNT%", view.SchemaColumns.Columns.Count.ToString()) .Replace("%VIEW_ROW%", CreateViewRows(view.ViewsUsed)) .Replace("%BASE_TYPE%", Type.GetType(view.FireOnTypes[0]).FullName) .Replace("%COLUMNS_PARAMS%", CreateColumnParams(view.SchemaColumns)) .Replace("%DATA_ASSIGN%", CreateDataAssign(view.SchemaColumns)) ; // extract type information for compile references Dictionary <string, string> references = new Dictionary <string, string>(); foreach (string aqn in view.FireOnTypes) { Type t = Type.GetType(aqn); if (references.ContainsKey(t.FullName) == false) { references.Add(t.FullName, t.Assembly.Location); } // TODO :traverse hierarchy and add all references } _Parameters.ReferencedAssemblies.Add(this.GetType().Assembly.Location); // set reference assemblies foreach (string s in references.Values) { _Parameters.ReferencedAssemblies.Add(s); } return(code); }
void View_ShowEnd(Views.ViewBase obj) { if (ActiveView != null) { ActiveView.Hide(); } ActiveView = obj; }