function geofield_update_7202 in Geofield 7.2
Drops unused table fields srid, accuracy and source, adds geohash field, populates it.
File
- ./
geofield.install, line 329 - Install, update and uninstall functions for the geofield module.
Code
function geofield_update_7202(&$sandbox) {
foreach (field_info_fields() as $field_name => $field) {
if ($field['type'] != 'geofield') {
// Not a geofield field.
continue;
}
$table_name = _field_sql_storage_tablename($field);
$revision_table_name = _field_sql_storage_revision_tablename($field);
db_add_field($table_name, $field_name . '_geohash', array(
'type' => 'varchar',
'length' => 16,
'not null' => FALSE,
));
db_add_field($revision_table_name, $field_name . '_geohash', array(
'type' => 'varchar',
'length' => 16,
'not null' => FALSE,
));
// Populate geohash column.
geophp_load();
$results = db_query('SELECT ' . $field_name . '_geom AS geom, entity_id, revision_id, delta FROM {' . $table_name . '}');
foreach ($results as $record) {
if (!empty($record->geom)) {
$geom = geoPHP::load($record->geom);
// Truncate geohash to max length.
$geohash_truncated = substr($geom
->out('geohash'), 0, GEOFIELD_GEOHASH_LENGTH);
db_update($table_name)
->fields(array(
$field_name . '_geohash' => $geohash_truncated,
))
->condition('entity_id', $record->entity_id)
->condition('revision_id', $record->revision_id)
->condition('delta', $record->delta)
->execute();
}
}
$results = db_query('SELECT ' . $field_name . '_geom AS geom, entity_id, revision_id, delta FROM {' . $revision_table_name . '}');
foreach ($results as $record) {
if (!empty($record->geom)) {
$geom = geoPHP::load($record->geom);
// Truncate geohash to max length.
$geohash_truncated = substr($geom
->out('geohash'), 0, GEOFIELD_GEOHASH_LENGTH);
db_update($revision_table_name)
->fields(array(
$field_name . '_geohash' => $geohash_truncated,
))
->condition('entity_id', $record->entity_id)
->condition('revision_id', $record->revision_id)
->condition('delta', $record->delta)
->execute();
}
}
$deleted_columns = array(
'srid',
'accuracy',
'source',
);
foreach ($deleted_columns as $column) {
db_drop_field($table_name, $field_name . '_' . $column);
db_drop_field($revision_table_name, $field_name . '_' . $column);
}
}
}