1
0
Fork 0
mirror of synced 2024-07-09 00:06:05 +12:00

Table disappears from side bar when changing display name (#10909)

* Pass sourceId on fetch tables

* Use ExternalTable type
This commit is contained in:
melohagan 2023-06-20 17:07:12 +01:00 committed by GitHub
parent 698bbad989
commit b0debf17ef
6 changed files with 52 additions and 22 deletions

View file

@ -12,7 +12,7 @@ import {
Row,
SearchFilters,
SortJson,
Table,
ExternalTable,
TableRequest,
} from "@budibase/types"
import { OAuth2Client } from "google-auth-library"
@ -136,7 +136,7 @@ const SCHEMA: Integration = {
class GoogleSheetsIntegration implements DatasourcePlus {
private readonly config: GoogleSheetsConfig
private client: GoogleSpreadsheet
public tables: Record<string, Table> = {}
public tables: Record<string, ExternalTable> = {}
public schemaErrors: Record<string, string> = {}
constructor(config: GoogleSheetsConfig) {
@ -248,12 +248,18 @@ class GoogleSheetsIntegration implements DatasourcePlus {
return sheets.map(s => s.title)
}
getTableSchema(title: string, headerValues: string[], id?: string) {
getTableSchema(
title: string,
headerValues: string[],
datasourceId: string,
id?: string
) {
// base table
const table: Table = {
const table: ExternalTable = {
name: title,
primary: [GOOGLE_SHEETS_PRIMARY_KEY],
schema: {},
sourceId: datasourceId,
}
if (id) {
table._id = id
@ -268,14 +274,17 @@ class GoogleSheetsIntegration implements DatasourcePlus {
return table
}
async buildSchema(datasourceId: string, entities: Record<string, Table>) {
async buildSchema(
datasourceId: string,
entities: Record<string, ExternalTable>
) {
// not fully configured yet
if (!this.config.auth) {
return
}
await this.connect()
const sheets = this.client.sheetsByIndex
const tables: Record<string, Table> = {}
const tables: Record<string, ExternalTable> = {}
for (let sheet of sheets) {
// must fetch rows to determine schema
await sheet.getRows()
@ -284,6 +293,7 @@ class GoogleSheetsIntegration implements DatasourcePlus {
tables[sheet.title] = this.getTableSchema(
sheet.title,
sheet.headerValues,
datasourceId,
id
)
}

View file

@ -2,7 +2,7 @@ import {
DatasourceFieldType,
Integration,
Operation,
Table,
ExternalTable,
TableSchema,
QueryJson,
QueryType,
@ -97,7 +97,7 @@ class SqlServerIntegration extends Sql implements DatasourcePlus {
private index: number = 0
private readonly pool: any
private client: any
public tables: Record<string, Table> = {}
public tables: Record<string, ExternalTable> = {}
public schemaErrors: Record<string, string> = {}
MASTER_TABLES = [
@ -220,7 +220,10 @@ class SqlServerIntegration extends Sql implements DatasourcePlus {
* @param {*} datasourceId - datasourceId to fetch
* @param entities - the tables that are to be built
*/
async buildSchema(datasourceId: string, entities: Record<string, Table>) {
async buildSchema(
datasourceId: string,
entities: Record<string, ExternalTable>
) {
await this.connect()
let tableInfo: MSSQLTablesResponse[] = await this.runSQL(this.TABLES_SQL)
if (tableInfo == null || !Array.isArray(tableInfo)) {
@ -233,7 +236,7 @@ class SqlServerIntegration extends Sql implements DatasourcePlus {
.map((record: any) => record.TABLE_NAME)
.filter((name: string) => this.MASTER_TABLES.indexOf(name) === -1)
const tables: Record<string, Table> = {}
const tables: Record<string, ExternalTable> = {}
for (let tableName of tableNames) {
// get the column definition (type)
const definition = await this.runSQL(this.getDefinitionSQL(tableName))
@ -276,6 +279,7 @@ class SqlServerIntegration extends Sql implements DatasourcePlus {
}
tables[tableName] = {
_id: buildExternalTableId(datasourceId, tableName),
sourceId: datasourceId,
primary: primaryKeys,
name: tableName,
schema,

View file

@ -4,7 +4,7 @@ import {
QueryType,
QueryJson,
SqlQuery,
Table,
ExternalTable,
TableSchema,
DatasourcePlus,
DatasourceFeature,
@ -123,7 +123,7 @@ export function bindingTypeCoerce(bindings: any[]) {
class MySQLIntegration extends Sql implements DatasourcePlus {
private config: MySQLConfig
private client?: mysql.Connection
public tables: Record<string, Table> = {}
public tables: Record<string, ExternalTable> = {}
public schemaErrors: Record<string, string> = {}
constructor(config: MySQLConfig) {
@ -220,8 +220,11 @@ class MySQLIntegration extends Sql implements DatasourcePlus {
}
}
async buildSchema(datasourceId: string, entities: Record<string, Table>) {
const tables: { [key: string]: Table } = {}
async buildSchema(
datasourceId: string,
entities: Record<string, ExternalTable>
) {
const tables: { [key: string]: ExternalTable } = {}
await this.connect()
try {
@ -259,6 +262,7 @@ class MySQLIntegration extends Sql implements DatasourcePlus {
if (!tables[tableName]) {
tables[tableName] = {
_id: buildExternalTableId(datasourceId, tableName),
sourceId: datasourceId,
primary: primaryKeys,
name: tableName,
schema,

View file

@ -5,7 +5,7 @@ import {
QueryJson,
QueryType,
SqlQuery,
Table,
ExternalTable,
DatasourcePlus,
DatasourceFeature,
ConnectionInfo,
@ -108,7 +108,7 @@ class OracleIntegration extends Sql implements DatasourcePlus {
private readonly config: OracleConfig
private index: number = 1
public tables: Record<string, Table> = {}
public tables: Record<string, ExternalTable> = {}
public schemaErrors: Record<string, string> = {}
private readonly COLUMNS_SQL = `
@ -262,13 +262,16 @@ class OracleIntegration extends Sql implements DatasourcePlus {
* @param {*} datasourceId - datasourceId to fetch
* @param entities - the tables that are to be built
*/
async buildSchema(datasourceId: string, entities: Record<string, Table>) {
async buildSchema(
datasourceId: string,
entities: Record<string, ExternalTable>
) {
const columnsResponse = await this.internalQuery<OracleColumnsResponse>({
sql: this.COLUMNS_SQL,
})
const oracleTables = this.mapColumns(columnsResponse)
const tables: { [key: string]: Table } = {}
const tables: { [key: string]: ExternalTable } = {}
// iterate each table
Object.values(oracleTables).forEach(oracleTable => {
@ -279,6 +282,7 @@ class OracleIntegration extends Sql implements DatasourcePlus {
primary: [],
name: oracleTable.name,
schema: {},
sourceId: datasourceId,
}
tables[oracleTable.name] = table
}

View file

@ -4,7 +4,7 @@ import {
QueryType,
QueryJson,
SqlQuery,
Table,
ExternalTable,
DatasourcePlus,
DatasourceFeature,
ConnectionInfo,
@ -124,7 +124,7 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
private readonly config: PostgresConfig
private index: number = 1
private open: boolean
public tables: Record<string, Table> = {}
public tables: Record<string, ExternalTable> = {}
public schemaErrors: Record<string, string> = {}
COLUMNS_SQL!: string
@ -239,7 +239,10 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
* @param {*} datasourceId - datasourceId to fetch
* @param entities - the tables that are to be built
*/
async buildSchema(datasourceId: string, entities: Record<string, Table>) {
async buildSchema(
datasourceId: string,
entities: Record<string, ExternalTable>
) {
let tableKeys: { [key: string]: string[] } = {}
await this.openConnection()
try {
@ -265,7 +268,7 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
const columnsResponse: { rows: PostgresColumn[] } =
await this.client.query(this.COLUMNS_SQL)
const tables: { [key: string]: Table } = {}
const tables: { [key: string]: ExternalTable } = {}
for (let column of columnsResponse.rows) {
const tableName: string = column.table_name
@ -278,6 +281,7 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
primary: tableKeys[tableName] || [],
name: tableName,
schema: {},
sourceId: datasourceId,
}
}

View file

@ -82,6 +82,10 @@ export interface Table extends Document {
rowHeight?: number
}
export interface ExternalTable extends Table {
sourceId: string
}
export interface TableRequest extends Table {
_rename?: RenameColumn
created?: boolean