Changeset 491

Show
Ignore:
Timestamp:
15.11.2006 19:27:13 (4 years ago)
Author:
hans
Message:
  • ticket:280 - Added object pool registration in the save() method
  • Updated tests for instance pool to reflect new behavior
  • Added tests for inheritance
Location:
branches/1.3/generator
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • branches/1.3/generator/classes/propel/engine/builder/om/php5/PHP5BasicObjectBuilder.php

    r481 r491  
    981981                                        \$affectedRows += ".$this->getPeerClassname()."::doUpdate(\$this, \$con); 
    982982                        } 
    983                                 \$this->resetModified(); // [HL] After being saved an object is no longer 'modified' 
     983                        \$this->resetModified(); // [HL] After being saved an object is no longer 'modified' 
     984                        ".$this->getPeerClassname()."::addInstanceToPool(\$this); 
    984985                } // if \$this->isModified() 
    985986 
  • branches/1.3/generator/classes/propel/engine/builder/om/php5/PHP5BasicPeerBuilder.php

    r481 r491  
    619619        public static function addInstanceToPool(".$this->getObjectClassname()." \$obj) 
    620620        { 
    621                 // print \"+Adding (by rel) \" . get_class(\$obj) . \" \" . var_export(\$obj->getPrimaryKey(),true) . \" to instance pool.\\n\"; 
     621                // print \"+Adding (by addInstanceToPool()) \" . get_class(\$obj) . \" \" . var_export(\$obj->getPrimaryKey(),true) . \" to instance pool.\\n\"; 
    622622        "; 
    623623                $pk = $this->getTable()->getPrimaryKey(); 
    624                 if ($pk > 0) { 
     624                if (count($pk) > 1) { 
    625625                        $script .= " 
    626626                \$key = serialize(\$obj->getPrimaryKey());"; 
     
    740740        { 
    741741                if (isset(self::\$instances[\$key])) { 
    742                         //print \"  <--Found ".$this->getObjectClassname()." \" . self::\$instances[\$key] . \" in instance pool.\\n\"; 
     742                        //print \"  <-Found ".$this->getObjectClassname()." \" . self::\$instances[\$key] . \" in instance pool.\\n\"; 
    743743                        return self::\$instances[\$key]; 
    744744                } else { 
  • branches/1.3/generator/classes/propel/engine/builder/om/php5/PHP5ComplexObjectBuilder.php

    r481 r491  
    10231023                        \$affectedRows = \$this->doSave(\$con); 
    10241024                        \$con->commit(); 
     1025                        ".$this->getPeerClassname()."::addInstanceToPool(\$this); 
    10251026                        return \$affectedRows; 
    10261027                } catch (PropelException \$e) { 
  • branches/1.3/generator/projects/bookstore/schema.xml

    r481 r491  
    2222      phpName="ISBN" 
    2323      description="ISBN Number"/> 
     24    <column 
     25      name="price" 
     26      required="false" 
     27      type="FLOAT" 
     28      description="Price of the book."/> 
    2429    <column 
    2530      name="publisher_id" 
     
    257262  </table> 
    258263 
    259   <!-- test self-referencing foreign keys --> 
     264  <!-- test self-referencing foreign keys and inheritance--> 
    260265  <table name="bookstore_employee" description="Hierarchical table to represent employees of a bookstore."> 
    261266    <column 
     
    265270          autoIncrement="true" 
    266271          description="Employee ID number"/> 
     272        <column name="class_key" type="INTEGER" required="true" default="0" inheritance="single"> 
     273                <inheritance key="0" class="BookstoreEmployee"/> 
     274                <inheritance key="1" class="BookstoreManager" extends="BookstoreEmployee"/> 
     275                <inheritance key="2" class="BookstoreCashier" extends="BookstoreEmployee"/> 
     276        </column> 
    267277        <column 
    268278          name="name" 
     
    284294  </table> 
    285295 
    286   <!-- test one-to-one server --> 
     296  <!-- Test one-to-one relationship --> 
    287297  <table name="bookstore_employee_account" description="A table that represents a bookstore employees login credentials."> 
    288298        <column 
     
    304314        </foreign-key> 
    305315  </table> 
    306  
     316   
    307317</database> 
  • branches/1.3/generator/test/classes/bookstore/BookstoreDataPopulator.php

    r483 r491  
    2828require_once 'bookstore/BookListRel.php'; 
    2929require_once 'bookstore/BookstoreEmployee.php'; 
     30require_once 'bookstore/BookstoreManager.php'; 
     31require_once 'bookstore/BookstoreCashier.php'; 
    3032require_once 'bookstore/BookstoreEmployeeAccount.php'; 
    3133 
     
    122124                $phoenix->setAuthor($rowling); 
    123125                $phoenix->setPublisher($scholastic); 
     126                $phoenix->setPrice(10.99); 
    124127                $phoenix->save(); 
    125128                $phoenix_id = $phoenix->getId(); 
     
    131134                $qs->setISBN("0380977427"); 
    132135                $qs->setTitle("Quicksilver"); 
     136                $qs->setPrice(11.99); 
    133137                $qs->setAuthor($stephenson); 
    134138                $qs->setPublisher($morrow); 
     
    140144                $dj->setISBN("0140422161"); 
    141145                $dj->setTitle("Don Juan"); 
     146                $dj->setPrice(12.99); 
    142147                $dj->setAuthor($byron); 
    143148                $dj->setPublisher($penguin); 
     
    149154                $td->setISBN("067972575X"); 
    150155                $td->setTitle("The Tin Drum"); 
     156                $td->setPrice(13.99); 
    151157                $td->setAuthor($grass); 
    152158                $td->setPublisher($vintage); 
  • branches/1.3/generator/test/classes/propel/GeneratedPeerTest.php

    r483 r491  
    342342                        } 
    343343                } 
    344  
     344                 
     345                 
     346                // 5) test creating a new object, saving it, and then retrieving that object (should all be same instance) 
     347                $b = new BookstoreEmployee(); 
     348                $b->setName("Testing"); 
     349                $b->setJobTitle("Testing"); 
     350                $b->save(); 
     351                 
     352                $empId = $b->getId(); 
     353                 
     354                $this->assertSame($b, BookstoreEmployeePeer::retrieveByPK($empId), "Expected newly saved object to be same instance as pooled."); 
     355 
     356        } 
     357         
     358        /** 
     359         * Test inheritance features. 
     360         */ 
     361        public function testInheritance() 
     362        { 
     363                $manager = new BookstoreManager(); 
     364                $manager->setName("Manager 1"); 
     365                $manager->setJobTitle("Warehouse Manager"); 
     366                $manager->save(); 
     367                $managerId = $manager->getId(); 
     368                 
     369                $employee = new BookstoreEmployee(); 
     370                $employee->setName("Employee 1"); 
     371                $employee->setJobTitle("Janitor"); 
     372                $employee->setSupervisorId($managerId); 
     373                $employee->save(); 
     374                $empId = $employee->getId(); 
     375                 
     376                $cashier = new BookstoreCashier(); 
     377                $cashier->setName("Cashier 1"); 
     378                $cashier->setJobTitle("Cashier"); 
     379                $cashier->save(); 
     380                $cashierId = $cashier->getId(); 
     381                 
     382                // 1) test the pooled instances' 
     383                $c = new Criteria(); 
     384                $c->add(BookstoreEmployeePeer::ID, array($managerId, $empId, $cashierId), Criteria::IN); 
     385                $c->addAscendingOrderByColumn(BookstoreEmployeePeer::ID); 
     386                 
     387                $objects = BookstoreEmployeePeer::doSelect($c); 
     388                 
     389                $this->assertEquals(3, count($objects), "Expected 3 objects to be returned."); 
     390                 
     391                list($o1, $o2, $o3) = $objects; 
     392                         
     393                $this->assertSame($o1, $manager); 
     394                $this->assertSame($o2, $employee); 
     395                $this->assertSame($o3, $cashier); 
     396                 
     397                // 2) test a forced reload from database 
     398                BookstoreEmployeePeer::clearInstancePool(); 
     399                 
     400                list($o1,$o2,$o3) = BookstoreEmployeePeer::doSelect($c); 
     401                 
     402                $this->assertTrue($o1 instanceof BookstoreManager, "Expected BookstoreManager object, got " . get_class($o1)); 
     403                $this->assertTrue($o2 instanceof BookstoreEmployee, "Expected BookstoreEmployee object, got " . get_class($o2)); 
     404                $this->assertTrue($o3 instanceof BookstoreCashier, "Expected BookstoreCashier object, got " . get_class($o3)); 
     405                 
    345406        } 
    346407}