Adding function to fetch table names.
This commit is contained in:
parent
441a9f65bb
commit
732ebb4f87
|
@ -20,7 +20,6 @@ import {
|
|||
} from "./utils"
|
||||
import Sql from "./base/sql"
|
||||
import { MSSQLTablesResponse, MSSQLColumn } from "./base/types"
|
||||
|
||||
const sqlServer = require("mssql")
|
||||
const DEFAULT_SCHEMA = "dbo"
|
||||
|
||||
|
@ -284,6 +283,20 @@ class SqlServerIntegration extends Sql implements DatasourcePlus {
|
|||
this.schemaErrors = final.errors
|
||||
}
|
||||
|
||||
async queryTableNames() {
|
||||
let tableInfo: MSSQLTablesResponse[] = await this.runSQL(this.TABLES_SQL)
|
||||
const schema = this.config.schema || DEFAULT_SCHEMA
|
||||
return tableInfo
|
||||
.filter((record: any) => record.TABLE_SCHEMA === schema)
|
||||
.map((record: any) => record.TABLE_NAME)
|
||||
.filter((name: string) => this.MASTER_TABLES.indexOf(name) === -1)
|
||||
}
|
||||
|
||||
async getTableNames() {
|
||||
await this.connect()
|
||||
return this.queryTableNames()
|
||||
}
|
||||
|
||||
async read(query: SqlQuery | string) {
|
||||
await this.connect()
|
||||
const response = await this.internalQuery(getSqlQuery(query))
|
||||
|
|
|
@ -214,20 +214,11 @@ class MySQLIntegration extends Sql implements DatasourcePlus {
|
|||
|
||||
async buildSchema(datasourceId: string, entities: Record<string, Table>) {
|
||||
const tables: { [key: string]: Table } = {}
|
||||
const database = this.config.database
|
||||
await this.connect()
|
||||
|
||||
try {
|
||||
// get the tables first
|
||||
const tablesResp: Record<string, string>[] = await this.internalQuery(
|
||||
{ sql: "SHOW TABLES;" },
|
||||
{ connect: false }
|
||||
)
|
||||
const tableNames: string[] = tablesResp.map(
|
||||
(obj: any) =>
|
||||
obj[`Tables_in_${database}`] ||
|
||||
obj[`Tables_in_${database.toLowerCase()}`]
|
||||
)
|
||||
const tableNames = await this.queryTableNames()
|
||||
for (let tableName of tableNames) {
|
||||
const primaryKeys = []
|
||||
const schema: TableSchema = {}
|
||||
|
@ -274,6 +265,28 @@ class MySQLIntegration extends Sql implements DatasourcePlus {
|
|||
this.schemaErrors = final.errors
|
||||
}
|
||||
|
||||
async queryTableNames() {
|
||||
const database = this.config.database
|
||||
const tablesResp: Record<string, string>[] = await this.internalQuery(
|
||||
{ sql: "SHOW TABLES;" },
|
||||
{ connect: false }
|
||||
)
|
||||
return tablesResp.map(
|
||||
(obj: any) =>
|
||||
obj[`Tables_in_${database}`] ||
|
||||
obj[`Tables_in_${database.toLowerCase()}`]
|
||||
)
|
||||
}
|
||||
|
||||
async getTableNames() {
|
||||
await this.connect()
|
||||
try {
|
||||
return this.queryTableNames()
|
||||
} finally {
|
||||
await this.disconnect()
|
||||
}
|
||||
}
|
||||
|
||||
async create(query: SqlQuery | string) {
|
||||
const results = await this.internalQuery(getSqlQuery(query))
|
||||
return results.length ? results : [{ created: true }]
|
||||
|
|
|
@ -323,6 +323,17 @@ class OracleIntegration extends Sql implements DatasourcePlus {
|
|||
this.schemaErrors = final.errors
|
||||
}
|
||||
|
||||
async getTableNames() {
|
||||
const columnsResponse = await this.internalQuery<OracleColumnsResponse>({
|
||||
sql: this.COLUMNS_SQL,
|
||||
})
|
||||
if (!columnsResponse.rows) {
|
||||
return []
|
||||
} else {
|
||||
return columnsResponse.rows.map(row => row.TABLE_NAME)
|
||||
}
|
||||
}
|
||||
|
||||
async testConnection() {
|
||||
const response: ConnectionInfo = {
|
||||
connected: false,
|
||||
|
|
|
@ -311,6 +311,17 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
|
|||
}
|
||||
}
|
||||
|
||||
async getTableNames() {
|
||||
try {
|
||||
await this.openConnection()
|
||||
const columnsResponse: { rows: PostgresColumn[] } =
|
||||
await this.client.query(this.COLUMNS_SQL)
|
||||
return columnsResponse.rows.map(row => row.table_name)
|
||||
} finally {
|
||||
await this.closeConnection()
|
||||
}
|
||||
}
|
||||
|
||||
async create(query: SqlQuery | string) {
|
||||
const response = await this.internalQuery(getSqlQuery(query))
|
||||
return response.rows.length ? response.rows : [{ created: true }]
|
||||
|
|
|
@ -150,4 +150,5 @@ export interface DatasourcePlus extends IntegrationBase {
|
|||
getBindingIdentifier(): string
|
||||
getStringConcat(parts: string[]): string
|
||||
buildSchema(datasourceId: string, entities: Record<string, Table>): any
|
||||
getTableNames(): Promise<string[]>
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue