All pastes #193203 Raw Edit

Something

public php v1 · immutable
·published 2006-10-06 17:29 UTC
rendered paste body
<?phprequire_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();		$countFK = count($table->getForeignKeys());				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