Browse Source

SQL for fetching primary keys, needs merged into column SQL

gh-pages
Martin McKeaveney 5 years ago
parent
commit
f62c55c58f
  1. 6
      packages/builder/src/pages/builder/app/[application]/data/_layout.svelte
  2. 23
      packages/server/src/integrations/plus/postgres.js

6
packages/builder/src/pages/builder/app/[application]/data/_layout.svelte

@ -8,7 +8,7 @@
const tabs = [ const tabs = [
{ {
title: "Internal", title: "Databases",
key: "table", key: "table",
}, },
{ {
@ -17,7 +17,7 @@
}, },
] ]
let selected = $isActive("./datasource") ? "External" : "Internal" let selected = $isActive("./datasource") ? "External" : "Databases"
function selectFirstTableOrSource({ detail }) { function selectFirstTableOrSource({ detail }) {
const { key } = tabs.find(t => t.title === detail) const { key } = tabs.find(t => t.title === detail)
@ -35,7 +35,7 @@
<div class="root"> <div class="root">
<div class="nav"> <div class="nav">
<Tabs {selected} on:select={selectFirstTableOrSource}> <Tabs {selected} on:select={selectFirstTableOrSource}>
<Tab title="Internal"> <Tab title="Databases">
<div class="tab-content-padding"> <div class="tab-content-padding">
<TableNavigator /> <TableNavigator />
<Modal bind:this={modal}> <Modal bind:this={modal}>

23
packages/server/src/integrations/plus/postgres.js

@ -59,6 +59,16 @@ class PostgresPlus extends Sql {
COLUMNS_SQL = COLUMNS_SQL =
"select * from information_schema.columns where table_schema = 'public'" "select * from information_schema.columns where table_schema = 'public'"
PRIMARY_KEYS_SQL = `
select tc.table_schema, tc.table_name, tc.column_name, kc.column_name as primary_key
from information_schema.table_constraints tc
join
information_schema.key_column_usage kc on kc.table_name = tc.table_name
and kc.table_schema = tc.table_schema
and kc.constraint_name = tc.constraint_name
where tc.constraint_type = 'PRIMARY KEY';
`
constructor(config) { constructor(config) {
super("pg") super("pg")
this.config = config this.config = config
@ -70,17 +80,24 @@ class PostgresPlus extends Sql {
} }
async init() { async init() {
const response = await this.client.query(this.COLUMNS_SQL) const primaryKeysResponse = await this.client.query(this.PRIMARY_KEYS_SQL)
const primaryKeys = {}
for (let table of primaryKeysResponse.rows) {
primaryKeys[table.primary_key] = table.column_name
}
const columnsResponse = await this.client.query(this.COLUMNS_SQL)
const tables = {} const tables = {}
for (let column of response.rows) {
for (let column of columnsResponse.rows) {
const tableName = column.table_name const tableName = column.table_name
const columnName = column.column_name const columnName = column.column_name
// table key doesn't exist yet // table key doesn't exist yet
if (!tables[tableName]) { if (!tables[tableName]) {
tables[tableName] = { tables[tableName] = {
_id: "something", _id: primaryKeys[tableName],
name: tableName, name: tableName,
schema: {}, schema: {},
} }

Loading…
Cancel
Save