Ejemplo n.º 1
0
        /// <summary>
        /// The execute query simple.
        /// </summary>
        /// <param name="query">The query.</param>
        /// <param name="parameterValues">The parameter values.</param>
        /// <param name="version">The version.</param>
        /// <param name="progress">The progress.</param>
        /// <param name="groups">The groups.</param>
        /// <returns>
        /// The <see cref="QueryInstanceResultInfo" />.
        /// </returns>
        public QueryInstanceResultInfo ExecuteQuerySimple(
            QueryInfo query,
            QueryExecutionParams parameters,
            InstanceVersion version,
            ProgressItem progress,
            params GroupDefinition[] groups
            )
        {
            // Log.InfoFormat("73:query:'{0}'",
            //  query
            // );

            QueryInstanceResultInfo result    = new QueryInstanceResultInfo(this.Instance);
            QueryItemInfo           queryItem = query.Items.GetQueryItemForVersion(version);

            this.PrepareProgress(progress, groups);

            this.ExecuteQuery(
                query,
                parameters,
                progress,
                groups,
                result,
                queryItem
                );

            return(result);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// The process group.
        /// </summary>
        /// <param name="query">The query.</param>
        /// <param name="parameterValues">The parameter values.</param>
        /// <param name="result">The result.</param>
        /// <param name="queryItem">The query item.</param>
        /// <param name="group">The group.</param>
        /// <param name="subProgress">The sub progress.</param>
        protected virtual void ExecuteQuery(
            QueryInfo query,
            QueryExecutionParams parameters,
            QueryInstanceResultInfo result,
            QueryItemInfo queryItem,
            GroupDefinition group,
            ProgressItem subProgress
            )
        {
            // Log.InfoFormat("146:query:'{0}'",
            //  query
            // );

            var qr = this.ExecuteQueryItemFunction.Invoke(
                this.Instance,
                queryItem,
                string.IsNullOrWhiteSpace(group.Name) ? parameters.DefaultDatabase : group.Name,
                //group.Name,
                group.Id,
                query.Parameters,
                parameters.Values.ToList(),
                subProgress
                );

            // костыль. Наверное, прибъется вообще после убиения "групп"
            qr.Database = group.Name;

            result.AddDatabaseResult(qr);
        }
		/// <summary>
		/// The execute query simple.
		/// </summary>
		/// <param name="query">The query.</param>
		/// <param name="parameterValues">The parameter values.</param>
		/// <param name="version">The version.</param>
		/// <param name="progress">The progress.</param>
		/// <param name="groups">The groups.</param>
		/// <returns>
		/// The <see cref="QueryInstanceResultInfo" />.
		/// </returns>
		public QueryInstanceResultInfo ExecuteQuerySimple(
			QueryInfo                query,
			QueryExecutionParams     parameters,
			InstanceVersion          version,
			ProgressItem             progress,
			params GroupDefinition[] groups
		)
		{
			// Log.InfoFormat("73:query:'{0}'",
			// 	query
			// );

			QueryInstanceResultInfo result = new QueryInstanceResultInfo(this.Instance);
			QueryItemInfo queryItem        = query.Items.GetQueryItemForVersion(version);

			this.PrepareProgress(progress, groups);

			this.ExecuteQuery(
				query,
				parameters,
				progress,
				groups,
				result,
				queryItem
			);

			return result;
		}
Ejemplo n.º 4
0
        /// <inheritdoc />
        protected override void ExecuteQuery(
            QueryInfo query,
            QueryExecutionParams parameters,
            QueryInstanceResultInfo result,
            QueryItemInfo queryItem,
            GroupDefinition group,
            ProgressItem subProgress
            )
        {
            var tempValues = new List <ParameterValue>(parameters.Values);

            foreach (var parameter in group.GroupParameters)
            {
                tempValues.Add(new ParameterValue
                {
                    Name        = "@" + parameter.Key,
                    StringValue = parameter.Value
                }
                               );
            }

            QueryDatabaseResultInfo databaseResult = this.ExecuteQueryItemFunction.Invoke(
                this.Instance,
                queryItem,
                null,
                null,
                query.Parameters,
                tempValues,
                subProgress
                );

            databaseResult.Database   = group.Name;
            databaseResult.DatabaseId = group.Id;

            result.AddDatabaseResult(databaseResult);
        }
		/// <inheritdoc />
		protected override void ExecuteQuery(
			QueryInfo               query,
			QueryExecutionParams    parameters,
			QueryInstanceResultInfo result,
			QueryItemInfo           queryItem,
			GroupDefinition         group,
			ProgressItem            subProgress
		)
		{
			var tempValues = new List<ParameterValue>(parameters.Values);

			foreach (var parameter in group.GroupParameters)
			{
				tempValues.Add(new ParameterValue
					{
						Name        = "@" + parameter.Key,
						StringValue = parameter.Value
					}
				);
			}

			QueryDatabaseResultInfo databaseResult = this.ExecuteQueryItemFunction.Invoke(
				this.Instance,
				queryItem,
				null,
				null,
				query.Parameters,
				tempValues,
				subProgress
			);

			databaseResult.Database   = group.Name;
			databaseResult.DatabaseId = group.Id;

			result.AddDatabaseResult(databaseResult);
		}
Ejemplo n.º 6
0
        /// <summary>
        /// The execute query.
        /// </summary>
        /// <param name="query">The query.</param>
        /// <param name="parameterValues">The parameter values.</param>
        /// <param name="progress">The progress.</param>
        /// <param name="groups">The groups.</param>
        /// <param name="result">The result.</param>
        /// <param name="queryItem">The query item.</param>
        private void ExecuteQuery(
            QueryInfo query,
            QueryExecutionParams parameters,
            ProgressItem progress,
            GroupDefinition[]       groups,
            QueryInstanceResultInfo result,
            QueryItemInfo queryItem
            )
        {
            // Log.InfoFormat("query:'{0}'",
            //  query
            // );

            Debug.Assert(groups.Length <= 1);

            if (groups.Length == 0)
            {
                this.ExecuteQuery(
                    query,
                    parameters,
                    result,
                    queryItem,
                    new GroupDefinition(
                        this.Instance,
                        string.Empty,
                        string.Empty
                        ),
                    progress
                    );

                ProgressComplete(progress);
            }
            else
            {
                foreach (var group in groups)
                {
                    if (group.ChildGroups.Count > 0)
                    {
                        var tempParams = parameters.Clone();

                        tempParams.AddValues(
                            this.GetGroupsResolver().GetParametersFromDefinition(group)
                            );

                        this.ExecuteQuery(
                            query,
                            tempParams,
                            progress,
                            group.ChildGroups.ToArray(),
                            result,
                            queryItem
                            );
                    }

                    ProgressItem subProgress = null;

                    if (progress != null)
                    {
                        try
                        {
                            subProgress = progress.GetChild();
                        }
                        catch (Exception)
                        {
                        }
                    }

                    this.ExecuteQuery(
                        query,
                        parameters,
                        result,
                        queryItem,
                        @group,
                        subProgress
                        );

                    ProgressComplete(subProgress);
                }
            }
        }
Ejemplo n.º 7
0
        private TemplateNodeResultItem ReadTemplateNodeResult(TemplateNodeQueryInfo templateNodeQueryInfo, MultyQueryResultInfo result)
        {
            var queryResult          = new QueryResultInfo();
            List <QueryInfo> queries = MsSqlAuditor.GetQueryByTemplateNodeQueryInfo(templateNodeQueryInfo);

            // looking for user settings for parameter values
            templateNodeQueryInfo.ReadParametersFrom(Settings);

            string connectionsSelectId = templateNodeQueryInfo.ConnectionsSelectId;

            if (connectionsSelectId != null)
            {
                foreach (InstanceInfo instance in this._instances)
                {
                    Int64?queryId = Storage.QueryDirectory.GetQueryId(
                        templateNodeQueryInfo.TemplateNode,
                        templateNodeQueryInfo,
                        instance,
                        DateTime.Now,
                        false
                        );

                    if (queryId.HasValue)
                    {
                        List <DynamicConnection> connections = new List <DynamicConnection>(
                            Storage.DynamicConnectionDirectory.ReadConnections(queryId.Value)
                            );

                        foreach (DynamicConnection connection in connections)
                        {
                            if (!connection.QueryId.HasValue)
                            {
                                continue;
                            }

                            Int64       dynamicQueryId = connection.QueryId.Value;
                            QuerySource sourceType;

                            if (!Enum.TryParse(connection.Type, true, out sourceType))
                            {
                                _log.ErrorFormat(
                                    @"Unknown ConnectionType:'{0}'",
                                    connection.Type ?? "<Null>"
                                    );

                                sourceType = QuerySource.MSSQL;
                            }

                            InstanceInfo selectConnectionInstance = InstanceInfoResolver.ResolveDynamicInstance(
                                connection.Name,
                                sourceType,
                                connection.IsOdbc
                                );

                            selectConnectionInstance.ConnectionGroup = instance.ConnectionGroup;

                            selectConnectionInstance.LoadServerProperties(Storage);

                            QueryInstanceResultInfo instanceResult = GetInstanceResult(
                                result,
                                selectConnectionInstance,
                                dynamicQueryId,
                                templateNodeQueryInfo,
                                queries
                                );

                            if (instanceResult != null)
                            {
                                queryResult.AddInstanceResult(instanceResult);
                            }
                        }
                    }
                }
            }
            else
            {
                foreach (InstanceInfo instance in this._instances)
                {
                    Int64?queryId = Storage.QueryDirectory.GetQueryId(
                        base.TemplateNode,
                        templateNodeQueryInfo,
                        instance,
                        new DateTime(),
                        true
                        );

                    if (queryId != null)
                    {
                        QueryInstanceResultInfo instanceResult = GetInstanceResult(
                            result,
                            instance,
                            queryId.Value,
                            templateNodeQueryInfo,
                            queries
                            );

                        if (instanceResult != null)
                        {
                            queryResult.AddInstanceResult(instanceResult);
                        }
                    }
                }
            }

            Tuple <DateTime?, DateTime?> dateTimes =
                Storage.NodeInstances.GetTreeNodeLastUpdateAndDuration(base.TemplateNode);

            result.NodeLastUpdated        = dateTimes.Item1;
            result.NodeLastUpdateDuration = dateTimes.Item2;

            return(new TemplateNodeResultItem(templateNodeQueryInfo, queryResult));
        }
Ejemplo n.º 8
0
        private QueryInstanceResultInfo GetInstanceResult(
            MultyQueryResultInfo result,
            InstanceInfo instance,
            Int64 queryId,
            TemplateNodeQueryInfo templateNodeQueryInfo,
            List <QueryInfo> queries
            )
        {
            QueryInstanceResultInfo instanceResult = null;
            Int64     recordSetCount = 0L;
            ITableRow meta           = Storage.ReadLastMeta(queryId);

            if (meta != null)
            {
                DateTime timestamp = (DateTime)meta.Values[TableDefinition.DateCreated];

                result.RefreshTimestamp(timestamp);

                if (!string.IsNullOrEmpty(meta.Values[MetaResultTable.ErrorMessageFieldName].ToString()))
                {
                    instanceResult = new QueryInstanceResultInfo(
                        new ErrorInfo(
                            meta.Values[MetaResultTable.ErrorIdFieldName].ToString(),
                            meta.Values[MetaResultTable.ErrorCodeFieldName].ToString(),
                            meta.Values[MetaResultTable.ErrorMessageFieldName].ToString(),
                            (DateTime)meta.Values[TableDefinition.DateCreated]
                            ),
                        instance
                        );
                }
                else
                {
                    instanceResult = new QueryInstanceResultInfo(instance);
                }

                recordSetCount = (Int64)meta.Values[MetaResultTable.RecordSetCountFieldName];

                DataTable[] dataTables = GetDataTables(
                    recordSetCount,
                    queryId,
                    instance,
                    templateNodeQueryInfo
                    );

                QueryInfo query = queries.FirstOrDefault(x => x.Source == instance.Type || x.Source == QuerySource.SQLite);

                if (query != null)
                {
                    QueryDatabaseResultInfo databaseResult = new QueryDatabaseResultInfo(
                        dataTables,
                        query.Items.GetQueryItemForVersion(instance.GetServerPropertiesSafe().Version),
                        base.GroupDefinition.Name,
                        base.GroupDefinition.Id
                        );

                    instanceResult.AddDatabaseResult(databaseResult);
                }
            }

            return(instanceResult);
        }
        public XmlDocument Transform(QueryResultDataSource dataSource)
        {
            GroupDefinition      database      = dataSource.NodeDefinition.Group;
            MultyQueryResultInfo queriesResult = dataSource.QueriesResult;
            MsSqlAuditorModel    model         = dataSource.Model;

            if (queriesResult == null)
            {
                return(null);
            }

            try
            {
                DateTime    timestamp = queriesResult.Timestamp;
                XmlDocument xml       = new XmlDocument();

                xml.AppendChild(xml.CreateXmlDeclaration("1.0", "UTF-8", String.Empty));

                XmlElement rootNode = xml.CreateElement(Consts.ResultsTag);
                rootNode.SetAttribute(TimestampAttributeName, timestamp.ToInternetString());
                xml.AppendChild(rootNode);

                foreach (TemplateNodeResultItem tuple in queriesResult.List)
                {
                    TemplateNodeQueryInfo templateNodeQueryInfo = tuple.TemplateNodeQuery;
                    QueryResultInfo       queryResult           = tuple.QueryResult;

                    foreach (
                        KeyValuePair <InstanceInfo, QueryInstanceResultInfo> instancePair in queryResult.InstancesResult)
                    {
                        InstanceInfo instance = instancePair.Key;

                        QueryInstanceResultInfo queryInstanceResult = instancePair.Value;

                        if (queryInstanceResult.ErrorInfo == null)
                        {
                            try
                            {
                                QueryDatabaseResultInfo databaseResult = queryInstanceResult.DatabasesResult[database.Name];
                                int rowCount = 0;

                                if (databaseResult != null)
                                {
                                    rowCount = databaseResult.DataTables != null
                                                                                ? databaseResult.DataTables.Where(x => x != null).Select(x => x.Rows).Sum(x => x.Count)
                                                                                : 0;
                                }

                                GenerateResultDefinition(
                                    rootNode,
                                    templateNodeQueryInfo,
                                    databaseResult.ErrorInfo,
                                    instance,
                                    rowCount,
                                    (databaseResult.DataTables != null ? databaseResult.DataTables.Length : 0)
                                    );
                            }
                            catch (Exception ex)
                            {
                                log.Error("Error in 'Extracts data from queries and saves it to Xml-files'", ex);
                            }
                        }
                        else
                        {
                            GenerateResultDefinition(
                                rootNode,
                                templateNodeQueryInfo,
                                queryInstanceResult.ErrorInfo,
                                instance,
                                0,
                                0
                                );
                        }
                    }
                }

                foreach (TemplateNodeResultItem tuple in queriesResult.List)
                {
                    TemplateNodeQueryInfo templateNodeQueryInfo = tuple.TemplateNodeQuery;

                    if (templateNodeQueryInfo.GetType() != typeof(TemplateNodeSqlGuardQueryInfo))
                    {
                        model.GetQueryByTemplateNodeQueryInfo(templateNodeQueryInfo);
                    }

                    QueryResultInfo queryResult = tuple.QueryResult;

                    foreach (
                        KeyValuePair <InstanceInfo, QueryInstanceResultInfo> instancePair in queryResult.InstancesResult)
                    {
                        InstanceInfo            instance            = instancePair.Key;
                        QueryInstanceResultInfo queryInstanceResult = instancePair.Value;

                        if (queryInstanceResult.ErrorInfo == null)
                        {
                            foreach (KeyValuePair <string, QueryDatabaseResultInfo> namedResult in queryInstanceResult.DatabasesResult)
                            {
                                if (namedResult.Key == database.Name)
                                {
                                    XmlNode parent = rootNode.ChildNodes.OfType <XmlNode>().FirstOrDefault(
                                        x =>
                                        (
                                            x.Attributes["instance"] != null &&
                                            x.Attributes["instance"].Value == instance.Name
                                        )
                                        &&
                                        (
                                            x.Attributes["name"] != null &&
                                            x.Attributes["name"].Value == templateNodeQueryInfo.QueryName
                                        )
                                        &&
                                        (
                                            x.Attributes["hierarchy"] != null &&
                                            x.Attributes["hierarchy"].Value == (templateNodeQueryInfo.ResultHierarchy ?? string.Empty)
                                        )
                                        );

                                    QueryDatabaseResultInfo databaseResult = namedResult.Value;

                                    if (databaseResult.DataTables != null)
                                    {
                                        Int64 recordSet = 1L;

                                        foreach (DataTable curTable in databaseResult.DataTables)
                                        {
                                            if (parent != null)
                                            {
                                                parent.InnerXml = parent.InnerXml +
                                                                  ProcessDataTableAsStringXml(curTable, recordSet);
                                            }

                                            recordSet++;
                                        }
                                    }

                                    if (databaseResult.QueryItem.ParentQuery.Scope == QueryScope.Database)
                                    {
                                        if (!string.IsNullOrEmpty(databaseResult.Database))
                                        {
                                            XmlAttribute attr = xml.CreateAttribute("database");
                                            attr.Value = databaseResult.Database;
                                            parent.Attributes.Append(attr);
                                        }

                                        if (!string.IsNullOrEmpty(databaseResult.DatabaseId))
                                        {
                                            XmlAttribute attr = xml.CreateAttribute("databaseId");
                                            attr.Value = databaseResult.DatabaseId;
                                            parent.Attributes.Append(attr);
                                        }
                                    }
                                    else if (databaseResult.QueryItem.ParentQuery.Scope == QueryScope.InstanceGroup)
                                    {
                                        if (!string.IsNullOrEmpty(databaseResult.Database))
                                        {
                                            XmlAttribute attr = xml.CreateAttribute("InstanceGroupName");
                                            attr.Value = databaseResult.Database;
                                            parent.Attributes.Append(attr);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                return(xml);
            }
            catch (Exception ex)
            {
                log.Error("Error in 'Extracts data from queries and saves it to Xml-files'", ex);
            }

            return(null);
        }
Ejemplo n.º 10
0
        public ITableRow GetMetaRow(
            long requestId,
            long sessionId,
            DateTime timestamp,
            QueryInstanceResultInfo queryInstanceResult,
            long?queryId,
            long?rowsSaved
            )
        {
            string    errorNumber    = null;
            string    errorCode      = null;
            string    errorMessage   = null;
            Int64     recordSetCount = 0L;
            ITableRow row            = this.NewRow();

            row.Values.Add(QueryDirectory.TableName.AsFk(), queryId);
            row.Values.Add(QueryGroupDirectory.TableName.AsFk(), null);
            row.Values.Add(RequestIdFieldName, requestId);
            row.Values.Add(SessionIdFieldName, sessionId);
            row.Values.Add(TableDefinition.DateCreated, timestamp);

            if (queryInstanceResult != null)
            {
                if (queryInstanceResult.ErrorInfo == null)
                {
                    if (queryInstanceResult.DatabasesResult.ContainsKey(""))                              //group.Name))
                    {
                        QueryDatabaseResultInfo databaseResult = queryInstanceResult.DatabasesResult[""]; //group.Name];

                        if (rowsSaved == null)
                        {
                            rowsSaved = databaseResult.DataTables != null
                                                                ? databaseResult.DataTables.Select(x => x.Rows).Sum(x => x.Count)
                                                                : 0L;
                        }

                        recordSetCount = (databaseResult.DataTables == null)
                                                        ? 0L
                                                        : databaseResult.DataTables.Length;

                        if (databaseResult.ErrorInfo != null)
                        {
                            errorNumber  = databaseResult.ErrorInfo.Number;
                            errorCode    = databaseResult.ErrorInfo.Code;
                            errorMessage = databaseResult.ErrorInfo.Message;
                        }
                    }
                }
                else
                {
                    errorNumber  = queryInstanceResult.ErrorInfo.Number;
                    errorCode    = queryInstanceResult.ErrorInfo.Code;
                    errorMessage = queryInstanceResult.ErrorInfo.Message;
                    rowsSaved    = 0L;
                }
            }

            row.Values.Add(RowCountFieldName, rowsSaved);
            row.Values.Add(RecordSetCountFieldName, recordSetCount);
            row.Values.Add(ErrorIdFieldName, errorNumber);
            row.Values.Add(ErrorCodeFieldName, errorCode);
            row.Values.Add(ErrorMessageFieldName, errorMessage);

            return(row);
        }
Ejemplo n.º 11
0
        private void ProcessCodeGuardQuery(
            MultyQueryResultInfo result,
            TemplateNodeSqlGuardQueryInfo guardQueryInfo)
        {
            var queryResultInfo       = result.List.First(item => item.TemplateNodeQuery.Id == guardQueryInfo.SqlQueryId);
            var templateNodeQueryInfo = queryResultInfo.TemplateNodeQuery;
            var userParams            = new List <ParameterValue>();

            if (base.Settings != null)
            {
                var querySettings = base.Settings.Connection.Activity.Parameters
                                    .Where(i => i.Key == guardQueryInfo.IdsHierarchy && i.Value != null);

                foreach (var info in querySettings)
                {
                    switch (info.Type)
                    {
                    case ParameterInfoType.Attribute:
                        guardQueryInfo.GetType().GetProperty("User" + info.Parameter)
                        .SetValue(guardQueryInfo, info.Value, null);
                        break;

                    case ParameterInfoType.Parameter:
                        var parameter =
                            templateNodeQueryInfo.ParameterValues.FirstOrDefault(p => p.Name == info.Parameter);
                        if (parameter != null)
                        {
                            parameter.UserValue = info.Value;
                        }
                        break;

                    case ParameterInfoType.EditableParameter:
                        var editparameter = new ParameterValue
                        {
                            Name        = info.Parameter,
                            StringValue = info.Default,
                            UserValue   = info.Value
                        };
                        userParams.Add(editparameter);
                        break;
                    }
                }
            }

            var guardQueryResult = new QueryResultInfo();

            foreach (var instanceResult in queryResultInfo.QueryResult.InstancesResult)
            {
                var instance   = instanceResult.Key;
                var queryTable = instanceResult.Value.DatabasesResult.First().Value.DataTables.First();

                if (!queryTable.Columns.Contains(guardQueryInfo.QueryCodeColumn))
                {
                    continue;
                }

                //var meta = ReadMeta(connectionGroup, templateNode, instance, database, templateNodeQueryInfo).FirstOrDefault();
                var meta = Storage.ReadLastMeta(
                    base.TemplateNode,
                    instance,
                    templateNodeQueryInfo
                    );

                if (meta == null)
                {
                    continue;
                }

                QueryInstanceResultInfo guardInstanceResult;
                var timestamp = (DateTime)meta.Values[TableDefinition.DateCreated];

                result.RefreshTimestamp(timestamp);

                if (!string.IsNullOrEmpty(meta.Values[MetaResultTable.ErrorMessageFieldName].ToString()))
                {
                    guardInstanceResult = new QueryInstanceResultInfo(
                        new ErrorInfo(
                            meta.Values[MetaResultTable.ErrorIdFieldName].ToString(),
                            meta.Values[MetaResultTable.ErrorCodeFieldName].ToString(),
                            meta.Values[MetaResultTable.ErrorMessageFieldName].ToString(),
                            timestamp
                            ),
                        instance
                        );
                }
                else
                {
                    guardInstanceResult = new QueryInstanceResultInfo(instance);
                }

                var dataTables = Storage.ReadSqlCodeGuardResult(guardQueryInfo, queryTable, userParams);

                QueryItemInfo queryItemInfo = new QueryItemInfo
                {
                    ParentQuery = new QueryInfo {
                        Name = guardQueryInfo.QueryName
                    }
                };

                QueryDatabaseResultInfo databaseResult = new QueryDatabaseResultInfo(
                    dataTables,
                    queryItemInfo,
                    base.GroupDefinition.Name,
                    base.GroupDefinition.Id
                    );

                guardInstanceResult.AddDatabaseResult(databaseResult);
                guardQueryResult.AddInstanceResult(guardInstanceResult);
            }

            var templateNodeResultItem = new TemplateNodeResultItem(guardQueryInfo, guardQueryResult);

            result.Add(templateNodeResultItem);
        }
Ejemplo n.º 12
0
		/// <summary>
		/// The execute query.
		/// </summary>
		/// <param name="query">The query.</param>
		/// <param name="parameterValues">The parameter values.</param>
		/// <param name="progress">The progress.</param>
		/// <param name="groups">The groups.</param>
		/// <param name="result">The result.</param>
		/// <param name="queryItem">The query item.</param>
		private void ExecuteQuery(
			QueryInfo               query,
			QueryExecutionParams    parameters,
			ProgressItem            progress,
			GroupDefinition[]       groups,
			QueryInstanceResultInfo result,
			QueryItemInfo           queryItem
		)
		{
			// Log.InfoFormat("query:'{0}'",
			// 	query
			// );

			Debug.Assert(groups.Length <= 1);

			if (groups.Length == 0)
			{
				this.ExecuteQuery(
					query,
					parameters,
					result,
					queryItem,
					new GroupDefinition(
						this.Instance,
						string.Empty,
						string.Empty
					),
					progress
				);

				ProgressComplete(progress);
			}
			else
			{
				foreach (var group in groups)
				{
					if (group.ChildGroups.Count > 0)
					{
						var tempParams = parameters.Clone();

						tempParams.AddValues(
							this.GetGroupsResolver().GetParametersFromDefinition(group)
						);

						this.ExecuteQuery(
							query,
							tempParams,
							progress,
							group.ChildGroups.ToArray(),
							result,
							queryItem
						);
					}

					ProgressItem subProgress = null;

					if (progress != null)
					{
						try
						{
							subProgress = progress.GetChild();
						}
						catch (Exception)
						{
						}
					}

					this.ExecuteQuery(
						query,
						parameters,
						result,
						queryItem,
						@group,
						subProgress
					);

					ProgressComplete(subProgress);
				}
			}
		}
Ejemplo n.º 13
0
		/// <summary>
		/// The process group.
		/// </summary>
		/// <param name="query">The query.</param>
		/// <param name="parameterValues">The parameter values.</param>
		/// <param name="result">The result.</param>
		/// <param name="queryItem">The query item.</param>
		/// <param name="group">The group.</param>
		/// <param name="subProgress">The sub progress.</param>
		protected virtual void ExecuteQuery(
			QueryInfo               query,
			QueryExecutionParams    parameters,
			QueryInstanceResultInfo result,
			QueryItemInfo           queryItem,
			GroupDefinition         group,
			ProgressItem            subProgress
		)
		{
			// Log.InfoFormat("146:query:'{0}'",
			// 	query
			// );

			var qr = this.ExecuteQueryItemFunction.Invoke(
				this.Instance,
				queryItem,
				string.IsNullOrWhiteSpace(group.Name) ? parameters.DefaultDatabase : group.Name,
				//group.Name,
				group.Id,
				query.Parameters,
				parameters.Values.ToList(),
				subProgress
			);

			// костыль. Наверное, прибъется вообще после убиения "групп"
			qr.Database = group.Name;

			result.AddDatabaseResult(qr);
		}
Ejemplo n.º 14
0
        public void SaveRequestedData(
            TemplateNodeInfo templateNodeInfo,
            MultyQueryResultInfo results
            )
        {
            Debug.Assert(templateNodeInfo.IsInstance);

            long             requestId = this.CurrentStorage.MetaResultTable.GetMaxRequestId() + 1L;
            DateTime         timestamp = DateTime.Now;
            const long       sessionId = 1L;
            List <ITableRow> metaRows  = new List <ITableRow>();

            foreach (TemplateNodeResultItem nodeResult in results.List)
            {
                TemplateNodeQueryInfo templateNodeQuery = nodeResult.TemplateNodeQuery;
                QueryResultInfo       queryResult       = nodeResult.QueryResult;

                foreach (KeyValuePair <InstanceInfo, QueryInstanceResultInfo> instancePair in queryResult.InstancesResult)
                {
                    long                    totalRowsSaved      = 0L;
                    InstanceInfo            instance            = instancePair.Key;
                    QueryInstanceResultInfo queryInstanceResult = instancePair.Value;

                    Int64?queryId = CurrentStorage.QueryDirectory.GetQueryId(
                        templateNodeInfo,
                        templateNodeQuery,
                        instance,
                        timestamp,
                        false
                        );

                    Log.InfoFormat("Instance:'{0}';QueryId:'{1}'",
                                   instance,
                                   queryId
                                   );

                    if (queryInstanceResult.ErrorInfo == null)
                    {
                        IEnumerable <QueryDatabaseResultInfo> notEmptyResults = queryInstanceResult.DatabasesResult.Values
                                                                                .Where(d => d != null && d.DataTables != null);

                        foreach (QueryDatabaseResultInfo databaseResultInfo in notEmptyResults)
                        {
                            totalRowsSaved += SaveDatabaseResult(
                                templateNodeQuery,
                                instance,
                                databaseResultInfo,
                                queryId
                                );
                        }
                    }

                    ITableRow metaRow = this.CurrentStorage.MetaResultTable.GetMetaRow(
                        requestId,
                        sessionId,
                        timestamp,
                        queryInstanceResult,
                        queryId,
                        totalRowsSaved
                        );

                    metaRows.Add(metaRow);
                }
            }

            this.CurrentStorage.MetaResultTable.ReplaceRows(metaRows);
            this.CurrentStorage.ResetRowCountCache(templateNodeInfo);
        }