public function MigrateSourceSQL::fields in Migrate 6.2
Same name and namespace in other branches
- 7.2 plugins/sources/sql.inc \MigrateSourceSQL::fields()
Returns a list of fields available to be mapped from the source query.
Return value
array Keys: machine names of the fields (to be passed to addFieldMapping) Values: Human-friendly descriptions of the fields.
Overrides MigrateSource::fields
File
- plugins/
sources/ sql.inc, line 162 - Define a MigrateSource for importing from Drupal connections
Class
- MigrateSourceSQL
- Implementation of MigrateSource, to handle imports from Drupal connections.
Code
public function fields() {
$fields = array();
$queryFields = $this->query
->getFields();
if ($queryFields) {
// Not much we can do in terms of describing the fields without manual intervention
foreach ($queryFields as $field_name => $field_info) {
// Lower case, because Drupal forces lowercase on fetch
$fields[drupal_strtolower($field_name)] = drupal_strtolower($field_info['table'] . '.' . $field_info['field']);
}
}
else {
// Detect available fields
$detection_query = clone $this->query;
$result = $detection_query
->range(0, 1)
->execute();
$row = $result
->fetchAssoc();
if (is_array($row)) {
foreach ($row as $field_name => $field_value) {
// Lower case, because Drupal forces lowercase on fetch
$fields[drupal_strtolower($field_name)] = t('Example Content: ') . $field_value;
}
}
}
/*
* Handle queries without explicit field lists
* TODO: Waiting on http://drupal.org/node/814312
$info = Database::getConnectionInfo($query->getConnection());
$database = $info['default']['database'];
foreach ($this->query->getTables() as $table) {
if (isset($table['all_fields']) && $table['all_fields']) {
$database = 'plants';
$table = $table['table'];
$sql = 'SELECT column_name
FROM information_schema.columns
WHERE table_schema=:database AND table_name = :table
ORDER BY ordinal_position';
$result = dbtng_query($sql, array(':database' => $database, ':table' => $table));
foreach ($result as $row) {
$fields[drupal_strtolower($row->column_name)] = drupal_strtolower(
$table . '.' . $row->column_name);
}
}
}*/
$expressionFields = $this->query
->getExpressions();
foreach ($expressionFields as $field_name => $field_info) {
// Lower case, because Drupal forces lowercase on fetch
$fields[drupal_strtolower($field_name)] = drupal_strtolower($field_info['alias']);
}
// Any caller-specified fields with the same names as extracted fields will
// override them; any others will be added
if ($this->fields) {
$fields = $this->fields + $fields;
}
return $fields;
}