Skip to content

Instantly share code, notes, and snippets.

@davidbarratt
Last active October 12, 2023 00:31
Show Gist options
  • Select an option

  • Save davidbarratt/0b662a2726e0a1738f8856027973741b to your computer and use it in GitHub Desktop.

Select an option

Save davidbarratt/0b662a2726e0a1738f8856027973741b to your computer and use it in GitHub Desktop.

Revisions

  1. davidbarratt revised this gist Oct 12, 2023. No changes.
  2. davidbarratt created this gist Sep 25, 2023.
    58 changes: 58 additions & 0 deletions migrate.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,58 @@
    <?php

    use Drupal\Core\Database\Database;

    $sqlite = Database::getConnection('default');
    $mysql = Database::getConnection('mysql');

    $schema = $sqlite->query("SELECT name FROM sqlite_schema WHERE type ='table' AND name NOT LIKE 'sqlite_%'")->fetchCol();

    $tables = [
    'key_value_expire',
    'old_5deae5_url_alias',
    'old_274b3ataxonomy_term_data',
    'old_274b3ataxonomy_term_field_data',
    'old_274b3ataxonomy_term__parent',
    'migrate_map_my_wordpress_tags',
    'migrate_map_my_wordpress_content_post',
    'migrate_map_my_wordpress_content_page',
    'migrate_map_my_wordpress_comment_post',
    'config_import',
    'config_export',
    'cache_discovery',
    'cache_bootstrap',
    'cachetags',
    'cache_config',
    'cache_default',
    'cache_entity',
    'cache_container',
    'cache_data',
    'cache_render',
    'cache_menu',
    'cache_dynamic_page_cache',
    'cache_page',
    ];

    $skip = array_combine($tables, $tables);

    /**
    * MySQL will autoincrement a zero value which breaks the user migration.
    *
    * @see {@link https://github.com/drupal/drupal/blob/6efb70cd568335e9b292cde6530cc21c2931c448/core/modules/user/src/UserStorage.php#L29-L30 UserStorage.php}
    */
    $sql_mode = $mysql->query("SELECT @@sql_mode;")->fetchField();
    $mysql->query("SET sql_mode = '$sql_mode,NO_AUTO_VALUE_ON_ZERO'");

    foreach ($schema as $table) {
    if (array_key_exists($table, $skip)) {
    print "Skipping {$table}\n";
    continue;
    }
    $rows = $sqlite->query("SELECT * FROM {$table}");
    print "Migrating {$table}\n";
    foreach ($rows as $row) {
    $insert = $mysql->insert($table);
    $insert->fields((array) $row);
    $insert->execute();
    }
    }