Esempio n. 1
0
 public static function listTableRelations($tableName)
 {
     $relations = array();
     $sql = "SELECT column_name, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM information_schema.key_column_usage WHERE table_name = '" . $tableName . "' AND table_schema = '" . Soup_Manager::getDefaultConnection()->getDatabase() . "' and REFERENCED_COLUMN_NAME is not NULL ORDER BY CONSTRAINT_NAME ASC";
     $results = Soup_Query::query($sql);
     foreach ($results as $result) {
         $result = array_change_key_case($result, CASE_LOWER);
         $relations[] = array('table' => $result['referenced_table_name'], 'local' => $result['column_name'], 'foreign' => $result['referenced_column_name']);
     }
     return $relations;
 }
Esempio n. 2
0
 /**
  * _validateSchemaElement
  *
  * @param string $name 
  * @param string $value 
  * @return void
  */
 protected function _validateSchemaElement($name, $element, $path)
 {
     $element = (array) $element;
     $validation = $this->_validation[$name];
     // Validators are a part of the column validation
     // This should be fixed, made cleaner
     if ($name == 'column') {
         $validators = Soup_Manager::getInstance()->getValidators();
         $validation = array_merge($validation, $validators);
     }
     $validation = array_flip($validation);
     foreach ($element as $key => $value) {
         if (!isset($validation[$value])) {
             throw new Soup_Import_Exception(sprintf('Invalid schema element named "' . $value . '" at path "' . $path . '"'));
         }
     }
 }
Esempio n. 3
0
 /**
  * Açık olan bütün bağlantıları kapatır.
  * @param bolean $clear
  * @return void
  */
 public static function closeAll($clear = FALSE)
 {
     if (sizeof(self::$_connections) > 0) {
         foreach (self::$_connections as $connection) {
             $connection->close();
         }
         if ($clear) {
             self::$_connections = array();
             self::$_defaultConnection = NULL;
         }
     }
 }
Esempio n. 4
0
 /**
  * Oluşturulan SQL cümlesini çalıştırır
  * @return Null|Integer|Soup_Result
  */
 public static function query($sql)
 {
     try {
         $smt = Soup_Manager::getDefaultConnection()->getAdapter()->query($sql);
         return $smt->fetchAll(Mysql::FETCH_ASSOC);
     } catch (Exception $e) {
         throw new Soup_Query_Exception($e->getMessage() . "<br /><br /><pre>" . $sql . "</pre>");
     }
 }
Esempio n. 5
0
 /**
  * importSchema
  *
  * method for importing existing schema to Soup_Record classes
  *
  * @param string $directory
  * @param array $connections Array of connection names to generate models for
  * @return array                the names of the imported classes
  */
 public function importSchema($directory, array $connections = array(), array $options = array())
 {
     try {
         $classes = array();
         print 'start';
         $connection = Soup_Manager::getDefaultConnection();
         $builder = new Soup_Import_Builder();
         $builder->setTargetPath($directory);
         $builder->setOptions($options);
         $definitions = array();
         print_r($connection->getImport());
         foreach ($connection->getImport()->listTables() as $table) {
             $definition = array();
             $definition['tableName'] = $table;
             $definition['className'] = Soup_Inflector::classify(Soup_Inflector::tableize($table));
             $definition['columns'] = $connection->getImport()->listTableColumns($table);
             $definition['connection'] = $connection->getName();
             $definition['connectionClassName'] = $definition['className'];
             try {
                 $definition['relations'] = array();
                 $relations = $connection->getImport()->listTableRelations($table);
                 $relClasses = array();
                 foreach ($relations as $relation) {
                     $table = $relation['table'];
                     $class = Soup_Inflector::classify(Soup_Inflector::tableize($table));
                     if (in_array($class, $relClasses)) {
                         $alias = $class . '_' . (count($relClasses) + 1);
                     } else {
                         $alias = $class;
                     }
                     $relClasses[] = $class;
                     $definition['relations'][$alias] = array('alias' => $alias, 'class' => $class, 'local' => $relation['local'], 'foreign' => $relation['foreign']);
                 }
             } catch (Exception $e) {
             }
             $definitions[strtolower($definition['className'])] = $definition;
             $classes[] = $definition['className'];
         }
         // Build opposite end of relationships
         foreach ($definitions as $definition) {
             $className = $definition['className'];
             $relClasses = array();
             foreach ($definition['relations'] as $alias => $relation) {
                 if (in_array($relation['class'], $relClasses) || isset($definitions[$relation['class']]['relations'][$className])) {
                     $alias = $className . '_' . (count($relClasses) + 1);
                 } else {
                     $alias = $className;
                 }
                 $relClasses[] = $relation['class'];
                 $definitions[strtolower($relation['class'])]['relations'][$alias] = array('type' => Soup_Table::RELATION_MANY, 'alias' => $alias, 'class' => $className, 'local' => $relation['foreign'], 'foreign' => $relation['local']);
             }
         }
         // Build records
         foreach ($definitions as $definition) {
             $builder->buildRecord($definition);
         }
         return $classes;
     } catch (Exception $e) {
         throw new Soup_Import_Exception($e->getMessage());
     }
 }