Ejemplo n.º 1
0
        public void NativeSQLQueryJoinReturnHashCodeByAlias()
        {
            var sr1 = new NativeSQLQueryJoinReturn("myAlias", "owner", "ownerProp", null, LockMode.None);
            var sr2 = new NativeSQLQueryJoinReturn("myAlias", "owner", "ownerProp", null, LockMode.None);

            Assert.AreEqual(sr1.GetHashCode(), sr2.GetHashCode());
        }
Ejemplo n.º 2
0
        public ResultAliasContext Process()
        {
            // first, break down the returns into maps keyed by alias
            // so that role returns can be more easily resolved to their owners
            for (int i = 0; i < queryReturns.Length; i++)
            {
                if (queryReturns[i] is NativeSQLQueryNonScalarReturn)
                {
                    NativeSQLQueryNonScalarReturn rtn = (NativeSQLQueryNonScalarReturn)queryReturns[i];
                    alias2Return[rtn.Alias] = rtn;
                    if (rtn is NativeSQLQueryJoinReturn)
                    {
                        NativeSQLQueryJoinReturn roleReturn = (NativeSQLQueryJoinReturn)queryReturns[i];
                        alias2OwnerAlias[roleReturn.Alias] = roleReturn.OwnerAlias;
                    }
                }
            }

            // Now, process the returns
            for (int i = 0; i < queryReturns.Length; i++)
            {
                ProcessReturn(queryReturns[i]);
            }

            return(new ResultAliasContext(this));
        }
Ejemplo n.º 3
0
        public void NativeSQLQueryJoinReturnEqualsByAlias()
        {
            var sr1 = new NativeSQLQueryJoinReturn("myAlias", "owner", "ownerProp", null, LockMode.None);
            var sr2 = new NativeSQLQueryJoinReturn("myAlias", "owner", "ownerProp", null, LockMode.None);

            Assert.AreEqual(sr1, sr2);
        }
        private void ProcessJoinReturn(NativeSQLQueryJoinReturn fetchReturn)
        {
            string alias = fetchReturn.Alias;

            if (alias2Persister.ContainsKey(alias) || alias2CollectionPersister.ContainsKey(alias))
            {
                // already been processed...
                return;
            }

            string ownerAlias = fetchReturn.OwnerAlias;

            // Make sure the owner alias is known...
            if (!alias2Return.ContainsKey(ownerAlias))
            {
                throw new HibernateException(string.Format("Owner alias [{0}] is unknown for alias [{1}]", ownerAlias, alias));
            }

            // If this return's alias has not been processed yet, do so b4 further processing of this return
            if (!alias2Persister.ContainsKey(ownerAlias))
            {
                ProcessReturn(alias2Return[ownerAlias]);
            }

            ISqlLoadable ownerPersister = alias2Persister[ownerAlias];
            IType        returnType     = ownerPersister.GetPropertyType(fetchReturn.OwnerProperty);

            if (returnType.IsCollectionType)
            {
                string role = ownerPersister.EntityName + '.' + fetchReturn.OwnerProperty;
                AddCollection(role, alias, fetchReturn.PropertyResultsMap);
            }
            else if (returnType.IsEntityType)
            {
                EntityType   eType            = (EntityType)returnType;
                string       returnEntityName = eType.GetAssociatedEntityName();
                ISqlLoadable persister        = GetSQLLoadable(returnEntityName);
                AddPersister(alias, fetchReturn.PropertyResultsMap, persister);
            }
        }
        public IList GenerateCustomReturns(bool queryHadAliases)
        {
            IList customReturns = new List <object>();
            IDictionary <string, object> customReturnsByAlias = new Dictionary <string, object>();

            for (int i = 0; i < queryReturns.Length; i++)
            {
                if (queryReturns[i] is NativeSQLQueryScalarReturn)
                {
                    NativeSQLQueryScalarReturn rtn = (NativeSQLQueryScalarReturn)queryReturns[i];
                    customReturns.Add(new ScalarReturn(rtn.Type, rtn.ColumnAlias));
                }
                else if (queryReturns[i] is NativeSQLQueryRootReturn)
                {
                    NativeSQLQueryRootReturn rtn = (NativeSQLQueryRootReturn)queryReturns[i];
                    string         alias         = rtn.Alias;
                    IEntityAliases entityAliases;
                    if (queryHadAliases || HasPropertyResultMap(alias))
                    {
                        entityAliases =
                            new DefaultEntityAliases(entityPropertyResultMaps[alias], alias2Persister[alias], alias2Suffix[alias]);
                    }
                    else
                    {
                        entityAliases =
                            new ColumnEntityAliases(entityPropertyResultMaps[alias], alias2Persister[alias], alias2Suffix[alias]);
                    }
                    RootReturn customReturn = new RootReturn(alias, rtn.ReturnEntityName, entityAliases, rtn.LockMode);
                    customReturns.Add(customReturn);
                    customReturnsByAlias[rtn.Alias] = customReturn;
                }
                else if (queryReturns[i] is NativeSQLQueryCollectionReturn)
                {
                    NativeSQLQueryCollectionReturn rtn = (NativeSQLQueryCollectionReturn)queryReturns[i];
                    string alias = rtn.Alias;
                    ISqlLoadableCollection persister = alias2CollectionPersister[alias];
                    bool isEntityElements            = persister.ElementType.IsEntityType;
                    ICollectionAliases collectionAliases;
                    IEntityAliases     elementEntityAliases = null;
                    if (queryHadAliases || HasPropertyResultMap(alias))
                    {
                        collectionAliases =
                            new GeneratedCollectionAliases(collectionPropertyResultMaps[alias], alias2CollectionPersister[alias],
                                                           alias2CollectionSuffix[alias]);
                        if (isEntityElements)
                        {
                            elementEntityAliases =
                                new DefaultEntityAliases(entityPropertyResultMaps[alias], alias2Persister[alias], alias2Suffix[alias]);
                        }
                    }
                    else
                    {
                        collectionAliases =
                            new ColumnCollectionAliases(collectionPropertyResultMaps[alias], alias2CollectionPersister[alias]);
                        if (isEntityElements)
                        {
                            elementEntityAliases =
                                new ColumnEntityAliases(entityPropertyResultMaps[alias], alias2Persister[alias], alias2Suffix[alias]);
                        }
                    }
                    CollectionReturn customReturn =
                        new CollectionReturn(alias, rtn.OwnerEntityName, rtn.OwnerProperty, collectionAliases, elementEntityAliases,
                                             rtn.LockMode);
                    customReturns.Add(customReturn);
                    customReturnsByAlias[rtn.Alias] = customReturn;
                }
                else if (queryReturns[i] is NativeSQLQueryJoinReturn)
                {
                    NativeSQLQueryJoinReturn rtn = (NativeSQLQueryJoinReturn)queryReturns[i];
                    string                 alias = rtn.Alias;
                    FetchReturn            customReturn;
                    NonScalarReturn        ownerCustomReturn = (NonScalarReturn)customReturnsByAlias[rtn.OwnerAlias];
                    ISqlLoadableCollection persister;
                    if (alias2CollectionPersister.TryGetValue(alias, out persister))
                    {
                        bool isEntityElements = persister.ElementType.IsEntityType;
                        ICollectionAliases collectionAliases;
                        IEntityAliases     elementEntityAliases = null;
                        if (queryHadAliases || HasPropertyResultMap(alias))
                        {
                            collectionAliases =
                                new GeneratedCollectionAliases(collectionPropertyResultMaps[alias], persister, alias2CollectionSuffix[alias]);
                            if (isEntityElements)
                            {
                                elementEntityAliases =
                                    new DefaultEntityAliases(entityPropertyResultMaps[alias], alias2Persister[alias], alias2Suffix[alias]);
                            }
                        }
                        else
                        {
                            collectionAliases = new ColumnCollectionAliases(collectionPropertyResultMaps[alias], persister);
                            if (isEntityElements)
                            {
                                elementEntityAliases =
                                    new ColumnEntityAliases(entityPropertyResultMaps[alias], alias2Persister[alias], alias2Suffix[alias]);
                            }
                        }
                        customReturn =
                            new CollectionFetchReturn(alias, ownerCustomReturn, rtn.OwnerProperty, collectionAliases, elementEntityAliases,
                                                      rtn.LockMode);
                    }
                    else
                    {
                        IEntityAliases entityAliases;
                        if (queryHadAliases || HasPropertyResultMap(alias))
                        {
                            entityAliases =
                                new DefaultEntityAliases(entityPropertyResultMaps[alias], alias2Persister[alias], alias2Suffix[alias]);
                        }
                        else
                        {
                            entityAliases =
                                new ColumnEntityAliases(entityPropertyResultMaps[alias], alias2Persister[alias], alias2Suffix[alias]);
                        }
                        customReturn = new EntityFetchReturn(alias, entityAliases, ownerCustomReturn, rtn.OwnerProperty, rtn.LockMode);
                    }
                    customReturns.Add(customReturn);
                    customReturnsByAlias[alias] = customReturn;
                }
            }
            return(customReturns);
        }