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