_mediamosa_migration_mediafile_metadata()Migrate the mediafile metadata table.
sites/all/modules/mediamosa_migration/mediamosa_migration.inc, line 568
<?php
function _mediamosa_migration_mediafile_metadata() {
// Get the database name.
$db_name = _mediamosa_migration_get_memo_data_db();
// Get the current mode, which might be empty;
$old_mode = db_query('SELECT @@SESSION.sql_mode')->fetchField();
// Turn off problems with empty dates.
db_query("SET SESSION sql_mode = 'ALLOW_INVALID_DATES'");
// Remove the unique index on mediafile_id.
db_query("ALTER TABLE {mediamosa_asset_mediafile_metadata} DROP INDEX uni_mediafileid");
// Add SECOND, so SECONDS and SECOND.
db_change_field(
mediamosa_asset_mediafile_metadata_db::TABLE_NAME,
mediamosa_asset_mediafile_metadata_db::STILL_TYPE,
mediamosa_asset_mediafile_metadata_db::STILL_TYPE,
array(
'description' => t('The type of the still.'),
'type' => "enum('" . implode("','", array(mediamosa_asset_mediafile_metadata_db::STILL_TYPE_NONE, mediamosa_asset_mediafile_metadata_db::STILL_TYPE_NORMAL, 'SECONDS', mediamosa_asset_mediafile_metadata_db::STILL_TYPE_SECOND, mediamosa_asset_mediafile_metadata_db::STILL_TYPE_SCENE, mediamosa_asset_mediafile_metadata_db::STILL_TYPE_PICTURE)) . "')",
'mysql_type' => "enum('" . implode("','", array(mediamosa_asset_mediafile_metadata_db::STILL_TYPE_NONE, mediamosa_asset_mediafile_metadata_db::STILL_TYPE_NORMAL, 'SECONDS', mediamosa_asset_mediafile_metadata_db::STILL_TYPE_SECOND, mediamosa_asset_mediafile_metadata_db::STILL_TYPE_SCENE, mediamosa_asset_mediafile_metadata_db::STILL_TYPE_PICTURE)) . "')",
'default' => mediamosa_asset_mediafile_metadata_db::STILL_TYPE_NONE,
)
);
// The mediamosa_asset_mediafile table should be empty (its checked as requirement).
/**
* Copy from 1.x to 2.x
* Columns dropped;
* -
* Columns renamed;
* mediafile_id = mediafile_id
*/
db_query(strtr(
"INSERT INTO {mediamosa_asset_mediafile_metadata}
(
metadata_id,
mediafile_id,
video_codec,
colorspace,
width,
height,
fps,
audio_codec,
sample_rate,
channels,
file_duration,
container_type,
bitrate,
bpp,
filesize,
mime_type,
created,
changed,
is_hinted,
is_inserted_md,
still_time_code,
still_order,
still_type,
still_format,
still_default
) (SELECT
mfd.metadata_id,
mfd.mediafile_id,
mfd.video_codec,
mfd.colorspace,
mfd.width,
mfd.height,
mfd.fps,
mfd.audio_codec,
mfd.sample_rate,
mfd.channels,
mfd.file_duration,
mfd.container_type,
mfd.bitrate,
mfd.bpp,
mfd.filesize,
mfd.mime_type,
mfd.created,
mfd.changed,
mfd.is_hinted,
mfd.is_inserted_md,
mfd.still_time_code,
mfd.still_order,
mfd.still_type,
mfd.still_format,
mfd.still_default
FROM #db_name.{mediafile_metadata} AS mfd JOIN #db_name.{mediafile} AS mf USING(mediafile_id))",
array(
'#db_name' => $db_name
))
);
// Update still_type_2 SECONDS to SECOND.
db_query("UPDATE {mediamosa_asset_mediafile_metadata} SET still_type = 'SECOND' WHERE still_type = 'SECONDS'");
// Remove SECONDS.
db_change_field(
mediamosa_asset_mediafile_metadata_db::TABLE_NAME,
mediamosa_asset_mediafile_metadata_db::STILL_TYPE,
mediamosa_asset_mediafile_metadata_db::STILL_TYPE,
array(
'description' => t('The type of the still.'),
'type' => "enum('" . implode("','", array(mediamosa_asset_mediafile_metadata_db::STILL_TYPE_NONE, mediamosa_asset_mediafile_metadata_db::STILL_TYPE_NORMAL, mediamosa_asset_mediafile_metadata_db::STILL_TYPE_SECOND, mediamosa_asset_mediafile_metadata_db::STILL_TYPE_SCENE, mediamosa_asset_mediafile_metadata_db::STILL_TYPE_PICTURE)) . "')",
'mysql_type' => "enum('" . implode("','", array(mediamosa_asset_mediafile_metadata_db::STILL_TYPE_NONE, mediamosa_asset_mediafile_metadata_db::STILL_TYPE_NORMAL, mediamosa_asset_mediafile_metadata_db::STILL_TYPE_SECOND, mediamosa_asset_mediafile_metadata_db::STILL_TYPE_SCENE, mediamosa_asset_mediafile_metadata_db::STILL_TYPE_PICTURE)) . "')",
'default' => mediamosa_asset_mediafile_metadata_db::STILL_TYPE_NONE,
)
);
// Now copy all changed dates to overwrite empty created dates.
db_query("UPDATE {mediamosa_asset_mediafile_metadata} SET created = changed WHERE created = '0000-00-00 00:00:00' AND changed != '0000-00-00 00:00:00'");
// Now make sure created is not empty.
db_query("UPDATE {mediamosa_asset_mediafile_metadata} SET created = NOW() WHERE created = '0000-00-00 00:00:00'");
// Now make sure changed is not empty.
db_query("UPDATE {mediamosa_asset_mediafile_metadata} SET changed = NOW() WHERE changed = '0000-00-00 00:00:00'");
// Now remove the double metadata.
// Select
$tmp_table_name = db_query_temporary("SELECT COUNT(*) AS total, MIN(metadata_id) AS metadata_id FROM {mediamosa_asset_mediafile_metadata} GROUP BY mediafile_id HAVING total > 1");
$row_count = db_query("SELECT COUNT(metadata_id) FROM " . $tmp_table_name)->fetchField();
// Might deadlock, so lets protect.
$max = 100;
while ($row_count && --$max) {
// Delete the doubles we found.
db_query("DELETE FROM {mediamosa_asset_mediafile_metadata} WHERE metadata_id IN (SELECT metadata_id FROM " . $tmp_table_name . ")");
// Now query again, because there can be more than 2, 3, 4, etc rows of each double.
$tmp_table_name = db_query_temporary("SELECT COUNT(*) AS total, MIN(metadata_id) AS metadata_id FROM {mediamosa_asset_mediafile_metadata} GROUP BY mediafile_id HAVING total > 1");
$row_count = db_query("SELECT COUNT(metadata_id) FROM " . $tmp_table_name)->fetchField();
}
// Remove the unique index on mediafile_id.
db_query("ALTER TABLE {mediamosa_asset_mediafile_metadata} ADD UNIQUE KEY `uni_mediafileid` (`mediafile_id`)");
// Back to old session mode.
db_query(strtr("SET SESSION sql_mode = '#old_mode'", array('#old_mode' => $old_mode)));
}
?>