private function getParsedRow($tabrow, $delimiter)
    {
        $xml = <<<XML
<dbsteward>
  <database>
    <role>
      <application>x</application>
      <owner>x</owner>
      <replication>x</replication>
      <readonly>x</readonly>
    </role>
  </database>
  <schema name="public" owner="ROLE_OWNER">
    <table name="tabrowtable" owner="ROLE_OWNER" primaryKey="c1">
      <column name="c1" type="int"/>
      <column name="c2" type="int"/>
      <column name="c3" type="int"/>
      <rows columns="c1,c2,c3">
        <tabrow>{$tabrow}</tabrow>
      </rows>
    </table>
  </schema>
</dbsteward>
XML;
        $doc = simplexml_load_string($xml);
        if ($delimiter !== false) {
            $doc->schema->table->rows['tabrowDelimiter'] = $delimiter;
        }
        $composite = xml_parser::composite_doc(null, $doc);
        $cols = array();
        foreach ($composite->schema->table->rows->row->col as $col) {
            $cols[] = (string) $col;
        }
        return $cols;
    }
 public function testDefineRows()
 {
     $schema_parent = simplexml_load_string($this->xml_parent);
     $schema_child = simplexml_load_string($this->xml_child);
     $schema_parent_child = simplexml_load_string($this->xml_parent_and_child);
     $schema_grandchild = simplexml_load_string($this->xml_grandchild);
     //  xml_parser::composite_doc($schema_parent, $schema_child);
     //xml_parser::composite_doc($schema_parent, $schema_grandchild);
     xml_parser::composite_doc($schema_parent, $schema_child);
     xml_parser::composite_doc($schema_parent_child, $schema_grandchild);
 }
 /**
  * @group pgsql8
  */
 public function testTableColumnTypeQuotingPgsql8()
 {
     dbsteward::set_sql_format('pgsql8');
     dbsteward::$quote_all_names = TRUE;
     dbsteward::$single_stage_upgrade = TRUE;
     $doc_empty = simplexml_load_string($this->xml_empty);
     $doc_empty = xml_parser::composite_doc(FALSE, $doc_empty);
     dbsteward::$old_database = $doc_empty;
     $doc = simplexml_load_string($this->xml);
     $doc = xml_parser::composite_doc(FALSE, $doc);
     dbsteward::$new_database = $doc;
     $table_dependency = xml_parser::table_dependency_order($doc);
     //var_dump(xml_parser::format_xml($doc_empty->saveXML()));
     //var_dump(xml_parser::format_xml($doc->saveXML()));
     $schema = $doc->schema;
     $table = $schema->table;
     // make sure the type is named with quoting as part of a definition build
     $expected = "CREATE TYPE \"schema1\".\"enumCamelCaseType\" AS ENUM ('Read','Write','Delete');";
     $mofs = new mock_output_file_segmenter();
     pgsql8::build_schema($doc, $mofs, $table_dependency);
     $actual = trim($mofs->_get_output());
     $this->assertContains($expected, $actual);
     // make sure the type is referred to with quoting in a table creation as part of a definition build
     $expected_column = '"table_shable_mode" "enumCamelCaseType"';
     $this->assertContains($expected_column, $actual);
     // make sure the type is referred to with quoting when generating table create statements
     $expected = '"table_shable_mode" "enumCamelCaseType"';
     $sql = pgsql8_table::get_creation_sql($schema, $table);
     $this->assertContains($expected, $sql);
     // make sure create table quotes the type name
     $expected = '"table_shable_mode" "enumCamelCaseType"';
     $mofs = new mock_output_file_segmenter();
     var_dump(dbx::get_tables($schema));
     pgsql8_diff_tables::diff_tables($mofs, $mofs, NULL, $schema);
     $actual = trim($mofs->_get_output());
     $this->assertContains($expected, $actual);
     // make sure insert statements are made that match the XML definition
     $expected = "INSERT INTO \"schema1\".\"table_shable\" (\"table_shable_id\", \"table_shable_value\", \"table_shable_mode\") VALUES (1, E'shim sham', BETA);";
     $actual = trim(pgsql8_diff_tables::get_data_sql(NULL, NULL, $schema, $table, FALSE));
     $this->assertContains($expected, $actual);
 }
 private function diff($old, $new, $expected1, $expected3, $message = '')
 {
     dbsteward::$old_database = xml_parser::composite_doc(NULL, simplexml_load_string($this->db_doc_xml . $old . '</dbsteward>'));
     dbsteward::$new_database = xml_parser::composite_doc(NULL, simplexml_load_string($this->db_doc_xml . $new . '</dbsteward>'));
     $ofs1 = new mock_output_file_segmenter();
     $ofs3 = new mock_output_file_segmenter();
     mysql5_diff::$old_table_dependency = xml_parser::table_dependency_order(dbsteward::$old_database);
     mysql5_diff::$new_table_dependency = xml_parser::table_dependency_order(dbsteward::$new_database);
     mysql5_diff::update_structure($ofs1, $ofs3);
     $actual1 = trim($ofs1->_get_output());
     $actual3 = trim($ofs3->_get_output());
     $this->assertEquals($expected1, $actual1, "during stage 1: {$message}");
     $this->assertEquals($expected3, $actual3, "during stage 3: {$message}");
 }
 public function testExceptionIsThrownWithDupes()
 {
     dbsteward::set_sql_format('pgsql8');
     dbsteward::$quote_all_names = TRUE;
     dbsteward::$single_stage_upgrade = TRUE;
     $doc_empty = simplexml_load_string($this->xml_empty);
     $doc_empty = xml_parser::composite_doc(FALSE, $doc_empty);
     dbsteward::$old_database = $doc_empty;
     $doc = simplexml_load_string($this->xml);
     $doc = xml_parser::composite_doc(FALSE, $doc);
     dbsteward::$new_database = $doc;
     $table_dependency = xml_parser::table_dependency_order($doc);
     $schema = $doc->schema;
     $table = $schema->table;
     // make sure the type is named with quoting as part of a definition build
     $mofs = new mock_output_file_segmenter();
     try {
         pgsql8::build_schema($doc, $mofs, $table_dependency);
     } catch (Exception $e) {
         $this->assertContains('duplicate index name', strtolower($e->getMessage()));
         return;
     }
     $this->fail("build_schema did not detect duplicate index names");
 }