/** * {@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; }
/** * {@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; }
/** * {@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; }