コード例 #1
0
        public SingleResultQueryCommand <InstanceMetadata> CreateGetMetadataCommand(IObjectId instance)
        {
            TableKey            studyTable     = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.StudyTableName);
            TableKey            seriesTable    = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.SeriesTableName);
            TableKey            instanceTable  = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.ObjectInstanceTableName);
            QueryBuilder        queryBuilder   = CreateQueryBuilder( );
            SingleValueMatching uidMatching    = new SingleValueMatching( );
            ColumnInfo          metadataColumn = SchemaProvider.GetColumn(instanceTable.Name,
                                                                          StorageDbSchemaProvider.MetadataTable.MetadataColumn);

            queryBuilder.ProcessColumn(instanceTable, seriesTable.ModelKeyColumns[0], uidMatching, new string[] { instance.SeriesInstanceUID });
            queryBuilder.ProcessColumn(instanceTable, studyTable.ModelKeyColumns[0], uidMatching, new string[] { instance.StudyInstanceUID });
            queryBuilder.ProcessColumn(instanceTable, instanceTable.ModelKeyColumns[0], uidMatching, new string[] { instance.SOPInstanceUID });
            queryBuilder.ProcessColumn(instanceTable, metadataColumn);

            return(new SingleResultQueryCommand <InstanceMetadata> (CreateCommand(queryBuilder.GetQueryText(instanceTable)),
                                                                    instanceTable,
                                                                    metadataColumn.ToString( ),
                                                                    CreateMetadata));

            //IDbCommand command  = CreateCommand ( ) ;
            //var        sopParam = CreateParameter ( "@" + DB.Schema.StorageDbSchemaProvider.MetadataTable.SopInstanceColumn, instance.SOPInstanceUID ) ;


            // command.CommandText = string.Format ( "SELECT {0} FROM {1} WHERE {2}=@{2}",
            //                                      DB.Schema.StorageDbSchemaProvider.MetadataTable.MetadataColumn,
            //                                      DB.Schema.StorageDbSchemaProvider.MetadataTable.TableName,
            //                                      DB.Schema.StorageDbSchemaProvider.MetadataTable.SopInstanceColumn ) ;

            //command.Parameters.Add ( sopParam );

            //SetConnectionIfNull ( command ) ;

            //return command ;
        }
コード例 #2
0
        protected virtual QueryBuilder BuildQuery
        (
            IEnumerable <IMatchingCondition> conditions,
            IQueryOptions options,
            TableKey queryLeveTable
        )
        {
            QueryBuilder queryBuilder = CreateQueryBuilder( );


            if (null != conditions && conditions.Count( ) > 0)
            {
                foreach (var condition in conditions)
                {
                    if (condition.VR == fo.DicomVR.PN)
                    {
                        List <PersonNameData> pnValues = new List <PersonNameData> ( );


                        pnValues = condition.GetPNValues( );

                        foreach (var values in pnValues)
                        {
                            int           index        = -1;
                            string[]      stringValues = values.ToArray( );
                            List <string> pnConditions = new List <string> ( );

                            foreach (var column in SchemaProvider.GetColumnInfo(condition.KeyTag))
                            {
                                var columnValues = new string [] { stringValues[++index] };

                                queryBuilder.ProcessColumn(queryLeveTable, column, condition, columnValues);
                            }
                        }
                    }
                    else
                    {
                        IList <string> columnValues = GetValues(condition);

                        foreach (var column in SchemaProvider.GetColumnInfo(condition.KeyTag))
                        {
                            queryBuilder.ProcessColumn(queryLeveTable, column, condition, columnValues);
                        }
                    }
                }
            }
            else
            {
                foreach (var column in SchemaProvider.GetTableInfo(queryLeveTable).Columns)
                {
                    queryBuilder.ProcessColumn(queryLeveTable, column);
                }
            }

            return(queryBuilder);
        }
コード例 #3
0
        protected virtual QueryBuilder BuildQuery
        (
            IEnumerable <IMatchingCondition> conditions,
            IQueryOptions options,
            string queryLevel
        )
        {
            QueryBuilder queryBuilder = CreateQueryBuilder( );
            TableKey     sourceTable  = SchemaProvider.GetTableInfo(SchemaProvider.GetQueryTable(queryLevel));


            if (sourceTable == null)
            {
                throw new ArgumentException("querylevel not supported");
            }

            if (null != conditions)
            {
                foreach (var condition in conditions)
                {
                    if (condition.VR == fo.DicomVR.PN)
                    {
                        List <PersonNameData> pnValues = new List <PersonNameData> ( );


                        pnValues = condition.GetPNValues( );

                        foreach (var values in pnValues)
                        {
                            int           index        = -1;
                            string[]      stringValues = values.ToArray( );
                            List <string> pnConditions = new List <string> ( );

                            foreach (var column in SchemaProvider.GetColumnInfo(condition.KeyTag))
                            {
                                var columnValues = new string [] { stringValues[++index] };

                                queryBuilder.ProcessColumn(sourceTable, column, condition, columnValues);
                            }
                        }
                    }
                    else
                    {
                        IList <string> columnValues = GetValues(condition);

                        foreach (var column in SchemaProvider.GetColumnInfo(condition.KeyTag))
                        {
                            queryBuilder.ProcessColumn(sourceTable, column, condition, columnValues);
                        }
                    }
                }
            }

            return(queryBuilder);
        }
コード例 #4
0
        public virtual IDataAdapterCommand <long> CreateSelectSeriesKeyCommand(ISeriesId series)
        {
            TableKey            studyTable   = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.StudyTableName);
            TableKey            seriesTable  = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.SeriesTableName);
            QueryBuilder        queryBuilder = CreateQueryBuilder( );
            SingleValueMatching uidMatching  = new SingleValueMatching( );


            queryBuilder.ProcessColumn(seriesTable, studyTable.ModelKeyColumns  [0], uidMatching, new string[] { series.StudyInstanceUID });
            queryBuilder.ProcessColumn(seriesTable, seriesTable.ModelKeyColumns [0], uidMatching, new string[] { series.SeriesInstanceUID });

            return(new SingleResultQueryCommand <long> (CreateCommand(queryBuilder.GetQueryText(seriesTable)),
                                                        seriesTable.Name,
                                                        seriesTable.KeyColumn.Name));
        }
コード例 #5
0
        public ResultSetQueryCommand <InstanceMetadata> CreateGetMetadataCommand(ISeriesId series)
        {
            TableKey            studyTable     = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.StudyTableName);
            TableKey            seriesTable    = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.SeriesTableName);
            TableKey            sourceTable    = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.ObjectInstanceTableName);
            QueryBuilder        queryBuilder   = CreateQueryBuilder( );
            SingleValueMatching uidMatching    = new SingleValueMatching( );
            ColumnInfo          metadataColumn = SchemaProvider.GetColumn(sourceTable.Name,
                                                                          StorageDbSchemaProvider.MetadataTable.MetadataColumn);

            queryBuilder.ProcessColumn(sourceTable, seriesTable.ModelKeyColumns[0], uidMatching, new string[] { series.SeriesInstanceUID });
            queryBuilder.ProcessColumn(sourceTable, studyTable.ModelKeyColumns[0], uidMatching, new string[] { series.StudyInstanceUID });
            queryBuilder.ProcessColumn(sourceTable, metadataColumn);

            return(new ResultSetQueryCommand <InstanceMetadata> (CreateCommand(queryBuilder.GetQueryText(sourceTable)),
                                                                 sourceTable,
                                                                 new string [] { metadataColumn.ToString( ) },
                                                                 CreateMetadata));
        }
コード例 #6
0
        public virtual IDataAdapterCommand <long> CreateSelectInstanceKeyCommand(IObjectId instance)
        {
            QueryBuilder        queryBuilder   = CreateQueryBuilder( );
            TableKey            sourceTable    = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.ObjectInstanceTableName);
            SingleValueMatching sopUIDMatching = new SingleValueMatching( );


            queryBuilder.ProcessColumn(sourceTable, sourceTable.ModelKeyColumns[0], sopUIDMatching, new string[] { instance.SOPInstanceUID });


            return(new SingleResultQueryCommand <long> (CreateCommand(queryBuilder.GetQueryText(sourceTable)),
                                                        sourceTable.Name,
                                                        sourceTable.KeyColumn.Name));
        }
コード例 #7
0
        protected virtual void ProcessSelectObjectInstance
        (
            IObjectId objectInstance,
            QueryBuilder queryBuilder,
            TableKey objectInstanceTable,
            TableKey sourceTable
        )
        {
            SingleValueMatching uidMatching = new SingleValueMatching( );


            queryBuilder.ProcessColumn(sourceTable,
                                       objectInstanceTable.ModelKeyColumns [0],
                                       uidMatching,
                                       new string[] { objectInstance.SOPInstanceUID });
        }
コード例 #8
0
        protected virtual void ProcessSelectSeries
        (
            ISeriesId series,
            QueryBuilder queryBuilder,
            TableKey seriesTable,
            TableKey sourceTable
        )
        {
            SingleValueMatching uidMatching = new SingleValueMatching( );


            queryBuilder.ProcessColumn(sourceTable,
                                       seriesTable.ModelKeyColumns [0],
                                       uidMatching,
                                       new string[] { series.SeriesInstanceUID });
        }
コード例 #9
0
        protected virtual void ProcessSelectStudy
        (
            IStudyId study,
            QueryBuilder queryBuilder,
            TableKey studyTable,
            TableKey sourceTable
        )
        {
            SingleValueMatching uidMatching = new SingleValueMatching( );


            queryBuilder.ProcessColumn(sourceTable,
                                       studyTable.ModelKeyColumns [0],
                                       uidMatching,
                                       new string[] { study.StudyInstanceUID });
        }
コード例 #10
0
        public ResultSetQueryCommand <InstanceMetadata> CreateGetMetadataCommand(IStudyId study)
        {
            TableKey     studyTable     = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.StudyTableName);
            TableKey     sourceTable    = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.ObjectInstanceTableName);
            QueryBuilder queryBuilder   = CreateQueryBuilder( );
            ColumnInfo   metaDataColumn = SchemaProvider.GetColumn(sourceTable.Name,
                                                                   StorageDbSchemaProvider.MetadataTable.MetadataColumn);

            ProcessSelectStudy(study, queryBuilder, studyTable, sourceTable);

            queryBuilder.ProcessColumn(sourceTable, metaDataColumn, null, null);

            return(new ResultSetQueryCommand <InstanceMetadata> (CreateCommand(queryBuilder.GetQueryText(sourceTable)),
                                                                 sourceTable,
                                                                 new string [] { metaDataColumn.ToString( ) },
                                                                 CreateMetadata));
        }
コード例 #11
0
        public SingleResultQueryCommand <InstanceMetadata> CreateGetMetadataCommand(IObjectId instance)
        {
            TableKey     studyTable     = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.StudyTableName);
            TableKey     seriesTable    = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.SeriesTableName);
            TableKey     instanceTable  = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.ObjectInstanceTableName);
            QueryBuilder queryBuilder   = CreateQueryBuilder( );
            ColumnInfo   metadataColumn = SchemaProvider.GetColumn(instanceTable.Name,
                                                                   StorageDbSchemaProvider.MetadataTable.MetadataColumn);

            ProcessSelectStudy(instance, queryBuilder, studyTable, instanceTable);
            ProcessSelectSeries(instance, queryBuilder, seriesTable, instanceTable);
            ProcessSelectObjectInstance(instance, queryBuilder, instanceTable, instanceTable);

            queryBuilder.ProcessColumn(instanceTable, metadataColumn);

            return(new SingleResultQueryCommand <InstanceMetadata> (CreateCommand(queryBuilder.GetQueryText(instanceTable)),
                                                                    instanceTable,
                                                                    metadataColumn.ToString( ),
                                                                    CreateMetadata));
        }
コード例 #12
0
        public virtual string Sort(QueryBuilder queryBuilder, IQueryOptions options, TableKey queryLevelTable)
        {
            IEnumerable <ColumnInfo> orderByColumns = null;


            Direction = SortingDirection.ASC;

            if (queryLevelTable == StorageDbSchemaProvider.StudyTableName)
            {
                var studyTable = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.StudyTableName);

                orderByColumns = new ColumnInfo [] { studyTable.KeyColumn };

                Direction = SortingDirection.DESC;
            }
            else if (queryLevelTable == StorageDbSchemaProvider.SeriesTableName)
            {
                orderByColumns = SchemaProvider.GetColumnInfo((uint)DicomTag.SeriesNumber);
            }

            if (queryLevelTable == StorageDbSchemaProvider.ObjectInstanceTableName)
            {
                orderByColumns = SchemaProvider.GetColumnInfo((uint)DicomTag.InstanceNumber);
            }


            if (null != orderByColumns)
            {
                SortBy = string.Join(",", orderByColumns.Select(column => (string)column));

                foreach (var column in orderByColumns)
                {
                    if (!queryBuilder.ProcessedColumns.ContainsKey(queryLevelTable) ||
                        (queryBuilder.ProcessedColumns.ContainsKey(queryLevelTable) &&
                         !queryBuilder.ProcessedColumns[queryLevelTable].Contains(column)))
                    {
                        queryBuilder.ProcessColumn(queryLevelTable, column);
                    }
                }

                string queryText = queryBuilder.GetQueryText(queryLevelTable, options);


                if (ApplyPagination && CanPaginate(queryBuilder, options, queryLevelTable))
                {
                    CountColumn = "TotalRows";

                    return(string.Format(Sorting_Template,
                                         queryText,
                                         CountColumn,
                                         string.Format(OrderBy_Template, SortBy, GetDirection()),
                                         string.Format(Pagination_Template, options.Offset, options.Limit)));
                }
                else
                {
                    return(queryText + string.Format(OrderBy_Template,
                                                     SortBy,
                                                     GetDirection( )));
                }
            }
            else
            {
                return(queryBuilder.GetQueryText(queryLevelTable, options));
            }
        }