/// <summary>
        /// Merges the calculated data.
        /// </summary>
        /// <param name="table">The table.</param>
        /// <param name="side">The side.</param>
        /// <param name="field">The field.</param>
        /// <param name="sql">The SQL.</param>
        /// <param name="dataSource">The data source.</param>
        /// <param name="cancelToken">The cancel token.</param>
        /// <returns>System.Data.DataTable.</returns>
        private DataTable MergeCalculatedData(DataTable table, string side, string field, string sql,
                                              DataSourceBase dataSource, CancellationTokenSource cancelToken)
        {
            string name = side + "_" + field;

            string file = Alias.Debug + this.Model.GetName() + "." + name + ".sql";

            var query = new QueryMessageModel(sql, name);

            query.LogQuery(file);

            var results = dataSource.ExecuteQuery(sql, cancelToken.Token);

            query.SetCount(results);
            query.LogQuery(file);

            this.Model.Queries.Add(query);

            if (results.Tables.Count == 0)
            {
                return(null);
            }
            var data = results.MergeAll();

            //  var data = results.Tables[0];
            data = data.ListAggr();

            data.Columns[0].ColumnName = Alias.Primary_Key;
            data.PrimaryKey            = new[] { data.Columns[0] };
            table.InnerJoin <string>(Alias.Primary_Key, data);
            data.Columns[1].ColumnName = side + "_" + field;
            return(data);
        }