public void Token( string token, QueryTranslator q ) { if( token != null ) { path += token; } string alias = q.GetPathAlias( path ); if( alias != null ) { Reset( q ); //reset the dotcount (but not the path) currentName = alias; //after reset! currentPropertyMapping = q.GetPropertyMapping( currentName ); if( !ignoreInitialJoin ) { JoinFragment ojf = q.GetPathJoin( path ); join.AddCondition( ojf.ToWhereFragmentString ); //after reset! // we don't need to worry about any condition in the ON clause // here (toFromFragmentString), since anything in the ON condition // is already applied to the whole query } } else if( ".".Equals( token ) ) { dotcount++; } else { if( dotcount == 0 ) { if( !continuation ) { if( !q.IsName( token ) ) { throw new QueryException( "undefined alias or unknown mapping: " + token ); } currentName = token; currentPropertyMapping = q.GetPropertyMapping( currentName ); } } else if( dotcount == 1 ) { if( currentName != null ) { currentProperty = token; } else if( collectionName != null ) { //IQueryableCollection p = q.GetCollectionPersister( collectionRole ); //DoCollectionProperty( token, p, collectionName ); continuation = false; } else { throw new QueryException( "unexpected" ); } } else { // dotcount>=2 // Do the corresponding RHS IType propertyType = PropertyType; if( propertyType == null ) { throw new QueryException( "unresolved property: " + currentProperty ); } if( propertyType.IsComponentType ) { DereferenceComponent( token ); } else if( propertyType.IsEntityType ) { DereferenceEntity( token, (EntityType) propertyType, q ); } else if( propertyType.IsPersistentCollectionType ) { DereferenceCollection( token, ( (PersistentCollectionType) propertyType).Role, q ); } else if( token != null ) { throw new QueryException( "dereferenced: " + currentProperty ); } } } }