Hello,

In this post, I would like to underline the use of the famous hint ROW_BASED in particular how the Content Server returns and filters the results of a DQL query.
 
A little theory
ROW_BASED – EMC® Documentum® Content Server Version 7.2 – DQL Reference
The ROW_BASED hint changes both the way query results are returned and the syntax rules for the query itself. The ROW_BASED hint forces Content Server to returns query results in a row format, as opposed to an object-based format. The difference is most readily apparent if the query selects values from a repeating property.
In an object-based format, the server returns all selected repeating values for a particular object in one query result object. In a row-based format, the server returns each selected repeating property value in a separate query result object.

 
 
Effects on returned results
For example, by default the following query returns results in an object-based format:

SELECT r_object_id, title, authors FROM dm_document WHERE subject='new_book_proposal';
....
------------------------------------------------------------
r_object_id | title | authors
------------------------------------------------------------
090000015973a2fc | Our Life and Times | Jennie Doe Carol Jones Hortense Smith
0900000123ac12f6 | Life of an Amoeba | James Does Jules Doe

This query returns the authors values as a list of authors in one query result object for each returned object. Each row in the table represents one query result object and each column is one property in the query result objects. There is one query result object (one row) for each object returned by the query.
 
Now, add the ROW_BASED hint to the query:

SELECT r_object_id,title,authors FROM dm_document WHERE subject='new_book_proposal' ENABLE(ROW_BASED);
....
------------------------------------------------------------
r_object_id | title | authors
------------------------------------------------------------
090000015973a2fc | Our Life and Times | Jennie Doe
090000015973a2fc | Our Life and Times | Carol Jones
090000015973a2fc | Our Life and Times | Hortense Smith
0900000123ac12f6 | Life of an Amoeba | James Does
0900000123ac12f6 | Life of an Amoeba | Jules Doe

There is one query result object (one row) for each repeating property value returned.
The returned repeating property values for each object are not aggregated into one result object.
 
 
Filtering of returned results
For example, by default the following query returns the number of authors for the targeted document:

SELECT mydoc1.r_object_id, mydoc1.authors 
FROM dm_document mydoc1 where 
r_object_id = '0900000123ac12f6'
and any mydoc1.authors IN('James Does');
...
------------------------------------------------------------
r_object_id | authors
------------------------------------------------------------
0900000123ac12f6 | James Does, Jules Doe


SELECT mydoc1.r_object_id, count(mydoc1.authors) 
FROM dm_document mydoc1 where 
r_object_id = '0900000123ac12f6'
and any mydoc1.authors IN('James Does')
GROUP by mydoc1.r_object_id;
...
------------------------------------------------------------
r_object_id | count(authors)
------------------------------------------------------------
0900000123ac12f6 | 2

 
Now, add the ROW_BASED hint to the query:

SELECT mydoc1.r_object_id, mydoc1.authors
FROM dm_document mydoc1 where 
r_object_id = '0900000123ac12f6'
and any mydoc1.authors IN('James Does')
ENABLE (ROW_BASED);
...
------------------------------------------------------------
r_object_id | authors
------------------------------------------------------------
0900000123ac12f6 | James Does


SELECT mydoc1.r_object_id, count(mydoc1.authors) 
FROM dm_document mydoc1 where r_object_id = '0900000123ac12f6'
and any mydoc1.authors IN('James Does')
GROUP by mydoc1.r_object_id
ENABLE (ROW_BASED);
...
------------------------------------------------------------
r_object_id | count(authors)
------------------------------------------------------------
0900000123ac12f6 | 1

These queries return the authors values as a list of authors in one query result object (one row) for each repeating property value returned AND keep only the returned repeating property values corresponding to the filter. So it is necessary to be very careful when the use of ROW_BASED hint and processing of returned repeating property values.
 
 
So, in order to process “correctly” the returned repeating property values with use of ROW_BASED hint, a possible solution is to move the filter on repeating attribute from main query into a sub-query:

SELECT mydoc1.r_object_id, count(mydoc1.authors)
FROM dm_document mydoc1 where 
mydoc1.r_object_id = '0900000123ac12f6'
and mydoc1.r_object_id IN(select r_object_id from dm_document mydoc2 where any mydoc2.authors IN('James Does'))
GROUP by mydoc1.r_object_id
ENABLE (ROW_BASED);
...
------------------------------------------------------------
r_object_id | count(authors)
------------------------------------------------------------
0900000123ac12f6 | 2


SELECT mydoc1.r_object_id, mydoc1.authors
FROM dm_document mydoc1 where 
r_object_id = '0900000123ac12f6'
and mydoc1.r_object_id IN(select r_object_id from dm_document mydoc2 where any mydoc2.authors IN('James Does'))
ENABLE (ROW_BASED);
...
------------------------------------------------------------
r_object_id | authors
------------------------------------------------------------
0900000123ac12f6 | James Does
0900000123ac12f6 | Jules Doe


SELECT mydoc1.r_object_id, mydoc1.authors
FROM dm_document mydoc1 where 
r_object_id = '0900000123ac12f6'
and mydoc1.r_object_id IN(select r_object_id from dm_document mydoc2 where any mydoc2.authors IN('James Does'))
;
...
------------------------------------------------------------
r_object_id | authors
------------------------------------------------------------
0900000123ac12f6 | James Does, Jules Doe

 
 

Kind regards,

Huseyin OZVEREN