public async Task <IEnumerable <Aggregation> > LoadAggregatedUsageAsync(string dataType, TimeResolution resolution, DateTime startTime, DateTime endTimeExclusive,
                                                                                CancellationToken cancellation)
        {
            var aggregations = new List <Aggregation>();

            using (var ctx = new MsSqlDataContext(ConnectionString, DataOptions, CancellationToken.None))
            {
                await ctx.ExecuteReaderAsync(LoadAggregatedUsageScript, cmd =>
                {
                    cmd.Parameters.AddRange(new[]
                    {
                        ctx.CreateParameter("@DataType", DbType.String, dataType),
                        ctx.CreateParameter("@Resolution", DbType.String, resolution.ToString()),
                        ctx.CreateParameter("@StartTime", DbType.DateTime2, startTime),
                        ctx.CreateParameter("@EndTimeExclusive", DbType.DateTime2, endTimeExclusive),
                    });
                }, async (reader, cancel) => {
                    while (await reader.ReadAsync(cancel))
                    {
                        aggregations.Add(GetAggregationFromReader(reader));
                    }
                    return(true);
                }).ConfigureAwait(false);
            }
            return(aggregations);
        }
예제 #2
0
        public override void Execute(ExecutionContext context)
        {
            var count = 0;

            using (var ctx = new MsSqlDataContext(CancellationToken.None))
            {
                ctx.ExecuteReaderAsync(Script, async(reader, cancel) =>
                {
                    do
                    {
                        if (!reader.HasRows)
                        {
                            continue;
                        }

                        using (new SystemAccount())
                        {
                            while (await reader.ReadAsync(cancel).ConfigureAwait(false))
                            {
                                Operate(reader.GetInt32(0));
                                count++;
                            }
                        }
                    } while (reader.NextResult());

                    return(Task.FromResult(0));
                }).GetAwaiter().GetResult();
            }

            Logger.LogMessage(count < 1
                ? "No content was found with aspect reference field."
                : $"Aspect references were updated on {count} content.");
        }
        public async Task EnumerateDataAsync(string dataType, DateTime startTime, DateTime endTimeExclusive,
                                             Action <IStatisticalDataRecord> aggregatorCallback,
                                             CancellationToken cancellation)
        {
            using (var ctx = new MsSqlDataContext(ConnectionString, DataOptions, CancellationToken.None))
            {
                await ctx.ExecuteReaderAsync(EnumerateDataScript, cmd =>
                {
                    cmd.Parameters.AddRange(new[]
                    {
                        ctx.CreateParameter("@DataType", DbType.String, dataType),
                        ctx.CreateParameter("@StartTime", DbType.DateTime2, startTime),
                        ctx.CreateParameter("@EndTimeExclusive", DbType.DateTime2, endTimeExclusive),
                    });
                }, async (reader, cancel) =>
                {
                    while (await reader.ReadAsync(cancel))
                    {
                        cancel.ThrowIfCancellationRequested();
                        var item = GetStatisticalDataRecordFromReader(reader);
                        aggregatorCallback(item);
                    }

                    return(true);
                }).ConfigureAwait(false);
            }
        }
        public async Task <DateTime?[]> LoadFirstAggregationTimesByResolutionsAsync(string dataType, CancellationToken cancellation)
        {
            var result = new DateTime?[4];

            using (var ctx = new MsSqlDataContext(ConnectionString, DataOptions, CancellationToken.None))
            {
                await ctx.ExecuteReaderAsync(LoadFirstAggregationTimesByResolutionsScript, cmd =>
                {
                    cmd.Parameters.AddRange(new[]
                    {
                        ctx.CreateParameter("@DataType", DbType.String, dataType),
                    });
                }, async (reader, cancel) => {
                    if (await reader.ReadAsync(cancel))
                    {
                        result[0] = reader.GetDateTimeUtcOrNull("Minute");
                        result[1] = reader.GetDateTimeUtcOrNull("Hour");
                        result[2] = reader.GetDateTimeUtcOrNull("Day");
                        result[3] = reader.GetDateTimeUtcOrNull("Month");
                    }
                    return(true);
                }).ConfigureAwait(false);
            }
            return(result.ToArray());
        }
        /* ===================================================================================== SQL DATA HANDLING */

        private static async Task <TimestampData> GetTimestampDataForOneNodeIntegrityCheckAsync(string path, int[] excludedNodeTypeIds)
        {
            var checkNodeSql = "SELECT N.NodeId, V.VersionId, CONVERT(bigint, n.timestamp) NodeTimestamp, CONVERT(bigint, v.timestamp) VersionTimestamp, N.LastMajorVersionId, N.LastMinorVersionId from Versions V join Nodes N on V.NodeId = N.NodeId WHERE N.Path = '{0}' COLLATE Latin1_General_CI_AS";

            if (excludedNodeTypeIds != null && excludedNodeTypeIds.Length > 0)
            {
                checkNodeSql += $" AND N.NodeTypeId NOT IN ({string.Join(", ", excludedNodeTypeIds)})";
            }

            var sql = string.Format(checkNodeSql, path);

            using var ctx = new MsSqlDataContext(ConnectionStrings.ConnectionString,
                                                 DataOptions.GetLegacyConfiguration(), CancellationToken.None);

            return(await ctx.ExecuteReaderAsync(sql, async (reader, cancel) =>
            {
                cancel.ThrowIfCancellationRequested();
                TimestampData dbNode = null;
                if (await reader.ReadAsync(cancel).ConfigureAwait(false))
                {
                    dbNode = new TimestampData
                    {
                        NodeId = reader.GetSafeInt32(reader.GetOrdinal("NodeId")),
                        VersionId = reader.GetSafeInt32(reader.GetOrdinal("VersionId")),
                        NodeTimestamp = reader.GetSafeInt64(reader.GetOrdinal("NodeTimestamp")),
                        VersionTimestamp = reader.GetSafeInt64(reader.GetOrdinal("VersionTimestamp")),
                        LastMajorVersionId = reader.GetSafeInt32(reader.GetOrdinal("LastMajorVersionId")),
                        LastMinorVersionId = reader.GetSafeInt32(reader.GetOrdinal("LastMinorVersionId")),
                    };
                }
                return dbNode;
            }).ConfigureAwait(false));
        }
        internal AssignedTaskResult AssignTasks(int taskCount, int timeoutInMinutes, CancellationToken cancellationToken)
        {
            var result         = new List <int>();
            int remainingTasks = 0;

            using (var ctx = new MsSqlDataContext(_connectionStrings.Repository, _dataOptions, cancellationToken))
            {
                ctx.ExecuteReaderAsync(SqlScripts.AssignTasks, cmd =>
                {
                    cmd.Parameters.Add("@AssignedTaskCount", SqlDbType.Int, taskCount);
                    cmd.Parameters.Add("@TimeOutInMinutes", SqlDbType.Int, timeoutInMinutes);
                }, async(reader, cancel) =>
                {
                    while (await reader.ReadAsync(cancel).ConfigureAwait(false))
                    {
                        result.Add(reader.GetInt32(0));
                    }
                    await reader.NextResultAsync(cancel).ConfigureAwait(false);

                    await reader.ReadAsync(cancel).ConfigureAwait(false);
                    remainingTasks = reader.GetInt32(0);

                    return(Task.FromResult(0));
                }).GetAwaiter().GetResult();
            }

            return(new AssignedTaskResult {
                VersionIds = result.ToArray(), RemainingTaskCount = remainingTasks
            });
        }
예제 #7
0
        private void ExecuteSql(string script, ExecutionContext context)
        {
            var connectionInfo = new ConnectionInfo
            {
                ConnectionName     = null,
                DataSource         = (string)context.ResolveVariable(DataSource),
                InitialCatalog     = InitialCatalog.Initial,
                InitialCatalogName = (string)context.ResolveVariable(InitialCatalogName),
                UserName           = (string)context.ResolveVariable(UserName),
                Password           = (string)context.ResolveVariable(Password)
            };
            var connectionString = MsSqlDataContext.GetConnectionString(connectionInfo) ?? ConnectionStrings.ConnectionString;

            //TODO: [DIREF] get options from DI through constructor
            using (var ctx = new MsSqlDataContext(connectionString, DataOptions.GetLegacyConfiguration(), CancellationToken.None))
            {
                ctx.ExecuteReaderAsync(script, async(reader, cancel) =>
                {
                    do
                    {
                        if (reader.HasRows)
                        {
                            while (await reader.ReadAsync(cancel).ConfigureAwait(false))
                            {
                                // empty code block, created only for checking the connection
                            }
                        }
                    } while (reader.NextResult());
                    return(Task.FromResult(0));
                }).GetAwaiter().GetResult();
            }
        }
예제 #8
0
        private void ExecuteSql(SqlScriptReader sqlReader, ExecutionContext context)
        {
            var connectionInfo = new ConnectionInfo
            {
                ConnectionName     = (string)context.ResolveVariable(ConnectionName),
                DataSource         = (string)context.ResolveVariable(DataSource),
                InitialCatalog     = InitialCatalog,
                InitialCatalogName = (string)context.ResolveVariable(InitialCatalogName),
                UserName           = (string)context.ResolveVariable(UserName),
                Password           = (string)context.ResolveVariable(Password)
            };
            var connectionString = MsSqlDataContext.GetConnectionString(connectionInfo, context.ConnectionStrings)
                                   ?? context.ConnectionStrings.Repository;

            while (sqlReader.ReadScript())
            {
                var script = sqlReader.Script;

                var sb = new StringBuilder();

                //TODO: [DIREF] get options from DI through constructor
                using (var ctx = new MsSqlDataContext(connectionString, DataOptions.GetLegacyConfiguration(), CancellationToken.None))
                {
                    ctx.ExecuteReaderAsync(script, async(reader, cancel) =>
                    {
                        do
                        {
                            if (reader.HasRows)
                            {
                                var first = true;
                                while (await reader.ReadAsync(cancel).ConfigureAwait(false))
                                {
                                    if (first)
                                    {
                                        for (int i = 0; i < reader.FieldCount; i++)
                                        {
                                            sb.Append(reader.GetName(i)).Append("\t");
                                        }
                                        Logger.LogMessage(sb.ToString());
                                        sb.Clear();
                                        first = false;
                                    }
                                    for (int i = 0; i < reader.FieldCount; i++)
                                    {
                                        sb.Append(reader[i]).Append("\t");
                                    }
                                    Logger.LogMessage(sb.ToString());
                                    sb.Clear();
                                }
                            }
                        } while (await reader.NextResultAsync(cancel).ConfigureAwait(false));
                        return(Task.FromResult(0));
                    }).GetAwaiter().GetResult();
                }
            }
            Logger.LogMessage("Script is successfully executed.");
        }
 public List <int> GetAllNodeIds(CancellationToken cancellationToken)
 {
     using (var ctx = new MsSqlDataContext(_connectionStrings.Repository, _dataOptions, cancellationToken))
     {
         return(ctx.ExecuteReaderAsync(SqlScripts.GetAllNodeIds, (reader, cancel) =>
         {
             var result = new List <int>();
             while (reader.Read())
             {
                 result.Add(reader.GetInt32(0));
             }
             return Task.FromResult(result);
         }).GetAwaiter().GetResult());
     }
 }
        private static async Task <TimestampData[]> GetTimestampDataForRecursiveIntegrityCheckAsync(string path, int[] excludedNodeTypeIds)
        {
            var typeFilter = excludedNodeTypeIds != null && excludedNodeTypeIds.Length > 0
                ? $"N.NodeTypeId NOT IN ({string.Join(", ", excludedNodeTypeIds)})"
                : null;

            string sql;

            if (path == null)
            {
                sql = "SELECT N.NodeId, V.VersionId, CONVERT(bigint, n.timestamp) NodeTimestamp, CONVERT(bigint, v.timestamp) VersionTimestamp, N.LastMajorVersionId, N.LastMinorVersionId from Versions V join Nodes N on V.NodeId = N.NodeId";
                if (!string.IsNullOrEmpty(typeFilter))
                {
                    sql += " WHERE " + typeFilter;
                }
            }
            else
            {
                sql = string.Format("SELECT N.NodeId, V.VersionId, CONVERT(bigint, n.timestamp) NodeTimestamp, CONVERT(bigint, v.timestamp) VersionTimestamp, N.LastMajorVersionId, N.LastMinorVersionId from Versions V join Nodes N on V.NodeId = N.NodeId WHERE (N.Path = '{0}' COLLATE Latin1_General_CI_AS OR N.Path LIKE REPLACE('{0}', '_', '[_]') + '/%' COLLATE Latin1_General_CI_AS)", path);
                if (!string.IsNullOrEmpty(typeFilter))
                {
                    sql += " AND " + typeFilter;
                }
            }

            using var ctx = new MsSqlDataContext(ConnectionStrings.ConnectionString,
                                                 DataOptions.GetLegacyConfiguration(), CancellationToken.None);

            return(await ctx.ExecuteReaderAsync(sql, async (reader, cancel) =>
            {
                cancel.ThrowIfCancellationRequested();
                var result = new List <TimestampData>();
                while (await reader.ReadAsync(cancel).ConfigureAwait(false))
                {
                    result.Add(new TimestampData
                    {
                        NodeId = reader.GetSafeInt32(reader.GetOrdinal("NodeId")),
                        VersionId = reader.GetSafeInt32(reader.GetOrdinal("VersionId")),
                        NodeTimestamp = reader.GetSafeInt64(reader.GetOrdinal("NodeTimestamp")),
                        VersionTimestamp = reader.GetSafeInt64(reader.GetOrdinal("VersionTimestamp")),
                        LastMajorVersionId = reader.GetSafeInt32(reader.GetOrdinal("LastMajorVersionId")),
                        LastMinorVersionId = reader.GetSafeInt32(reader.GetOrdinal("LastMinorVersionId")),
                    });
                }
                return result.ToArray();
            }).ConfigureAwait(false));
        }
        public async Task <DateTime?[]> LoadLastAggregationTimesByResolutionsAsync(CancellationToken cancel)
        {
            var result = new DateTime?[4];

            using (var ctx = new MsSqlDataContext(ConnectionString, DataOptions, CancellationToken.None))
            {
                await ctx.ExecuteReaderAsync(LoadLastAggregationTimesByResolutionsScript, async (reader, cancel) => {
                    if (await reader.ReadAsync(cancel))
                    {
                        result[0] = reader.GetDateTimeUtcOrNull("Minute");
                        result[1] = reader.GetDateTimeUtcOrNull("Hour");
                        result[2] = reader.GetDateTimeUtcOrNull("Day");
                        result[3] = reader.GetDateTimeUtcOrNull("Month");
                    }
                    return(true);
                }).ConfigureAwait(false);
            }
            return(result.ToArray());
        }
        protected override async Task <byte[][]> GetRawDataAsync(int fileId)
        {
            string blobProvider     = null;
            string blobProviderData = null;

            byte[] buffer = null;

            using (var ctx = new MsSqlDataContext(ConnectionStrings.ConnectionString,
                                                  new DataOptions(), CancellationToken.None))
            {
                var script = "SELECT BlobProvider, BlobProviderData, [Stream] FROM Files WHERE FileId = @FileId";
                var _      = await ctx.ExecuteReaderAsync(script, cmd =>
                {
                    cmd.Parameters.AddRange(new[]
                    {
                        ctx.CreateParameter("@FileId", SqlDbType.Int, fileId)
                    });
                }, async (reader, cancel) =>
                {
                    if (await reader.ReadAsync(cancel))
                    {
                        blobProvider     = reader.GetSafeString("BlobProvider");
                        blobProviderData = reader.GetSafeString("BlobProviderData");
                        buffer           = reader.GetSafeByteArray("Stream");
                    }
                    return(true);
                }).ConfigureAwait(false);
            }

            if (blobProvider == null)
            {
                if (buffer.Length == 0)
                {
                    return(new byte[0][]);
                }
                return(new [] { buffer });
            }

            return(GetRawDataAsync(blobProvider, blobProviderData));
        }
        public async Task <IEnumerable <IStatisticalDataRecord> > LoadUsageListAsync(string dataType, int[] relatedTargetIds, DateTime endTimeExclusive, int count, CancellationToken cancellation)
        {
            string sql;

            if (relatedTargetIds == null || relatedTargetIds.Length == 0)
            {
                sql = LoadUsageListScript;
            }
            else
            {
                var ids = string.Join(", ", relatedTargetIds.Select(x => x.ToString()));
                sql = string.Format(LoadUsageListByTargetIdsScript, ids);
            }

            var records = new List <IStatisticalDataRecord>();

            using (var ctx = new MsSqlDataContext(ConnectionString, DataOptions, CancellationToken.None))
            {
                await ctx.ExecuteReaderAsync(sql, cmd =>
                {
                    cmd.Parameters.AddRange(new[]
                    {
                        ctx.CreateParameter("@Take", DbType.Int32, count),
                        ctx.CreateParameter("@DataType", DbType.String, dataType),
                        ctx.CreateParameter("@EndTimeExclusive", DbType.DateTime2, endTimeExclusive),
                    });
                }, async (reader, cancel) =>
                {
                    while (await reader.ReadAsync(cancel))
                    {
                        records.Add(GetStatisticalDataRecordFromReader(reader));
                    }
                    return(true);
                }).ConfigureAwait(false);
            }

            return(records);
        }
예제 #14
0
        private Dictionary <string, string> GetContentPathsWhereTheyAreAllowedChildren(List <string> names)
        {
            var result = new Dictionary <string, string>();

            var whereClausePart = string.Join(Environment.NewLine + "    OR" + Environment.NewLine,
                                              names.Select(n =>
                                                           $"    (t.Value like '{n}' OR t.Value like '% {n} %' OR t.Value like '{n} %' OR t.Value like '% {n}')"));

            // testability: the first line is recognizable for the tests.
            var sql = $"-- GetContentPathsWhereTheyAreAllowedChildren: [{string.Join(", ", names)}]" +
                      Environment.NewLine;

            sql += @"SELECT n.Path, t.Value FROM LongTextProperties t
	JOIN PropertyTypes p ON p.PropertyTypeId = t.PropertyTypeId
	JOIN Versions v ON t.VersionId = v.VersionId
	JOIN Nodes n ON n.NodeId = v.NodeId
WHERE p.Name = 'AllowedChildTypes' AND (
" + whereClausePart + @"
)
";

            using (var ctx = new MsSqlDataContext(CancellationToken.None))
            {
                var _ = ctx.ExecuteReaderAsync(sql, async(reader, cancel) =>
                {
                    cancel.ThrowIfCancellationRequested();
                    while (await reader.ReadAsync(cancel).ConfigureAwait(false))
                    {
                        cancel.ThrowIfCancellationRequested();
                        result.Add(reader.GetString(0), reader.GetString(1));
                    }
                    return(Task.FromResult(0));
                }).GetAwaiter().GetResult();
            }

            return(result);
        }