예제 #1
0
 /**
  *   Converts a ADORecordSet object into an array of "rows" that
  *   are subarrays of variable => value pairs.
  *
  *   @param ADORecordSet $dbRecordSet    Anything ADOConnection::Execute() can return
  *   @return array
  */
 protected function getVariableArrayFromRecordSet(ADORecordSet $dbRecordSet, $strResultForm)
 {
     $arResult = array();
     switch ($strResultForm) {
         case 'construct':
             $arResultVars = $this->query->getConstructPatternVariables();
             break;
         default:
             $arResultVars = $this->query->getResultVars();
             break;
     }
     if (in_array('*', $arResultVars)) {
         $arResultVars = array_keys($this->sg->arVarAssignments);
     }
     //work around bug in adodb:
     // ADORecordSet_empty does not implement php5 iterators
     if ($dbRecordSet->RowCount() <= 0) {
         return array();
     }
     foreach ($dbRecordSet as $row) {
         $arResultRow = array();
         foreach ($arResultVars as $strVar) {
             $strVarName = (string) $strVar;
             if (!isset($this->sg->arVarAssignments[$strVarName])) {
                 //variable is in select, but not in result (test: q-select-2)
                 $arResultRow[$strVarName] = '';
             } else {
                 $arVarSettings = $this->sg->arVarAssignments[$strVarName];
                 $strMethod = $this->arCreationMethods[$arVarSettings[1]];
                 $arResultRow[$strVarName] = $this->{$strMethod}($dbRecordSet, $arVarSettings[0], $strVar);
             }
         }
         $arResult[] = $arResultRow;
     }
     return $arResult;
 }