public int Execute() { ISQLDatabase database = ServiceRegistration.Get<ISQLDatabase>(); ITransaction transaction = database.BeginTransaction(); try { using (IDbCommand command = transaction.CreateCommand()) { string countAlias; string statementStr; IList<BindVar> bindVars; MainQueryBuilder builder = new MainQueryBuilder(_miaManagement, new QueryAttribute[] {}, null, _necessaryRequestedMIATypes, new MediaItemAspectMetadata[] {}, _filter, null); IDictionary<QueryAttribute, string> qa2a; builder.GenerateSqlGroupByStatement(out countAlias, out qa2a, out statementStr, out bindVars); command.CommandText = statementStr; foreach (BindVar bindVar in bindVars) database.AddParameter(command, bindVar.Name, bindVar.Value, bindVar.VariableType); return Convert.ToInt32(command.ExecuteScalar()); } } finally { transaction.Dispose(); } }
public int Execute() { ISQLDatabase database = ServiceRegistration.Get <ISQLDatabase>(); ITransaction transaction = database.BeginTransaction(); try { using (IDbCommand command = transaction.CreateCommand()) { string countAlias; string statementStr; IList <BindVar> bindVars; MainQueryBuilder builder = new MainQueryBuilder(_miaManagement, new QueryAttribute[] {}, null, _necessaryRequestedMIATypes, new MediaItemAspectMetadata[] {}, _filter, null); IDictionary <QueryAttribute, string> qa2a; builder.GenerateSqlGroupByStatement(out countAlias, out qa2a, out statementStr, out bindVars); command.CommandText = statementStr; foreach (BindVar bindVar in bindVars) { database.AddParameter(command, bindVar.Name, bindVar.Value, bindVar.VariableType); } return(Convert.ToInt32(command.ExecuteScalar())); } } finally { transaction.Dispose(); } }
public HomogenousMap Execute() { ISQLDatabase database = ServiceRegistration.Get <ISQLDatabase>(); ITransaction transaction = database.BeginTransaction(); try { using (IDbCommand command = transaction.CreateCommand()) { string valueAlias; string groupSizeAlias; string statementStr; IList <BindVar> bindVars; if (_selectAttribute.Cardinality == Cardinality.Inline || _selectAttribute.Cardinality == Cardinality.ManyToOne) { QueryAttribute selectAttributeQA = new QueryAttribute(_selectAttribute); MainQueryBuilder builder = new MainQueryBuilder(_miaManagement, new QueryAttribute[] { selectAttributeQA }, _selectProjectionFunction, _necessaryRequestedMIATypes, new MediaItemAspectMetadata[] {}, _filter, null); IDictionary <QueryAttribute, string> qa2a; builder.GenerateSqlGroupByStatement(out groupSizeAlias, out qa2a, out statementStr, out bindVars); valueAlias = qa2a[selectAttributeQA]; } else { ComplexAttributeQueryBuilder builder = new ComplexAttributeQueryBuilder(_miaManagement, _selectAttribute, _selectProjectionFunction, _necessaryRequestedMIATypes, _filter); builder.GenerateSqlGroupByStatement(_selectAttributeFilter, out valueAlias, out groupSizeAlias, out statementStr, out bindVars); } command.CommandText = statementStr; foreach (BindVar bindVar in bindVars) { database.AddParameter(command, bindVar.Name, bindVar.Value, bindVar.VariableType); } Type valueType = _projectionValueType ?? _selectAttribute.AttributeType; HomogenousMap result = new HomogenousMap(valueType, typeof(int)); using (IDataReader reader = command.ExecuteReader()) { int valueCol = reader.GetOrdinal(valueAlias); int groupSizeCol = reader.GetOrdinal(groupSizeAlias); while (reader.Read()) { result.Add(database.ReadDBValue(valueType, reader, valueCol), database.ReadDBValue <int>(reader, groupSizeCol)); } } return(result); } } finally { transaction.Dispose(); } }
public override string ToString() { StringBuilder result = new StringBuilder(); result.Append("CompiledMediaItemQuery\r\n"); foreach (MediaItemAspectMetadata.AttributeSpecification attr in _explicitSelectAttributes) { ComplexAttributeQueryBuilder complexAttributeQueryBuilder = new ComplexAttributeQueryBuilder( _miaManagement, attr, null, _necessaryRequestedMIAs, _filter); result.Append("External attribute query for "); result.Append(attr.ParentMIAM.Name); result.Append("."); result.Append(attr.AttributeName); result.Append(":\r\n"); result.Append(complexAttributeQueryBuilder.ToString()); result.Append("\r\n\r\n"); } result.Append("Main query:\r\n"); MainQueryBuilder mainQueryBuilder = new MainQueryBuilder(_miaManagement, _mainSelectAttributes.Values, null, _necessaryRequestedMIAs, _optionalRequestedMIAs, _filter, _sortInformation); result.Append(mainQueryBuilder.ToString()); return(result.ToString()); }
public MediaItem QueryMediaItem() { ISQLDatabase database = ServiceRegistration.Get <ISQLDatabase>(); ITransaction transaction = database.BeginTransaction(); try { MediaItem result = null; // 1. Main query MainQueryBuilder mainQueryBuilder = new MainQueryBuilder(_miaManagement, _mainSelectAttributes.Values, null, _necessaryRequestedMIAs, _optionalRequestedMIAs, _filter, _sortInformation); using (IDbCommand mainQueryCommand = transaction.CreateCommand()) { string mediaItemIdAlias2; IDictionary <MediaItemAspectMetadata, string> miamAliases; // Maps (selected and filtered) QueryAttributes to CompiledQueryAttributes in the SQL query IDictionary <QueryAttribute, string> qa2a; string statementStr; IList <BindVar> bindVars; mainQueryBuilder.GenerateSqlStatement(out mediaItemIdAlias2, out miamAliases, out qa2a, out statementStr, out bindVars); mainQueryCommand.CommandText = statementStr; foreach (BindVar bindVar in bindVars) { database.AddParameter(mainQueryCommand, bindVar.Name, bindVar.Value, bindVar.VariableType); } IEnumerable <MediaItemAspectMetadata> selectedMIAs = _necessaryRequestedMIAs.Union(_optionalRequestedMIAs); using (IDataReader mainReader = mainQueryCommand.ExecuteReader()) { if (mainReader.Read()) { Guid mediaItemId = database.ReadDBValue <Guid>(mainReader, mainReader.GetOrdinal(mediaItemIdAlias2)); result = new MediaItem(mediaItemId); // Request complex attributes using media item ID IFilter modifiedFilter = BooleanCombinationFilter.CombineFilters(BooleanOperator.And, _filter, new MediaItemIdFilter(mediaItemId)); IDictionary <MediaItemAspectMetadata.AttributeSpecification, ICollection <object> > complexAttributeValues = new Dictionary <MediaItemAspectMetadata.AttributeSpecification, ICollection <object> >(); foreach (MediaItemAspectMetadata.AttributeSpecification attr in _explicitSelectAttributes) { ComplexAttributeQueryBuilder complexAttributeQueryBuilder = new ComplexAttributeQueryBuilder( _miaManagement, attr, null, null, modifiedFilter); using (IDbCommand complexQueryCommand = transaction.CreateCommand()) { string mediaItemIdAlias; string valueAlias; complexAttributeQueryBuilder.GenerateSqlStatement(out mediaItemIdAlias, out valueAlias, out statementStr, out bindVars); complexQueryCommand.CommandText = statementStr; foreach (BindVar bindVar in bindVars) { database.AddParameter(complexQueryCommand, bindVar.Name, bindVar.Value, bindVar.VariableType); } Type valueType = attr.AttributeType; using (IDataReader reader = complexQueryCommand.ExecuteReader()) { if (reader.Read()) { object value = database.ReadDBValue(valueType, reader, reader.GetOrdinal(valueAlias)); ICollection <object> attrValues; if (!complexAttributeValues.TryGetValue(attr, out attrValues)) { attrValues = complexAttributeValues[attr] = new List <object>(); } attrValues.Add(value); } } } } // Put together all attributes foreach (MediaItemAspectMetadata miam in selectedMIAs) { if (mainReader.IsDBNull(mainReader.GetOrdinal(miamAliases[miam]))) { // MIAM is not available for current media item continue; } MediaItemAspect mia = new MediaItemAspect(miam); foreach (MediaItemAspectMetadata.AttributeSpecification attr in miam.AttributeSpecifications.Values) { if (attr.Cardinality == Cardinality.Inline) { QueryAttribute qa = _mainSelectAttributes[attr]; string alias = qa2a[qa]; mia.SetAttribute(attr, database.ReadDBValue(attr.AttributeType, mainReader, mainReader.GetOrdinal(alias))); } else { ICollection <object> attrValues; if (complexAttributeValues.TryGetValue(attr, out attrValues)) { mia.SetCollectionAttribute(attr, attrValues); } } } result.Aspects[miam.AspectId] = mia; } } return(result); } } } finally { transaction.Dispose(); } }
public IList <MediaItem> QueryList() { ISQLDatabase database = ServiceRegistration.Get <ISQLDatabase>(); ITransaction transaction = database.BeginTransaction(); try { string statementStr; IList <BindVar> bindVars; // 1. Request all complex attributes IDictionary <Guid, IDictionary <MediaItemAspectMetadata.AttributeSpecification, ICollection <object> > > complexAttributeValues = new Dictionary <Guid, IDictionary <MediaItemAspectMetadata.AttributeSpecification, ICollection <object> > >(); foreach (MediaItemAspectMetadata.AttributeSpecification attr in _explicitSelectAttributes) { ComplexAttributeQueryBuilder complexAttributeQueryBuilder = new ComplexAttributeQueryBuilder( _miaManagement, attr, null, _necessaryRequestedMIAs, _filter); using (IDbCommand command = transaction.CreateCommand()) { string mediaItemIdAlias; string valueAlias; complexAttributeQueryBuilder.GenerateSqlStatement(out mediaItemIdAlias, out valueAlias, out statementStr, out bindVars); command.CommandText = statementStr; foreach (BindVar bindVar in bindVars) { database.AddParameter(command, bindVar.Name, bindVar.Value, bindVar.VariableType); } Type valueType = attr.AttributeType; using (IDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Guid mediaItemId = database.ReadDBValue <Guid>(reader, reader.GetOrdinal(mediaItemIdAlias)); object value = database.ReadDBValue(valueType, reader, reader.GetOrdinal(valueAlias)); IDictionary <MediaItemAspectMetadata.AttributeSpecification, ICollection <object> > attributeValues; if (!complexAttributeValues.TryGetValue(mediaItemId, out attributeValues)) { attributeValues = complexAttributeValues[mediaItemId] = new Dictionary <MediaItemAspectMetadata.AttributeSpecification, ICollection <object> >(); } ICollection <object> attrValues; if (!attributeValues.TryGetValue(attr, out attrValues)) { attrValues = attributeValues[attr] = new List <object>(); } attrValues.Add(value); } } } } // 2. Main query MainQueryBuilder mainQueryBuilder = new MainQueryBuilder(_miaManagement, _mainSelectAttributes.Values, null, _necessaryRequestedMIAs, _optionalRequestedMIAs, _filter, _sortInformation); using (IDbCommand command = transaction.CreateCommand()) { string mediaItemIdAlias2; IDictionary <MediaItemAspectMetadata, string> miamAliases; // Maps (selected and filtered) QueryAttributes to CompiledQueryAttributes in the SQL query IDictionary <QueryAttribute, string> qa2a; mainQueryBuilder.GenerateSqlStatement(out mediaItemIdAlias2, out miamAliases, out qa2a, out statementStr, out bindVars); command.CommandText = statementStr; foreach (BindVar bindVar in bindVars) { database.AddParameter(command, bindVar.Name, bindVar.Value, bindVar.VariableType); } IEnumerable <MediaItemAspectMetadata> selectedMIAs = _necessaryRequestedMIAs.Union(_optionalRequestedMIAs); ICollection <Guid> mediaItems = new HashSet <Guid>(); using (IDataReader reader = command.ExecuteReader()) { IList <MediaItem> result = new List <MediaItem>(); while (reader.Read()) { Guid mediaItemId = database.ReadDBValue <Guid>(reader, reader.GetOrdinal(mediaItemIdAlias2)); if (mediaItems.Contains(mediaItemId)) { // Media item was already added to result - query results are not always unique because of JOINs used for filtering continue; } mediaItems.Add(mediaItemId); IDictionary <MediaItemAspectMetadata.AttributeSpecification, ICollection <object> > attributeValues; if (!complexAttributeValues.TryGetValue(mediaItemId, out attributeValues)) { attributeValues = null; } MediaItem mediaItem = new MediaItem(mediaItemId); foreach (MediaItemAspectMetadata miam in selectedMIAs) { if (reader.IsDBNull(reader.GetOrdinal(miamAliases[miam]))) { // MIAM is not available for current media item continue; } MediaItemAspect mia = new MediaItemAspect(miam); foreach (MediaItemAspectMetadata.AttributeSpecification attr in miam.AttributeSpecifications.Values) { if (attr.Cardinality == Cardinality.Inline) { QueryAttribute qa = _mainSelectAttributes[attr]; string alias = qa2a[qa]; mia.SetAttribute(attr, database.ReadDBValue(attr.AttributeType, reader, reader.GetOrdinal(alias))); } else { ICollection <object> attrValues; if (attributeValues != null && attributeValues.TryGetValue(attr, out attrValues)) { mia.SetCollectionAttribute(attr, attrValues); } } } mediaItem.Aspects[miam.AspectId] = mia; } result.Add(mediaItem); } return(result); } } } finally { transaction.Dispose(); } }
public override string ToString() { StringBuilder result = new StringBuilder(); result.Append("CompiledMediaItemQuery\r\n"); foreach (MediaItemAspectMetadata.AttributeSpecification attr in _explicitSelectAttributes) { ComplexAttributeQueryBuilder complexAttributeQueryBuilder = new ComplexAttributeQueryBuilder( _miaManagement, attr, null, _necessaryRequestedMIAs, _filter); result.Append("External attribute query for "); result.Append(attr.ParentMIAM.Name); result.Append("."); result.Append(attr.AttributeName); result.Append(":\r\n"); result.Append(complexAttributeQueryBuilder.ToString()); result.Append("\r\n\r\n"); } result.Append("Main query:\r\n"); MainQueryBuilder mainQueryBuilder = new MainQueryBuilder(_miaManagement, _mainSelectAttributes.Values, null, _necessaryRequestedMIAs, _optionalRequestedMIAs, _filter, _sortInformation); result.Append(mainQueryBuilder.ToString()); return result.ToString(); }
public MediaItem QueryMediaItem() { ISQLDatabase database = ServiceRegistration.Get<ISQLDatabase>(); ITransaction transaction = database.BeginTransaction(); try { MediaItem result = null; // 1. Main query MainQueryBuilder mainQueryBuilder = new MainQueryBuilder(_miaManagement, _mainSelectAttributes.Values, null, _necessaryRequestedMIAs, _optionalRequestedMIAs, _filter, _sortInformation); using (IDbCommand mainQueryCommand = transaction.CreateCommand()) { string mediaItemIdAlias2; IDictionary<MediaItemAspectMetadata, string> miamAliases; // Maps (selected and filtered) QueryAttributes to CompiledQueryAttributes in the SQL query IDictionary<QueryAttribute, string> qa2a; string statementStr; IList<BindVar> bindVars; mainQueryBuilder.GenerateSqlStatement(out mediaItemIdAlias2, out miamAliases, out qa2a, out statementStr, out bindVars); mainQueryCommand.CommandText = statementStr; foreach (BindVar bindVar in bindVars) database.AddParameter(mainQueryCommand, bindVar.Name, bindVar.Value, bindVar.VariableType); IEnumerable<MediaItemAspectMetadata> selectedMIAs = _necessaryRequestedMIAs.Union(_optionalRequestedMIAs); using (IDataReader mainReader = mainQueryCommand.ExecuteReader()) { if (mainReader.Read()) { Guid mediaItemId = database.ReadDBValue<Guid>(mainReader, mainReader.GetOrdinal(mediaItemIdAlias2)); result = new MediaItem(mediaItemId); // Request complex attributes using media item ID IFilter modifiedFilter = BooleanCombinationFilter.CombineFilters(BooleanOperator.And, _filter, new MediaItemIdFilter(mediaItemId)); IDictionary<MediaItemAspectMetadata.AttributeSpecification, ICollection<object>> complexAttributeValues = new Dictionary<MediaItemAspectMetadata.AttributeSpecification, ICollection<object>>(); foreach (MediaItemAspectMetadata.AttributeSpecification attr in _explicitSelectAttributes) { ComplexAttributeQueryBuilder complexAttributeQueryBuilder = new ComplexAttributeQueryBuilder( _miaManagement, attr, null, null, modifiedFilter); using (IDbCommand complexQueryCommand = transaction.CreateCommand()) { string mediaItemIdAlias; string valueAlias; complexAttributeQueryBuilder.GenerateSqlStatement(out mediaItemIdAlias, out valueAlias, out statementStr, out bindVars); complexQueryCommand.CommandText = statementStr; foreach (BindVar bindVar in bindVars) database.AddParameter(complexQueryCommand, bindVar.Name, bindVar.Value, bindVar.VariableType); Type valueType = attr.AttributeType; using (IDataReader reader = complexQueryCommand.ExecuteReader()) { if (reader.Read()) { object value = database.ReadDBValue(valueType, reader, reader.GetOrdinal(valueAlias)); ICollection<object> attrValues; if (!complexAttributeValues.TryGetValue(attr, out attrValues)) attrValues = complexAttributeValues[attr] = new List<object>(); attrValues.Add(value); } } } } // Put together all attributes foreach (MediaItemAspectMetadata miam in selectedMIAs) { if (mainReader.IsDBNull(mainReader.GetOrdinal(miamAliases[miam]))) // MIAM is not available for current media item continue; MediaItemAspect mia = new MediaItemAspect(miam); foreach (MediaItemAspectMetadata.AttributeSpecification attr in miam.AttributeSpecifications.Values) if (attr.Cardinality == Cardinality.Inline) { QueryAttribute qa = _mainSelectAttributes[attr]; string alias = qa2a[qa]; mia.SetAttribute(attr, database.ReadDBValue(attr.AttributeType, mainReader, mainReader.GetOrdinal(alias))); } else { ICollection<object> attrValues; if (complexAttributeValues.TryGetValue(attr, out attrValues)) mia.SetCollectionAttribute(attr, attrValues); } result.Aspects[miam.AspectId] = mia; } } return result; } } } finally { transaction.Dispose(); } }
public IList<MediaItem> QueryList() { ISQLDatabase database = ServiceRegistration.Get<ISQLDatabase>(); ITransaction transaction = database.BeginTransaction(); try { string statementStr; IList<BindVar> bindVars; // 1. Request all complex attributes IDictionary<Guid, IDictionary<MediaItemAspectMetadata.AttributeSpecification, ICollection<object>>> complexAttributeValues = new Dictionary<Guid, IDictionary<MediaItemAspectMetadata.AttributeSpecification, ICollection<object>>>(); foreach (MediaItemAspectMetadata.AttributeSpecification attr in _explicitSelectAttributes) { ComplexAttributeQueryBuilder complexAttributeQueryBuilder = new ComplexAttributeQueryBuilder( _miaManagement, attr, null, _necessaryRequestedMIAs, _filter); using (IDbCommand command = transaction.CreateCommand()) { string mediaItemIdAlias; string valueAlias; complexAttributeQueryBuilder.GenerateSqlStatement(out mediaItemIdAlias, out valueAlias, out statementStr, out bindVars); command.CommandText = statementStr; foreach (BindVar bindVar in bindVars) database.AddParameter(command, bindVar.Name, bindVar.Value, bindVar.VariableType); Type valueType = attr.AttributeType; using (IDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Guid mediaItemId = database.ReadDBValue<Guid>(reader, reader.GetOrdinal(mediaItemIdAlias)); object value = database.ReadDBValue(valueType, reader, reader.GetOrdinal(valueAlias)); IDictionary<MediaItemAspectMetadata.AttributeSpecification, ICollection<object>> attributeValues; if (!complexAttributeValues.TryGetValue(mediaItemId, out attributeValues)) attributeValues = complexAttributeValues[mediaItemId] = new Dictionary<MediaItemAspectMetadata.AttributeSpecification, ICollection<object>>(); ICollection<object> attrValues; if (!attributeValues.TryGetValue(attr, out attrValues)) attrValues = attributeValues[attr] = new List<object>(); attrValues.Add(value); } } } } // 2. Main query MainQueryBuilder mainQueryBuilder = new MainQueryBuilder(_miaManagement, _mainSelectAttributes.Values, null, _necessaryRequestedMIAs, _optionalRequestedMIAs, _filter, _sortInformation); using (IDbCommand command = transaction.CreateCommand()) { string mediaItemIdAlias2; IDictionary<MediaItemAspectMetadata, string> miamAliases; // Maps (selected and filtered) QueryAttributes to CompiledQueryAttributes in the SQL query IDictionary<QueryAttribute, string> qa2a; mainQueryBuilder.GenerateSqlStatement(out mediaItemIdAlias2, out miamAliases, out qa2a, out statementStr, out bindVars); command.CommandText = statementStr; foreach (BindVar bindVar in bindVars) database.AddParameter(command, bindVar.Name, bindVar.Value, bindVar.VariableType); IEnumerable<MediaItemAspectMetadata> selectedMIAs = _necessaryRequestedMIAs.Union(_optionalRequestedMIAs); ICollection<Guid> mediaItems = new HashSet<Guid>(); using (IDataReader reader = command.ExecuteReader()) { IList<MediaItem> result = new List<MediaItem>(); while (reader.Read()) { Guid mediaItemId = database.ReadDBValue<Guid>(reader, reader.GetOrdinal(mediaItemIdAlias2)); if (mediaItems.Contains(mediaItemId)) // Media item was already added to result - query results are not always unique because of JOINs used for filtering continue; mediaItems.Add(mediaItemId); IDictionary<MediaItemAspectMetadata.AttributeSpecification, ICollection<object>> attributeValues; if (!complexAttributeValues.TryGetValue(mediaItemId, out attributeValues)) attributeValues = null; MediaItem mediaItem = new MediaItem(mediaItemId); foreach (MediaItemAspectMetadata miam in selectedMIAs) { if (reader.IsDBNull(reader.GetOrdinal(miamAliases[miam]))) // MIAM is not available for current media item continue; MediaItemAspect mia = new MediaItemAspect(miam); foreach (MediaItemAspectMetadata.AttributeSpecification attr in miam.AttributeSpecifications.Values) if (attr.Cardinality == Cardinality.Inline) { QueryAttribute qa = _mainSelectAttributes[attr]; string alias = qa2a[qa]; mia.SetAttribute(attr, database.ReadDBValue(attr.AttributeType, reader, reader.GetOrdinal(alias))); } else { ICollection<object> attrValues; if (attributeValues != null && attributeValues.TryGetValue(attr, out attrValues)) mia.SetCollectionAttribute(attr, attrValues); } mediaItem.Aspects[miam.AspectId] = mia; } result.Add(mediaItem); } return result; } } } finally { transaction.Dispose(); } }
public HomogenousMap Execute() { ISQLDatabase database = ServiceRegistration.Get<ISQLDatabase>(); ITransaction transaction = database.BeginTransaction(); try { using (IDbCommand command = transaction.CreateCommand()) { string valueAlias; string groupSizeAlias; string statementStr; IList<BindVar> bindVars; if (_selectAttribute.Cardinality == Cardinality.Inline || _selectAttribute.Cardinality == Cardinality.ManyToOne) { QueryAttribute selectAttributeQA = new QueryAttribute(_selectAttribute); MainQueryBuilder builder = new MainQueryBuilder(_miaManagement, new QueryAttribute[] {selectAttributeQA}, _selectProjectionFunction, _necessaryRequestedMIATypes, new MediaItemAspectMetadata[] {}, _filter, null); IDictionary<QueryAttribute, string> qa2a; builder.GenerateSqlGroupByStatement(out groupSizeAlias, out qa2a, out statementStr, out bindVars); valueAlias = qa2a[selectAttributeQA]; } else { ComplexAttributeQueryBuilder builder = new ComplexAttributeQueryBuilder(_miaManagement, _selectAttribute, _selectProjectionFunction, _necessaryRequestedMIATypes, _filter); builder.GenerateSqlGroupByStatement(_selectAttributeFilter, out valueAlias, out groupSizeAlias, out statementStr, out bindVars); } command.CommandText = statementStr; foreach (BindVar bindVar in bindVars) database.AddParameter(command, bindVar.Name, bindVar.Value, bindVar.VariableType); Type valueType = _projectionValueType ?? _selectAttribute.AttributeType; HomogenousMap result = new HomogenousMap(valueType, typeof(int)); using (IDataReader reader = command.ExecuteReader()) { int valueCol = reader.GetOrdinal(valueAlias); int groupSizeCol = reader.GetOrdinal(groupSizeAlias); while (reader.Read()) result.Add(database.ReadDBValue(valueType, reader, valueCol), database.ReadDBValue<int>(reader, groupSizeCol)); } return result; } } finally { transaction.Dispose(); } }
private void AddMultipleMIAResults(ISQLDatabase database, ITransaction transaction, MultipleMediaItemAspectMetadata miam, IDictionary <MediaItemAspectMetadata.AttributeSpecification, QueryAttribute> attributes, MainQueryBuilder builder, IDictionary <Guid, ICollection <MultipleMediaItemAspect> > multipleMiaValues) { if (miam.IsTransientAspect) { return; } using (IDbCommand command = transaction.CreateCommand()) { string mediaItemIdAlias; IDictionary <MediaItemAspectMetadata, string> miamAliases; // Maps (selected and filtered) QueryAttributes to CompiledQueryAttributes in the SQL query IDictionary <QueryAttribute, string> qa2a; string statementStr; IList <BindVar> bindVars; builder.GenerateSqlStatement(out mediaItemIdAlias, out miamAliases, out qa2a, out statementStr, out bindVars); command.CommandText = statementStr; foreach (BindVar bindVar in bindVars) { database.AddParameter(command, bindVar.Name, bindVar.Value, bindVar.VariableType); } //logger.Debug("Get multiple MIAs for {0}", string.Join(",", ids)); using (IDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Guid itemId = database.ReadDBValue <Guid>(reader, reader.GetOrdinal(mediaItemIdAlias)); //logger.Debug("Read record for {0}", itemId); MultipleMediaItemAspect mia = new MultipleMediaItemAspect(miam); foreach (MediaItemAspectMetadata.AttributeSpecification attr in miam.AttributeSpecifications.Values) { if (attr.Cardinality == Cardinality.Inline) { QueryAttribute qa = attributes[attr]; string alias = qa2a[qa]; //logger.Debug("Reading multiple MIA attibute " + attr.AttributeName + " #" + index + " from column " + alias); mia.SetAttribute(attr, database.ReadDBValue(attr.AttributeType, reader, reader.GetOrdinal(alias))); } } if (builder is InverseRelationshipQueryBuilder) { /* * Swap the ID / role <--> linked role / linked ID * "A is a movie starting actor B" * becomes * "B is an actor starting in movie A" */ Guid id = itemId; Guid role = mia.GetAttributeValue <Guid>(RelationshipAspect.ATTR_ROLE); itemId = mia.GetAttributeValue <Guid>(RelationshipAspect.ATTR_LINKED_ID); mia.SetAttribute(RelationshipAspect.ATTR_ROLE, mia.GetAttributeValue <Guid>(RelationshipAspect.ATTR_LINKED_ROLE)); mia.SetAttribute(RelationshipAspect.ATTR_LINKED_ROLE, role); mia.SetAttribute(RelationshipAspect.ATTR_LINKED_ID, id); } ICollection <MultipleMediaItemAspect> values; if (!multipleMiaValues.TryGetValue(itemId, out values)) { values = new List <MultipleMediaItemAspect>(); multipleMiaValues[itemId] = values; } values.Add(mia); } } } }