PluginProbe
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.7.0
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.7.0
5.13.0 5.12.1 5.12.0 5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 All 83 releases
matomo / app / core / Updater / Migration / Db / AddColumns.php
AddColumns.php
51 lines 1.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Matomo - free/libre analytics platform
5 *
6 * @link https://matomo.org
7 * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
8 */
9 namespace Piwik\Updater\Migration\Db;
10
11 use Piwik\DataAccess\TableMetadata;
12 use Piwik\Db\Schema;
13 /**
14 * @see Factory::addColumns()
15 * @ignore
16 */
17 class AddColumns extends \Piwik\Updater\Migration\Db\Sql
18 {
19 public function __construct($table, $columns, $placeColumnAfter)
20 {
21 $tableMetadata = new TableMetadata();
22 try {
23 $existingColumns = $tableMetadata->getColumns($table);
24 } catch (\Exception $ex) {
25 $existingColumns = [];
26 }
27 $changes = array();
28 foreach ($columns as $columnName => $columnType) {
29 if (in_array($columnName, $existingColumns)) {
30 continue;
31 }
32 $part = sprintf("ADD COLUMN `%s` %s", $columnName, $columnType);
33 if (!empty($placeColumnAfter)) {
34 $part .= sprintf(' AFTER `%s`', $placeColumnAfter);
35 $placeColumnAfter = $columnName;
36 }
37 $changes[] = $part;
38 }
39 if (Schema::getInstance()->supportsComplexColumnUpdates()) {
40 $sql = sprintf("ALTER TABLE `%s` %s", $table, implode(', ', $changes));
41 parent::__construct($sql, static::ERROR_CODE_DUPLICATE_COLUMN);
42 } else {
43 $queriesToPerform = [];
44 foreach ($changes as $change) {
45 $queriesToPerform[] = sprintf("ALTER TABLE `%s` %s", $table, $change);
46 }
47 parent::__construct(implode(';', $queriesToPerform), static::ERROR_CODE_DUPLICATE_COLUMN);
48 }
49 }
50 }
51