protected function registerRecordImpl(array &$records = NULL, $record) {
        parent::registerRecordImpl($records, $record);

        $recordKey = NULL;
        foreach ($this->keyColumnNames as $keyColumnName) {
            $recordKey[] = isset($record[$keyColumnName]) ? $record[$keyColumnName] : NULL;
        }

        $key = ArrayHelper::prepareCompositeKey($recordKey);
        if (isset($records[$key])) {
            if ($this->isColumnValueUnique) {
                throw new IllegalArgumentException(t(
                	'Found several records for the key: %key',
                    array('%key' => ArrayHelper::serialize($recordKey, ', ', TRUE, TRUE))));
            }

            $records[$key][] = $record;
        }
        else {
            if ($this->isColumnValueUnique) {
                $records[$key] = $record;
            }
            else {
                $records[$key][] = $record;
            }
        }

        return TRUE;
    }
    protected function registerRecordImpl(array &$records = NULL, $record) {
        parent::registerRecordImpl($records, $record);

        $value = NULL;
        if (isset($this->columnName)) {
            $value = isset($record[$this->columnName]) ? $record[$this->columnName] : NULL;
        }
        else {
            $count = count($record);
            switch ($count) {
                case 0:
                    // it is the same as NULL
                    break;
                case 1:
                    $value = reset($record);
                    break;
                default:
                    throw new IllegalArgumentException(t('Only one column is supported by this result formatter'));
            }
        }

        if (isset($value)) {
            if ($this->storage == self::STORAGE__KEY) {
                $records[$value] = TRUE;
            }
            elseif ($this->storage == self::STORAGE__VALUE) {
                $records[] = $value;
            }
        }

        return TRUE;
    }
    protected function registerRecordImpl(array &$records = NULL, $record) {
        parent::registerRecordImpl($records, $record);

        if (isset($records)) {
            // trying to find a record which could be reused
            foreach ($records as &$existingRecord) {
                $isRecordMatched = TRUE;
                foreach ($this->formattedGroupByColumnNames as $groupByColumnName) {
                    if (isset($existingRecord[$groupByColumnName])) {
                        if (isset($record[$groupByColumnName])) {
                            if ($existingRecord[$groupByColumnName] !== $record[$groupByColumnName]) {
                                $isRecordMatched = FALSE;
                            }
                        }
                        else {
                            $isRecordMatched = FALSE;
                        }

                    }
                    elseif (isset($record[$groupByColumnName])) {
                        $isRecordMatched = FALSE;
                    }

                    if (!$isRecordMatched) {
                        break;
                    }
                }

                if ($isRecordMatched) {
                    $this->setRecordSubjectColumnValues($existingRecord, $record);
                    return TRUE;
                }
            }
            unset($existingRecord);
        }

        // preparing new record
        $newRecord = NULL;
        foreach ($record as $name => $value) {
            if ($name === $this->formattedEnumerationColumnName) {
                continue;
            }

            if (isset($this->formattedSubjectColumnNames)) {
                if (in_array($name, $this->formattedSubjectColumnNames)) {
                    continue;
                }
            }
            elseif (!in_array($name, $this->formattedGroupByColumnNames)) {
                continue;
            }

            $newRecord[$name] = $value;
        }
        $this->setRecordSubjectColumnValues($newRecord, $record);
        $records[] = $newRecord;

        return TRUE;
    }
    protected function registerRecordImpl(array &$records = NULL, $record) {
        parent::registerRecordImpl($records, $record);

        $formattedRecord = NULL;
        if (isset($this->columnNames)) {
            // using predefined column names
            foreach ($this->columnNames as $index => $columnName) {
                $formattedRecord[$index] = isset($record[$columnName]) ? $record[$columnName] : NULL;
            }
        }
        else {
            // checking if we need to add additional columns
            foreach ($record as $columnName => $columnValue) {
                if (!isset($this->assembledColumnNames[$columnName])) {
                    $index = count($this->assembledColumnNames);

                    // registering new columns
                    $this->assembledColumnNames[$columnName] = $index;
                    // adding NULL values for the column for previous records
                    if (isset($records)) {
                        foreach ($records as &$record) {
                            $record[$index] = NULL;
                        }
                        unset($record);
                    }
                }
            }

            foreach ($this->assembledColumnNames as $columnName => $index) {
                $formattedRecord[$index] = isset($record[$columnName]) ? $record[$columnName] : NULL;
            }
        }

        $records[] = $formattedRecord;

        return TRUE;
    }