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()); }
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)); }
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); }