diff --git a/packages/server/src/api/controllers/datasource.js b/packages/server/src/api/controllers/datasource.js index e79834b7c5..0aff868bb6 100644 --- a/packages/server/src/api/controllers/datasource.js +++ b/packages/server/src/api/controllers/datasource.js @@ -35,7 +35,7 @@ exports.save = async function (ctx) { const PlusConnector = plusIntegrations[datasource.source].integration const connector = new PlusConnector(ctx.request.body.config) - await connector.init() + await connector.init(datasource._id) datasource.entities = connector.tables } diff --git a/packages/server/src/api/controllers/row/external.js b/packages/server/src/api/controllers/row/external.js index c9332b500f..d91ea7cdaf 100644 --- a/packages/server/src/api/controllers/row/external.js +++ b/packages/server/src/api/controllers/row/external.js @@ -38,7 +38,9 @@ async function handleRequest( tableId, { id, row, filters, sort, paginate } = {} ) { - let [datasourceId, tableName] = tableId.split("_") + const parts = tableId.split("_") + let tableName = parts.pop() + let datasourceId = parts.join("_") const table = await getTable(appId, datasourceId, tableName) if (!table) { throw `Unable to process query, table "${tableName}" not defined.` @@ -86,7 +88,9 @@ exports.save = async ctx => { exports.fetchView = async ctx => { // there are no views in external data sources, shouldn't ever be called - ctx.throw(501, "Not implemented") + // for now just fetch + ctx.params.tableId = ctx.params.viewName.split("all_")[1] + return exports.fetch(ctx) } exports.fetch = async ctx => { diff --git a/packages/server/src/api/routes/row.js b/packages/server/src/api/routes/row.js index 290df0ecf5..c48f492909 100644 --- a/packages/server/src/api/routes/row.js +++ b/packages/server/src/api/routes/row.js @@ -38,7 +38,6 @@ router authorized(PermissionTypes.TABLE, PermissionLevels.READ), rowController.search ) - .post( "/api/:tableId/rows", paramResource("tableId"), diff --git a/packages/server/src/integrations/plus/postgres.js b/packages/server/src/integrations/plus/postgres.js index 3ac49dc925..56a490f1a1 100644 --- a/packages/server/src/integrations/plus/postgres.js +++ b/packages/server/src/integrations/plus/postgres.js @@ -79,12 +79,16 @@ class PostgresPlus extends Sql { this.client = this.pool } - async init() { - 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 + async init(datasourceId) { + let keys = [] + try { + const primaryKeysResponse = await this.client.query(this.PRIMARY_KEYS_SQL) + for (let table of primaryKeysResponse.rows) { + keys.push(table.column_name) + } + } catch (err) { + // TODO: this try catch method isn't right + keys = ["id"] } const columnsResponse = await this.client.query(this.COLUMNS_SQL) @@ -97,7 +101,8 @@ class PostgresPlus extends Sql { // table key doesn't exist yet if (!tables[tableName]) { tables[tableName] = { - _id: primaryKeys[tableName], + _id: `${datasourceId}_${tableName}`, + primary: keys, name: tableName, schema: {}, }