public new void ToString() { var selectClause = new SelectClause(Expression.Constant(0)); Assert.That(selectClause.ToString(), Is.EqualTo("select 0")); }
public void Execute() { Dictionary <string, string> config = this.Context.SetProperties; System.Collections.Generic.Dictionary <string, System.Data.DataTable> Freq_ListSet = new Dictionary <string, System.Data.DataTable>(); DataTable DT = new DataTable(); DT.CaseSensitive = true; DataTable OutDataTable = new DataTable(); foreach (DataColumn column in this.Context.Columns) { DataColumn newColumn = new DataColumn(column.ColumnName); newColumn.DataType = column.DataType; DT.Columns.Add(newColumn); } // **** Get Participating Variables Start List <string> ParticipatingVariables = new List <string>(); /* * if (this.IdentifierList[0] == "*") * { * foreach (System.Data.DataColumn C in this.Context.Columns) * { * //ParticipatingVariables.Add(C.ColumnName); * } * } * else * { * foreach (string Key in IdentifierList) * { * //ParticipatingVariables.Add(Key); * } * }*/ if (!string.IsNullOrEmpty(this.WeightVar) && this.WeightVar != "") { ParticipatingVariables.Add(this.WeightVar); } if (this.StratvarList != null) // PATCH; improve later { foreach (string stratavar in this.StratvarList) { ParticipatingVariables.Add(stratavar); } } // **** Get Participating Variables End foreach (DataRow row in this.Context.GetDataRows(ParticipatingVariables)) { DT.ImportRow(row); } Frequency.PermutationList = new Dictionary <string, List <object> >(); CreatePermutaionList(this.StratvarList); List <string> RemoveList = new List <string>(); if (!this.config.Settings.IncludeMissingValues) { foreach (string s in Frequency.SelectClauses) { if (s.EndsWith(" is Null", StringComparison.OrdinalIgnoreCase)) { RemoveList.Add(s); } } } foreach (string s in RemoveList) { Frequency.SelectClauses.Remove(s); } StringBuilder HTMLString = new StringBuilder(); System.Collections.Generic.Dictionary <string, string> KeyList = new Dictionary <string, string>(); if (!string.IsNullOrEmpty(this.OutTable)) { OutDataTable.TableName = this.OutTable; if (this.StratvarList != null) { foreach (string stratavar in this.StratvarList) { DataColumn newColumn = new DataColumn(stratavar); newColumn.DataType = this.Context.Columns[stratavar].DataType; OutDataTable.Columns.Add(newColumn); } } foreach (string freqitem in this.IdentifierList) { DataColumn newColumn = new DataColumn(freqitem); newColumn.DataType = this.Context.Columns[freqitem].DataType; OutDataTable.Columns.Add(newColumn); } DataColumn varCol = new DataColumn("VARNAME"); varCol.DataType = typeof(string); OutDataTable.Columns.Add(varCol); DataColumn percentCol = new DataColumn("PERCENT"); percentCol.DataType = typeof(double); OutDataTable.Columns.Add(percentCol); DataColumn countCol = new DataColumn("COUNT"); countCol.DataType = typeof(int); OutDataTable.Columns.Add(countCol); } foreach (string SelectClause in Frequency.SelectClauses) { Freq_ListSet.Clear(); KeyList.Clear(); if (this.IdentifierList[0] == "*") { foreach (System.Data.DataColumn C in this.Context.Columns) { string Key = C.ColumnName; if (!Freq_ListSet.ContainsKey(Key)) { Freq_ListSet.Add(Key, CreateDataTable(Key)); KeyList.Add(Key, Key); } } } else { foreach (string Key in IdentifierList) { if (!Freq_ListSet.ContainsKey(Key)) { if (GetColumnDataType(Key) != null) { Freq_ListSet.Add(Key, CreateDataTable(Key)); KeyList.Add(Key, Key); } } } } foreach (System.Data.DataRow R in DT.Select(SelectClause)) { foreach (System.Collections.Generic.KeyValuePair <string, System.Data.DataTable> KeyP in Freq_ListSet) { string Key = KeyP.Key; foreach (System.Data.DataColumn C in DT.Columns) { string ColumnKey = C.ColumnName; if (ColumnKey.ToUpperInvariant() == Key.ToUpperInvariant()) { bool RowIsFound = false; foreach (System.Data.DataRow R2 in KeyP.Value.Rows) { if (R[C.ColumnName].ToString() == R2["value"].ToString()) { RowIsFound = true; if (string.IsNullOrEmpty(this.WeightVar)) { R2["count"] = int.Parse(R2["count"].ToString()) + 1; } else { double temp = 0.0; if (double.TryParse(R[this.WeightVar].ToString(), out temp)) { R2["count"] = double.Parse(R2["count"].ToString()) + temp; } } break; } } if (!RowIsFound) { System.Data.DataRow R3; if (string.IsNullOrEmpty(this.WeightVar)) { R3 = Freq_ListSet[Key].NewRow(); R3["value"] = R[C.ColumnName]; R3["count"] = 1; if (this.StratvarList != null) { foreach (string strata in this.StratvarList) { R3[strata] = R[strata]; } } KeyP.Value.Rows.Add(R3); } else { double temp = 0; if (double.TryParse(R[this.WeightVar].ToString(), out temp)) { R3 = Freq_ListSet[Key].NewRow(); R3["value"] = R[C.ColumnName]; R3["count"] = temp; if (this.StratvarList != null) { foreach (string strata in this.StratvarList) { R3[strata] = R[strata]; } } KeyP.Value.Rows.Add(R3); } } } break; } } } } string[] tmpString2 = null; tmpString2 = SelectClause.ToString().Split(new string[] { " AND " }, StringSplitOptions.None); bool appendWithAND = false; HTMLString.Append("<p><b>"); if (!(tmpString2.Length == 1 && tmpString2[0] == "")) { foreach (string tempString in tmpString2) { string[] tmpString = null; tmpString = tempString.ToString().Split('='); if (tmpString.Length == 1) { tmpString = tempString.ToString().Split(new string[] { " is " }, StringSplitOptions.None); } string newSelectClause = string.Empty; bool variableExists = this.Context.EpiViewVariableList.ContainsKey(tmpString[0].Trim()); string dataType = DT.Columns[tmpString[0].Trim()].DataType.ToString(); bool isByte = dataType.Equals("System.Byte"); bool isBool = dataType.Equals("System.Boolean"); if (variableExists && (isByte || isBool)) { if (tmpString[1].ToUpperInvariant().Contains("FALSE")) { tmpString[1] = this.config.Settings.RepresentationOfNo; } else if (tmpString[1].ToUpperInvariant().Contains("TRUE")) { tmpString[1] = this.config.Settings.RepresentationOfYes; } if (tmpString[1].Contains("1")) { tmpString[1] = this.config.Settings.RepresentationOfYes; } else if (tmpString[1].Contains("0")) { tmpString[1] = this.config.Settings.RepresentationOfNo; } else if (tmpString[1].ToLowerInvariant().Contains("null")) { tmpString[1] = this.config.Settings.RepresentationOfMissing; } newSelectClause = tmpString[0] + "=" + tmpString[1].ToString(); } else { newSelectClause = tempString; } if (appendWithAND) { HTMLString.Append(" AND " + newSelectClause.Replace("''", "'")); } else { HTMLString.Append(newSelectClause.Replace("''", "'")); } appendWithAND = true; } } HTMLString.Append("</b></p>"); foreach (System.Collections.Generic.KeyValuePair <string, System.Data.DataTable> Key in Freq_ListSet) { double Mode = 0.0; double ModeCount = 0.0; double mean = 0.0; double variance = 0.0; System.Data.DataRow[] tempRows = Key.Value.Select("", "value"); if (config["include-missing"].ToUpperInvariant() == "FALSE") { tempRows = Key.Value.Select(string.Format(" varname='{0}' and [value] is NOT NULL ", Key.Key), "value"); } else { tempRows = Key.Value.Select("", "value"); } //var Rows = tempRows.OrderByDescending(item => item["count"]); int n = 0; double std_dev = 0.0; double Sum = 0.0; double Sum_Sqr = 0.0; double Total = 0; double Min = 0.0; double Max = 0.0; foreach (System.Data.DataRow R in tempRows) { double temp; double.TryParse(R["count"].ToString(), out temp); Total += temp; } foreach (System.Data.DataRow R in tempRows) { if (!string.IsNullOrEmpty(this.OutTable)) { DataRow newRow = OutDataTable.NewRow(); if (this.StratvarList != null) { foreach (string stratavar in this.StratvarList) { newRow[stratavar] = R[stratavar]; } } newRow[Key.Key] = R["value"]; newRow["VARNAME"] = Key.Key; newRow["PERCENT"] = (((double)R["count"]) / Total) * 100.0; newRow["COUNT"] = R["count"]; OutDataTable.Rows.Add(newRow); } } HTMLString.Append("<table cellpadding=\"2\">"); HTMLString.Append("<tr><th>"); if (this.Context.EpiViewVariableList.ContainsKey(Key.Key) && this.config.Settings.ShowCompletePrompt) { HTMLString.Append(this.Context.EpiViewVariableList[Key.Key].Prompt); } else { HTMLString.Append(Key.Key); } HTMLString.Append("</th><th>Frequency</th><th>Percent</th><th>Cum. Percent</th><th style=\"width:100px\"> </th></tr>"); double AccumulatedTotal = 0; List <ConfLimit> confLimits = new List <ConfLimit>(); int obs = 0; foreach (System.Data.DataRow R in tempRows) { double x; Double.TryParse(R["value"].ToString(), out x); if (obs == 0) { Max = Min = x; } else { Max = x; } obs++; n++; Sum += x; Sum_Sqr += x * x; double currrentCount; double.TryParse(R["count"].ToString(), out currrentCount); if (currrentCount > ModeCount) { ModeCount = currrentCount; Mode = x; } AccumulatedTotal += currrentCount; HTMLString.Append("<tr>"); HTMLString.Append("<td><strong>"); if (Context.EpiViewVariableList.ContainsKey(Key.Key)) { int dataTypeCode = Context.EpiViewVariableList[Key.Key].DataType.GetHashCode(); DataType dataType = (DataType)dataTypeCode; GetPrintValue(Key.Key, R["value"], config, HTMLString, dataType); } else { GetPrintValue(Key.Key, R["value"], config, HTMLString); } HTMLString.Append("</strong></td>"); HTMLString.Append("<td align=\"right\">"); HTMLString.Append(currrentCount.ToString()); HTMLString.Append("</td>"); HTMLString.Append("<td align=\"right\">"); HTMLString.Append(ConvertToPercent(currrentCount / Total)); HTMLString.Append("</td>"); HTMLString.Append("<td align=\"right\">"); HTMLString.Append(ConvertToPercent(AccumulatedTotal / Total)); HTMLString.Append("</td><td><div class=PercentBar_Summary style=\"width:" + ConvertToPixelLength(currrentCount / Total) + "\"> </div></td>"); HTMLString.Append("</tr>"); confLimits.Add(GetConfLimit(GetPrintValue(Key.Key, R["value"], config), (float)currrentCount, (float)Total)); } mean = Sum / n; variance = (Sum_Sqr - Sum * mean) / (n - 1); std_dev = calcStd_Dev(tempRows, mean); HTMLString.Append("<tr>"); HTMLString.Append("<td><strong>Total</strong></td><td align=\"right\">"); HTMLString.Append(Total.ToString()); HTMLString.Append("</td><td align=\"right\">" + ConvertToPercent(1) + "</td><td align=\"right\">" + ConvertToPercent(1) + "</td><td><div class=PercentBar_Totals style=\"width:100%\"> </div></td><tr>"); HTMLString.Append("</table>"); HTMLString.Append("<BR CLEAR=ALL/>"); if (Total < 300) { HTMLString.Append("<TABLE> <TD Class='Stats' ColSpan=\"3\"><B>Exact 95% Conf Limits</B></TD>"); } else { HTMLString.Append("<TABLE> <TD Class='Stats' ColSpan=\"3\"><B>Wilson 95% Conf Limits</B></TD>"); } foreach (ConfLimit cl in confLimits) { HTMLString.Append("<TR><TD Class='Stats'>" + cl.Value + "</TD><TD Class='Stats'>" + ConvertToPercent(cl.Lower) + "</TD><TD Class='Stats'>" + ConvertToPercent(cl.Upper) + "</TD></TR>"); } HTMLString.Append("</TABLE>"); } } if (!string.IsNullOrEmpty(this.OutTable)) { this.Context.OutTable(OutDataTable); } Dictionary <string, string> args = new Dictionary <string, string>(); args.Add("COMMANDNAME", "FREQ"); args.Add("COMMANDTEXT", commandText.Trim()); args.Add("HTMLRESULTS", HTMLString.ToString()); this.Context.Display(args); }