public function getColumns($table)
{
$columns = [];
foreach ($this->connection->query("\n\t\t\tSELECT\n\t\t\t\ta.attname::varchar AS name,\n\t\t\t\tc.relname::varchar AS table,\n\t\t\t\tupper(t.typname) AS nativetype,\n\t\t\t\tCASE WHEN a.atttypmod = -1 THEN NULL ELSE a.atttypmod -4 END AS size,\n\t\t\t\tFALSE AS unsigned,\n\t\t\t\tNOT (a.attnotnull OR t.typtype = 'd' AND t.typnotnull) AS nullable,\n\t\t\t\tpg_catalog.pg_get_expr(ad.adbin, 'pg_catalog.pg_attrdef'::regclass)::varchar AS default,\n\t\t\t\tcoalesce(co.contype = 'p' AND strpos(ad.adsrc, 'nextval') = 1, FALSE) AS autoincrement,\n\t\t\t\tcoalesce(co.contype = 'p', FALSE) AS primary,\n\t\t\t\tsubstring(pg_catalog.pg_get_expr(ad.adbin, 'pg_catalog.pg_attrdef'::regclass) from 'nextval[(]''\"?([^''\"]+)') AS sequence\n\t\t\tFROM\n\t\t\t\tpg_catalog.pg_attribute AS a\n\t\t\t\tJOIN pg_catalog.pg_class AS c ON a.attrelid = c.oid\n\t\t\t\tJOIN pg_catalog.pg_type AS t ON a.atttypid = t.oid\n\t\t\t\tLEFT JOIN pg_catalog.pg_attrdef AS ad ON ad.adrelid = c.oid AND ad.adnum = a.attnum\n\t\t\t\tLEFT JOIN pg_catalog.pg_constraint AS co ON co.connamespace = c.relnamespace AND contype = 'p' AND co.conrelid = c.oid AND a.attnum = ANY(co.conkey)\n\t\t\tWHERE\n\t\t\t\tc.relkind IN ('r', 'v')\n\t\t\t\tAND c.oid = {$this->connection->quote($this->delimiteFQN($table))}::regclass\n\t\t\t\tAND a.attnum > 0\n\t\t\t\tAND NOT a.attisdropped\n\t\t\tORDER BY\n\t\t\t\ta.attnum\n\t\t") as $row) {
$column = (array) $row;
$column['vendor'] = $column;
unset($column['sequence']);
$columns[] = $column;
}
return $columns;
}