Author: dr Date: Wed Feb 13 10:57:29 2008 New Revision: 7357 Log: - Make cache manager tests run on SQLite and PostGreSQL as well.
Added: trunk/Template/tests/cache-manager-schema.xml Modified: trunk/Template/design/class_diagram.png trunk/Template/tests/cache_manager_test.php trunk/Template/tests/db_cache_manager.php Modified: trunk/Template/design/class_diagram.png ============================================================================== Binary files - no diff available. Added: trunk/Template/tests/cache-manager-schema.xml ============================================================================== --- trunk/Template/tests/cache-manager-schema.xml (added) +++ trunk/Template/tests/cache-manager-schema.xml [iso-8859-1] Wed Feb 13 10:57:29 2008 @@ -1,0 +1,99 @@ +<?xml version="1.0" encoding="UTF-8"?> +<database> + <table> + <name>cache_templates</name> + <declaration> + <field> + <name>cache</name> + <type>text</type> + <length>255</length> + <notnull>true</notnull> + </field> + <field> + <name>expired</name> + <type>integer</type> + </field> + <field> + <name>id</name> + <type>integer</type> + <autoincrement>true</autoincrement> + <notnull>true</notnull> + </field> + <index> + <name>primary</name> + <primary>true</primary> + <unique>true</unique> + <field> + <name>id</name> + </field> + </index> + </declaration> + </table> + <table> + <name>cache_values</name> + <declaration> + <field> + <name>name</name> + <type>text</type> + <length>50</length> + <notnull>true</notnull> + </field> + <field> + <name>template_id</name> + <type>integer</type> + <notnull>true</notnull> + </field> + <field> + <name>value</name> + <type>text</type> + <length>255</length> + <notnull>true</notnull> + </field> + <index> + <name>primary</name> + <primary>true</primary> + <unique>true</unique> + <field> + <name>name</name> + </field> + <field> + <name>template_id</name> + </field> + <field> + <name>value</name> + </field> + </index> + </declaration> + </table> + <table> + <name>user</name> + <declaration> + <field> + <name>id</name> + <type>integer</type> + <autoincrement>true</autoincrement> + <notnull>true</notnull> + </field> + <field> + <name>name</name> + <type>text</type> + <length>50</length> + <notnull>true</notnull> + </field> + <field> + <name>nickname</name> + <type>text</type> + <length>30</length> + <notnull>true</notnull> + </field> + <index> + <name>primary</name> + <primary>true</primary> + <unique>true</unique> + <field> + <name>id</name> + </field> + </index> + </declaration> + </table> +</database> Modified: trunk/Template/tests/cache_manager_test.php ============================================================================== --- trunk/Template/tests/cache_manager_test.php [iso-8859-1] (original) +++ trunk/Template/tests/cache_manager_test.php [iso-8859-1] Wed Feb 13 10:57:29 2008 @@ -29,6 +29,8 @@ protected function setUp() { + $tables = array( 'user', 'cache_templates', 'cache_values' ); + // Get the DB instance try { @@ -50,24 +52,20 @@ // Create tables. // - try + foreach ( $tables as $table ) { - $db->exec( 'DROP TABLE user' ); + try + { + $db->exec( "DROP TABLE $table" ); + } + catch ( Exception $e ) + { + } // eat } - catch ( Exception $e ) {} // eat - - try - { - $db->exec( 'DROP TABLE cache_templates' ); - } - catch ( Exception $e ) {} // eat - - try - { - $db->exec( 'DROP TABLE cache_values' ); - } - catch ( Exception $e ) {} // eat - + + $schema = ezcDbSchema::createFromFile( 'xml', dirname( __FILE__ ) . '/cache-manager-schema.xml' ); + $schema->writeToDb( $db ); +/* $db->exec( "CREATE TABLE cache_templates ( id int(10) unsigned NOT NULL auto_increment, cache varchar(255) NOT NULL, @@ -85,20 +83,46 @@ name varchar(50) NOT NULL, nickname varchar(30) NOT NULL, PRIMARY KEY (id) )" ); - +*/ // insert some data + $iq = $db->createInsertQuery(); + $s = $iq->insertInto( $db->quoteIdentifier( 'user' ) ) + ->set( $db->quoteIdentifier( 'id' ), 1 ) + ->set( $db->quoteIdentifier( 'name' ), $iq->bindValue( 'Raymond' ) ) + ->set( $db->quoteIdentifier( 'nickname' ), $iq->bindValue( 'sunRay' ) ) + ->prepare(); + $s->execute(); + + $iq = $db->createInsertQuery(); + $s = $iq->insertInto( $db->quoteIdentifier( 'user' ) ) + ->set( $db->quoteIdentifier( 'id' ), 2 ) + ->set( $db->quoteIdentifier( 'name' ), $iq->bindValue( 'Derick' ) ) + ->set( $db->quoteIdentifier( 'nickname' ), $iq->bindValue( 'Tiger' ) ) + ->prepare(); + $s->execute(); + + $iq = $db->createInsertQuery(); + $s = $iq->insertInto( $db->quoteIdentifier( 'user' ) ) + ->set( $db->quoteIdentifier( 'id' ), 3 ) + ->set( $db->quoteIdentifier( 'name' ), $iq->bindValue( 'Jan' ) ) + ->set( $db->quoteIdentifier( 'nickname' ), $iq->bindValue( 'Amos' ) ) + ->prepare(); + $s->execute(); + /* $db->exec ( "INSERT INTO `user` (`id`, `name`, `nickname`) VALUES (1, 'Raymond', 'sunRay'), (2, 'Derick', 'Tiger'), (3, 'Jan', 'Amos')" ); - +*/ } protected function tearDown() { // Remove tables. $db = ezcDbInstance::get(); - $db->exec( 'DROP TABLE user' ); +// $db->exec( 'DROP TABLE cache_templates' ); +// $db->exec( 'DROP TABLE cache_values' ); +// $db->exec( 'DROP TABLE user' ); $this->removeTempDir(); } @@ -118,7 +142,7 @@ $t->send->a = "Bla"; $r = $t->process( "cache_simple_include.tpl" ); $this->assertEquals( "\nBernard\nHello world\n", $r ); - +xdebug_break(); // Simulate someone edits the template sleep(1); // Otherwise the mtime is the same. file_put_contents( $this->tempDir . "/hello_world.tpl", "Goodbye cruel world!"); Modified: trunk/Template/tests/db_cache_manager.php ============================================================================== --- trunk/Template/tests/db_cache_manager.php [iso-8859-1] (original) +++ trunk/Template/tests/db_cache_manager.php [iso-8859-1] Wed Feb 13 10:57:29 2008 @@ -11,11 +11,14 @@ // INSERT NEW cache. $db = ezcDbInstance::get(); - $q = $db->prepare("SELECT id FROM cache_templates WHERE cache = :cache" ); - $q->bindValue( ":cache", $cachePath ); - $q->execute(); - - $r = $q->fetchAll(); // Strange if there is more than one result. + $q = $db->createSelectQuery(); + $s = $q->select( 'id' ) + ->from( $db->quoteIdentifier( 'cache_templates' ) ) + ->where( $q->expr->eq( $db->quoteIdentifier( 'cache' ), $q->bindValue( $cachePath ) ) ) + ->prepare(); + $s->execute(); + + $r = $s->fetchAll(); // Strange if there is more than one result. if ( sizeof( $r ) > 0 ) { @@ -24,21 +27,26 @@ $id = $r[0]["id"]; // Reset the expired IDs. - $s = $db->prepare( "UPDATE cache_templates SET expired=0 WHERE id = :id" ); - $s->bindValue( ":id", $r[0]["id"] ); + $q = $db->createUpdateQuery(); + $s = $q->update( $db->quoteIdentifier( 'cache_templates' ) ) + ->set( $db->quoteIdentifier( 'expired' ), 0 ) + ->where( $q->expr->eq( $db->quoteIdentifier( 'id' ), $q->bindValue( $r[0]['id'] ) ) ) + ->prepare(); $s->execute(); } } else { - $q = $db->prepare("INSERT INTO cache_templates VALUES( '', :cache, 0)" ); - $q->bindValue( ":cache", $cachePath ); - $q->execute(); - $id = $db->lastInsertId(); - + $q = $db->createInsertQuery(); + $s = $q->insertInto( $db->quoteIdentifier( 'cache_templates' ) ) + ->set( $db->quoteIdentifier( 'cache' ), $q->bindValue( $cachePath ) ) + ->set( $db->quoteIdentifier( 'expired' ), $q->bindValue( 0 ) ) + ->prepare(); + $s->execute(); + $id = $db->lastInsertId( 'id_seq' ); // Insert your own template in the value table. - $q = $db->prepare("REPLACE INTO cache_values VALUES(:id, :name, :value)" ); + $q = $db->prepare("INSERT INTO cache_values(template_id, name, value) VALUES(:id, :name, :value)" ); $q->bindValue( ":id", $id ); $q->bindValue( ":name", "include" ); $q->bindValue( ":value", $templatePath ); @@ -100,12 +108,25 @@ public function update($name, $value) { - - $db = ezcDbInstance::get(); - $s = $db->prepare( "UPDATE cache_templates, cache_values SET cache_templates.expired=1 WHERE cache_templates.id = cache_values.template_id AND cache_values.name = :name AND cache_values.value = :value" ); - $s->bindValue( ":name", $name ); - $s->bindValue( ":value", $value ); + $db = ezcDbInstance::get(); + + $q = $db->createUpdateQuery(); + $sq = $q->subSelect(); + $sq->select( $db->quoteIdentifier( 'id' ) ) + ->from( $db->quoteIdentifier( 'cache_values' ) ) + ->where( $sq->expr->lAnd( + $sq->expr->eq( $db->quoteIdentifier( 'name' ), $sq->bindValue( $name ) ), + $sq->expr->eq( $db->quoteIdentifier( 'value' ), $sq->bindValue( $value ) ) + )); + + $q->update( $db->quoteIdentifier( 'cache_templates' ) ) + ->set( $db->quoteIdentifier( 'expired' ), 1 ) + ->where( $q->expr->in( $db->quoteIdentifier( 'id' ), $sq ) ); + $s = $q->prepare(); $s->execute(); +// $s = $db->prepare( "UPDATE cache_templates, cache_values SET cache_templates.expired=1 WHERE cache_templates.id = cache_values.template_id AND cache_values.name = :name AND cache_values.value = :value" ); +// $s->bindValue( ":name", $name ); +// $s->bindValue( ":value", $value ); } @@ -115,12 +136,18 @@ $db = ezcDbInstance::get(); for($i =0; $i < $this->depth; $i++) { - // From user_list, when cache is created. - $s = $db->prepare( "REPLACE INTO cache_values VALUES ( :id, :name, :value )" ); + $s = $db->prepare( "DELETE FROM cache_values WHERE template_id = :id AND name = :name AND value = :value" ); $s->bindValue( ":id", $this->keys[$i]["template_id"] ); $s->bindValue( ":name", $name ); $s->bindValue( ":value", $value ); $s->execute(); + + // From user_list, when cache is created. + $s = $db->prepare( "INSERT INTO cache_values(template_id, name, value) VALUES ( :id, :name, :value )" ); + $s->bindValue( ":id", $this->keys[$i]["template_id"] ); + $s->bindValue( ":name", $name ); + $s->bindValue( ":value", $value ); + $s->execute(); } // Updated the values. If this value changes, the template should be renewed. @@ -135,7 +162,13 @@ $id = $this->keys[ $this->depth ]["template_id"]; // Insert your parent template in the value table. - $q = $db->prepare("REPLACE INTO cache_values VALUES(:id, :name, :value)" ); + $s = $db->prepare( "DELETE FROM cache_values WHERE template_id = :id AND name = :name AND value = :value" ); + $s->bindValue( ":id", $id ); + $s->bindValue( ":name", "include" ); + $s->bindValue( ":value", $template_path ); + $s->execute(); + + $q = $db->prepare("INSERT INTO cache_values(template_id, name, value) VALUES(:id, :name, :value)" ); $q->bindValue( ":id", $id ); $q->bindValue( ":name", "include" ); $q->bindValue( ":value", $template_path ); @@ -157,12 +190,18 @@ unlink( $r["cache"] ); } - $db->exec("DELETE FROM cache_values USING cache_values, cache_templates WHERE cache_templates.id = cache_values.template_id AND cache_templates.expired = 1 "); + $db = ezcDbInstance::get(); + + // DELETE FROM cache_values WHERE template_id IN ( SELECT id FROM cache_templates WHERE expired = 1 ); + $q = $db->createDeleteQuery(); + $sq = $q->subSelect(); + $sq->select( 'id' )->from( 'cache_templates' )->where( $sq->expr->eq( $db->quoteIdentifier( 'expired' ), $sq->bindValue( 1 ) ) ); + $q->deleteFrom( $db->quoteIdentifier( 'cache_values' ) )->where( $q->expr->in( $db->quoteIdentifier( 'template_id' ), $sq ) ); + $s = $q->prepare(); + $s->execute(); + $db->exec("DELETE FROM cache_templates WHERE cache_templates.expired = 1"); } - - - } ?> -- svn-components mailing list svn-components@lists.ez.no http://lists.ez.no/mailman/listinfo/svn-components