private INativeSQLQueryReturn CreateQueryReturn(object item, int count)
        {
            HbmLoadCollection loadCollectionSchema = item as HbmLoadCollection;
            HbmReturn         returnSchema         = item as HbmReturn;
            HbmReturnJoin     returnJoinSchema     = item as HbmReturnJoin;
            HbmReturnScalar   returnScalarSchema   = item as HbmReturnScalar;

            if (returnScalarSchema != null)
            {
                return(CreateScalarReturn(returnScalarSchema));
            }

            else if (returnSchema != null)
            {
                return(CreateReturn(returnSchema, count));
            }

            else if (returnJoinSchema != null)
            {
                return(CreateJoinReturn(returnJoinSchema));
            }

            else if (loadCollectionSchema != null)
            {
                return(CreateLoadCollectionReturn(loadCollectionSchema));
            }

            else
            {
                return(null);
            }
        }
        private NativeSQLQueryRootReturn CreateReturn(HbmReturn returnSchema, int count)
        {
            String alias = returnSchema.alias;

            if (StringHelper.IsEmpty(alias))
            {
                alias = "alias_" + count;                 // hack/workaround as sqlquery impl depend on having a key.
            }
            if (string.IsNullOrEmpty(returnSchema.@class) && string.IsNullOrEmpty(returnSchema.entityname))
            {
                throw new MappingException("<return alias='" + alias + "'> must specify either a class or entity-name");
            }

            string entityName = returnSchema.entityname ?? GetClassName(returnSchema.@class, mappings);

            LockMode lockMode = GetLockMode(returnSchema.lockmode);

            PersistentClass pc = mappings.GetClass(entityName);
            IDictionary <string, string[]> propertyResults =
                BindPropertyResults(alias, returnSchema.returndiscriminator, returnSchema.returnproperty, pc);

            return(new NativeSQLQueryRootReturn(alias, entityName, propertyResults, lockMode));
        }