Author: dr
Date: Wed Feb 13 09:53:35 2008
New Revision: 7355

Log:
- Implemented issue #12540: subselect support for other query types besides
  SELECT.

Modified:
    trunk/Database/ChangeLog
    trunk/Database/src/sqlabstraction/query.php
    trunk/Database/src/sqlabstraction/query_select.php
    trunk/Database/tests/sqlabstraction/query_subselect_test.php

Modified: trunk/Database/ChangeLog
==============================================================================
--- trunk/Database/ChangeLog [iso-8859-1] (original)
+++ trunk/Database/ChangeLog [iso-8859-1] Wed Feb 13 09:53:35 2008
@@ -2,6 +2,8 @@
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 - Implemented issue #10753: ezcDbQuery should implement __toString().
+- Implemented issue #12540: subselect support for other query types besides
+  SELECT.
 
 
 1.3.4 - Monday 14 January 2008

Modified: trunk/Database/src/sqlabstraction/query.php
==============================================================================
--- trunk/Database/src/sqlabstraction/query.php [iso-8859-1] (original)
+++ trunk/Database/src/sqlabstraction/query.php [iso-8859-1] Wed Feb 13 
09:53:35 2008
@@ -483,6 +483,20 @@
     }
 
     /**
+     * Returns the ezcQuerySubSelect query object.
+     *
+     * This method creates new ezcQuerySubSelect object
+     * that could be used for building correct
+     * subselect inside query.
+     *
+     * @return ezcQuerySubSelect
+     */
+    public function subSelect()
+    {
+        return new ezcQuerySubSelect( $this );
+    }
+
+    /**
      * Returns the query string for this query object.
      *
      * @throws ezcQueryInvalidException if it was not possible to build a 
valid query.

Modified: trunk/Database/src/sqlabstraction/query_select.php
==============================================================================
--- trunk/Database/src/sqlabstraction/query_select.php [iso-8859-1] (original)
+++ trunk/Database/src/sqlabstraction/query_select.php [iso-8859-1] Wed Feb 13 
09:53:35 2008
@@ -895,20 +895,6 @@
         return $query;
     }
 
-    /**
-     * Returns the ezcQuerySubSelect query object.
-     *
-     * This method creates new ezcQuerySubSelect object
-     * that could be used for building correct
-     * subselect inside query.
-     *
-     * @return ezcQuerySubSelect
-     */
-    public function subSelect()
-    {
-        return new ezcQuerySubSelect( $this );
-    }
-
 }
 
 ?>

Modified: trunk/Database/tests/sqlabstraction/query_subselect_test.php
==============================================================================
--- trunk/Database/tests/sqlabstraction/query_subselect_test.php [iso-8859-1] 
(original)
+++ trunk/Database/tests/sqlabstraction/query_subselect_test.php [iso-8859-1] 
Wed Feb 13 09:53:35 2008
@@ -177,6 +177,43 @@
         $this->assertEquals( "SELECT somecol FROM quiz WHERE question IN ( ( 
SELECT id FROM question WHERE quiz = :ezcValue1 ) )", $q->getQuery() );
     }
 
+    public function testSubselectWithUpdate()
+    {
+        $db = ezcDbInstance::get();
+        $q = $db->createUpdateQuery();
+        $q->update( 'quiz' )->set( 'somecol', $q->bindValue( 'test' ) );
+
+        $qQuestions = $q->subSelect();
+        $qQuestions->select( 'id' )->from( 'question' )->where(
+            $qQuestions->expr->eq( 'quiz', $qQuestions->bindValue( 1 ) )
+        );
+
+        $q->where(
+            $q->expr->in( 'question', $qQuestions )
+        );
+
+        $this->assertEquals( "UPDATE quiz SET somecol = :ezcValue1 WHERE 
question IN ( ( SELECT id FROM question WHERE quiz = :ezcValue2 ) )", 
$q->getQuery() );
+    }
+
+
+    public function testSubselectWithDelete()
+    {
+        $db = ezcDbInstance::get();
+        $q = $db->createDeleteQuery();
+        $q->deleteFrom( 'quiz' );
+
+        $qQuestions = $q->subSelect();
+        $qQuestions->select( 'id' )->from( 'question' )->where(
+            $qQuestions->expr->eq( 'quiz', $qQuestions->bindValue( 1 ) )
+        );
+
+        $q->where(
+            $q->expr->in( 'question', $qQuestions )
+        );
+
+        $this->assertEquals( "DELETE FROM quiz WHERE question IN ( ( SELECT id 
FROM question WHERE quiz = :ezcValue1 ) )", $q->getQuery() );
+    }
+
 
     public static function suite()
     {


-- 
svn-components mailing list
svn-components@lists.ez.no
http://lists.ez.no/mailman/listinfo/svn-components

Reply via email to