in rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetProcessor.java [114:178]
private int addRowToGraph(ResultSetRow row, ResultMetadata resultMetadata) throws SQLException {
int rootRowsCreated = 0;
int objectsCreated = 0;
boolean recursive = row.isRecursive();
Set rootTableNames = metadata.getConfigWrapper().getRootTableNames();
tableObjects.clear();
Iterator tables = row.getAllTableData().iterator();
while (tables.hasNext()) {
TableData rawDataFromRow = (TableData) tables.next();
if (!rawDataFromRow.hasValidPrimaryKey() ||
(rawDataFromRow.hasNullPrimaryKey() && !rawDataFromRow.isTableEmpty())) {//some PK null , but other data present
//continue; - need to throw exception as anyway the result will give a wrong impression
//when any one table in result set misses PK column or has null value in PK column
throw new RuntimeException("Table "+rawDataFromRow.getTableName()+" in query does not include Primary Key "+
"column or has null value in it, can not proceed!");
}
String tableName = rawDataFromRow.getTableName();
DataObject tableObject = registry.get(tableName, rawDataFromRow.getPrimaryKeyValues());
boolean newlyCreated = (tableObject == null);
// check whether row is a new root row
if (newlyCreated) {
objectsCreated++;
// increment root row count
// in case of recursive table, assuming that first table occurrence is the root
if (rootTableNames.contains(tableName) && rawDataFromRow.getIndex() == 0) rootRowsCreated++;
// get whole table data
// (only for non-recursive statements; recursive statements already have the whole table data)
if (!recursive) rawDataFromRow = row.processRowForTable(tableName);
// create data object
tableObject = doMaker.createAndAddDataObject(rawDataFromRow, resultMetadata);
if (this.logger.isDebugEnabled()) {
this.logger.debug("Putting table " + tableName + " with PK "
+ rawDataFromRow.getPrimaryKeyValues() + " into registry");
}
registry.put(tableName, rawDataFromRow.getPrimaryKeyValues(), tableObject);
}
else{
if (this.logger.isDebugEnabled()) {
this.logger.debug("Not Null tableObject");
}
}
if(tableObject != null){
if (this.logger.isDebugEnabled()) {
this.logger.debug("Do not allow any Null tableObject in tableObjects");
}
tableObjects.put(tableName, tableObject, newlyCreated);
}
}
if (objectsCreated == 0) {
// duplicated row
if (this.logger.isDebugEnabled()) {
this.logger.debug("Found duplicated row");
}
} else {
tableObjects.processRelationships();
}
return rootRowsCreated;
}