private int addRowToGraph()

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;

    }