示例#1
0
 /**
  * {@inheritdoc}
  */
 public function getTableSchema($table)
 {
     $result = $this->db->rawQuery("SELECT * FROM information_schema.columns WHERE table_name = '" . $this->db->tableName($table) . "'");
     $schema = new SchemaBuilder($table);
     while ($row = $result->fetchAssoc()) {
         $column = $row['column_name'];
         $schema->addField($column, $this->toDataType($row));
     }
     $sql = 'SELECT i.relname AS index_name, a.attname AS column_name, indisunique, indisprimary FROM';
     $sql .= ' pg_class t, pg_class i, pg_index ix, pg_attribute a WHERE';
     $sql .= ' t.oid = ix.indrelid AND i.oid = ix.indexrelid AND a.attrelid = t.oid';
     $sql .= " AND a.attnum = ANY(ix.indkey) AND t.relkind = 'r'";
     $sql .= " AND t.relname = '" . $this->db->tableName($table) . "'";
     $result = $this->db->rawQuery($sql);
     $indexes = array();
     while ($row = $result->fetchAssoc()) {
         $index = $row['index_name'];
         $column = $row['column_name'];
         $unique = $row['indisunique'] == 0 ? true : false;
         if (isset($indexes[$index])) {
             $indexes[$index]['columns'][] = $column;
         } else {
             $indexes[$index] = array('columns' => array($column), 'unique' => $unique);
         }
     }
     foreach ($indexes as $name => $index) {
         $name = preg_replace('/^' . preg_quote($this->db->tableName($table) . '_', '/') . '/', '', $name, 1, $count);
         if ($count == 0) {
             continue;
         }
         if ($index['unique']) {
             $schema->addUnique($name, $index['columns']);
         } else {
             $schema->addIndex($name, $index['columns']);
         }
     }
     return $schema;
 }
示例#2
0
 /**
  * {@inheritdoc}
  */
 public function getTableSchema($table)
 {
     $result = $this->db->rawQuery('PRAGMA table_info("' . $this->db->tableName($table) . '")');
     $schema = new SchemaBuilder($table);
     $primaryKey = array();
     while ($row = $result->fetchAssoc()) {
         $column = $row['name'];
         if (isset($row['pk']) and $row['pk'] == '1') {
             $primaryKey[] = $column;
         }
         $schema->addField($column, $this->toDataType($row));
     }
     $schema->setPrimaryKey($primaryKey);
     $result = $this->db->rawQuery('PRAGMA index_list("' . $this->db->tableName($table) . '")');
     while ($row = $result->fetchAssoc()) {
         $index = $row['name'];
         $unique = $row['unique'] == 1;
         $name = preg_replace('/^' . preg_quote($this->db->tableName($table) . '_', '/') . '/', '', $index, 1, $count);
         if ($count == 0) {
             continue;
         }
         $columnResult = $this->db->rawQuery('PRAGMA index_info("' . $index . '")');
         $columns = array();
         while ($row = $columnResult->fetchAssoc()) {
             $columns[] = $row['name'];
         }
         if ($unique) {
             $schema->addUnique($name, $columns);
         } else {
             $schema->addIndex($name, $columns);
         }
     }
     return $schema;
 }
示例#3
0
 /**
  * {@inheritdoc}
  */
 public function getTableSchema($table)
 {
     $result = $this->db->rawQuery('SHOW COLUMNS FROM `' . $this->db->tableName($table) . '`');
     $schema = new SchemaBuilder($table);
     while ($row = $result->fetchAssoc()) {
         $column = $row['Field'];
         $schema->addField($column, $this->toDataType($row));
     }
     $result = $this->db->rawQuery('SHOW INDEX FROM `' . $this->db->tableName($table) . '`');
     $indexes = array();
     while ($row = $result->fetchAssoc()) {
         $index = $row['Key_name'];
         $column = $row['Column_name'];
         $unique = $row['Non_unique'] == 0 ? true : false;
         if (isset($indexes[$index])) {
             $indexes[$index]['columns'][] = $column;
         } else {
             $indexes[$index] = array('columns' => array($column), 'unique' => $unique);
         }
     }
     foreach ($indexes as $name => $index) {
         if ($index['unique']) {
             $schema->addUnique($name, $index['columns']);
         } else {
             $schema->addIndex($name, $index['columns']);
         }
     }
     return $schema;
 }