pages = 123; $id = R::store( $book ); R::freeze( TRUE ); R::setAllowHybridMode( FALSE ); $book->title = 'Tales of a misfit'; try { R::store( $book, TRUE ); fail(); } catch(\Exception $e) { pass(); } try { R::store( $book, FALSE ); fail(); } catch(\Exception $e) { pass(); } $book = $book->fresh(); asrt( is_null( $book->title ), TRUE ); R::setAllowHybridMode( TRUE ); $book->title = 'Tales of a misfit'; try { R::store( $book ); fail(); } catch(\Exception $e) { pass(); } try { R::store( $book, FALSE ); fail(); } catch(\Exception $e) { pass(); } try { R::store( $book, TRUE ); pass(); } catch(\Exception $e) { fail(); } $book = $book->fresh(); asrt( $book->title, 'Tales of a misfit' ); R::setAllowHybridMode( FALSE ); R::freeze( FALSE ); } /** * Test whether we can use Hybrid mode to alter columns. * This won't work for SQLite. */ public function testHybridDataType() { R::nuke(); if ($this->currentlyActiveDriverID == 'mysql') { R::exec('SET @@SESSION.sql_mode=\'STRICT_TRANS_TABLES\';'); } if ($this->currentlyActiveDriverID == 'sqlite') return; $book = R::dispense('book'); $book->pages = 1; $id = R::store( $book, TRUE ); R::freeze( TRUE ); asrt( R::getRedBean()->isFrozen(), TRUE ); R::setAllowHybridMode( FALSE ); $book->pages = 'too many'; try { R::store( $book, TRUE ); fail(); } catch(\Exception $e) { pass(); } asrt( R::getRedBean()->isFrozen(), TRUE ); R::setAllowHybridMode( TRUE ); asrt( R::getRedBean()->isFrozen(), TRUE ); R::debug(1); try { R::store( $book, TRUE ); pass(); } catch(\Exception $e) { fail(); } asrt( R::getRedBean()->isFrozen(), TRUE ); $book = $book->fresh(); echo $book; asrt( $book->pages, 'too many' ); R::setAllowHybridMode( FALSE ); R::freeze( FALSE ); if ($this->currentlyActiveDriverID == 'mysql') { R::exec('SET @@SESSION.sql_mode=\'\';'); } } /** * Other exceptions must fall through... */ public function testHybridNonSQLException() { R::nuke(); $toy = R::dispense('brokentoy'); R::freeze( TRUE ); R::setAllowHybridMode( TRUE ); try { R::store( $toy, TRUE ); fail(); } catch(\Exception $e) { pass(); } R::setAllowHybridMode( FALSE ); R::nuke(); $toy = R::dispense('toy'); R::freeze( TRUE ); R::setAllowHybridMode( TRUE ); try { R::store( $toy, TRUE ); pass(); } catch(\Exception $e) { fail(); } R::setAllowHybridMode( FALSE ); } /** * Test whether Hybrid mode is only activated * for latest or 5.4 without novice and ensure * maintaining backward compatibility by not setting * Hybrid allowed for 5.3 and earlier. */ public function testVersions() { R::useFeatureSet('novice/latest'); asrt( R::setAllowHybridMode( FALSE ), FALSE ); R::useFeatureSet('latest'); asrt( R::setAllowHybridMode( FALSE ), TRUE ); R::useFeatureSet('novice/5.4'); asrt( R::setAllowHybridMode( FALSE ), FALSE ); R::useFeatureSet('5.4'); asrt( R::setAllowHybridMode( FALSE ), TRUE ); R::useFeatureSet('novice/5.3'); asrt( R::setAllowHybridMode( FALSE ), FALSE ); R::useFeatureSet('5.3'); asrt( R::setAllowHybridMode( FALSE ), FALSE ); } }