diff --git a/Doctrine.php b/Doctrine.php index f3216197e..753af8674 100644 --- a/Doctrine.php +++ b/Doctrine.php @@ -353,91 +353,8 @@ final class Doctrine { * @return void */ public static function compile() { - if(! self::$path) - self::$path = dirname(__FILE__); - - $classes = array("Doctrine", - "Configurable", - "Manager", - "Session", - "Table", - "Iterator", - "Exception", - "Access", - "Null", - "Record", - "Record_Iterator", - "Collection", - "Validator", - "Hydrate", - "Query", - "Query_Part", - "Query_From", - "Query_Orderby", - "Query_Groupby", - "Query_Condition", - "Query_Where", - "Query_Having", - "RawSql", - "EventListener_Interface", - "EventListener", - "Relation", - "ForeignKey", - "LocalKey", - "Association", - "DB", - "DBStatement"); - - - $ret = array(); - - foreach($classes as $class) { - if($class !== 'Doctrine') - $class = 'Doctrine_'.$class; - - $file = self::$path.DIRECTORY_SEPARATOR.str_replace("_",DIRECTORY_SEPARATOR,$class).".php"; - - if( ! file_exists($file)) - throw new Doctrine_Exception("Couldn't compile $file. File $file does not exists."); - - self::autoload($class); - $refl = new ReflectionClass ( $class ); - $lines = file( $file ); - - $start = $refl -> getStartLine() - 1; - $end = $refl -> getEndLine(); - - $ret = array_merge($ret, - array_slice($lines, - $start, - ($end - $start))); - - } - - $file = self::$path.DIRECTORY_SEPARATOR.'Doctrine.compiled.php'; - if (!is_writable($file)) - throw new Doctrine_Exception("Couldn't write compiled data. $file is not writable"); - - // first write the 'compiled' data to a text file, so - // that we can use php_strip_whitespace (which only works on files) - $fp = fopen($file, 'w'); - if ($fp === false) - throw new Doctrine_Exception("Couldn't write compiled data. Failed to open $file"); - fwrite($fp, ". + */ + +/** + * Doctrine + * the base class of Doctrine framework + * + * @package Doctrine + * @author Konsta Vesterinen + * @license LGPL + */ +class Doctrine_Compiler { + /** + * @var array $classes an array containing all runtime classes of Doctrine framework + */ + private static $classes = array( + "Doctrine", + "Configurable", + "Manager", + "Session", + "Table", + "Iterator", + "Exception", + "Access", + "Null", + "Record", + "Record_Iterator", + "Collection", + "Validator", + "Hydrate", + "Query", + "Query_Part", + "Query_From", + "Query_Orderby", + "Query_Groupby", + "Query_Condition", + "Query_Where", + "Query_Having", + "RawSql", + "EventListener_Interface", + "EventListener", + "Relation", + "ForeignKey", + "LocalKey", + "Association", + "DB", + "DBStatement"); + + /** + * method for making a single file of most used doctrine runtime components + * including the compiled file instead of multiple files (in worst + * cases dozens of files) can improve performance by an order of magnitude + * + * @throws Doctrine_Exception + * @return void + */ + public static function compile() { + $path = Doctrine::getPath(); + + $classes = self::$classes; + + $ret = array(); + + foreach($classes as $class) { + if($class !== 'Doctrine') + $class = 'Doctrine_'.$class; + + $file = $path.DIRECTORY_SEPARATOR.str_replace("_",DIRECTORY_SEPARATOR,$class).".php"; + + if( ! file_exists($file)) + throw new Doctrine_Exception("Couldn't compile $file. File $file does not exists."); + + self::autoload($class); + $refl = new ReflectionClass ( $class ); + $lines = file( $file ); + + $start = $refl -> getStartLine() - 1; + $end = $refl -> getEndLine(); + + $ret = array_merge($ret, + array_slice($lines, + $start, + ($end - $start))); + + } + + $file = $path.DIRECTORY_SEPARATOR.'Doctrine.compiled.php'; + if (!is_writable($file)) + throw new Doctrine_Exception("Couldn't write compiled data. $file is not writable"); + + // first write the 'compiled' data to a text file, so + // that we can use php_strip_whitespace (which only works on files) + $fp = fopen($file, 'w'); + if ($fp === false) + throw new Doctrine_Exception("Couldn't write compiled data. Failed to open $file"); + fwrite($fp, "