コード例 #1
0
ファイル: ADODataBridge.cs プロジェクト: mukeshdepani/ParaRD
        public static CrossTabResults getCrossTabulationData_old(string connectionString, SelectQueryBuilder queryBuilder, out int totalItems, out int totalCols)
        {
            DateTime startTime = DateTime.Now;
            if (String.IsNullOrEmpty(connectionString))
                throw new ArgumentNullException(connectionString);

            MySqlConnection connection = new MySqlConnection(connectionString);
            connection.Open();
            try
            {
                string queryWithoutSelect = queryBuilder.getQueryforGroupBy(out totalCols);
                queryBuilder.setSelectedColumns_CrossTabulation(connectionString);

                string selectPartQuery = queryBuilder.getCrossTabSelectPartQuery();
                DataSet dataSet = new DataSet();

                totalItems = 0;
                CrossTabResults crossTabResults = queryBuilder.CrossTabulationResults;
                totalCols = crossTabResults.GroupByColumns.Count + (crossTabResults.SummarizeColumns.Count * (crossTabResults.CrossTabColumnVaues.Count + 1));

                if (queryBuilder.GroupByColumns.Count() == 0)
                {
                    throw new Exception("Calling wrong method!!!");
                }
                else
                {
                    string finalQuery = selectPartQuery + " " + queryWithoutSelect + ";";
                    MySqlDataAdapter dataAdapter = new MySqlDataAdapter(finalQuery, connection);

                    dataAdapter.Fill(dataSet);
                    totalItems = dataSet.Tables[0].Rows.Count;
                }

                crossTabResults.Results = dataSet.Tables[0];
                List<string> columnTypes = new List<string>();
                for (int colIndex = 0; colIndex < dataSet.Tables[0].Columns.Count; colIndex++)
                {
                    columnTypes.Add(dataSet.Tables[0].Columns[colIndex].DataType.FullName);
                }


                DataView dataView = crossTabResults.Results.DefaultView;
                Dictionary<string, Object> dataMap = new Dictionary<string, Object>();
                List<List<string>> groupByColumnValueList = new List<List<string>>();
                List<string> keyPrefixes = new List<string>();
                List<string> groupByColumnValue = null;
                List<string> prevGroupByColumnValue = null;
                string key = "";
                for (int rowIndex = 0; rowIndex < dataView.Count; rowIndex++)
                {
                    groupByColumnValue = new List<string>();
                    int colIndex = 0;
                    for (; colIndex < crossTabResults.GroupByColumns.Count; colIndex++)
                    {
                        string value = dataView[rowIndex].Row[colIndex].ToString();
                        groupByColumnValue.Add(value);
                    }

                    if (prevGroupByColumnValue == null || !groupByColumnValue.SequenceEqual(prevGroupByColumnValue))
                    {
                        prevGroupByColumnValue = groupByColumnValue;
                        groupByColumnValueList.Add(groupByColumnValue);
                        key = "";
                        for (int i = 0; i < groupByColumnValue.Count; i++)
                        {
                            key += groupByColumnValue.ElementAt<string>(i);
                        }
                        key += "~";
                        keyPrefixes.Add(key);
                    }

                    string crossTabColValue = dataView[rowIndex].Row[colIndex].ToString();
                    colIndex++;

                    for (int i = 0; i < crossTabResults.SummarizeColumns.Count; i++)
                    {
                        Object value = dataView[rowIndex].Row[i + colIndex];
                        dataMap.Add(key + crossTabColValue + i, value); // key = append all group by column + cross Tab Column + summarize column Index
                    }
                }

                if (prevGroupByColumnValue == null || !groupByColumnValue.SequenceEqual(prevGroupByColumnValue))
                {
                    groupByColumnValueList.Add(groupByColumnValue);
                }

                // Populate missing values and Totals
                int summarizColStartIndex = crossTabResults.GroupByColumns.Count + 1; // +1 for cross tabulation column (ehich is also part of groupby column in final query
                for (int keyIndex = 0; keyIndex < keyPrefixes.Count; keyIndex++)
                {
                    string keyPrefix = keyPrefixes.ElementAt<string>(keyIndex);
                    decimal[] totals = new decimal[crossTabResults.SummarizeColumns.Count];
                    for (int crosTabColValueIndex = 0; crosTabColValueIndex < crossTabResults.CrossTabColumnVaues.Count; crosTabColValueIndex++)
                    {
                        string crossTabColValue = crossTabResults.CrossTabColumnVaues.ElementAt<string>(crosTabColValueIndex);
                        for (int i = 0; i < crossTabResults.SummarizeColumns.Count; i++)
                        {
                            string keyValue = keyPrefix + crossTabColValue + i;
                            string valueType = columnTypes.ElementAt<string>(summarizColStartIndex + i);
                            SQLBuilder.Clauses.Column summarizeColumn = crossTabResults.SummarizeColumns.ElementAt<SQLBuilder.Clauses.Column>(i);

                            if (dataMap.ContainsKey(keyValue))
                            {
                                //Add column values
                                Object value = dataMap[keyValue];
                                if (!(value == null || "".Equals(value.ToString().Trim())))
                                {
                                    totals[i] = summarize(summarizeColumn.Name.Substring(0, summarizeColumn.Name.IndexOf('(')), totals[i], decimal.Parse(value.ToString()));
                                }
                            }
                            else
                            {
                                // set the missing column value to 0
                                Object zeroValueObject = getZeroValueObject(valueType);
                                dataMap.Add(keyValue, zeroValueObject);

                            }
                        }
                    }

                    for (int i = 0; i < crossTabResults.SummarizeColumns.Count; i++)
                    {
                        dataMap.Add(keyPrefix + "Grand Total" + i, getValueObject(totals[i], columnTypes[summarizColStartIndex + i]));
                    }
                }

                crossTabResults.DataMap = dataMap;
                crossTabResults.GroupByColumnValueList = groupByColumnValueList;
                crossTabResults.KeyPrefixes = keyPrefixes;
                Console.WriteLine("Total time in Cross Tabulation execution: " + (DateTime.Now - startTime));
                return crossTabResults;
            }
            finally
            {
                connection.Close();
            }
        }