public function selectLookupableColumns(RecordMetaData $recordMetaData) {
        $lookupableColumns = NULL;
        foreach ($recordMetaData->getColumns() as $column) {
            if ($column->isPhysical()) {
                $lookupableColumns[$column->columnIndex] = $column;
            }
        }

        return $lookupableColumns;
    }
    protected function checkIfRecordEmpty(RecordMetaData $recordMetaData, array &$record) {
        // checking if the record has values for at least one column
        foreach ($recordMetaData->getColumns() as $column) {
            if (isset($record[$column->columnIndex])) {
                return FALSE;
            }
        }

        return TRUE;
    }
 protected function doAfterProcessingRecordsImpl(RecordMetaData $recordMetaData, $fileProcessedCompletely) {
     // 'fixing' values of some type definition properties
     foreach ($recordMetaData->getColumns(FALSE) as $column) {
         switch ($column->type->applicationType) {
             case CurrencyDataTypeHandler::DATA_TYPE:
                 $defaultCurrencyScale = 2;
                 if (!isset($column->type->scale) || ($column->type->scale < $defaultCurrencyScale)) {
                     $column->type->scale = $defaultCurrencyScale;
                 }
                 break;
             case PercentDataTypeHandler::DATA_TYPE:
                 if (isset($column->type->scale)) {
                     $column->type->scale -= 2;
                     if ($column->type->scale < 0) {
                         $column->type->scale = 0;
                     }
                 }
                 break;
         }
     }
 }
    protected function submitRecordImpl(RecordMetaData $recordMetaData, $recordNumber, array &$record) {
        foreach ($recordMetaData->getColumns(FALSE) as $columnIndex => $column) {
            // we do not need to work with the column. It does not contain unique values
            if (isset($this->columnUniqueValues[$columnIndex]) && ($this->columnUniqueValues[$columnIndex] === FALSE)) {
                continue;
            }

            $unique = FALSE;
            // if the column contains NULL we should not consider it as containing unique values
            if (isset($record[$columnIndex])) {
                $columnValue = $record[$columnIndex];
                if ($this->checkColumnUniqueness($recordMetaData, $columnIndex, $columnValue)) {
                    $this->columnUniqueValues[$columnIndex][$columnValue] = TRUE;
                    $unique = TRUE;
                }
            }
            // we do not need further processing for the column
            if (!$unique) {
                $this->columnUniqueValues[$columnIndex] = FALSE;
            }
        }
    }