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

Reply via email to