Example #1
0
File: init.php Project: apolev/fias
    if (!is_dir($path)) {
        $path = Dearchiver::extract($container->getFileDirectory(), $path);
    }
    $directory = new Directory($path);
} else {
    $loader = $container->getInitLoader();
    $directory = $loader->load();
}
// Получаем VersionId поскольку если его не окажется, то сообщение об этом мы получим только в самом конце 15-ти минутного процесса, что не очень приятно.
$versionId = $directory->getVersionId();
DbHelper::runFile($dataBaseName, $dbPath . '/01_tables.sql');
DbHelper::runFile($dataBaseName, $dbPath . '/02_system_data.sql');
$addressObjectsConfig = $container->getAddressObjectsImportConfig();
$addressObjects = new AddressObjectsImporter($db, $addressObjectsConfig['table_name'], $addressObjectsConfig['fields']);
$reader = new XmlReader($directory->getAddressObjectFile(), $addressObjectsConfig['node_name'], array_keys($addressObjectsConfig['fields']), $addressObjectsConfig['filters']);
$addressObjects->import($reader);
$housesConfig = $container->getHousesImportConfig();
if ($housesConfig) {
    $houses = new HousesImporter($db, $housesConfig['table_name'], $housesConfig['fields']);
    $reader = new XmlReader($directory->getHouseFile(), $housesConfig['node_name'], array_keys($housesConfig['fields']));
    $houses->import($reader);
}
DbHelper::runFile($dataBaseName, $dbPath . '/03_indexes.sql');
$addressObjects->modifyDataAfterImport();
if ($housesConfig) {
    $houses->modifyDataAfterImport();
}
DbHelper::runFile($dataBaseName, $dbPath . '/04_constraints.sql');
DbHelper::runFile($dataBaseName, $dbPath . '/05_clean_up.sql');
UpdateLogHelper::addVersionIdToLog($db, $versionId);
Example #2
0
}
$oldVersionId = UpdateLogHelper::getLastVersionId($db);
$newVersionId = $directory->getVersionId();
if ($newVersionId != $oldVersionId + 1) {
    throw new \LogicException("Попытка обновления с версии {$oldVersionId} на версию {$newVersionId}.");
}
$db->execute('SET CONSTRAINTS "address_objects_parent_id_fkey", "houses_parent_id_fkey" DEFERRED');
$housesConfig = $container->getHousesImportConfig();
$addressObjectsConfig = $container->getAddressObjectsImportConfig();
$deletedHouseFile = $directory->getDeletedHouseFile();
if ($deletedHouseFile && $housesConfig) {
    $houseRemover = new Remover($db, $housesConfig['table_name'], $housesConfig['xml_key'], $housesConfig['database_key']);
    $houseRemover->remove(new XmlReader($deletedHouseFile, $housesConfig['node_name'], [$housesConfig['primary_key']], []));
}
$deletedAddressObjectsFile = $directory->getDeletedAddressObjectFile();
if ($deletedAddressObjectsFile) {
    $addressObjectsRemover = new Remover($db, $addressObjectsConfig['table_name'], $addressObjectsConfig['xml_key'], $addressObjectsConfig['database_key']);
    $addressObjectsRemover->remove(new XmlReader($deletedAddressObjectsFile, $addressObjectsConfig['node_name'], [$addressObjectsConfig['xml_key']], []));
}
$addressObjectFields = $addressObjectsConfig['fields'];
$addressObjectFields['PREVID'] = ['name' => 'previous_id', 'type' => 'uuid'];
$addressObjectsUpdater = new AddressObjectsUpdater($db, $addressObjectsConfig['table_name'], $addressObjectFields);
$addressObjectsUpdater->update(new XmlReader($directory->getAddressObjectFile(), $addressObjectsConfig['node_name'], array_keys($addressObjectFields), $addressObjectsConfig['filters']));
if ($housesConfig) {
    $houseFields = $housesConfig['fields'];
    $houseFields['PREVID'] = ['name' => 'previous_id', 'type' => 'uuid'];
    $housesUpdater = new HousesUpdater($db, $housesConfig['table_name'], $houseFields);
    $housesUpdater->update(new XmlReader($directory->getHouseFile(), $housesConfig['node_name'], array_keys($houseFields), []));
}
UpdateLogHelper::addVersionIdToLog($db, $directory->getVersionId());
$db->commit();
Example #3
0
 public function testGetLastVersionId()
 {
     $values = [[12], [18], [180]];
     $this->db->execute('INSERT INTO update_log(version_id) VALUES ?v', [$values]);
     $this->assertEquals(180, UpdateLogHelper::getLastVersionId($this->db));
 }