patch.2017-11-22.BI_audit_ALL_ref_bugfix.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/usr/bin/env php
  2. <?php
  3. error_reporting(E_ALL & ~E_NOTICE);
  4. $_SERVER['SERVER_NAME'] = gethostname();
  5. require("/Library/Server/Web/Data/Sites/Default/SE/se-lib/bootstrap.php");
  6. //require("/Library/Server/Web/Data/Sites/Default/dev-bzyk/se-lib/bootstrap.php");
  7. date_default_timezone_set('Europe/Warsaw');
  8. $refTablesConf = [
  9. 'BI_audit_CEIDG' => [
  10. 'refTablesTo' => [
  11. 'BI_audit_CEIDG_pelnomocnicy',
  12. 'BI_audit_CEIDG_powiazania',
  13. ],
  14. 'base' => 1,
  15. ],
  16. 'BI_audit_ENERGA_PRACOWNICY' => [
  17. 'refTablesTo' => [
  18. 'BI_audit_ENERGA_PRACOWNICY_adresy',
  19. ],
  20. 'base' => 0,
  21. ],
  22. 'BI_audit_KRS' => [
  23. 'refTablesTo' => [
  24. 'BI_audit_KRS_address',
  25. 'BI_audit_KRS_company',
  26. 'BI_audit_KRS_person',
  27. ],
  28. 'base' => 1,
  29. ],
  30. 'BI_audit_MSIG' => [
  31. 'refTablesTo' => [
  32. 'BI_audit_MSIG_address',
  33. 'BI_audit_MSIG_company',
  34. 'BI_audit_MSIG_person',
  35. ],
  36. 'base' => 1,
  37. ],
  38. ];
  39. $sourceTables = ['BI_audit_ENERGA_PRACOWNICY'];
  40. $queries = [];
  41. $tables = [];
  42. foreach ($refTablesConf as $refTableFrom => $refTableConf) {
  43. $tables[] = $refTableFrom;
  44. foreach ($refTableConf['refTablesTo'] as $refTableTo) {
  45. $tables[] = $refTableTo;
  46. $refTable = ACL::getRefTable("default_db/{$refTableFrom}/{$refTableFrom}", "default_db__x3A__{$refTableTo}:{$refTableTo}");
  47. $queries["Inserting refs for {$refTableFrom} => {$refTableTo}"] = "insert into `BI_audit_ALL_ref` (`ID1`, `ID2`, `RELATION_ID`, `BASE`) select `all1`.`ID`, `all2`.`ID`, `rel`.`ID`, {$refTableConf['base']} from `BI_audit_ALL` as `all1` join `{$refTable}` as `ref` on `all1`.`REMOTE_TABLE` = '{$refTableFrom}' and `all1`.`REMOTE_ID` = `ref`.`PRIMARY_KEY` and `ref`.`A_STATUS` = 'NORMAL' join `BI_audit_ALL` as `all2` on `all2`.`REMOTE_TABLE` = '{$refTableTo}' and `ref`.`REMOTE_PRIMARY_KEY` = `all2`.`REMOTE_ID` join `BI_audit_ALL_ref_RELATIONS` `rel` on `all1`.`REMOTE_TABLE` = `rel`.`RELATION`";
  48. if (!in_array($refTableFrom, $sourceTables)) $queries["Inserting refs for {$refTableTo} => {$refTableFrom}"] = "insert into `BI_audit_ALL_ref` (`ID1`, `ID2`, `RELATION_ID`, `BASE`) select `all2`.`ID`, `all1`.`ID`, `rel`.`ID`, {$refTableConf['base']} from `BI_audit_ALL` as `all1` join `{$refTable}` as `ref` on `all1`.`REMOTE_TABLE` = '{$refTableFrom}' and `all1`.`REMOTE_ID` = `ref`.`PRIMARY_KEY` and `ref`.`A_STATUS` = 'NORMAL' join `BI_audit_ALL` as `all2` on `all2`.`REMOTE_TABLE` = '{$refTableTo}' and `ref`.`REMOTE_PRIMARY_KEY` = `all2`.`REMOTE_ID` join `BI_audit_ALL_ref_RELATIONS` `rel` on `all2`.`REMOTE_TABLE` = `rel`.`RELATION`";
  49. }
  50. }
  51. $queries = array_merge([
  52. "Disabling keys for refs table" => "alter table `BI_audit_ALL_ref` disable keys",
  53. "Deleting refs" => "delete from `ref` using `BI_audit_ALL_ref` as `ref` join `BI_audit_ALL_ref_RELATIONS` as `rel` on `ref`.`RELATION_ID` = `rel`.`ID` where `rel`.`RELATION` in ('" . implode("', '", $tables) . "')",
  54. "Optimizing refs table" => "optimize table `BI_audit_ALL_ref`",
  55. ], $queries, [
  56. "Enabling keys for refs table" => "alter table `BI_audit_ALL_ref` enable keys",
  57. ]);
  58. foreach ($queries as $desc => $query) {
  59. echo "{$desc}\nSQL: {$query}\n";
  60. DB::getPDO()->query($query);
  61. echo "Done.\n\n";
  62. }
  63. echo "Finished.\n";