OK, I have tried to generalize it, without changing anything significant.

Basically, the legacy architecture has a Student entity/table, a Person 
entity/table (which represents Adults only, NOT students), a StudentPerson 
entity/table which is essentially a join containing extra info not currently 
relevant.  There is also a Family entity/table and each Student and Person has 
a to-one to Family.  

Not all Person/Student combinations in a Family have a corresponding row in 
StudentPerson, hence to dual path to find these Persons.

The code:

    public void setSelectedSchools(NSMutableArray<School> newSelectedSchools) {
        this.selectedSchools = newSelectedSchools;
                
        if (newSelectedSchools == null || newSelectedSchools.count() == 0) {
            newSelectedSchools = schools().mutableClone();
        }
        // this should get persons who have students in the schools listed
        // i.e. family.students.activeSchools || 
studentPersons.student.activeSchools
        EOQualifier schoolViaStudentPersonQualifier = 
Person.STUDENT_PERSONS.dot(
                
StudentPerson.STUDENT.dot(Student.SCHOOLS)).in(newSelectedSchools);
        EOQualifier schoolViaFamilyQualifier = Person.FAMILY.dot(
                Family.STUDENTS.dot(Student.SCHOOLS)).in(newSelectedSchools);
        EOQualifier schoolQualifier = new ERXOrQualifier(new 
NSArray<EOQualifier>(schoolViaFamilyQualifier, 
schoolViaStudentPersonQualifier));
        
        displayGroup().setQualifierForKey(schoolQualifier, schoolQualifierKey);

    }

and:

    public void setRelatedStudentsByStudentFirstName(String studentFirst){
        relatedStudentsByStudentFirstName = studentFirst;
        EOQualifier relatedStudentsByStudentFirstNameQualifier;
        if(studentFirst == null || studentFirst.equals("")){
            displayGroup().setQualifierForKey(null, 
relatedStudentsByStudentFirstNameQualifierKey);
        } else {
            NSMutableArray<EOQualifier>qualifiers = new 
NSMutableArray<EOQualifier>();
            
qualifiers.add(Person.STUDENT_PERSONS.dot(StudentPerson.STUDENT).dot(Student.FIRSTNAME).like(studentFirst));
            
qualifiers.add(Person.FAMILY.dot(Family.STUDENTS).dot(Student.FIRSTNAME).like(studentFirst));

            relatedStudentsByStudentFirstNameQualifier = new 
ERXOrQualifier(qualifiers);   
            
displayGroup().setQualifierForKey(relatedStudentsByStudentFirstNameQualifier, 
relatedStudentsByStudentFirstNameQualifierKey);
        }
       
    }

>From the log (formatted):

DG qualifier: 
(
        (
                (
                        (family.students.schools = 
                                (School)'<School pk:"1">') 
                        or (family.students.schools = 
                                (School)'<School pk:"2">') 
                        or (family.students.schools = 
                                (School)'<School pk:"3">') 
                        or (family.students.schools = 
                                (School)'<School pk:"4">') 
                        or (family.students.schools = 
                                (School)'<School pk:"5">') 
                        or (family.students.schools = 
                                (School)'<School pk:"6">') 
                        or (family.students.schools = 
                                (School)'<School pk:"7">') 
                        or (family.students.schools.Schools = 
                                (School)'<School pk:"8">') 
                        or (family.students.schools = 
                                (School)'<School pk:"9">') 
                        or (family.students.schools = 
                                (School)'<School pk:"10">')
                ) 
                or 
                (
                        (StudentPersons.Student.Schools = 
                                (School)'<School pk:"1">') 
                        or (StudentPersons.Student.Schools = 
                                (School)'<School pk:"2">') 
                        or (StudentPersons.Student.Schools = 
                                (School)'<School pk:"3">') 
                        or (StudentPersons.Student.Schools = 
                                (School)'<School pk:"4">') 
                        or (StudentPersons.Student.Schools = 
                                (School)'<School pk:"5">') 
                        or (StudentPersons.Student.Schools = 
                                (School)'<School pk:"6">') 
                        or (StudentPersons.Student.Schools = 
                                (School)'<School pk:"7">') 
                        or (StudentPersons.Student.Schools = 
                                (School)'<School pk:"8">') 
                        or (StudentPersons.Student.Schools = 
                                (School)'<School pk:"9">') 
                        or (StudentPersons.Student.Schools = 
                                (School)'<School pk:"10">')
                )
        ) 
        and 
        (
                (StudentPersons.Student.firstname like 'Hillary') 
                or (samsFamily.Students.firstname like 'Hillary')
        )
)


On Dec 28, 2009, at 12:53 PM, Chuck Hill wrote:

> 
> On Dec 28, 2009, at 9:06 AM, Andrew R. Kinnie wrote:
> 
>> As a followup, I get the correct number of rows if I comment out any code 
>> which sorts the displayGroup using attributes other than the id column of 
>> the entity populating the displayGroup.
>> 
>> Without sorting, and with setUsesDistinct(true); I get 23 rows.  Navigation 
>> works.
>> 
>> If I then try to sort the displayGroup (using in this case the entity's 
>> lastname then firstname attributes) I get the oracle error, because the 
>> inner most select statement generated by Wonder/EOF has a distinct, but is 
>> trying to orderby attributes that are in the outermost select but not the 
>> inner most select where the distinct statement is.
>> 
>> Is this a bug in Wonder where setUsesDistinct(true); does not work with 
>> sorting?
>> 
>> Am I missing something?
> 
> 
> What is the qualifier?  If you are using one of the Wonder qualifiers, you 
> may have found a bug or may be using them incorrectly.
> 
> 
> Chuck
> 
> -- 
> Chuck Hill             Senior Consultant / VP Development
> 
> Practical WebObjects - for developers who want to increase their overall 
> knowledge of WebObjects or who are trying to solve specific problems.
> http://www.global-village.net/products/practical_webobjects
> 
> 
> 
> 
> 
> 
> 

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to