コード例 #1
0
        private Dictionary <TemplateNodeQueryInfo, DataTable> PrepareHistoryData(
            MultyQueryResultInfo results
            )
        {
            Dictionary <TemplateNodeQueryInfo, DataTable> result =
                new Dictionary <TemplateNodeQueryInfo, DataTable>();

            foreach (QueryDatabaseResult queryDatabaseResult in results.GetDatabaseResults())
            {
                QueryDatabaseResultInfo dbResult = queryDatabaseResult.Result;

                if (dbResult == null || dbResult.DataTables == null)
                {
                    continue;
                }

                TemplateNodeQueryInfo templateNodeQuery = queryDatabaseResult.TemplateNodeQuery;

                foreach (DataTable table in dbResult.DataTables)
                {
                    Debug.Assert(table != null);

                    if (!result.ContainsKey(templateNodeQuery))
                    {
                        result.Add(templateNodeQuery, table);
                    }
                }
            }

            return(result);
        }
コード例 #2
0
        private List <Tuple <TemplateNodeQueryInfo, Int64, DataTable> > GetResultTables(
            ConcreteTemplateNodeDefinition nodeDefinition,
            MultyQueryResultInfo queriesResult
            )
        {
            List <Tuple <TemplateNodeQueryInfo, Int64, DataTable> > resultTables =
                new List <Tuple <TemplateNodeQueryInfo, Int64, DataTable> >();

            try
            {
                GroupDefinition database = nodeDefinition.Group;

                if (database != null)
                {
                    foreach (QueryDatabaseResult queryDatabaseResult in queriesResult.GetDatabaseResults())
                    {
                        QueryDatabaseResultInfo dbResult = queryDatabaseResult.Result;

                        if (dbResult == null || dbResult.DataTables == null)
                        {
                            continue;
                        }

                        if (database.Name == dbResult.Database)
                        {
                            Int64 recordSet = 1L;

                            foreach (DataTable curTable in dbResult.DataTables)
                            {
                                resultTables.Add(
                                    new Tuple <TemplateNodeQueryInfo, Int64, DataTable>(
                                        queryDatabaseResult.TemplateNodeQuery,
                                        recordSet,
                                        curTable
                                        )
                                    );

                                recordSet++;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error("Error in 'Extracts data from queries and saves it to table for RDLC.'", ex);
                throw;
            }

            return(resultTables);
        }
コード例 #3
0
        private long SaveDatabaseResult(
            TemplateNodeQueryInfo templateNodeQuery,
            InstanceInfo instance,
            QueryDatabaseResultInfo dbResult,
            Int64?queryId
            )
        {
            long  totalRows = 0L;
            Int64 recordSet = 1L;

            foreach (DataTable table in dbResult.DataTables)
            {
                Debug.Assert(table != null);

                long?savedRows = this.SaveResults(
                    instance,
                    templateNodeQuery,
                    recordSet,
                    table,
                    queryId
                    );

                if (savedRows.HasValue)
                {
                    totalRows += savedRows.Value;
                }

                recordSet++;
            }

            this.UpdateHistory(
                instance,
                templateNodeQuery,
                queryId.Value
                );

            return(totalRows);
        }
コード例 #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);
        }
コード例 #5
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);
        }
コード例 #6
0
        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);
        }
コード例 #7
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);
        }
コード例 #8
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);
        }