public static function getDefinition() { $def = new DefinitionBuilder(); $def->addAutoIncrementId(); // Autoincrementing INT id $def->username = DataType::string(255); // Username VARCHAR(255) $def->password = DataType::string(255); // Password VARCHAR(255) $def->addtimeStamps(); // Timestamps: 'created' and 'updated' $def->addUnique('username', 'username'); // A unique index on the username field return $def; }
/** * {@inheritdoc} */ public function getDefinition($table) { $result = $this->db->query('SHOW COLUMNS FROM `' . $this->db->tableName($table) . '`'); $schema = new DefinitionBuilder(); while ($row = $result->fetchAssoc()) { $column = $row['Field']; $schema->{$column} = $this->toDataType($row); } $result = $this->db->query('SHOW INDEX FROM `' . $this->db->tableName($table) . '`'); $keys = array(); while ($row = $result->fetchAssoc()) { $key = $row['Key_name']; $column = $row['Column_name']; $unique = $row['Non_unique'] == 0 ? true : false; if (isset($keys[$key])) { $keys[$key]['columns'][] = $column; } else { $keys[$key] = array('columns' => array($column), 'unique' => $unique); } } foreach ($keys as $name => $key) { if ($key['unique']) { $schema->addUnique($key['columns'], $name); } else { $schema->addKey($key['columns'], $name); } } return $schema; }
/** * {@inheritdoc} */ public function getDefinition($table) { $result = $this->db->query('PRAGMA table_info("' . $this->db->tableName($table) . '")'); $definition = new DefinitionBuilder(); $primaryKey = array(); while ($row = $result->fetchAssoc()) { $column = $row['name']; if (isset($row['pk']) and $row['pk'] == '1') { $primaryKey[] = $column; } $definition->{$column} = $this->toDataType($row); } $definition->setPrimaryKey($primaryKey); $result = $this->db->query('PRAGMA index_list("' . $this->db->tableName($table) . '")'); while ($row = $result->fetchAssoc()) { $key = $row['name']; $unique = $row['unique'] == 1; $name = preg_replace('/^' . preg_quote($this->db->tableName($table) . '_', '/') . '/', '', $key, 1, $count); if ($count == 0) { continue; } $columnResult = $this->db->query('PRAGMA index_info("' . $key . '")'); $columns = array(); while ($row = $columnResult->fetchAssoc()) { $columns[] = $row['name']; } if ($unique) { $definition->addUnique($columns, $name); } else { $definition->addKey($columns, $name); } } return $definition; }
/** * {@inheritdoc} */ public function getDefinition($table) { $result = $this->db->query("SELECT * FROM information_schema.columns WHERE table_name = '" . $this->db->tableName($table) . "'"); $definition = new DefinitionBuilder(); while ($row = $result->fetchAssoc()) { $column = $row['column_name']; $definition->{$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->query($sql); $keys = array(); while ($row = $result->fetchAssoc()) { $key = $row['index_name']; $column = $row['column_name']; $unique = $row['indisunique'] != 0; if (isset($keys[$key])) { $keys[$key]['columns'][] = $column; } else { $keys[$key] = array('columns' => array($column), 'unique' => $unique); } } foreach ($keys as $name => $key) { $name = preg_replace('/^' . preg_quote($this->db->tableName($table) . '_', '/') . '/', '', $name, 1, $count); if ($count == 0) { continue; } if ($key['unique']) { $definition->addUnique($key['columns'], $name); } else { $definition->addKey($key['columns'], $name); } } return $definition; }