Skip to content
This repository has been archived by the owner on Jul 26, 2023. It is now read-only.

Commit

Permalink
v0.1.3: fix bug with the Null and Default
Browse files Browse the repository at this point in the history
  • Loading branch information
yerofey committed Jun 28, 2020
1 parent 022488e commit 4ed8772
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 17 deletions.
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "yerofey/replicator",
"description": "PHP MySQL Replication",
"version": "0.1.2",
"version": "0.1.3",
"type": "library",
"keywords": [
"php",
Expand Down
40 changes: 26 additions & 14 deletions src/Replicator.php
Original file line number Diff line number Diff line change
Expand Up @@ -103,14 +103,14 @@ public function getConnection(string $name): \PDO
*/
public function modifySecondaryTableColumns(\PDO $dbh, string $table_name, array $differences_array)
{
if (count($differences_array, COUNT_RECURSIVE) == 0) {
return null;
}

$helper = $this->helper;

if (!empty($differences_array['removed'])) {
foreach ($differences_array['removed'] as $column_name => $column_data) {
if (empty($column_data)) {
continue;
}

$sql = "ALTER TABLE `{$table_name}` DROP `{$column_name}`;";
$query_status = $helper->sqlQueryStatus($dbh, $sql);

Expand All @@ -124,16 +124,20 @@ public function modifySecondaryTableColumns(\PDO $dbh, string $table_name, array

if (!empty($differences_array['missing'])) {
foreach ($differences_array['missing'] as $column_name => $column_data) {
if (empty($column_data)) {
continue;
}

$sql = "ALTER TABLE `{$table_name}` ADD COLUMN `{$column_name}` " . strtoupper($column_data['type']);
if (!empty($column_data['extra'])) {
$sql .= ' ' . strtoupper($column_data['extra']);
}
if ($column_data['null'] === true) {
if ($column_data['null'] === 1) {
$sql .= ' NULL';
} else {
$sql .= ' NOT NULL';
}
if (!empty($column_data['default'])) {
if (isset($column_data['default'])) {
$sql .= ' DEFAULT ' . $column_data['default'];
}
if (!empty($column_data['charset'])) {
Expand All @@ -158,6 +162,10 @@ public function modifySecondaryTableColumns(\PDO $dbh, string $table_name, array

if (!empty($differences_array['changed'])) {
foreach ($differences_array['changed'] as $column_name => $column_data) {
if (empty($column_data)) {
continue;
}

// clean data
$query_status = $helper->sqlQueryStatus($dbh, "DELETE FROM `{$table_name}`;");

Expand All @@ -166,12 +174,12 @@ public function modifySecondaryTableColumns(\PDO $dbh, string $table_name, array
if (!empty($column_data['extra'])) {
$sql .= ' ' . strtoupper($column_data['extra']);
}
if ($column_data['null'] === true) {
if ($column_data['null'] === 1) {
$sql .= ' NULL';
} else {
$sql .= ' NOT NULL';
}
if (!empty($column_data['default'])) {
if (isset($column_data['default'])) {
$sql .= ' DEFAULT ' . $column_data['default'];
}
if (!empty($column_data['charset'])) {
Expand All @@ -184,6 +192,7 @@ public function modifySecondaryTableColumns(\PDO $dbh, string $table_name, array
$sql .= ' AFTER `' . $column_data['after'] . '`';
}
$sql .= ';';

$query_status = $helper->sqlQueryStatus($dbh, $sql);

if ($query_status) {
Expand All @@ -205,21 +214,21 @@ public function modifySecondaryTableColumns(\PDO $dbh, string $table_name, array
*/
public function modifySecondaryTableIndexes(\PDO $dbh, string $table_name, array $differences_array)
{
if (count($differences_array, COUNT_RECURSIVE) == 0) {
return null;
}

$helper = $this->helper;
$sql_queries_array = [];

foreach ($differences_array as $difference_type => $difference_data) {
if (empty($difference_data)) {
continue;
}

if ($difference_type == 'changed') {
foreach ($difference_data as $index_name => $index_data) {
$sql = "DROP INDEX {$index_name}, ADD ";
if ($index_name == 'PRIMARY') {
$sql .= "PRIMARY ";
} else {
if ($index_data['is_unique'] === true) {
if ($index_data['is_unique'] === 1) {
$sql .= "UNIQUE ";
}
}
Expand All @@ -233,7 +242,7 @@ public function modifySecondaryTableIndexes(\PDO $dbh, string $table_name, array
if ($index_name == 'PRIMARY') {
$sql .= "PRIMARY ";
} else {
if ($index_data['is_unique'] === true) {
if ($index_data['is_unique'] === 1) {
$sql .= "UNIQUE ";
}
}
Expand Down Expand Up @@ -519,12 +528,15 @@ public function run(array $watch_tables = [])
// find differences and apply changes
$tables_columns_diff = $this->findDifferentValues($primary_table_structure, $secondary_table_structure, true);

// update columns
$secondary_table_columns_update = $this->modifySecondaryTableColumns($connections['secondary'], $table_name, $tables_columns_diff);

// compare indexes
$primary_table_indexes = $helper->getTableIndexes($connections['primary'], $table_name);
$secondary_table_indexes = $helper->getTableIndexes($connections['secondary'], $table_name);
$tables_indexes_diff = $this->findDifferentValues($primary_table_indexes, $secondary_table_indexes);

// update indexes
$secondary_table_indexes_update = $this->modifySecondaryTableIndexes($connections['secondary'], $table_name, $tables_indexes_diff);

// checksums (content)
Expand Down
5 changes: 3 additions & 2 deletions src/ReplicatorHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ public function getTableIndexes(\PDO $dbh, string $table_name): array
$result = [];
$rows = $stmt->fetchAll(\PDO::FETCH_ASSOC);
foreach ($rows as $row) {
$result[$row['Key_name']]['is_unique'] = ($row['Non_unique'] == 1) ? false : true;
$result[$row['Key_name']]['is_unique'] = ($row['Non_unique'] === 1) ? 0 : 1;
$result[$row['Key_name']]['columns'][] = $row['Column_name'];
}

Expand Down Expand Up @@ -156,6 +156,7 @@ public function getTableStructure(\PDO $dbh, string $table_name): array
$previous_column_name = '';
$result = [];
$rows = $stmt->fetchAll(\PDO::FETCH_ASSOC);

foreach ($rows as $row) {
// $row_collation = $row['Collation'] ?? '';
// $row_charset = '';
Expand All @@ -167,7 +168,7 @@ public function getTableStructure(\PDO $dbh, string $table_name): array

$result[$row['Field']] = [
'type' => $row['Type'],
'null' => $row['Null'] == 'NO' ? false : true,
'null' => str_replace(' ', '', $row['Null']) === 'NO' ? 0 : 1,
'default' => $row['Default'],
'extra' => $row['Extra'],
// TODO
Expand Down

0 comments on commit 4ed8772

Please sign in to comment.