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 NativeSQLQueryJoinReturn CreateJoinReturn(HbmReturnJoin returnJoinSchema)
        {
            int dot = returnJoinSchema.property.LastIndexOf('.');

            if (dot == -1)
            {
                throw new MappingException(
                          "Role attribute for sql query return [alias=" + returnJoinSchema.alias +
                          "] not formatted correctly {owningAlias.propertyName}"
                          );
            }

            string roleOwnerAlias = returnJoinSchema.property.Substring(0, dot);
            string roleProperty   = returnJoinSchema.property.Substring(dot + 1);

            //FIXME: get the PersistentClass
            IDictionary <string, string[]> propertyResults = BindPropertyResults(returnJoinSchema.alias, null, returnJoinSchema.returnproperty, null);

            return(new NativeSQLQueryJoinReturn(returnJoinSchema.alias, roleOwnerAlias, roleProperty,
                                                propertyResults, // TODO: bindpropertyresults(alias, returnElem)
                                                GetLockMode(returnJoinSchema.lockmode)));
        }