protected function initReportRows()
	{
		$tag = "ReportDrafter: initReportRows()";
		Log::debug("$tag");
		
		/*
		// Build the results table
		*/
		$reportColumnNames = array();
		$reportRows = array();
		
		// convenience pointers
		$query = $this->query;
		$reportBP = $this->reportBlueprint;
		$rowIdKey = $reportBP->getRowIdKey();
		
		try
		{
			$sql = new DatabaseQuery($query->toString());
			$sql->doQuery();
			
			// determine which fields to render
			$fields = $reportBP->fields();
			if(count($fields) == 0)
			{
				// use sql result meta data for fields
				Log::debug("$tag: Using meta data to determine fields");
				$fields = array();
				$num_cols = $sql->get_num_columns();
				for($i=0; $i<$num_cols; $i++)
				{
					$col_name = $sql->get_column_name($i);
					
					// create a new ListField for this column
					$f = new Field($col_name);
					$f->setDisplayName($col_name);
					$fields[] = $f;
				}
			}
			
			$num_rows = $sql->get_num_rows();
			if($num_rows > 0)
			{
				for($i=0; $i<$num_rows; $i++)
				{
					$row = $sql->get_next_row();
					$id = $row->$rowIdKey;
					
					$reportRow = new ListRow($id);
					
					foreach($fields as $f)
					{
						// NOTE: treat "f" as a generic Field
						$key = $f->getKey();
						
						// add to list of column names
						$reportColumnNames["$key"] = $f->getDisplayName();
						
						// retrieve value for field
						$value = $row->$key;
						
						/*
						// FORMAT VALUES
						*/
						
						if( (!empty($value)) || ($value=="0") )
						{
							// format by report blueprint format string
							if(count($reportBP->fields()) > 0)
							{
								try
								{
									$reportField = $reportBP->get($key);
									$format = $reportField->getFormat();
									
									if(!empty($format))
									{
										if("password" == strtolower($format))
										{
											$value = "********";
										}
									} // END: if(!empty($format))
								}
								catch(Exception $e)
								{
									// Report Blueprint does not contain a field for current key
									// Continue...
								}
							}
						
						} // END: if( (!empty($value) || ($value=="0") )
						
						// Look for additional column attributes from report blueprint
						$href = null;
						if(count($reportBP->fields()) > 0)
						{
							try
							{
								$reportField = $reportBP->get($key);
								$href = $reportField->getHref();
								
								// replace references to report fields with their values
								if(!empty($href)) { $href = $this->replaceKeys($href, $row); }
								
							}
							catch(Exception $e)
							{
								// Report Blueprint does not contain a field for current key
								// Continue...
							}						
						}
						
						// add a new report column to the report row
						$reportRow->addColumn($key, $value, $href);
						
					} // END: foreach($fields as $f)
					
					$reportRows[$i] = $reportRow;
					
				} // END: for($i=0; $i<$num_rows; $i++)
				
				$this->reportColumnNames = $reportColumnNames;
				$this->reportRows = $reportRows;
			
			} // END: if($num_rows > 0)
			
		}
		catch(Exception $e)
		{
			throw($e);
		}
	} // END: protected function initReportRows()