Amita,

Definitely, the DAS should enforce the requirement that the PK should
be returned for each table in the results. I would consider this a
case where the DAS should throw an exception.

Brent

On 7/18/07, Amita Vadhavkar <[EMAIL PROTECTED]> wrote:
Sorry for the leng  thy mail....

Tried to check the case when the database has parent-child tables and DAS
SELECT Command may/may not
contain the PKs of the tables. And found some quite confusing cases/results,
which are effectively giving
user a wrong impression of the data in tables.

Looks like there are places where we are allowing partial results, wrong
association in parent and child rows.
As RDB DAS logic revolves around PKs, can we state clearly that
"When Query SELECT does not include PK for a table, the data graph will be
empty for that table"
? i.e. in the below analysis, instead of giving wrong/partial result, at
least consistently give no result?
And make necessary code corrections to adhere to this statement?

Or any alternative approaches?

What DAS C++ is doing for this case? Just curious.
-------------------------------------------------------------------------------------
Say, take below data -
Parent: SINGER(ID, NAME), Child:SONG (ID, TITLE, SINGERID)
Data:
SINGER
ID     NAME
--------------------
1      Jonh
2      Jane

SONG
ID   TITLE       SINGERID
-------------------------------------
10   ABCD          1
20   Lamb           1
30   La ra ra        2

There are total 8 cases that I can see. viz.

No relationship in config
--------------------------------------------------
    parent PK in SEL   child PK in SEL    Result
----------------------------------------------------------------------
[1]   present              present                correct
[2]   present              missing                wrong
[3]   missing              present                wrong
[4]   missing              missing               wrong

Relationship in config
[5]   present            present                 correct
[6]   present            missing                 wrong
[7]   missing            present                 wrong
[8]   missing            missing                wrong
-------------------------------------------------------------------------------------
When relationship is not defined in DAS Config
DAS Client code:
----------------
DAS das = DAS.FACTORY.createDAS(getConfig("cfg.xml"), getConnection());
Command select = das.getCommand("withNoRel-5/6/7/8");
DataObject root = select.executeQuery();
List singers = root.getList("SINGER");
    if(singers != null){
        System.out.println("Singer size:"+singers.size());
        for(int i=0; i<singers.size(); i++){
            System.out.println("SINGER NAME:"+
((DataObject)singers.get(i)).getString("NAME"));
        }

    }

List songs = root.getList("SONG");//as there is no relationship
(explicit/implicit)

    if(songs != null){
        System.out.println("Songs size "+songs .size());
        for(int ii=0; ii<songs.size(); ii++){
            System.out.println("SONG TITLE:"+
((DataObject)songs.get(ii)).getString("TITLE"));
        }
    }

}
-------------------------------------------------------------------------------------
Result:
-------------------------------------------------------------------------------------
[1] SELECT SINGER.ID, SINGER.NAME, SONG.ID, SONG.TITLE FROM SINGER, SONG
WHERE SINGER.ID = SONG.SINGERID
Singer size:2
SINGER NAME:John
SINGER NAME:Jane
Songs size 3
SONG TITLE:ABCD
SONG TITLE:Lamb
SONG TITLE:La ra ra

[2] SELECT SINGER.ID, SINGER.NAME, SONG.TITLE FROM SINGER, SONG WHERE
SINGER.ID = SONG.SINGERID
Singer size:2
SINGER NAME:John
SINGER NAME:Jane
Songs size 1
SONG TITLE:ABCD

[3] SELECT SINGER.NAME, SONG.ID, SONG.TITLE FROM SINGER, SONG WHERE
SINGER.ID = SONG.SINGERID
Singer size:1
SINGER NAME:John
Songs size 3
SONG TITLE:ABCD
SONG TITLE:Lamb
SONG TITLE:La ra ra

[4] SELECT SINGER.NAME, SONG.TITLE FROM SINGER, SONG WHERE SINGER.ID =
SONG.SINGERID
Singer size:1
SINGER NAME:John
Songs size 1
SONG TITLE:ABCD
-------------------------------------------------------------------------------------
When relationship one-to-many (sing) is defined in DAS Config
DAS Client code:
----------------
DAS das = DAS.FACTORY.createDAS(getConfig("cfg.xml"), getConnection());
Command select = das.getCommand("withRel-1/2/3/4");
DataObject root = select.executeQuery();
List singers = root.getList("SINGER");
if(singers != null){
    System.out.println("Singer size:"+singers.size());
    for(int i=0; i<singers.size(); i++){
        System.out.println("SINGER NAME:"+
((DataObject)singers.get(i)).getString("NAME"));

        List songs = ((DataObject)singers.get(i)).getList("sing"); //use
relationship
        if(songs != null){
            System.out.println("Songs size "+songs .size()+" for singer
:"+((DataObject)singers.get(i)).getString("NAME"));
            for(int ii=0; ii<songs.size(); ii++){
                System.out.println("SONG TITLE:"+
((DataObject)songs.get(ii)).getString("TITLE"));
            }
        }

    }
}
-------------------------------------------------------------------------------------
Result:
-------------------------------------------------------------------------------------
[5] SELECT SINGER.ID, SINGER.NAME, SONG.ID, SONG.TITLE FROM SINGER, SONG
WHERE SINGER.ID = SONG.SINGERID
Singer size:2
SINGER NAME:John
Songs size 2 for singer :John
SONG TITLE:ABCD
SONG TITLE:Lamb
SINGER NAME:Jane
Songs size 1 for singer :Jane
SONG TITLE:La ra ra

[6] SELECT SINGER.ID, SINGER.NAME, SONG.TITLE FROM SINGER, SONG WHERE
SINGER.ID = SONG.SINGERID
Singer size:2
SINGER NAME:John
Songs size 0 for singer :John
SINGER NAME:Jane
Songs size 1 for singer :Jane
SONG TITLE:ABCD

[7] SELECT SINGER.NAME, SONG.ID, SONG.TITLE FROM SINGER, SONG WHERE
SINGER.ID = SONG.SINGERID
Singer size:1
SINGER NAME:John
Songs size 3 for singer :John
SONG TITLE:ABCD
SONG TITLE:Lamb
SONG TITLE:La ra ra

[8] SELECT SINGER.NAME, SONG.TITLE FROM SINGER, SONG WHERE SINGER.ID =
SONG.SINGERID
Singer size:1
SINGER NAME:John
Songs size 1 for singer :John
SONG TITLE:ABCD
-------------------------------------------------------------------------------------

Regards,

Amita


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to