Ejemplo n.º 1
0
        public override async Task <long> BeginCreateInstanceIndexAsync(int partitionKey, DicomDataset instance, IEnumerable <QueryTag> queryTags, CancellationToken cancellationToken)
        {
            EnsureArg.IsNotNull(instance, nameof(instance));
            EnsureArg.IsNotNull(queryTags, nameof(queryTags));

            using (SqlConnectionWrapper sqlConnectionWrapper = await SqlConnectionWrapperFactory.ObtainSqlConnectionWrapperAsync(cancellationToken))
                using (SqlCommandWrapper sqlCommandWrapper = sqlConnectionWrapper.CreateSqlCommand())
                {
                    var rows = ExtendedQueryTagDataRowsBuilder.Build(instance, queryTags.Where(tag => tag.IsExtendedQueryTag), Version);
                    VLatest.AddInstanceV6TableValuedParameters parameters = new VLatest.AddInstanceV6TableValuedParameters(
                        rows.StringRows,
                        rows.LongRows,
                        rows.DoubleRows,
                        rows.DateTimeWithUtcRows,
                        rows.PersonNameRows
                        );

                    VLatest.AddInstanceV6.PopulateCommand(
                        sqlCommandWrapper,
                        partitionKey,
                        instance.GetString(DicomTag.StudyInstanceUID),
                        instance.GetString(DicomTag.SeriesInstanceUID),
                        instance.GetString(DicomTag.SOPInstanceUID),
                        instance.GetSingleValueOrDefault <string>(DicomTag.PatientID),
                        instance.GetSingleValueOrDefault <string>(DicomTag.PatientName),
                        instance.GetSingleValueOrDefault <string>(DicomTag.ReferringPhysicianName),
                        instance.GetStringDateAsDate(DicomTag.StudyDate),
                        instance.GetSingleValueOrDefault <string>(DicomTag.StudyDescription),
                        instance.GetSingleValueOrDefault <string>(DicomTag.AccessionNumber),
                        instance.GetSingleValueOrDefault <string>(DicomTag.Modality),
                        instance.GetStringDateAsDate(DicomTag.PerformedProcedureStepStartDate),
                        instance.GetStringDateAsDate(DicomTag.PatientBirthDate),
                        instance.GetSingleValueOrDefault <string>(DicomTag.ManufacturerModelName),
                        (byte)IndexStatus.Creating,
                        parameters);

                    try
                    {
                        return((long)(await sqlCommandWrapper.ExecuteScalarAsync(cancellationToken)));
                    }
                    catch (SqlException ex)
                    {
                        if (ex.Number == SqlErrorCodes.Conflict)
                        {
                            if (ex.State == (byte)IndexStatus.Creating)
                            {
                                throw new PendingInstanceException();
                            }

                            throw new InstanceAlreadyExistsException();
                        }

                        throw new DataStoreException(ex);
                    }
                }
        }
Ejemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="propertyIds"></param>
        /// <returns>Dictionary with Property Type Id as Key</returns>
        public async Task <IDictionary <int, SqlPropertyTypeInfo> > GetStandardPropertyTypeIdsForPropertyIdsAsync(ISet <int> propertyIds)
        {
            var param = new DynamicParameters();

            param.Add("@propertyIds", SqlConnectionWrapper.ToDataTable(propertyIds));

            return((await ConnectionWrapper.QueryAsync <SqlPropertyTypeInfo>("GetStandardPropertyTypeIdsForPropertyIds", param,
                                                                             commandType: CommandType.StoredProcedure))
                   .ToDictionary(k => k.PropertyTypeId));
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Implementation of your slot.
 /// </summary>
 /// <param name="signaler">Signaler used to raise the signal.</param>
 /// <param name="input">Arguments to your slot.</param>
 public void Signal(ISignaler signaler, Node input)
 {
     using (var connection = new SqlConnectionWrapper(GetConnectionString(input)))
     {
         signaler.Scope(
             "mssql.connect",
             connection, () => signaler.Signal("eval", input));
         input.Value = null;
     }
 }
Ejemplo n.º 4
0
        public async Task <List <SqlWorkFlowStateInformation> > GetWorkflowStatesForArtifactsAsync(int userId, IEnumerable <int> artifactIds, int revisionId, bool addDrafts = true)
        {
            var param = new DynamicParameters();

            param.Add("@userId", userId);
            param.Add("@artifactIds", SqlConnectionWrapper.ToDataTable(artifactIds));
            param.Add("@revisionId", revisionId);
            param.Add("@addDrafts", addDrafts);
            return((await ConnectionWrapper.QueryAsync <SqlWorkFlowStateInformation>("[dbo].[GetWorkflowStatesForArtifacts]", param, commandType: CommandType.StoredProcedure)).ToList());
        }
Ejemplo n.º 5
0
        public async Task <List <SqlWorkflowEvent> > GetWorkflowPropertyTransitionsForArtifactsAsync(int userId, int revisionId, int eventType, IEnumerable <int> itemIds)
        {
            var param = new DynamicParameters();

            param.Add("@userId", userId);
            param.Add("@revisionId", revisionId);
            param.Add("@eventType", eventType);
            param.Add("@itemIds", SqlConnectionWrapper.ToDataTable(itemIds));
            return((await ConnectionWrapper.QueryAsync <SqlWorkflowEvent>("[dbo].[GetWorkflowTriggersForArtifacts]", param, commandType: CommandType.StoredProcedure)).ToList());
        }
Ejemplo n.º 6
0
        public async Task <IEnumerable <string> > CheckLiveWorkflowsForNameUniquenessAsync(IEnumerable <string> names, int?exceptWorkflowId = null)
        {
            var prm = new DynamicParameters();

            prm.Add("@names", SqlConnectionWrapper.ToStringDataTable(names));
            prm.Add("@exceptWorkflowId", exceptWorkflowId);
            var duplicateNames = await _connectionWrapper.QueryAsync <string>("CheckLiveWorkflowsForNameUniqueness", prm, commandType : CommandType.StoredProcedure);

            return(duplicateNames);
        }
        public void InitializeThrowsIfCalledWithAuthenticationTokenOnDotNetFramework452ButNotOnOtherTargets()
        {
#if NET452
            Assert.Throws <InvalidOperationException>(() => new SqlConnectionWrapper(DatabaseFixture.LogEventsConnectionString, "AuthenticationToken"));
#else
            // Should not throw
            using (_ = new SqlConnectionWrapper(@"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Master", "AuthenticationToken"))
            { }
#endif
        }
Ejemplo n.º 8
0
        public async Task GivenATransactionScope_WhenReading_TheUncommittedValuesShouldOnlyBeAvailableWithTheTransactionAndWithHints()
        {
            var newId           = Guid.NewGuid().ToString();
            var searchParamHash = new string("RandomSearchParam").ComputeHash();

            using (var transactionScope = _fixture.SqlTransactionHandler.BeginTransaction())
            {
                using (SqlConnectionWrapper connectionWrapperWithTransaction = await _fixture.SqlConnectionWrapperFactory.ObtainSqlConnectionWrapperAsync(CancellationToken.None, true))
                    using (SqlCommandWrapper sqlCommandWrapper = connectionWrapperWithTransaction.CreateSqlCommand())
                    {
                        sqlCommandWrapper.CommandText = @"
                        INSERT INTO Resource
                        VALUES(97, @newId, 1, 0, 5095719085917680000, 0, null, CAST('test' AS VARBINARY(MAX)), 0, @searchParamHash)";

                        sqlCommandWrapper.Parameters.Add(new SqlParameter {
                            ParameterName = "newId", Value = newId
                        });
                        sqlCommandWrapper.Parameters.Add(new SqlParameter {
                            ParameterName = "searchParamHash", Value = searchParamHash
                        });

                        await sqlCommandWrapper.ExecuteNonQueryAsync(CancellationToken.None);
                    }

                // Within the same transaction, the resource should be found
                using (SqlConnectionWrapper connectionWrapperWithTransaction = await _fixture.SqlConnectionWrapperFactory.ObtainSqlConnectionWrapperAsync(CancellationToken.None, true))
                {
                    await VerifyCommandResults(connectionWrapperWithTransaction, newId, true);
                }

                // Outside of the transaction, the resource should not be found
                using (SqlConnectionWrapper connectionWrapperWithTransaction = await _fixture.SqlConnectionWrapperFactory.ObtainSqlConnectionWrapperAsync(CancellationToken.None, false))
                {
                    await VerifyCommandResults(connectionWrapperWithTransaction, newId, false);
                }

                // Outside of the transaction, but with the readuncommitted hint, the resource should be found.
                using (SqlConnectionWrapper connectionWrapperWithTransaction = await _fixture.SqlConnectionWrapperFactory.ObtainSqlConnectionWrapperAsync(CancellationToken.None, false))
                {
                    await VerifyCommandResults(connectionWrapperWithTransaction, newId, true, "WITH (READUNCOMMITTED)");
                }
            }

            // Outside of the transactionscope, the resource should not be found
            using (SqlConnectionWrapper connectionWrapperWithTransaction = await _fixture.SqlConnectionWrapperFactory.ObtainSqlConnectionWrapperAsync(CancellationToken.None, false))
            {
                await VerifyCommandResults(connectionWrapperWithTransaction, newId, false);
            }

            // Outside of the transactionscope, but with the readuncommitted hint, the resource should not be found
            using (SqlConnectionWrapper connectionWrapperWithTransaction = await _fixture.SqlConnectionWrapperFactory.ObtainSqlConnectionWrapperAsync(CancellationToken.None, false))
            {
                await VerifyCommandResults(connectionWrapperWithTransaction, newId, false, "WITH (READUNCOMMITTED)");
            }
        }
        private async Task <IEnumerable <LinkInfo> > GetLinkInfo(int itemId, int userId, bool addDrafts, int revisionId = int.MaxValue, IEnumerable <int> linkTypes = null)
        {
            var parameters = new DynamicParameters();

            parameters.Add("@itemId", itemId);
            parameters.Add("@userId", userId);
            parameters.Add("@addDrafts", addDrafts);
            parameters.Add("@revisionId", revisionId);
            parameters.Add("@types", SqlConnectionWrapper.ToDataTable(linkTypes));
            return(await _connectionWrapper.QueryAsync <LinkInfo>("GetRelationshipLinkInfo", parameters, commandType : CommandType.StoredProcedure));
        }
Ejemplo n.º 10
0
        private async Task <IEnumerable <LinkedArtifactInfo> > GetDocumentArtifactInfos(IEnumerable <int> artifactIds, int userId, int revisionId = int.MaxValue, bool addDrafts = true)
        {
            var parameters       = new DynamicParameters();
            var artifactIdsTable = SqlConnectionWrapper.ToDataTable(artifactIds, "Int32Collection", "Int32Value");

            parameters.Add("@artifactIds", artifactIdsTable);
            parameters.Add("@userId", userId);
            parameters.Add("@revisionId", revisionId);
            parameters.Add("@addDrafts", addDrafts);
            return(await _connectionWrapper.QueryAsync <LinkedArtifactInfo>("GetDocumentArtifactInfos", parameters, commandType : CommandType.StoredProcedure));
        }
Ejemplo n.º 11
0
        public void Setup()
        {
            _logger               = Substitute.For <ILogger <SqlServerNotificationService> >();
            _settings             = Substitute.For <SettingsService>((IServiceProvider)null);
            _sqlConnectionWrapper = Substitute.For <SqlConnectionWrapper>();

            _service = new SqlServerNotificationService(_logger, _settings, _sqlConnectionWrapper);

            _settings.Notifications_SqlServer_Connection.Returns("conn1");
            _settings.Notifications_SqlServer_TableName.Returns("ta'bl\"e1");
        }
        private async Task <SqlDiscardPublishDetailsResult> GetDiscardPublishDetailsInternal(int userId,
                                                                                             IEnumerable <int> artifactIds,
                                                                                             bool addProjectsNames,
                                                                                             IDbTransaction transaction)
        {
            var result = new SqlDiscardPublishDetailsResult();

            var projectIdSet = new HashSet <int>();

            var parameters = new DynamicParameters();

            parameters.Add("@userId", userId);
            var artifactIdsTable = SqlConnectionWrapper.ToDataTable(artifactIds);

            parameters.Add("@artifactIds", artifactIdsTable);

            result.Details.Clear();

            if (transaction == null)
            {
                result.Details.AddRange
                (
                    (
                        await ConnectionWrapper.QueryAsync <SqlDiscardPublishDetails>
                        (
                            "GetDiscardPublishDetails",
                            parameters,
                            commandType: CommandType.StoredProcedure)).ToList());
            }
            else
            {
                result.Details.AddRange
                (
                    (
                        await transaction.Connection.QueryAsync <SqlDiscardPublishDetails>
                        (
                            "GetDiscardPublishDetails",
                            parameters,
                            transaction,
                            commandType: CommandType.StoredProcedure)).ToList());
            }

            foreach (var sqlDiscardPublishDetail in result.Details)
            {
                projectIdSet.Add(sqlDiscardPublishDetail.VersionProjectId);
            }

            if (addProjectsNames)
            {
                result.ProjectInfos.Clear();
                result.ProjectInfos.AddRange(await GetProjectNames(userId, projectIdSet, transaction));
            }
            return(result);
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Implementation of your slot.
        /// </summary>
        /// <param name="signaler">Signaler used to raise the signal.</param>
        /// <param name="input">Arguments to your slot.</param>
        /// <returns>An awaitable task.</returns>
        public async Task SignalAsync(ISignaler signaler, Node input)
        {
            using (var connection = new SqlConnectionWrapper(GetConnectionString(input)))
            {
                await signaler.ScopeAsync(
                    "mssql.connect",
                    connection,
                    async() => await signaler.SignalAsync("eval", input));

                input.Value = null;
            }
        }
Ejemplo n.º 14
0
        public async Task<List<int>> GetItemSimilarItemIds(int artifactId, int userId, int limit, bool isInstanceAdmin, IEnumerable<int> projectIds)
        {
            var prm = new DynamicParameters();
            prm.Add("@itemId", artifactId);
            prm.Add("@userId", userId);
            prm.Add("@limit", limit);
            prm.Add("@allProjects", isInstanceAdmin);
            prm.Add("@projectIds", SqlConnectionWrapper.ToDataTable(projectIds));

            return (await
                    _connectionWrapper.QueryAsync<int>("GetItemSimilarItemIds", prm, commandType: CommandType.StoredProcedure)).Distinct().ToList();
        }
        public void CreateSqlBulkCopyReturnsSqlBulkCopyWrapper()
        {
            // Arrange
            using (var sut = new SqlConnectionWrapper(DatabaseFixture.LogEventsConnectionString, null))
            {
                // Act
                var result = sut.CreateSqlBulkCopy(false, "DestinationTableName");

                // Assert
                Assert.NotNull(result);
            }
        }
        public void CreateCommandReturnsSqlCommandWrapper()
        {
            // Arrange
            using (var sut = new SqlConnectionWrapper(DatabaseFixture.LogEventsConnectionString, null))
            {
                // Act
                var result = sut.CreateCommand();

                // Assert
                Assert.NotNull(result);
            }
        }
Ejemplo n.º 17
0
        public override async Task <long> CreateInstanceIndexAsync(DicomDataset instance, IEnumerable <QueryTag> queryTags, CancellationToken cancellationToken)
        {
            EnsureArg.IsNotNull(instance, nameof(instance));
            EnsureArg.IsNotNull(queryTags, nameof(queryTags));

            using (SqlConnectionWrapper sqlConnectionWrapper = await _sqlConnectionFactoryWrapper.ObtainSqlConnectionWrapperAsync(cancellationToken))
                using (SqlCommandWrapper sqlCommandWrapper = sqlConnectionWrapper.CreateSqlCommand())
                {
                    // Build parameter for extended query tag.
                    VLatest.AddInstanceTableValuedParameters parameters = AddInstanceTableValuedParametersBuilder.Build(
                        instance,
                        queryTags.Where(tag => tag.IsExtendedQueryTag));

                    VLatest.AddInstance.PopulateCommand(
                        sqlCommandWrapper,
                        instance.GetString(DicomTag.StudyInstanceUID),
                        instance.GetString(DicomTag.SeriesInstanceUID),
                        instance.GetString(DicomTag.SOPInstanceUID),
                        instance.GetSingleValueOrDefault <string>(DicomTag.PatientID),
                        instance.GetSingleValueOrDefault <string>(DicomTag.PatientName),
                        instance.GetSingleValueOrDefault <string>(DicomTag.ReferringPhysicianName),
                        instance.GetStringDateAsDate(DicomTag.StudyDate),
                        instance.GetSingleValueOrDefault <string>(DicomTag.StudyDescription),
                        instance.GetSingleValueOrDefault <string>(DicomTag.AccessionNumber),
                        instance.GetSingleValueOrDefault <string>(DicomTag.Modality),
                        instance.GetStringDateAsDate(DicomTag.PerformedProcedureStepStartDate),
                        (byte)IndexStatus.Creating,
                        parameters);

                    try
                    {
                        return((long)(await sqlCommandWrapper.ExecuteScalarAsync(cancellationToken)));
                    }
                    catch (SqlException ex)
                    {
                        switch (ex.Number)
                        {
                        case SqlErrorCodes.Conflict:
                        {
                            if (ex.State == (byte)IndexStatus.Creating)
                            {
                                throw new PendingInstanceException();
                            }

                            throw new InstanceAlreadyExistsException();
                        }
                        }

                        throw new DataStoreException(ex);
                    }
                }
        }
        public void CreateCommandWithParameterReturnsSqlCommandWrapper()
        {
            // Arrange
            using (var sut = new SqlConnectionWrapper(DatabaseFixture.LogEventsConnectionString, null))
            {
                // Act
                var result = sut.CreateCommand("CommandText");

                // Assert
                Assert.NotNull(result);
                Assert.Equal("CommandText", result.CommandText);
            }
        }
Ejemplo n.º 19
0
        public async Task <IEnumerable <PropertyType> > GetProjectPropertyTypesAsync(
            int projectId, IEnumerable <int> predefinedTypeIds)
        {
            var parameters = new DynamicParameters();

            parameters.Add("@projectId", projectId);
            parameters.Add("@predefinedPropertyTypes", SqlConnectionWrapper.ToDataTable(predefinedTypeIds));

            var ptVersions = await _connectionWrapper.QueryAsync <PropertyTypeVersion>(
                "GetProjectPropertyTypes", parameters, commandType : CommandType.StoredProcedure);

            return(ptVersions.Select(pv => pv.ConvertToPropertyType()).ToList());
        }
        private async Task <ICollection <SqlItemInfo> > GetPublishStatesInternal(int userId,
                                                                                 ISet <int> ids,
                                                                                 bool ignoreComments,
                                                                                 IDbTransaction transaction)
        {
            var parameters = new DynamicParameters();

            parameters.Add("@userId", userId);
            var artifactIds = SqlConnectionWrapper.ToDataTable(ids);

            parameters.Add("@artifactIds", artifactIds);
            parameters.Add("@ignoreComments", ignoreComments);
            IList <SqlItemInfo> existingItemsInfo;

            if (transaction == null)
            {
                existingItemsInfo =
                    (
                        await ConnectionWrapper.QueryAsync <SqlItemInfo>
                        (
                            "GetPublishInfo",
                            parameters,
                            commandType: CommandType.StoredProcedure)).ToList();
            }
            else
            {
                existingItemsInfo =
                    (
                        await transaction.Connection.QueryAsync <SqlItemInfo>
                        (
                            "GetPublishInfo",
                            parameters,
                            transaction,
                            commandType: CommandType.StoredProcedure)).ToList();
            }

            existingItemsInfo.AddRange
            (
                ids.Except
                (
                    existingItemsInfo.Select(i => i.ItemId))
                .Select
                (
                    id => new SqlItemInfo
            {
                ItemId   = id,
                NotFound = true
            }));

            return(existingItemsInfo);
        }
Ejemplo n.º 21
0
        /// <summary>
        /// Initialization of the package; this method is called right after the package is sited, so this is the place
        /// where you can put all the initialization code that rely on services provided by VisualStudio.
        /// </summary>
        protected override void Initialize()
        {
            base.Initialize();
            Logger.WriteInformation("Initializing");

            try
            {
                HttpClient = new HttpClient();
                HttpClient.DefaultRequestHeaders.Add("User-Agent",
                                                     "Mozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0) (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)");
                var pSolution = (IVsSolution)GetService(typeof(SVsSolution));
                var result    = pSolution.AdviseSolutionEvents(new SolutionEventsHandler(), out SolutionEventsHandlerId);
                Settings      = new Settings();
                UserImages    = new UserImageCache();
                Redis         = new RedisWrapper();
                Slack         = new SlackWrapper();
                LocalIdeModel = new LocalIDEModel();
                IDEWrapper    = new IDEWrapper((EnvDTE.DTE)GetService(typeof(EnvDTE.DTE)));


                var versionedAssembly = GetVersionedAssembly();
                SourceControlRepo = new CachedSourceControlRepository(
                    new GitRepository(),
                    GetVersionedType <ISourceControlRepository>(versionedAssembly, "TeamCoding.Documents.SourceControlRepositories.TeamFoundationServiceRepository"),
                    new SolutionNameBasedRepository());
                CaretInfoProvider          = GetVersionedType <ICaretInfoProvider>(versionedAssembly, "TeamCoding.Documents.CaretInfoProvider");
                CaretAdornmentDataProvider = GetVersionedType <ICaretAdornmentDataProvider>(versionedAssembly, "TeamCoding.Documents.CaretAdornmentDataProvider");
                IdentityProvider           = new CachedFailoverIdentityProvider(new VSOptionsIdentityProvider(),
                                                                                new CredentialManagerIdentityProvider(new[] { "git:https://github.com", "https://github.com/" }),
                                                                                new VSIdentityProvider(),
                                                                                new MachineIdentityProvider());
                ConnectionWrapper        = new SqlConnectionWrapper();
                WindowsServiceClient     = new WinServiceClient(Settings.SharedSettings.WinServiceIPAddressProperty);
                RemoteModelChangeManager = new CombinedRemoteModelPersister(new RedisRemoteModelPersister(),
                                                                            new SharedFolderRemoteModelPersister(),
                                                                            new SlackRemoteModelPersister(),
                                                                            new SqlServerRemoteModelPersister(ConnectionWrapper),
                                                                            new WinServiceRemoteModelPersister(WindowsServiceClient));
                LocalModelChangeManager = new CombinedLocalModelPersister(new RedisLocalModelPersister(LocalIdeModel),
                                                                          new SharedFolderLocalModelPersister(LocalIdeModel),
                                                                          new SlackLocalModelPersister(LocalIdeModel),
                                                                          new SqlServerLocalModelPersister(ConnectionWrapper, LocalIdeModel),
                                                                          new WinServiceLocalModelPersister(WindowsServiceClient, LocalIdeModel));
                RemoteModelChangeManager.RemoteModelReceived += RemoteModelChangeManager_RemoteModelReceived;
                TeamCoding.VisualStudio.ToolWindows.OverviewWindow.OverviewCommand.Initialize(this);
            }
            catch (Exception ex) when(!System.Diagnostics.Debugger.IsAttached)
            {
                Logger.WriteError(ex);
            }
        }
        // TODO: Make cancellation token an input.
        public async Task <IReadOnlyCollection <ResourceSearchParameterStatus> > GetSearchParameterStatuses()
        {
            // If the search parameter table in SQL does not yet contain status columns
            if (_schemaInformation.Current < SchemaVersionConstants.SearchParameterStatusSchemaVersion)
            {
                // Get status information from file.
                return(await _filebasedSearchParameterStatusDataStore.GetSearchParameterStatuses());
            }

            using (IScoped <SqlConnectionWrapperFactory> scopedSqlConnectionWrapperFactory = _scopedSqlConnectionWrapperFactory())
                using (SqlConnectionWrapper sqlConnectionWrapper = await scopedSqlConnectionWrapperFactory.Value.ObtainSqlConnectionWrapperAsync(CancellationToken.None, true))
                    using (SqlCommandWrapper sqlCommandWrapper = sqlConnectionWrapper.CreateSqlCommand())
                    {
                        VLatest.GetSearchParamStatuses.PopulateCommand(sqlCommandWrapper);

                        var parameterStatuses = new List <ResourceSearchParameterStatus>();

                        using (SqlDataReader sqlDataReader = await sqlCommandWrapper.ExecuteReaderAsync(CommandBehavior.SequentialAccess, CancellationToken.None))
                        {
                            while (await sqlDataReader.ReadAsync())
                            {
                                (string uri, string stringStatus, DateTimeOffset? lastUpdated, bool?isPartiallySupported) = sqlDataReader.ReadRow(
                                    VLatest.SearchParam.Uri,
                                    VLatest.SearchParam.Status,
                                    VLatest.SearchParam.LastUpdated,
                                    VLatest.SearchParam.IsPartiallySupported);

                                if (string.IsNullOrEmpty(stringStatus) || lastUpdated == null || isPartiallySupported == null)
                                {
                                    // These columns are nullable because they are added to dbo.SearchParam in a later schema version.
                                    // They should be populated as soon as they are added to the table and should never be null.
                                    throw new NullReferenceException(Resources.SearchParameterStatusShouldNotBeNull);
                                }

                                var status = Enum.Parse <SearchParameterStatus>(stringStatus, true);

                                var resourceSearchParameterStatus = new ResourceSearchParameterStatus()
                                {
                                    Uri    = new Uri(uri),
                                    Status = status,
                                    IsPartiallySupported = (bool)isPartiallySupported,
                                    LastUpdated          = (DateTimeOffset)lastUpdated,
                                };

                                parameterStatuses.Add(resourceSearchParameterStatus);
                            }
                        }

                        return(parameterStatuses);
                    }
        }
Ejemplo n.º 23
0
        public override async Task <IReadOnlyList <ExtendedQueryTagStoreEntry> > AssignReindexingOperationAsync(
            IReadOnlyCollection <int> queryTagKeys,
            Guid operationId,
            bool returnIfCompleted = false,
            CancellationToken cancellationToken = default)
        {
            EnsureArg.HasItems(queryTagKeys, nameof(queryTagKeys));

            using SqlConnectionWrapper sqlConnectionWrapper = await ConnectionWrapperFactory.ObtainSqlConnectionWrapperAsync(cancellationToken);

            using SqlCommandWrapper sqlCommandWrapper = sqlConnectionWrapper.CreateSqlCommand();

            IEnumerable <ExtendedQueryTagKeyTableTypeV1Row> rows = queryTagKeys.Select(x => new ExtendedQueryTagKeyTableTypeV1Row(x));

            VLatest.AssignReindexingOperation.PopulateCommand(sqlCommandWrapper, rows, operationId, returnIfCompleted);

            try
            {
                var queryTags = new List <ExtendedQueryTagStoreEntry>();
                using SqlDataReader reader = await sqlCommandWrapper.ExecuteReaderAsync(cancellationToken);

                while (await reader.ReadAsync(cancellationToken))
                {
                    (int tagKey, string tagPath, string tagVR, string tagPrivateCreator, byte tagLevel, byte tagStatus, byte queryStatus, int errorCount) = reader.ReadRow(
                        VLatest.ExtendedQueryTag.TagKey,
                        VLatest.ExtendedQueryTag.TagPath,
                        VLatest.ExtendedQueryTag.TagVR,
                        VLatest.ExtendedQueryTag.TagPrivateCreator,
                        VLatest.ExtendedQueryTag.TagLevel,
                        VLatest.ExtendedQueryTag.TagStatus,
                        VLatest.ExtendedQueryTag.QueryStatus,
                        VLatest.ExtendedQueryTag.ErrorCount);

                    queryTags.Add(new ExtendedQueryTagStoreEntry(
                                      tagKey,
                                      tagPath,
                                      tagVR,
                                      tagPrivateCreator,
                                      (QueryTagLevel)tagLevel,
                                      (ExtendedQueryTagStatus)tagStatus,
                                      (QueryStatus)queryStatus,
                                      errorCount));
                }

                return(queryTags);
            }
            catch (SqlException ex)
            {
                throw new DataStoreException(ex);
            }
        }
Ejemplo n.º 24
0
        public override async Task <IReadOnlyList <ExtendedQueryTagStoreEntry> > AddExtendedQueryTagsAsync(
            IReadOnlyCollection <AddExtendedQueryTagEntry> extendedQueryTagEntries,
            int maxAllowedCount,
            bool ready = false,
            CancellationToken cancellationToken = default)
        {
            EnsureArg.IsNotNull(extendedQueryTagEntries, nameof(extendedQueryTagEntries));
            EnsureArg.IsGt(maxAllowedCount, 0, nameof(maxAllowedCount));

            using SqlConnectionWrapper sqlConnectionWrapper = await ConnectionWrapperFactory.ObtainSqlConnectionWrapperAsync(cancellationToken);

            using SqlCommandWrapper sqlCommandWrapper = sqlConnectionWrapper.CreateSqlCommand();

            IEnumerable <AddExtendedQueryTagsInputTableTypeV1Row> rows = extendedQueryTagEntries.Select(ToAddExtendedQueryTagsInputTableTypeV1Row);

            VLatest.AddExtendedQueryTags.PopulateCommand(sqlCommandWrapper, maxAllowedCount, ready, new VLatest.AddExtendedQueryTagsTableValuedParameters(rows));

            try
            {
                var results = new List <ExtendedQueryTagStoreEntry>();
                using SqlDataReader reader = await sqlCommandWrapper.ExecuteReaderAsync(cancellationToken);

                while (await reader.ReadAsync(cancellationToken))
                {
                    (int tagKey, string tagPath, string tagVR, string tagPrivateCreator, int tagLevel, int tagStatus, byte queryStatus, int errorCount) = reader.ReadRow(
                        VLatest.ExtendedQueryTag.TagKey,
                        VLatest.ExtendedQueryTag.TagPath,
                        VLatest.ExtendedQueryTag.TagVR,
                        VLatest.ExtendedQueryTag.TagPrivateCreator,
                        VLatest.ExtendedQueryTag.TagLevel,
                        VLatest.ExtendedQueryTag.TagStatus,
                        VLatest.ExtendedQueryTag.QueryStatus,
                        VLatest.ExtendedQueryTag.ErrorCount);

                    results.Add(new ExtendedQueryTagStoreEntry(tagKey, tagPath, tagVR, tagPrivateCreator, (QueryTagLevel)tagLevel, (ExtendedQueryTagStatus)tagStatus, (QueryStatus)queryStatus, errorCount));
                }

                return(results);
            }
            catch (SqlException ex)
            {
                throw ex.Number switch
                      {
                          SqlErrorCodes.Conflict => ex.State == 1
                        ? new ExtendedQueryTagsExceedsMaxAllowedCountException(maxAllowedCount)
                        : new ExtendedQueryTagsAlreadyExistsException(),
                          _ => new DataStoreException(ex),
                      };
            }
        }
Ejemplo n.º 25
0
        private static IItemSearchRepository CreateFullTextSearchRepository <T>(
            FullTextSearchCriteria searchCriteria,
            ICollection <T> queryResult,
            ICollection <int?> queryResult2 = null)
        {
            var connectionWrapper = new SqlConnectionWrapperMock();

            connectionWrapper.SetupQueryAsync("SearchFullText",
                                              new Dictionary <string, object>
            {
                { "predefineds", SqlItemSearchRepository.Predefineds },
                { "page", Page },
                { "pageSize", PageSize },
                { "maxItems", MaxItems },
            },
                                              queryResult);
            connectionWrapper.SetupQueryMultipleAsync("SearchFullTextMetaData",
                                                      new Dictionary <string, object>
            {
                { "predefineds", SqlItemSearchRepository.Predefineds },
            },
                                                      new Tuple <IEnumerable <T>, IEnumerable <int?> >(queryResult, queryResult2));
            if (searchCriteria.ItemTypeIds != null)
            {
                connectionWrapper.SetupQueryAsync("SearchFullTextByItemTypes",
                                                  new Dictionary <string, object>
                {
                    { "predefineds", SqlItemSearchRepository.Predefineds },
                    { "page", Page },
                    { "pageSize", PageSize },
                    { "maxItems", MaxItems },
                    { "itemTypeIds", SqlConnectionWrapper.ToDataTable(searchCriteria.ItemTypeIds) }
                },
                                                  queryResult);
                connectionWrapper.SetupQueryMultipleAsync("SearchFullTextByItemTypesMetaData",
                                                          new Dictionary <string, object>
                {
                    { "predefineds", SqlItemSearchRepository.Predefineds },
                    { "itemTypeIds", SqlConnectionWrapper.ToDataTable(searchCriteria.ItemTypeIds) }
                },
                                                          new Tuple <IEnumerable <T>, IEnumerable <int?> >(queryResult, queryResult2));
            }

            var configuration = new Mock <ISearchConfiguration>();

            configuration.Setup(c => c.MaxItems).Returns(MaxItems.ToStringInvariant());
            configuration.Setup(c => c.MaxSearchableValueStringSize).Returns(MaxSearchableValueStringSize.ToStringInvariant());

            return(new SqlItemSearchRepository(connectionWrapper.Object, configuration.Object));
        }
        private async Task <IDictionary <int, string> > GetProjectNames(int userId,
                                                                        HashSet <int> projectIdSet,
                                                                        IDbTransaction transaction)
        {
            var result     = new Dictionary <int, string>();
            var parameters = new DynamicParameters();

            parameters.Add("@userId", userId);
            var projectIdsTable = SqlConnectionWrapper.ToDataTable(projectIdSet);

            parameters.Add("@projectIds", projectIdsTable);

            IList <SqlDiscardPublishProjectInfo> discardPublishProjectDetails;

            if (transaction == null)
            {
                discardPublishProjectDetails =
                    (
                        await ConnectionWrapper.QueryAsync <SqlDiscardPublishProjectInfo>
                        (
                            "GetDiscardPublishProjectsDetails",
                            parameters,
                            commandType: CommandType.StoredProcedure)).ToList();
            }
            else
            {
                discardPublishProjectDetails =
                    (
                        await transaction.Connection.QueryAsync <SqlDiscardPublishProjectInfo>
                        (
                            "GetDiscardPublishProjectsDetails",
                            parameters,
                            transaction,
                            commandType: CommandType.StoredProcedure)).ToList();
            }

            foreach (var sqlDiscardPublishProjectInfo in discardPublishProjectDetails)
            {
                if (!result.ContainsKey(sqlDiscardPublishProjectInfo.ItemId))
                {
                    result.Add(sqlDiscardPublishProjectInfo.ItemId, sqlDiscardPublishProjectInfo.Name);
                }
                else
                {
                    result[sqlDiscardPublishProjectInfo.ItemId] = sqlDiscardPublishProjectInfo.Name;
                }
            }
            return(result);
        }
Ejemplo n.º 27
0
 /// <summary>
 /// Implementation of your slot.
 /// </summary>
 /// <param name="signaler">Signaler used to raise the signal.</param>
 /// <param name="input">Arguments to your slot.</param>
 public void Signal(ISignaler signaler, Node input)
 {
     using (var connection = new SqlConnectionWrapper(
                Executor.GetConnectionString(
                    input,
                    "mssql",
                    "master",
                    _configuration)))
     {
         signaler.Scope(
             "mssql.connect",
             connection, () => signaler.Signal("eval", input));
         input.Value = null;
     }
 }
Ejemplo n.º 28
0
        public async Task <List <CurrentVersionInformation> > GetCurrentVersionAsync(CancellationToken cancellationToken)
        {
            var currentVersions = new List <CurrentVersionInformation>();

            using (SqlConnectionWrapper sqlConnectionWrapper = await _sqlConnectionWrapperFactory.ObtainSqlConnectionWrapperAsync(cancellationToken: cancellationToken))
                using (SqlCommandWrapper sqlCommandWrapper = sqlConnectionWrapper.CreateSqlCommand())
                {
                    SchemaShared.SelectCurrentVersionsInformation.PopulateCommand(sqlCommandWrapper);

                    try
                    {
                        using (var dataReader = await sqlCommandWrapper.ExecuteReaderAsync(cancellationToken))
                        {
                            if (dataReader.HasRows)
                            {
                                while (await dataReader.ReadAsync(cancellationToken))
                                {
                                    IList <string> instanceNames = new List <string>();
                                    if (!dataReader.IsDBNull(2))
                                    {
                                        string names = dataReader.GetString(2);
                                        instanceNames = names.Split(",").ToList();
                                    }

                                    var status = (string)dataReader.GetValue(1);

                                    // To combine the complete and completed version since earlier status was marked in 'complete' status and now the fix has made to mark the status in completed state
                                    status = string.Equals(status, "complete", StringComparison.OrdinalIgnoreCase) ? "completed" : status;
                                    var schemaVersionStatus = (SchemaVersionStatus)Enum.Parse(typeof(SchemaVersionStatus), status, true);
                                    var currentVersion      = new CurrentVersionInformation((int)dataReader.GetValue(0), schemaVersionStatus, instanceNames);
                                    currentVersions.Add(currentVersion);
                                }
                            }
                            else
                            {
                                return(currentVersions);
                            }
                        }
                    }
                    catch (SqlException e)
                    {
                        _logger.LogError(e, "Error from SQL database on retrieving current version information");
                        throw;
                    }
                }

            return(currentVersions);
        }
Ejemplo n.º 29
0
        private void Setup <T>(Expression <Func <ISqlConnectionWrapper, Task <T> > > expression, T result, Dictionary <string, object> outParameters = null)
        {
            var setup = Setup(expression).ReturnsAsync(result);

            if (outParameters != null)
            {
                setup.Callback((string s, object p, IDbTransaction t, int?o, CommandType c) =>
                {
                    foreach (var kv in outParameters)
                    {
                        SqlConnectionWrapper.Set(p, kv.Key, kv.Value);
                    }
                });
            }
            setup.Verifiable();
        }
Ejemplo n.º 30
0
        private async Task <IList <WorkflowState> > GetCurrentStatesInternal(int userId, IEnumerable <int> artifactIds, int revisionId, bool addDrafts)
        {
            var param = new DynamicParameters();

            param.Add("@userId", userId);
            var artifactIdsTable = SqlConnectionWrapper.ToDataTable(artifactIds);

            param.Add("@artifactIds", artifactIdsTable);
            param.Add("@revisionId", revisionId);
            param.Add("@addDrafts", addDrafts);

            return(ToWorkflowStates(
                       await
                       ConnectionWrapper.QueryAsync <SqlWorkFlowStateInformation>("GetWorkflowStatesForArtifacts", param,
                                                                                  commandType: CommandType.StoredProcedure)));
        }