protected function build_replica_sets_for_test()
 {
     dbsteward::$old_database = new SimpleXMLElement($this->oldxml);
     dbsteward::$new_database = new SimpleXMLElement($this->newxml);
     pgsql8_diff::$new_table_dependency = xml_parser::table_dependency_order(dbsteward::$new_database);
     pgsql8_diff::$old_table_dependency = xml_parser::table_dependency_order(dbsteward::$old_database);
     $old_replica_set = pgsql8::get_slony_replica_sets(dbsteward::$old_database);
     $new_replica_set = pgsql8::get_slony_replica_sets(dbsteward::$new_database);
     $slony_prefix = dirname(__FILE__) . '/../testdata/slonyid_diff_test';
     pgsql8::build_upgrade_slonik_replica_set(dbsteward::$old_database, dbsteward::$new_database, $old_replica_set, $new_replica_set, $slony_prefix);
     return $slony_prefix;
 }
Exemple #2
0
 public static function build_upgrade($old_output_prefix, $old_composite_file, $old_db_doc, $old_files, $new_output_prefix, $new_composite_file, $new_db_doc, $new_files)
 {
     // place the upgrade files with the new_files set
     $upgrade_prefix = $new_output_prefix . '_upgrade';
     // pgsql8_diff needs these to intelligently create SQL difference statements in dependency order
     dbsteward::info("Calculating old table foreign key dependency order..");
     pgsql8_diff::$old_table_dependency = xml_parser::table_dependency_order($old_db_doc);
     dbsteward::info("Calculating new table foreign key dependency order..");
     pgsql8_diff::$new_table_dependency = xml_parser::table_dependency_order($new_db_doc);
     pgsql8_diff::diff_doc($old_composite_file, $new_composite_file, $old_db_doc, $new_db_doc, $upgrade_prefix);
     if (dbsteward::$generate_slonik) {
         $replica_sets = pgsql8::get_slony_replica_sets($new_db_doc);
         foreach ($replica_sets as $replica_set) {
             dbsteward::info("Generating replica set " . $replica_set['id'] . " upgrade slonik");
             // separate upgrade slonik file sets for each replica set
             $slonik_upgrade_prefix = $upgrade_prefix . "_slony_replica_set_" . $replica_set['id'];
             // generate upgrade slonik to apply generated sql changes
             $old_new_slonik_header = "# Old definition:  " . implode(', ', $old_files) . "\n" . "# New definition:  " . implode(', ', $new_files) . "\n" . "# Replica set ID " . $replica_set['id'] . "\n";
             $old_replica_set = pgsql8::get_slony_replica_set($old_db_doc, (string) $replica_set['id']);
             pgsql8::build_upgrade_slonik_replica_set($old_db_doc, $new_db_doc, $old_replica_set, $replica_set, $slonik_upgrade_prefix, $old_new_slonik_header);
         }
     }
     return $new_db_doc;
 }
    private function common_mismatch($a, $b, $expected)
    {
        $docxml = <<<XML
<dbsteward>
  <database>
    <host>db-host</host>
    <name>dbsteward</name>
    <role>
      <application>dbsteward_phpunit_app</application>
      <owner>deployment</owner>
      <replication/>
      <readonly/>
    </role>
    <slony clusterName="duplicate_slony_ids_testsuite">
      <slonyNode id="1" comment="DSI - Local Primary"  dbName="test" dbHost="db-dev1" dbUser="******" dbPassword="******"/>
      <slonyNode id="2" comment="DSI - Local Backup"   dbName="test" dbHost="db-dev1" dbUser="******" dbPassword="******"/>
      <slonyNode id="3" comment="DSI - Local Backup"   dbName="test" dbHost="db-dev1" dbUser="******" dbPassword="******"/>
      <slonyReplicaSet id="100" originNodeId="1" upgradeSetId="101" comment="common duplicate testing database definition">
        <slonyReplicaSetNode id="2" providerNodeId="1"/>
        <slonyReplicaSetNode id="3" providerNodeId="2"/>
      </slonyReplicaSet>
    </slony>
    <configurationParameter name="TIME ZONE" value="America/New_York"/>
  </database>
  <schema name="dbsteward" owner="ROLE_OWNER">
XML;
        $adoc = new SimpleXMLElement($docxml . $a . "</schema></dbsteward>");
        $bdoc = new SimpleXMLElement($docxml . $b . "</schema></dbsteward>");
        pgsql8::$table_slony_ids = array();
        pgsql8::$sequence_slony_ids = array();
        pgsql8::$known_pg_identifiers = array();
        // for ease in testing, since replica_sets will be the same between
        // adoc and bdoc, just use adoc for iterating over replica sets
        $replica_sets = pgsql8::get_slony_replica_sets($adoc);
        if ($expected !== false) {
            $this->expect_exception($expected, function () use($adoc, $bdoc, $replica_sets) {
                foreach ($replica_sets as $replica_set) {
                    pgsql8::build_upgrade_slonik_replica_set($adoc, $bdoc, $replica_set, $replica_set, __DIR__ . '/../testdata/DuplicateSlonyIdsTest');
                }
            });
        } else {
            $this->expect_no_exception(function () use($adoc, $bdoc, $replica_sets) {
                foreach ($replica_sets as $replica_set) {
                    pgsql8::build_upgrade_slonik_replica_set($adoc, $bdoc, $replica_set, $replica_set, __DIR__ . '/../testdata/DuplicateSlonyIdsTest');
                }
            });
        }
    }