- Something
- Friday, October 6th, 2006 at 11:29:45am MDT
- <?php
- require_once 'propel/engine/builder/om/php5/PHP5ComplexPeerBuilder.php';
- class FasterPHP5ComplexPeerBuilder extends PHP5ComplexPeerBuilder {
- /**
- * Adds the doSelectJoin*() methods.
- * @param string &$script The script will be modified in this method.
- */
- protected function addDoSelectJoin(&$script)
- {
- $table = $this->getTable();
- $className = $table->getPhpName();
- if ($countFK >= 1) {
- foreach ($table->getForeignKeys() as $fk) {
- $joinTable = $table->getDatabase()->getTable($fk->getForeignTableName());
- if (!$joinTable->isForReferenceOnly()) {
- // FIXME - look into removing this next condition; it may not
- // be necessary:
- // --- IT is necessary because there needs to be a system for
- // aliasing the table if it is the same table.
- if ( $fk->getForeignTableName() != $table->getName() ) {
- $joinClassName = $joinTable->getPhpName();
- $thisTableObjectBuilder = OMBuilder::getNewObjectBuilder($table);
- $joinedTableObjectBuilder = OMBuilder::getNewObjectBuilder($joinTable);
- $joinedTablePeerBuilder = OMBuilder::getNewPeerBuilder($joinTable);
- $script .= "
- /**
- * Selects a collection of $className objects pre-filled with their $joinClassName objects.
- *
- * @return array Array of $className objects.
- * @throws PropelException Any exceptions caught during processing will be
- * rethrown wrapped into a PropelException.
- */
- public static function doSelectJoin".$thisTableObjectBuilder->getFKPhpNameAffix($fk, $plural = false)."(Criteria \$c, \$con = null)
- {
- \$c = clone \$c;
- // Set the correct dbName if it has not been overridden
- if (\$c->getDbName() == Propel::getDefaultDB()) {
- \$c->setDbName(self::DATABASE_NAME);
- }
- ".$this->getPeerClassname()."::addSelectColumns(\$c);
- \$startcol = (".$this->getPeerClassname()."::NUM_COLUMNS - ".$this->getPeerClassname()."::NUM_LAZY_LOAD_COLUMNS) + 1;
- ".$joinedTablePeerBuilder->getPeerClassname()."::addSelectColumns(\$c);
- ";
- $lfMap = $fk->getLocalForeignMapping();
- foreach ($fk->getLocalColumns() as $columnName ) {
- $column = $table->getColumn($columnName);
- $columnFk = $joinTable->getColumn( $lfMap[$columnName] );
- $script .= "
- \$c->addJoin(".$this->getColumnConstant($column).", ".$joinedTablePeerBuilder->getColumnConstant($columnFk).");"; //CHECKME
- }
- if ($joinTable->getChildrenColumn()) {
- $script .= "
- \$clsjoin = Propel::import(".$joinedTablePeerBuilder->getPeerClassname()."::getOMClass(\$rs, \$startcol));
- ";
- } else {
- $script .= "
- \$clsjoin = Propel::import(".$joinedTablePeerBuilder->getPeerClassname()."::getOMClass());
- ";
- }
- if ($table->getChildrenColumn()) {
- $script .= "
- \$cls = Propel::import(".$this->getPeerClassname()."::getOMClass(\$rs, 1));
- ";
- } else {
- $script .= "
- \$cls = Propel::import(".$this->getPeerClassname()."::getOMClass());
- ";
- }
- $script .= "
- \$rs = ".$this->basePeerClassname."::doSelect(\$c, \$con);
- \$results = array();
- \$map = array();
- while(\$rs->next()) {
- ";
- $script .= "
- \$obj1 = new \$cls();
- \$obj1->hydrate(\$rs);
- ";
- $script .= "
- \$obj2 = new \$clsjoin();
- \$obj2->hydrate(\$rs, \$startcol);
- self::foreignMap(\$map, \$obj1, \$obj2);
- \$results[] = \$obj1;
- }
- return \$results;
- }
- ";
- } // if fk table name != this table name
- } // if ! is reference only
- } // foreach column
- } // if count(fk) > 1
- } // addDoSelectJoin()
- /**
- * Adds the doSelectJoinAll() method.
- * @param string &$script The script will be modified in this method.
- */
- protected function addDoSelectJoinAll(&$script)
- {
- $table = $this->getTable();
- $className = $table->getPhpName();
- // $joinedTableObjectBuilder->getRefFKPhpNameAffix($fk, $plural = true)."();
- // $joinedTableObjectBuilder->getRefFKPhpNameAffix($fk, $plural = false)."(\$obj1);
- $thisTableObjectBuilder = OMBuilder::getNewObjectBuilder($table);
- $script .= "
- /**
- * hash table function!
- **/
- static protected function foreignMap(array &\$map, \$obj1, \$hashObj) {
- if (isset(\$map[\$hashObj->getPrimaryKey()])) {
- \$map[\$hashObj->getPrimaryKey()]->add$className(\$obj1);
- } else {
- \$hashObj->init{$className}s();
- \$hashObj->add$className(\$obj1);
- \$map[\$hashObj->getPrimaryKey()] = \$hashObj;
- }
- }
- /**
- * Selects a collection of $className objects pre-filled with all related objects.
- *
- * @return array Array of $className objects.
- * @throws PropelException Any exceptions caught during processing will be
- * rethrown wrapped into a PropelException.
- */
- public static function doSelectJoinAll(Criteria \$c, \$con = null)
- {
- \$c = clone \$c;
- // Set the correct dbName if it has not been overridden
- if (\$c->getDbName() == Propel::getDefaultDB()) {
- \$c->setDbName(self::DATABASE_NAME);
- }
- ".$this->getPeerClassname()."::addSelectColumns(\$c);
- \$startcol2 = (".$this->getPeerClassname()."::NUM_COLUMNS - ".$this->getPeerClassname()."::NUM_LAZY_LOAD_COLUMNS) + 1;
- ";
- $index = 2;
- foreach ($table->getForeignKeys() as $fk) {
- // want to cover this case, but the code is not there yet.
- // FIXME: why "is the code not there yet" ?
- if ( $fk->getForeignTableName() != $table->getName() ) {
- $joinTable = $table->getDatabase()->getTable($fk->getForeignTableName());
- $joinClassName = $joinTable->getPhpName();
- $new_index = $index + 1;
- $joinedTablePeerBuilder = OMBuilder::getNewPeerBuilder($joinTable);
- $script .= "
- ".$joinedTablePeerBuilder->getPeerClassname()."::addSelectColumns(\$c);
- \$startcol$new_index = \$startcol$index + ".$joinedTablePeerBuilder->getPeerClassname()."::NUM_COLUMNS;
- ";
- $index = $new_index;
- } // if fk->getForeignTableName != table->getName
- } // foreach [sub] foreign keys
- foreach ($table->getForeignKeys() as $fk) {
- // want to cover this case, but the code is not there yet.
- if ( $fk->getForeignTableName() != $table->getName() ) {
- $joinTable = $table->getDatabase()->getTable($fk->getForeignTableName());
- $joinedTablePeerBuilder = OMBuilder::getNewPeerBuilder($joinTable);
- $joinClassName = $joinTable->getPhpName();
- $lfMap = $fk->getLocalForeignMapping();
- foreach ($fk->getLocalColumns() as $columnName ) {
- $column = $table->getColumn($columnName);
- $columnFk = $joinTable->getColumn( $lfMap[$columnName]);
- $script .= "
- \$c->addJoin(".$this->getColumnConstant($column).", ".$joinedTablePeerBuilder->getColumnConstant($columnFk).");
- ";
- }
- }
- }
- $index = 1;
- foreach ($table->getForeignKeys() as $fk ) {
- // want to cover this case, but the code is not there yet.
- // FIXME -- why not? -because we'd have to alias the tables in the JOIN
- if ( $fk->getForeignTableName() != $table->getName() ) {
- $joinTable = $table->getDatabase()->getTable($fk->getForeignTableName());
- $joinClassName = $joinTable->getPhpName();
- $interfaceName = $joinTable->getPhpName();
- if($joinTable->getInterface()) {
- $interfaceName = $joinTable->getInterface();
- }
- $thisTableObjectBuilder = OMBuilder::getNewObjectBuilder($table);
- $joinedTableObjectBuilder = OMBuilder::getNewObjectBuilder($joinTable);
- $joinedTablePeerBuilder = OMBuilder::getNewPeerBuilder($joinTable);
- $cname = $joinedTablePeerBuilder->getPeerClassname();
- $joinedPeerClassName = $joinedTablePeerBuilder->getPeerClassname();
- $index++;
- $script .= "
- \$om$joinedPeerClassName = Propel::import(".$joinedTablePeerBuilder->getPeerClassname()."::getOMClass(\$rs, \$startcol$index));
- \$map$joinedPeerClassName = array();
- ";
- }
- }
- if ($table->getChildrenColumn()) {
- $script .= "
- \$omClass = ".$this->getPeerClassname()."::getOMClass(\$rs, 1);
- ";
- } else {
- $script .= "
- \$omClass = ".$this->getPeerClassname()."::getOMClass();
- ";
- }
- $script .= "
- \$cls = Propel::import(\$omClass);
- \$rs = ".$this->basePeerClassname."::doSelect(\$c, \$con);
- \$results = array();
- while(\$rs->next()) {
- ";
- $script .= "
- \$obj1 = new \$cls();
- \$obj1->hydrate(\$rs);
- ";
- $index = 1;
- foreach ($table->getForeignKeys() as $fk ) {
- // want to cover this case, but the code is not there yet.
- // FIXME -- why not? -because we'd have to alias the tables in the JOIN
- if ( $fk->getForeignTableName() != $table->getName() ) {
- $joinTable = $table->getDatabase()->getTable($fk->getForeignTableName());
- $joinClassName = $joinTable->getPhpName();
- $interfaceName = $joinTable->getPhpName();
- if($joinTable->getInterface()) {
- $interfaceName = $joinTable->getInterface();
- }
- $thisTableObjectBuilder = OMBuilder::getNewObjectBuilder($table);
- $joinedTableObjectBuilder = OMBuilder::getNewObjectBuilder($joinTable);
- $joinedTablePeerBuilder = OMBuilder::getNewPeerBuilder($joinTable);
- $joinedPeerClassName = $joinedTablePeerBuilder->getPeerClassname();
- $index++;
- $script .= "
- // Add objects for joined $joinClassName rows
- \$obj".$index." = new \$om$joinedPeerClassName();
- \$obj".$index."->hydrate(\$rs, \$startcol$index);
- self::foreignMap(\$map$joinedPeerClassName, \$obj1, \$obj".$index.");
- ";
- } // $fk->getForeignTableName() != $table->getName()
- } //foreach foreign key
- $script .= "
- \$results[] = \$obj1;
- }
- return \$results;
- }
- ";
- } // end addDoSelectJoinAll()
- /**
- * Adds the doSelectJoinAllExcept*() methods.
- * @param string &$script The script will be modified in this method.
- */
- protected function addDoSelectJoinAllExcept(&$script)
- {
- $table = $this->getTable();
- // ------------------------------------------------------------------------
- // doSelectJoinAllExcept*()
- // ------------------------------------------------------------------------
- // 2) create a bunch of doSelectJoinAllExcept*() methods
- // -- these were existing in original Torque, so we should keep them for compatibility
- $fkeys = $table->getForeignKeys(); // this sep assignment is necessary otherwise sub-loops over
- // getForeignKeys() will cause this to only execute one time.
- foreach ($fkeys as $fk ) {
- $tblFK = $table->getDatabase()->getTable($fk->getForeignTableName());
- $excludedTable = $table->getDatabase()->getTable($fk->getForeignTableName());
- $excludedClassName = $excludedTable->getPhpName();
- $thisTableObjectBuilder = OMBuilder::getNewObjectBuilder($table);
- $excludedTableObjectBuilder = OMBuilder::getNewObjectBuilder($excludedTable);
- $excludedTablePeerBuilder = OMBuilder::getNewPeerBuilder($excludedTable);
- $script .= "
- /**
- * Selects a collection of ".$table->getPhpName()." objects pre-filled with all related objects except ".$thisTableObjectBuilder->getFKPhpNameAffix($fk).".
- *
- * @return array Array of ".$table->getPhpName()." objects.
- * @throws PropelException Any exceptions caught during processing will be
- * rethrown wrapped into a PropelException.
- */
- public static function doSelectJoinAllExcept".$thisTableObjectBuilder->getFKPhpNameAffix($fk, $plural = false)."(Criteria \$c, \$con = null)
- {
- \$c = clone \$c;
- // Set the correct dbName if it has not been overridden
- // \$c->getDbName() will return the same object if not set to another value
- // so == check is okay and faster
- if (\$c->getDbName() == Propel::getDefaultDB()) {
- \$c->setDbName(self::DATABASE_NAME);
- }
- ".$this->getPeerClassname()."::addSelectColumns(\$c);
- \$startcol2 = (".$this->getPeerClassname()."::NUM_COLUMNS - ".$this->getPeerClassname()."::NUM_LAZY_LOAD_COLUMNS) + 1;
- ";
- $index = 2;
- foreach ($table->getForeignKeys() as $subfk) {
- // want to cover this case, but the code is not there yet.
- // FIXME - why not?
- if ( !($subfk->getForeignTableName() == $table->getName())) {
- $joinTable = $table->getDatabase()->getTable($subfk->getForeignTableName());
- $joinClassName = $joinTable->getPhpName();
- $joinTablePeerBuilder = OMBuilder::getNewPeerBuilder($joinTable);
- if ($joinClassName != $excludedClassName) {
- $new_index = $index + 1;
- $script .= "
- ".$joinTablePeerBuilder->getPeerClassname()."::addSelectColumns(\$c);
- \$startcol$new_index = \$startcol$index + ".$joinTablePeerBuilder->getPeerClassname()."::NUM_COLUMNS;
- ";
- $index = $new_index;
- } // if joinClassName not excludeClassName
- } // if subfk is not curr table
- } // foreach [sub] foreign keys
- foreach ($table->getForeignKeys() as $subfk) {
- // want to cover this case, but the code is not there yet.
- if ( $subfk->getForeignTableName() != $table->getName() ) {
- $joinTable = $table->getDatabase()->getTable($subfk->getForeignTableName());
- $joinClassName = $joinTable->getPhpName();
- $joinTablePeerBuilder = OMBuilder::getNewPeerBuilder($joinTable);
- if($joinClassName != $excludedClassName)
- {
- $lfMap = $subfk->getLocalForeignMapping();
- foreach ($subfk->getLocalColumns() as $columnName ) {
- $column = $table->getColumn($columnName);
- $columnFk = $joinTable->getColumn( $lfMap[$columnName]);
- $script .= "
- \$c->addJoin(".$this->getColumnConstant($column).", ".$joinTablePeerBuilder->getColumnConstant($columnFk).");
- ";
- if ($joinTable->getChildrenColumn()) {
- $script .= "
- \$om$joinClassName = Propel::import(".$joinTablePeerBuilder->getPeerClassname()."::getOMClass(\$rs, \$startcol$index));";
- } else {
- $script .= "
- \$om$joinClassName = Propel::import(".$joinTablePeerBuilder->getPeerClassname()."::getOMClass());";
- }
- $script .= "
- \$map$joinClassName = array();
- ";
- }
- }
- }
- } // foreach fkeys
- if ($table->getChildrenColumn()) {
- $script .= "
- \$cls = Propel::import(".$this->getPeerClassname()."::getOMClass(\$rs, 1));
- ";
- } else {
- $script .= "
- \$cls = Propel::import(".$this->getPeerClassname()."::getOMClass());
- ";
- $script .= "
- \$rs = ".$this->basePeerClassname ."::doSelect(\$c, \$con);
- \$results = array();
- while(\$rs->next()) {
- ";
- }
- $script .= "
- \$obj1 = new \$cls();
- \$obj1->hydrate(\$rs);
- ";
- $index = 1;
- foreach ($table->getForeignKeys() as $subfk ) {
- // want to cover this case, but the code is not there yet.
- if ( $subfk->getForeignTableName() != $table->getName() ) {
- $joinTable = $table->getDatabase()->getTable($subfk->getForeignTableName());
- $joinClassName = $joinTable->getPhpName();
- $interfaceName = $joinTable->getPhpName();
- if($joinTable->getInterface()) {
- $interfaceName = $joinTable->getInterface();
- }
- if ($joinClassName != $excludedClassName) {
- $joinedTableObjectBuilder = OMBuilder::getNewObjectBuilder($joinTable);
- $joinedTablePeerBuilder = OMBuilder::getNewPeerBuilder($joinTable);
- $index++;
- $script .= "
- \$obj$index = new \$om$joinClassName();
- \$obj".$index."->hydrate(\$rs, \$startcol$index);
- self::foreignMap(\$map".$joinClassName.", \$obj1, \$obj".$index.");
- ";
- } // if ($joinClassName != $excludedClassName) {
- } // $subfk->getForeignTableName() != $table->getName()
- } // foreach
- $script .= "
- \$results[] = \$obj1;
- }
- return \$results;
- }
- ";
- } // foreach fk
- } // addDoSelectJoinAllExcept
- } // PHP5ComplexPeerBuilder
advertising
Update the Post
Either update this post and resubmit it with changes, or make a new post.
You may also comment on this post.
Please note that information posted here will expire by default in one month. If you do not want it to expire, please set the expiry time above. If it is set to expire, web search engines will not be allowed to index it prior to it expiring. Items that are not marked to expire will be indexable by search engines. Be careful with your passwords. All illegal activities will be reported and any information will be handed over to the authorities, so be good.