const BASE_CLASSES_DIRECTORY = '_generated';
- private static $_loadedModelFiles = array();
-
private function __construct() {}
public static function getTable($componentName)
return $models;
}
- public static function createTablesFromModels($directory)
+ public static function createTablesFromModels($app)
{
- return IPF_ORM_Manager::connection()->export->exportSchema($directory);
+ IPF_ORM_Manager::connection()->export->exportClasses($app->modelList());
}
-
- public static function generateSqlFromModels($directory = null)
+
+ public static function generateSqlFromModels($app)
{
- $sql = IPF_ORM_Manager::connection()->export->exportSql($directory);
+ $sql = IPF_ORM_Manager::connection()->export->exportSortedClassesSql($app->modelList(), false);
+
$build = '';
foreach ($sql as $query) {
$build .= $query.";\n\n";
}
return $build;
- }
-
- public static function loadModel($className, $path = null)
- {
- self::$_loadedModelFiles[$className] = $path;
- }
-
- public static function filterInvalidModels($classes)
- {
- $validModels = array();
- foreach ((array) $classes as $name) {
- if (self::isValidModelClass($name) && ! in_array($name, $validModels)) {
- $validModels[] = $name;
- }
- }
-
- return $validModels;
- }
-
- public static function loadModels($directory, $modelLoading = null)
- {
- $loadedModels = array();
- try{
- $it = new DirectoryIterator($directory.DIRECTORY_SEPARATOR.IPF_ORM::BASE_CLASSES_DIRECTORY);
- }catch(RuntimeException $e){
- return $loadedModels;
- }
- foreach ($it as $file) {
- $e = explode('.', $file->getFileName());
- if (end($e) === 'php') {
- $className = $e[0];
- require_once($file->getPathName());
- }
- }
- $it = new DirectoryIterator($directory);
- foreach ($it as $file) {
- $e = explode('.', $file->getFileName());
- if (end($e) === 'php') {
- $className = $e[0];
- require_once($file->getPathName());
- $loadedModels[$className] = $className;
- }
- }
- return $loadedModels;
- }
-
-
- public static function isValidModelClass($class)
- {
- if ($class instanceof IPF_ORM_Record) {
- $class = get_class($class);
- }
- if (is_string($class) && class_exists($class)) {
- $class = new ReflectionClass($class);
- }
- if ($class instanceof ReflectionClass) {
- if ( ! $class->isAbstract() && $class->isSubClassOf('IPF_ORM_Record')) {
- return true;
- }
- }
- return false;
}
public static function dump($var, $output = true, $indent = "")
return implode("\n", $ret);
}
}
+
return $sql;
}
- public function createTable($name, array $fields, array $options = array())
- {
- $sql = (array) $this->createTableSql($name, $fields, $options);
-
- foreach ($sql as $query) {
- $this->conn->execute($query);
- }
- }
-
public function createSequence($seqName, $start = 1, array $options = array())
{
return $this->conn->execute($this->createSequenceSql($seqName, $start = 1, $options));
return '';
}
- public function exportSchema($directory = null)
- {
- if ($directory !== null) {
- $models = IPF_ORM::filterInvalidModels(IPF_ORM::loadModels($directory));
- } else {
- $models = IPF_ORM::getLoadedModels();
- }
- $this->exportClasses($models);
- }
-
public function exportSortedClassesSql($classes, $groupByConnection = true)
{
$connections = array();
}
}
- public function exportClassesSql(array $classes)
+ public function exportClassesSql(array $models)
{
- $models = IPF_ORM::filterInvalidModels($classes);
-
$sql = array();
foreach ($models as $name) {
return $sql;
}
+}
- public function exportSql($directory = null)
- {
- if ($directory !== null) {
- $models = IPF_ORM::filterInvalidModels(IPF_ORM::loadModels($directory));
- } else {
- $models = IPF_ORM::getLoadedModels();
- }
-
- return $this->exportSortedClassesSql($models, false);
- }
-
- public function exportTable(IPF_ORM_Table $table)
- {
- try {
- $data = $table->getExportableFormat();
-
- $this->conn->export->createTable($data['tableName'], $data['columns'], $data['options']);
- } catch(IPF_ORM_Exception $e) {
- // we only want to silence table already exists errors
- if ($e->getPortableCode() !== IPF_ORM::ERR_ALREADY_EXISTS) {
- throw $e;
- }
- }
- }
-}
\ No newline at end of file