Yaffs site version 1.1
[yaffs-website] / vendor / gabordemooij / redbean / testing / RedUNIT / Base / Namedparams.php
diff --git a/vendor/gabordemooij/redbean/testing/RedUNIT/Base/Namedparams.php b/vendor/gabordemooij/redbean/testing/RedUNIT/Base/Namedparams.php
new file mode 100644 (file)
index 0000000..95d4b31
--- /dev/null
@@ -0,0 +1,103 @@
+<?php
+
+namespace RedUNIT\Base;
+
+use RedUNIT\Base as Base;
+use RedBeanPHP\Facade as R;
+
+/**
+ * Namedparams
+ *
+ * Tests whether we can use named parameters in queries and
+ * SQL snippets.
+ *
+ * @file    RedUNIT/Base/Namedparams.php
+ * @desc    Test whether you can use named parameters in SQL snippets.
+ * @author  Gabor de Mooij and the RedBeanPHP Community
+ * @license New BSD/GPLv2
+ *
+ * (c) G.J.G.T. (Gabor) de Mooij and the RedBeanPHP Community.
+ * This source file is subject to the New BSD/GPLv2 License that is bundled
+ * with this source code in the file license.txt.
+ */
+class Namedparams extends Base
+{
+       /**
+        * Test usage of named parameters in SQL snippets.
+        * Issue #299 on Github.
+        *
+        * @return void
+        */
+       public function testNamedParamsInSnippets()
+       {
+               testpack( 'Test whether we can use named parameters in SQL snippets.' );
+               R::nuke();
+               $book = R::dispense( 'book' );
+               $page = R::dispense( 'page' );
+               $book->title = 'book';
+               $book->sharedPage[] = $page;
+               R::store($book);
+               //should not give error like: Uncaught [HY093] - SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters
+               $books = $page->withCondition(' title = :title ', array( ':title' => 'book' ) )->sharedBook;
+               asrt( count( $books ), 1 );
+               //should not give error...
+               $books = $page->withCondition( ' title = :title ', array( ':title' => 'book' ) )->sharedBook;
+               asrt( count( $books ), 1 );
+               R::nuke();
+               $book = R::dispense( 'book' );
+               $page = R::dispense( 'page' );
+               $book->title = 'book';
+               $book->comment = 'comment';
+               $page->title = 'page';
+               $book->ownPage[] = $page;
+               R::store( $book );
+               //should also not give error..
+               $count = $book->countOwn( 'page' );
+               asrt( $count, 1 );
+               $book = $book->fresh();
+               //should also not give error..
+               $count = $book->withCondition( ' title = ? ', array( 'page' ) )->countOwn( 'page' );
+               asrt( $count, 1 );
+               $book = $book->fresh();
+               //should also not give error..
+               $count = $book->withCondition( ' title = :title ', array( ':title' => 'page' ) )->countOwn( 'page' );
+               asrt( $count, 1 );
+               $book = $book->fresh();
+               $pages = $book->withCondition( ' title = :title ', array( ':title' => 'page' ) )->ownPage;
+               asrt( count( $pages ), 1 );
+               //test with duplicate slots...
+               $page = reset( $pages );
+               $page2 = R::dispense( 'page' );
+               $page2->ownPage[] = $page;
+               R::store( $page2 );
+               $page2 = $page2->fresh();
+               $pages = $page2->withCondition( ' title = :title ', array( ':title' => 'page' ) )->ownPage;
+               asrt( count( $pages ), 1 );
+               //test with find()
+               $books = R::getRedBean()->find( 'book',
+                                 array(
+                                               'title' => array('book')),
+                                 ' AND title = :title ', array(':title'=>'book'));
+               asrt( count( $books ), 1 );
+               $books = R::getRedBean()->find( 'book',
+                                 array(
+                                               'title'   => array('book', 'book2'),
+                                               'comment' => array('comment', 'comment2')),
+                                 ' AND title = :title ', array(':title'=>'book'));
+               asrt( count( $books ), 1 );
+               //just check numeric works as well...
+               $books = R::getRedBean()->find( 'book',
+                                 array(
+                                               'title'   => array('book', 'book2'),
+                                               'comment' => array('comment', 'comment2')),
+                                 ' AND title = ? ', array('book'));
+               asrt( count( $books ), 1 );
+               //just extra check to verify glue works
+               $books = R::getRedBean()->find( 'book',
+                                 array(
+                                               'title'   => array('book', 'book2'),
+                                               'comment' => array('comment', 'comment2')),
+                                 ' ORDER BY id ');
+               asrt( count( $books ), 1 );
+       }
+}