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
[email protected]
http://lists.ez.no/mailman/listinfo/svn-components