Exemplo n.º 1
0
 public static function getColumns(DB\Table $table)
 {
     //using namespace for the table identifier as there might be same name DBs on different servers
     $namespace = $table->getDatabase()->getNamespace();
     if (!isset(self::$_column_cache[$namespace])) {
         self::$_column_cache[$namespace] = array();
         $column_sql = 'SELECT "table_name", "column_name", "column_default", "is_nullable", "data_type" ' . 'FROM "information_schema"."columns" WHERE "table_schema" = ? ORDER BY ordinal_position';
         $column_stmt = $table->getDatabase()->getConnection()->prepare($column_sql);
         $column_stmt->execute(array($table->getDatabase()->getSchema()));
         while ($column_row = $column_stmt->fetch()) {
             self::$_column_cache[$namespace][$column_row['table_name']][] = $column_row;
         }
     }
     $columns = array();
     //may not be any columns
     if (isset(self::$_column_cache[$namespace][$table->getName()])) {
         foreach (self::$_column_cache[$namespace][$table->getName()] as $cached_row) {
             list($default_value, $is_serial, $sequence) = self::translateSQLDefault($cached_row['column_default']);
             $column = new DB\Column($table, $cached_row['column_name'], self::translateSQLNullable($cached_row['is_nullable']), self::translateSQLDataType($cached_row['data_type']), $default_value, $is_serial);
             if ($sequence !== null) {
                 $column->setSequenceName($sequence);
             }
             $columns[$cached_row['column_name']] = $column;
         }
     }
     return $columns;
 }
Exemplo n.º 2
0
 public static function create(Column $local_column, Column $referenced_column, $constraint_name, $is_reverse_relation)
 {
     //This is to support multiple column foreign keys, any constraints with the same name will be treated as an additional column.
     //An assumption is made in the driver that the constraint names will be unique across the table
     $instance_name = sprintf('%s.%s.%s__%s', $local_column->getTable()->getDatabase()->getName(), $local_column->getTable()->getName(), $constraint_name, $is_reverse_relation ? 'reverse' : 'forward');
     if (isset(self::$instances[$instance_name])) {
         self::$instances[$instance_name]->addColumns($local_column, $referenced_column, $is_reverse_relation);
     } else {
         self::$instances[$instance_name] = new self($local_column, $referenced_column, $is_reverse_relation, $instance_name);
     }
     return self::$instances[$instance_name];
 }