private object reflect(Query query, string tName)
        {
            if (this.customQueries == null)
            {
                this.customQueries = new Dictionary <string, ICustomQuery>();
                var interfaceCustomQueryType = typeof(ICustomQuery);
                var asm   = typeof(QueryService).Assembly;
                var types = asm.GetTypes();
                foreach (Type t in types)
                {
                    if (interfaceCustomQueryType.IsAssignableFrom(t) && !t.IsInterface && !t.IsAbstract)
                    {
                        ICustomQuery classInstance = (ICustomQuery)Activator.CreateInstance(t, null);
                        this.customQueries.Add(t.Name, classInstance);
                    }
                }

                //asm = typeof(CustomQueryById).Assembly;
                //types = asm.GetTypes();
                //foreach (Type t in types)
                //{
                //    if (interfaceCustomQueryType.IsAssignableFrom(t) && !t.IsInterface && !t.IsAbstract)
                //    {
                //        ICustomQuery classInstance = (ICustomQuery)Activator.CreateInstance(t, null);
                //        this.customQueries.Add(t.Name, classInstance);
                //    }
                //}
            }
            if (!this.customQueries.ContainsKey(tName))
            {
                throw new TechnicalException(new Exception("No se encuentra definido el custom query: " + tName));
            }
            return(this.customQueries[tName].Execute(query));;
        }
        private ErrorLevel GetErrorRateLevel(double?value, ICustomQuery query)
        {
            if (query.GetErrorLevel != null)
            {
                return(query.GetErrorLevel(value));
            }

            return(ErrorLevel.Normal);
        }
 public virtual IList <T> ListCustomQuery <T>(ICustomQuery customQuery, QueryParameters queryParameters)
 {
     using (new SessionIdLoggingContext(SessionId))
     {
         var results = new List <T>();
         ListCustomQuery(customQuery, queryParameters, results);
         return(results);
     }
 }
示例#4
0
 public override IList <T> ListCustomQuery <T>(ICustomQuery customQuery, QueryParameters queryParameters)
 {
     using (new SessionIdLoggingContext(SessionId))
     {
         // TODO pull up
         List <T> results = new List <T>();
         ListCustomQuery(customQuery, queryParameters, results);
         return(results);
     }
 }
 public virtual async Task <IList <T> > ListCustomQueryAsync <T>(ICustomQuery customQuery, QueryParameters queryParameters, CancellationToken cancellationToken)
 {
     cancellationToken.ThrowIfCancellationRequested();
     using (new SessionIdLoggingContext(SessionId))
     {
         var results = new List <T>();
         await(ListCustomQueryAsync(customQuery, queryParameters, results, cancellationToken)).ConfigureAwait(false);
         return(results);
     }
 }
 public MyQueryAdminController(
     IOrchardServices orchardServices,
     INotifier notifier,
     IContentManager contentManager,
     ICustomQuery customQuery)
 {
     _orchardServices = orchardServices;
     _contentManager  = contentManager;
     _notifier        = notifier;
     _customQuery     = customQuery;
     T = NullLocalizer.Instance;
 }
示例#7
0
        private ISQLQuery CreateSqlQuery(BaseQuery <T> query, ICustomQuery queryInt)
        {
            var nhQuery = _session.CreateSQLQuery(queryInt.Sql);

            if (query.Parameters == null || !query.Parameters.Any())
            {
                return(nhQuery);
            }

            foreach (var parameter in query.Parameters)
            {
                nhQuery.SetParameter(parameter.Key, parameter.Value);
            }

            return(nhQuery);
        }
示例#8
0
        public override void ListCustomQuery(ICustomQuery customQuery, QueryParameters queryParameters, IList results)
        {
            using (BeginProcess())
            {
                var loader = new CustomLoader(customQuery, Factory);

                var success = false;
                try
                {
                    ArrayHelper.AddAll(results, loader.List(this, queryParameters));
                    success = true;
                }
                finally
                {
                    AfterOperation(success);
                }
                temporaryPersistenceContext.Clear();
            }
        }
示例#9
0
        public override async Task ListCustomQueryAsync(ICustomQuery customQuery, QueryParameters queryParameters, IList results, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            using (BeginProcess())
            {
                var loader = new CustomLoader(customQuery, Factory);

                var success = false;
                try
                {
                    ArrayHelper.AddAll(results, await(loader.ListAsync(this, queryParameters, cancellationToken)).ConfigureAwait(false));
                    success = true;
                }
                finally
                {
                    await(AfterOperationAsync(success, cancellationToken)).ConfigureAwait(false);
                }
                temporaryPersistenceContext.Clear();
            }
        }
示例#10
0
        public override void ListCustomQuery(ICustomQuery customQuery, QueryParameters queryParameters, IList results)
        {
            using (new SessionIdLoggingContext(SessionId))
            {
                CheckAndUpdateSessionStatus();

                CustomLoader loader = new CustomLoader(customQuery, Factory);

                bool success = false;
                try
                {
                    ArrayHelper.AddAll(results, loader.List(this, queryParameters));
                    success = true;
                }
                finally
                {
                    AfterOperation(success);
                }
                temporaryPersistenceContext.Clear();
            }
        }
        public override void ListCustomQuery(ICustomQuery customQuery, QueryParameters queryParameters, IList results)
        {
            using (BeginProcess())
            {
                // We need to flush the batcher. Otherwise it may have pending operations which will not already have reached the database,
                // and the query may yield stale data.
                Flush();

                var loader = new CustomLoader(customQuery, Factory);

                var success = false;
                try
                {
                    ArrayHelper.AddAll(results, loader.List(this, queryParameters));
                    success = true;
                }
                finally
                {
                    AfterOperation(success);
                }
                temporaryPersistenceContext.Clear();
            }
        }
        public override async Task ListCustomQueryAsync(ICustomQuery customQuery, QueryParameters queryParameters, IList results, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            using (BeginProcess())
            {
                // We need to flush the batcher. Otherwise it may have pending operations which will not already have reached the database,
                // and the query may yield stale data.
                await(FlushAsync(cancellationToken)).ConfigureAwait(false);

                var loader = new CustomLoader(customQuery, Factory);

                var success = false;
                try
                {
                    ArrayHelper.AddAll(results, await(loader.ListAsync(this, queryParameters, cancellationToken)).ConfigureAwait(false));
                    success = true;
                }
                finally
                {
                    await(AfterOperationAsync(success, cancellationToken)).ConfigureAwait(false);
                }
                temporaryPersistenceContext.Clear();
            }
        }
 public IList <T> ListCustomQuery <T>(ICustomQuery customQuery, QueryParameters queryParameters)
 {
     return(delegat.ListCustomQuery <T>(customQuery, queryParameters));
 }
 public abstract Task ListCustomQueryAsync(ICustomQuery customQuery, QueryParameters queryParameters, IList results, CancellationToken cancellationToken);
		public CustomLoader(ICustomQuery customQuery, ISessionFactoryImplementor factory) : base(factory)
		{
			sql = customQuery.SQL;
			querySpaces.AddAll(customQuery.QuerySpaces);
			namedParameterBindPoints = customQuery.NamedParameterBindPoints;

			List<IQueryable> entitypersisters = new List<IQueryable>();
			List<int> entityowners = new List<int>();
			List<IEntityAliases> entityaliases = new List<IEntityAliases>();

			List<IQueryableCollection> collectionpersisters = new List<IQueryableCollection>();
			List<int> collectionowners = new List<int>();
			List<ICollectionAliases> collectionaliases = new List<ICollectionAliases>();

			List<LockMode> lockmodes = new List<LockMode>();
			List<IResultColumnProcessor> resultColumnProcessors = new List<IResultColumnProcessor>();
			List<IReturn> nonScalarReturnList = new List<IReturn>();
			List<IType> resulttypes = new List<IType>();
			List<string> specifiedAliases = new List<string>();

			int returnableCounter = 0;
			bool hasScalars = false;

			foreach (IReturn rtn in customQuery.CustomQueryReturns)
			{
				if (rtn is ScalarReturn)
				{
					ScalarReturn scalarRtn = (ScalarReturn) rtn;
					resulttypes.Add(scalarRtn.Type);
					specifiedAliases.Add(scalarRtn.ColumnAlias);
					resultColumnProcessors.Add(new ScalarResultColumnProcessor(scalarRtn.ColumnAlias, scalarRtn.Type));
					hasScalars = true;
				}
				else if (rtn is RootReturn)
				{
					RootReturn rootRtn = (RootReturn) rtn;
					IQueryable persister = (IQueryable) factory.GetEntityPersister(rootRtn.EntityName);
					entitypersisters.Add(persister);
					lockmodes.Add(rootRtn.LockMode);
					resultColumnProcessors.Add(new NonScalarResultColumnProcessor(returnableCounter++));
					nonScalarReturnList.Add(rtn);
					entityowners.Add(-1);
					resulttypes.Add(persister.Type);
					specifiedAliases.Add(rootRtn.Alias);
					entityaliases.Add(rootRtn.EntityAliases);
					querySpaces.AddAll(persister.QuerySpaces);
				}
				else if (rtn is CollectionReturn)
				{
					CollectionReturn collRtn = (CollectionReturn) rtn;
					string role = collRtn.OwnerEntityName + "." + collRtn.OwnerProperty;
					IQueryableCollection persister = (IQueryableCollection) factory.GetCollectionPersister(role);
					collectionpersisters.Add(persister);
					lockmodes.Add(collRtn.LockMode);
					resultColumnProcessors.Add(new NonScalarResultColumnProcessor(returnableCounter++));
					nonScalarReturnList.Add(rtn);
					collectionowners.Add(-1);
					resulttypes.Add(persister.Type);
					specifiedAliases.Add(collRtn.Alias);
					collectionaliases.Add(collRtn.CollectionAliases);
					// determine if the collection elements are entities...
					IType elementType = persister.ElementType;
					if (elementType.IsEntityType)
					{
						IQueryable elementPersister = (IQueryable) ((EntityType) elementType).GetAssociatedJoinable(factory);
						entitypersisters.Add(elementPersister);
						entityowners.Add(-1);
						entityaliases.Add(collRtn.ElementEntityAliases);
						querySpaces.AddAll(elementPersister.QuerySpaces);
					}
				}
				else if (rtn is EntityFetchReturn)
				{
					EntityFetchReturn fetchRtn = (EntityFetchReturn) rtn;
					NonScalarReturn ownerDescriptor = fetchRtn.Owner;
					int ownerIndex = nonScalarReturnList.IndexOf(ownerDescriptor);
					entityowners.Add(ownerIndex);
					lockmodes.Add(fetchRtn.LockMode);
					IQueryable ownerPersister = DetermineAppropriateOwnerPersister(ownerDescriptor);
					EntityType fetchedType = (EntityType) ownerPersister.GetPropertyType(fetchRtn.OwnerProperty);
					string entityName = fetchedType.GetAssociatedEntityName(Factory);
					IQueryable persister = (IQueryable) factory.GetEntityPersister(entityName);
					entitypersisters.Add(persister);
					nonScalarReturnList.Add(rtn);
					specifiedAliases.Add(fetchRtn.Alias);
					entityaliases.Add(fetchRtn.EntityAliases);
					querySpaces.AddAll(persister.QuerySpaces);
				}
				else if (rtn is CollectionFetchReturn)
				{
					CollectionFetchReturn fetchRtn = (CollectionFetchReturn) rtn;
					NonScalarReturn ownerDescriptor = fetchRtn.Owner;
					int ownerIndex = nonScalarReturnList.IndexOf(ownerDescriptor);
					collectionowners.Add(ownerIndex);
					lockmodes.Add(fetchRtn.LockMode);
					IQueryable ownerPersister = DetermineAppropriateOwnerPersister(ownerDescriptor);
					string role = ownerPersister.EntityName + '.' + fetchRtn.OwnerProperty;
					IQueryableCollection persister = (IQueryableCollection) factory.GetCollectionPersister(role);
					collectionpersisters.Add(persister);
					nonScalarReturnList.Add(rtn);
					specifiedAliases.Add(fetchRtn.Alias);
					collectionaliases.Add(fetchRtn.CollectionAliases);
					// determine if the collection elements are entities...
					IType elementType = persister.ElementType;
					if (elementType.IsEntityType)
					{
						IQueryable elementPersister = (IQueryable) ((EntityType) elementType).GetAssociatedJoinable(factory);
						entitypersisters.Add(elementPersister);
						entityowners.Add(ownerIndex);
						entityaliases.Add(fetchRtn.ElementEntityAliases);
						querySpaces.AddAll(elementPersister.QuerySpaces);
					}
				}
				else
				{
					throw new HibernateException("unexpected custom query return type : " + rtn.GetType().FullName);
				}
			}

			entityPersisters = entitypersisters.ToArray();
			entityOwners = entityowners.ToArray();
			entityAliases = entityaliases.ToArray();
			collectionPersisters = collectionpersisters.ToArray();
			collectionOwners = collectionowners.ToArray();
			collectionAliases = collectionaliases.ToArray();
			lockModes = lockmodes.ToArray();
			resultTypes = resulttypes.ToArray();
			transformerAliases = specifiedAliases.ToArray();
			rowProcessor = new ResultRowProcessor(hasScalars, resultColumnProcessors.ToArray());
		}
示例#16
0
 public static QueryResultSet <T> Applying <T>(this IQueryable <T> items, ICustomQuery <T> query) where T : class
 {
     return(query.ApplyTo(items));
 }
示例#17
0
 public override IList <T> ListCustomQuery <T>(ICustomQuery customQuery, QueryParameters queryParameters);
 public void ListCustomQuery(ICustomQuery customQuery, QueryParameters queryParameters, IList results)
 {
     delegat.ListCustomQuery(customQuery, queryParameters, results);
 }
 public abstract void ListCustomQuery(ICustomQuery customQuery, QueryParameters queryParameters, IList results);
示例#20
0
 public virtual QueryResultSet <T> ListWhere(ICustomQuery <T> query)
 {
     return(this.repository.AsUntracked()
            .ListAll()
            .Applying(query));
 }
示例#21
0
 public override QueryResultSet <T> ListWhere(ICustomQuery <T> query)
 {
     return(cache.Applying(query));
 }
示例#22
0
        public CustomLoader(
            ICustomQuery customQuery,
            ISessionFactoryImplementor factory)
            : base(factory)
        {
            this.sql = customQuery.SQL;
            this.querySpaces.AddAll(customQuery.QuerySpaces);
            this.namedParameterBindPoints = customQuery.NamedParameterBindPoints;

            IList entityPersisters = new ArrayList();
            IList entityOwners = new ArrayList();
            IList entityAliases = new ArrayList();

            IList collectionPersisters = new ArrayList();
            IList collectionOwners = new ArrayList();
            IList collectionAliases = new ArrayList();

            IList lockModes = new ArrayList();
            IList resultColumnProcessors = new ArrayList();
            IList nonScalarReturnList = new ArrayList();
            IList resultTypes = new ArrayList();
            IList specifiedAliases = new ArrayList();

            int returnableCounter = 0;
            bool hasScalars = false;

            foreach (IReturn rtn in customQuery.CustomQueryReturns)
            {
                if (rtn is ScalarReturn)
                {
                    ScalarReturn scalarRtn = (ScalarReturn) rtn;
                    resultTypes.Add(scalarRtn.Type);
                    specifiedAliases.Add(scalarRtn.ColumnAlias);
                    resultColumnProcessors.Add(
                        new ScalarResultColumnProcessor(
                            scalarRtn.ColumnAlias,
                            scalarRtn.Type
                            )
                        );
                    hasScalars = true;
                }
                else if (rtn is RootReturn)
                {
                    RootReturn rootRtn = (RootReturn) rtn;
                    IQueryable persister = (IQueryable) factory.GetEntityPersister(rootRtn.EntityName);
                    entityPersisters.Add(persister);
                    lockModes.Add(rootRtn.LockMode);
                    resultColumnProcessors.Add(new NonScalarResultColumnProcessor(returnableCounter++));
                    nonScalarReturnList.Add(rtn);
                    entityOwners.Add(-1);
                    resultTypes.Add(persister.Type);
                    specifiedAliases.Add(rootRtn.Alias);
                    entityAliases.Add(rootRtn.EntityAliases);
                    querySpaces.AddAll(persister.QuerySpaces);
                }
                else if (rtn is CollectionReturn)
                {
                    CollectionReturn collRtn = (CollectionReturn) rtn;
                    String role = collRtn.OwnerEntityName + "." + collRtn.OwnerProperty;
                    IQueryableCollection persister = (IQueryableCollection) factory.GetCollectionPersister(role);
                    collectionPersisters.Add(persister);
                    lockModes.Add(collRtn.LockMode);
                    resultColumnProcessors.Add(new NonScalarResultColumnProcessor(returnableCounter++));
                    nonScalarReturnList.Add(rtn);
                    collectionOwners.Add(-1);
                    resultTypes.Add(persister.Type);
                    specifiedAliases.Add(collRtn.Alias);
                    collectionAliases.Add(collRtn.CollectionAliases);
                    // determine if the collection elements are entities...
                    IType elementType = persister.ElementType;
                    if (elementType.IsEntityType)
                    {
                        IQueryable elementPersister = (IQueryable) ((EntityType) elementType).GetAssociatedJoinable(factory);
                        entityPersisters.Add(elementPersister);
                        entityOwners.Add(-1);
                        entityAliases.Add(collRtn.ElementEntityAliases);
                        querySpaces.AddAll(elementPersister.QuerySpaces);
                    }
                }
                else if (rtn is EntityFetchReturn)
                {
                    EntityFetchReturn fetchRtn = (EntityFetchReturn) rtn;
                    NonScalarReturn ownerDescriptor = fetchRtn.Owner;
                    int ownerIndex = nonScalarReturnList.IndexOf(ownerDescriptor);
                    entityOwners.Add(ownerIndex);
                    lockModes.Add(fetchRtn.LockMode);
                    IQueryable ownerPersister = DetermineAppropriateOwnerPersister(ownerDescriptor);
                    EntityType fetchedType = (EntityType) ownerPersister.GetPropertyType(fetchRtn.OwnerProperty);
                    string entityName = fetchedType.GetAssociatedEntityName(Factory);
                    IQueryable persister = (IQueryable) factory.GetEntityPersister(entityName);
                    entityPersisters.Add(persister);
                    nonScalarReturnList.Add(rtn);
                    specifiedAliases.Add(fetchRtn.Alias);
                    entityAliases.Add(fetchRtn.EntityAliases);
                    querySpaces.AddAll(persister.QuerySpaces);
                }
                else if (rtn is CollectionFetchReturn)
                {
                    CollectionFetchReturn fetchRtn = (CollectionFetchReturn) rtn;
                    NonScalarReturn ownerDescriptor = fetchRtn.Owner;
                    int ownerIndex = nonScalarReturnList.IndexOf(ownerDescriptor);
                    collectionOwners.Add(ownerIndex);
                    lockModes.Add(fetchRtn.LockMode);
                    IQueryable ownerPersister = DetermineAppropriateOwnerPersister(ownerDescriptor);
                    String role = ownerPersister.EntityName + '.' + fetchRtn.OwnerProperty;
                    IQueryableCollection persister = (IQueryableCollection) factory.GetCollectionPersister(role);
                    collectionPersisters.Add(persister);
                    nonScalarReturnList.Add(rtn);
                    specifiedAliases.Add(fetchRtn.Alias);
                    collectionAliases.Add(fetchRtn.CollectionAliases);
                    // determine if the collection elements are entities...
                    IType elementType = persister.ElementType;
                    if (elementType.IsEntityType)
                    {
                        IQueryable elementPersister = (IQueryable) ((EntityType) elementType).GetAssociatedJoinable(factory);
                        entityPersisters.Add(elementPersister);
                        entityOwners.Add(ownerIndex);
                        entityAliases.Add(fetchRtn.ElementEntityAliases);
                        querySpaces.AddAll(elementPersister.QuerySpaces);
                    }
                }
                else
                {
                    throw new HibernateException("unexpected custom query return type : " + rtn.GetType().FullName);
                }
            }

            this.entityPersisters = new IQueryable[entityPersisters.Count];
            for (int i = 0; i < entityPersisters.Count; i++)
            {
                this.entityPersisters[i] = (IQueryable) entityPersisters[i];
            }
            this.entityOwners = ArrayHelper.ToIntArray(entityOwners);
            this.entityAliases = new IEntityAliases[entityAliases.Count];
            for (int i = 0; i < entityAliases.Count; i++)
            {
                this.entityAliases[i] = (IEntityAliases) entityAliases[i];
            }

            this.collectionPersisters = new IQueryableCollection[collectionPersisters.Count];
            for (int i = 0; i < collectionPersisters.Count; i++)
            {
                this.collectionPersisters[i] = (IQueryableCollection) collectionPersisters[i];
            }
            this.collectionOwners = ArrayHelper.ToIntArray(collectionOwners);
            this.collectionAliases = new ICollectionAliases[collectionAliases.Count];
            for (int i = 0; i < collectionAliases.Count; i++)
            {
                this.collectionAliases[i] = (ICollectionAliases) collectionAliases[i];
            }

            this.lockModes = new LockMode[lockModes.Count];
            for (int i = 0; i < lockModes.Count; i++)
            {
                this.lockModes[i] = (LockMode) lockModes[i];
            }

            this.resultTypes = ArrayHelper.ToTypeArray(resultTypes);
            this.transformerAliases = ArrayHelper.ToStringArray(specifiedAliases);

            this.rowProcessor = new ResultRowProcessor(
                hasScalars,
                (ResultColumnProcessor[]) ArrayHelper.ToArray(resultColumnProcessors, typeof(ResultColumnProcessor))
                );
        }
示例#23
0
 public IList <T> ListCustomQuery <T>(ICustomQuery customQuery, QueryParameters queryParameters)
 {
     return(_session.ListCustomQuery <T>(customQuery, queryParameters));
 }
示例#24
0
 public override void ListCustomQuery(ICustomQuery customQuery, QueryParameters queryParameters, IList results);
示例#25
0
		public CustomLoader(ICustomQuery customQuery, ISessionFactoryImplementor factory) : base(factory)
		{
			this.sql = customQuery.SQL;
			this.querySpaces.AddAll(customQuery.QuerySpaces);
			this.parametersSpecifications = customQuery.CollectedParametersSpecifications.ToList();

			var entityPersisters = new List<IEntityPersister>();
			var entityOwners = new List<int>();
			var entityAliases = new List<IEntityAliases>();
			var collectionPersisters = new List<ICollectionPersister>();
			var collectionOwners = new List<int>();
			var collectionAliases = new List<ICollectionAliases>();
			var lockModes = new List<LockMode>();
			var resultColumnProcessors = new List<IResultColumnProcessor>();
			var resultTypes = new List<IType>();
			var transformerAliases = new List<string>();

			int returnableCounter = 0;
			bool hasScalars = false;

			foreach (IReturn rtn in customQuery.CustomQueryReturns)
			{
				transformerAliases.Add(rtn.Alias);

				if (rtn is ScalarReturn)
				{
					resultTypes.Add(rtn.Type);
					resultColumnProcessors.Add(new ScalarResultColumnProcessor(rtn.Alias, rtn.Type));
					hasScalars = true;
					continue;
				}

				var nonScalarRtn = rtn as NonScalarReturn;
				if (nonScalarRtn != null)
				{
					lockModes.Add(nonScalarRtn.LockMode);

					var ownerIndex = nonScalarRtn.Owner != null
						? entityPersisters.IndexOf(nonScalarRtn.Owner.EntityPersister)
						: -1;
					if (nonScalarRtn.EntityPersister != null)
					{
						entityPersisters.Add(nonScalarRtn.EntityPersister);
						entityAliases.Add(nonScalarRtn.EntityAliases);
						entityOwners.Add(ownerIndex);
						querySpaces.AddAll(nonScalarRtn.EntityPersister.QuerySpaces);
					}
					if (nonScalarRtn.CollectionPersister != null)
					{
						collectionPersisters.Add(nonScalarRtn.CollectionPersister);
						collectionAliases.Add(nonScalarRtn.CollectionAliases);
						collectionOwners.Add(ownerIndex);
					}
					if (nonScalarRtn.Owner == null)
					{
						resultTypes.Add(nonScalarRtn.Type);
						resultColumnProcessors.Add(new NonScalarResultColumnProcessor(returnableCounter++));
					}

					continue;
				}
					
				throw new HibernateException("unexpected custom query return type : " + rtn.GetType().FullName);
			}

			this.entityPersisters = entityPersisters.Cast<ILoadable>().ToArray();
			this.entityOwners = entityOwners.ToArray();
			this.entityAliases = entityAliases.ToArray();
			this.collectionPersisters = collectionPersisters.ToArray();
			this.collectionOwners = collectionOwners.ToArray();
			this.collectionAliases = collectionAliases.ToArray();
			this.lockModes = lockModes.ToArray();
			this.resultTypes = resultTypes.ToArray();
			this.transformerAliases = transformerAliases.ToArray();
			this.rowProcessor = new ResultRowProcessor(hasScalars, resultColumnProcessors.ToArray());
		}
示例#26
0
 public Task ListCustomQueryAsync(ICustomQuery customQuery, QueryParameters queryParameters, IList results,
                                  CancellationToken cancellationToken)
 {
     return(_session.ListCustomQueryAsync(customQuery, queryParameters, results, cancellationToken));
 }
示例#27
0
 public static QueryResultSet <T> Applying <T>(this ConcurrentBag <T> items, ICustomQuery <T> query) where T : class
 {
     return(items.AsQueryable().Applying(query));
 }
示例#28
0
 public Task <IList <T> > ListCustomQueryAsync <T>(ICustomQuery customQuery, QueryParameters queryParameters,
                                                   CancellationToken cancellationToken)
 {
     return(_session.ListCustomQueryAsync <T>(customQuery, queryParameters, cancellationToken));
 }
示例#29
0
 public void ListCustomQuery(ICustomQuery customQuery, QueryParameters queryParameters, IList results)
 {
     _session.ListCustomQuery(customQuery, queryParameters, results);
 }
示例#30
0
        public CustomLoader(ICustomQuery customQuery, ISessionFactoryImplementor factory) : base(factory)
        {
            sql = customQuery.SQL;
            querySpaces.UnionWith(customQuery.QuerySpaces);
            parametersSpecifications = customQuery.CollectedParametersSpecifications.ToList();

            List <IQueryable>     entitypersisters = new List <IQueryable>();
            List <int>            entityowners     = new List <int>();
            List <IEntityAliases> entityaliases    = new List <IEntityAliases>();

            List <IQueryableCollection> collectionpersisters = new List <IQueryableCollection>();
            List <int> collectionowners = new List <int>();
            List <ICollectionAliases> collectionaliases = new List <ICollectionAliases>();

            List <LockMode> lockmodes = new List <LockMode>();
            List <IResultColumnProcessor> resultColumnProcessors = new List <IResultColumnProcessor>();
            List <IReturn> nonScalarReturnList = new List <IReturn>();
            List <IType>   resulttypes         = new List <IType>();
            List <string>  specifiedAliases    = new List <string>();

            List <bool> includeInResultRowList = new List <bool>();

            int  returnableCounter = 0;
            bool hasScalars        = false;

            foreach (IReturn rtn in customQuery.CustomQueryReturns)
            {
                if (rtn is ScalarReturn)
                {
                    ScalarReturn scalarRtn = (ScalarReturn)rtn;
                    resulttypes.Add(scalarRtn.Type);
                    specifiedAliases.Add(scalarRtn.ColumnAlias);
                    resultColumnProcessors.Add(new ScalarResultColumnProcessor(scalarRtn.ColumnAlias, scalarRtn.Type));
                    includeInResultRowList.Add(true);
                    hasScalars = true;
                }
                else if (rtn is RootReturn)
                {
                    RootReturn rootRtn   = (RootReturn)rtn;
                    IQueryable persister = (IQueryable)factory.GetEntityPersister(rootRtn.EntityName);
                    entitypersisters.Add(persister);
                    lockmodes.Add(rootRtn.LockMode);
                    resultColumnProcessors.Add(new NonScalarResultColumnProcessor(returnableCounter++));
                    nonScalarReturnList.Add(rtn);
                    entityowners.Add(-1);
                    resulttypes.Add(persister.Type);
                    specifiedAliases.Add(rootRtn.Alias);
                    entityaliases.Add(rootRtn.EntityAliases);
                    querySpaces.UnionWith(persister.QuerySpaces);
                    includeInResultRowList.Add(true);
                }
                else if (rtn is CollectionReturn)
                {
                    CollectionReturn     collRtn   = (CollectionReturn)rtn;
                    string               role      = collRtn.OwnerEntityName + "." + collRtn.OwnerProperty;
                    IQueryableCollection persister = (IQueryableCollection)factory.GetCollectionPersister(role);
                    collectionpersisters.Add(persister);
                    lockmodes.Add(collRtn.LockMode);
                    resultColumnProcessors.Add(new NonScalarResultColumnProcessor(returnableCounter++));
                    nonScalarReturnList.Add(rtn);
                    collectionowners.Add(-1);
                    resulttypes.Add(persister.Type);
                    specifiedAliases.Add(collRtn.Alias);
                    collectionaliases.Add(collRtn.CollectionAliases);
                    // determine if the collection elements are entities...
                    IType elementType = persister.ElementType;
                    if (elementType.IsEntityType)
                    {
                        IQueryable elementPersister = (IQueryable)((EntityType)elementType).GetAssociatedJoinable(factory);
                        entitypersisters.Add(elementPersister);
                        entityowners.Add(-1);
                        entityaliases.Add(collRtn.ElementEntityAliases);
                        querySpaces.UnionWith(elementPersister.QuerySpaces);
                    }
                    includeInResultRowList.Add(true);
                }
                else if (rtn is EntityFetchReturn)
                {
                    EntityFetchReturn fetchRtn        = (EntityFetchReturn)rtn;
                    NonScalarReturn   ownerDescriptor = fetchRtn.Owner;
                    int ownerIndex = nonScalarReturnList.IndexOf(ownerDescriptor);
                    entityowners.Add(ownerIndex);
                    lockmodes.Add(fetchRtn.LockMode);
                    IQueryable ownerPersister = DetermineAppropriateOwnerPersister(ownerDescriptor);
                    EntityType fetchedType    = (EntityType)ownerPersister.GetPropertyType(fetchRtn.OwnerProperty);
                    string     entityName     = fetchedType.GetAssociatedEntityName(Factory);
                    IQueryable persister      = (IQueryable)factory.GetEntityPersister(entityName);
                    entitypersisters.Add(persister);
                    nonScalarReturnList.Add(rtn);
                    specifiedAliases.Add(fetchRtn.Alias);
                    entityaliases.Add(fetchRtn.EntityAliases);
                    querySpaces.UnionWith(persister.QuerySpaces);
                    includeInResultRowList.Add(false);
                }
                else if (rtn is CollectionFetchReturn)
                {
                    CollectionFetchReturn fetchRtn        = (CollectionFetchReturn)rtn;
                    NonScalarReturn       ownerDescriptor = fetchRtn.Owner;
                    int ownerIndex = nonScalarReturnList.IndexOf(ownerDescriptor);
                    collectionowners.Add(ownerIndex);
                    lockmodes.Add(fetchRtn.LockMode);
                    IQueryable           ownerPersister = DetermineAppropriateOwnerPersister(ownerDescriptor);
                    string               role           = ownerPersister.EntityName + '.' + fetchRtn.OwnerProperty;
                    IQueryableCollection persister      = (IQueryableCollection)factory.GetCollectionPersister(role);
                    collectionpersisters.Add(persister);
                    nonScalarReturnList.Add(rtn);
                    specifiedAliases.Add(fetchRtn.Alias);
                    collectionaliases.Add(fetchRtn.CollectionAliases);
                    // determine if the collection elements are entities...
                    IType elementType = persister.ElementType;
                    if (elementType.IsEntityType)
                    {
                        IQueryable elementPersister = (IQueryable)((EntityType)elementType).GetAssociatedJoinable(factory);
                        entitypersisters.Add(elementPersister);
                        entityowners.Add(ownerIndex);
                        entityaliases.Add(fetchRtn.ElementEntityAliases);
                        querySpaces.UnionWith(elementPersister.QuerySpaces);
                    }
                    includeInResultRowList.Add(false);
                }
                else
                {
                    throw new HibernateException("unexpected custom query return type : " + rtn.GetType().FullName);
                }
            }

            entityPersisters     = entitypersisters.ToArray();
            entityOwners         = entityowners.ToArray();
            entityAliases        = entityaliases.ToArray();
            collectionPersisters = collectionpersisters.ToArray();
            collectionOwners     = collectionowners.ToArray();
            collectionAliases    = collectionaliases.ToArray();
            lockModes            = lockmodes.ToArray();
            resultTypes          = resulttypes.ToArray();
            transformerAliases   = specifiedAliases.ToArray();
            rowProcessor         = new ResultRowProcessor(hasScalars, resultColumnProcessors.ToArray());
            includeInResultRow   = includeInResultRowList.ToArray();
        }
 public abstract IList <T> ListCustomQuery <T>(ICustomQuery customQuery, QueryParameters queryParameters);