private void BuildResultType() { if (!string.IsNullOrEmpty(ResolvedConnectionString) && !string.IsNullOrEmpty(ResolvedSqlStatementValue)) { string designTimeSql = SqlStringHandler.GetSqlStringHandler(ResolvedSqlStatementValue).GetExecutableDesignTimeSql(); DataTable schema = null; try { schema = DatabaseHelpers.RetrieveSchema(ConnectionType, ResolvedConnectionString, designTimeSql); } catch { } if (schema != null) { var resultFields = ResultTypeValue.Fields; ResultTypeFields newResults = BuildResultType(schema, resultFields); resultFields.Clear(); foreach (ResultTypeField nextField in newResults) { resultFields.Add(nextField); } } } BuildDataOut(); BuildExecutionPaths(); }
public static ResultTypeFields BuildResultType(DataTable dataTable, ResultTypeFields reusableFields = null) { ResultTypeFields resultFields = new ResultTypeFields(); foreach (DataColumn dataColumn in dataTable.Columns) { var oldModel = reusableFields == null ? null : reusableFields.FirstOrDefault(x => x.ColumnName == dataColumn.ColumnName); if (oldModel == null) { ResultTypeField newModel = new ResultTypeField(); newModel.ColumnName = dataColumn.ColumnName; newModel.Name = DatabaseHelpers.GetValidName(dataColumn.ColumnName); newModel.Type = MapResultType(dataColumn.DataType); resultFields.Add(newModel); } else { resultFields.Add(oldModel); } } return(resultFields); }
/// <summary> /// Create the template output /// </summary> public virtual string TransformText() { this.Write("\r\n"); this.Write("\r\nvar OutputNames = "); #line 23 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(CSharpUtilities.ArrayAsString(ResultTypeFields.Select(x => x.Name)))); #line default #line hidden this.Write(";\r\nvar ColumnNames = "); #line 24 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(CSharpUtilities.ArrayAsString(ResultTypeFields.Select(x => x.ColumnName)))); #line default #line hidden this.Write(";\r\nvar SqlIdentifiers = "); #line 25 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(SqlIdentifiers)); #line default #line hidden this.Write(";\r\nvar SqlValues = "); #line 26 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(SqlValues)); #line default #line hidden this.Write(";\r\n\r\nvar executeSqlX = new Twenty57.Linx.Components.Database.ExecuteSQL.ExecuteSQ" + "LX(\r\n"); #line 29 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" if (UseTransaction) { #line default #line hidden #line 30 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(TransactionProperty)); #line default #line hidden this.Write(".GetConnectionType(), "); #line 30 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(TransactionProperty)); #line default #line hidden this.Write(".GetDbTransaction(), \r\n"); #line 31 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" } else { #line default #line hidden #line 32 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(CSharpUtilities.EnumAsString(ConnectionType))); #line default #line hidden this.Write(", "); #line 32 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(ConnectionStringProperty)); #line default #line hidden this.Write(", \r\n"); #line 33 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" } #line default #line hidden #line 34 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Timeout)); #line default #line hidden this.Write(", OutputNames, ColumnNames, "); #line 34 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Sql)); #line default #line hidden this.Write(", SqlIdentifiers, SqlValues);\r\nexecuteSqlX.LogEvent += message => "); #line 35 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(FunctionContextProperty)); #line default #line hidden this.Write(".Log(message);\r\n\r\n"); #line 37 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" if (RowType != null) { #line default #line hidden this.Write("\r\nvar rowBuilder = new System.Func<"); #line 39 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(RowTypeName)); #line default #line hidden this.Write(">(() => {\r\n\t"); #line 40 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" var rowFields = ResultTypeFields.Where(f => !string.IsNullOrEmpty(f.Name)); var logFormatString = "Retrieved "; int index = 0; foreach (var nextField in rowFields) { logFormatString += string.Format("{0} = {{{1}}}, ", nextField.ColumnName, index++); } #line default #line hidden this.Write("\t"); #line 46 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(FunctionContextProperty)); #line default #line hidden this.Write(".Log(System.String.Format("); #line 46 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(CSharpUtilities.ToVerbatimString(logFormatString.TrimEnd(',', ' ')))); #line default #line hidden this.Write("\r\n\t"); #line 47 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" foreach (var nextField in rowFields) { #line default #line hidden this.Write("\t\t, Twenty57.Linx.Components.Database.Common.LogHelpers.GetDisplayString(executeS" + "qlX.Reader["); #line 48 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(CSharpUtilities.ToVerbatimString(nextField.ColumnName))); #line default #line hidden this.Write("])\r\n\t"); #line 49 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" } #line default #line hidden this.Write("\t));\r\n\r\n\treturn new "); #line 52 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(RowTypeName)); #line default #line hidden this.Write("\r\n\t{\r\n\t\t"); #line 54 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" foreach (var nextField in rowFields) { #line default #line hidden this.Write("\t\t\t"); #line 55 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(GetParamName(nextField.Name))); #line default #line hidden this.Write(" = Twenty57.Linx.Components.Database.ExecuteSQL.DatabaseHelpers.CheckDbValue<"); #line 55 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Twenty57.Linx.Components.Database.Common.TypeHelpers.GetCodeStringForType(nextField.TypeReference))); #line default #line hidden this.Write(">(executeSqlX.Reader["); #line 55 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(CSharpUtilities.ToVerbatimString(nextField.ColumnName))); #line default #line hidden this.Write("]), \r\n\t\t"); #line 56 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" } #line default #line hidden this.Write("\t};\r\n});\r\n\r\n"); #line 60 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" if (ReturnMode == ExecuteSQLShared.ReturnModeType.ListOfRows) { #line default #line hidden this.Write("try\r\n{\r\n\texecuteSqlX.OpenReader();\r\n\r\n\tvar table = new List<"); #line 65 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(RowTypeName)); #line default #line hidden this.Write(">();\r\n\twhile (executeSqlX.Reader.Read())\r\n\t\ttable.Add(rowBuilder());\r\n\treturn tab" + "le;\r\n}\r\nfinally\r\n{\r\n\texecuteSqlX.Dispose();\r\n}\r\n"); #line 74 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" } else if ((ReturnMode == ExecuteSQLShared.ReturnModeType.FirstRow) || (ReturnMode == ExecuteSQLShared.ReturnModeType.FirstRowElseEmptyRow)) { #line default #line hidden this.Write("try\r\n{\r\n\texecuteSqlX.OpenReader();\r\n\r\n\t"); #line 79 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(RowTypeName)); #line default #line hidden this.Write(" row;\r\n\tif (executeSqlX.Reader.Read())\r\n\t\trow = rowBuilder();\r\n\telse\r\n\t{\r\n\t\t"); #line 84 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" if (ReturnMode == ExecuteSQLShared.ReturnModeType.FirstRow) { #line default #line hidden this.Write("\t\tthrow new Exception(\"No rows returned by query.\");\r\n\t\t"); #line 86 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" } else { #line default #line hidden this.Write("\t\trow = new "); #line 87 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(RowTypeName)); #line default #line hidden this.Write("();\r\n\t\t"); #line 88 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" } #line default #line hidden this.Write("\t}\r\n\r\n\treturn row;\r\n}\r\nfinally\r\n{\r\n\texecuteSqlX.Dispose();\r\n}\r\n"); #line 97 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" } else { #line default #line hidden this.Write("executeSqlX.OpenReader();\r\n"); #line 99 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(ExecutionPathOutputName)); #line default #line hidden this.Write(" = \r\nexecuteSqlX.Rows<Twenty57.Linx.Plugin.Common.CodeGeneration.NextResult>(read" + "er => {\r\n\tvar row = rowBuilder();\r\n\treturn new Twenty57.Linx.Plugin.Common.CodeG" + "eneration.NextResult(\""); #line 102 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" this.Write(this.ToStringHelper.ToStringWithCulture(ExecutionPathName)); #line default #line hidden this.Write("\", row);\r\n});\r\n"); #line 104 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" } #line default #line hidden #line 105 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" } else { #line default #line hidden this.Write("try\r\n{\r\n\texecuteSqlX.OpenReader();\r\n}\r\nfinally\r\n{\r\n\texecuteSqlX.Dispose();\r\n}\r\n"); #line 114 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt" } #line default #line hidden return(this.GenerationEnvironment.ToString()); }
public ResultType() { Fields = new ResultTypeFields(); }