Budibase is an open-source low-code platform for creating internal apps in minutes. Supports PostgreSQL, MySQL, MSSQL, MongoDB, Rest API, Docker, K8s 🚀
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

135 lines
3.8 KiB

// const Sql = require("../base/sql")
// const { Pool } = require("pg")
// const { FieldTypes } = require("../../constants")
// const { FIELD_TYPES } = require("../Integration")
// const { SEPARATOR } = require("@budibase/auth/db")
// const TYPE_MAP = {
// text: FieldTypes.LONGFORM,
// varchar: FieldTypes.STRING,
// integer: FieldTypes.NUMBER,
// bigint: FieldTypes.NUMBER,
// decimal: FieldTypes.NUMBER,
// smallint: FieldTypes.NUMBER,
// timestamp: FieldTypes.DATETIME,
// time: FieldTypes.DATETIME,
// boolean: FieldTypes.BOOLEAN,
// json: FIELD_TYPES.JSON,
// }
// const SCHEMA = {
// friendlyName: "PostgreSQL",
// description:
// "PostgreSQL, also known as Postgres, is a free and open-source relational database management system emphasizing extensibility and SQL compliance.",
// plus: true,
// datasource: {
// host: {
// type: FIELD_TYPES.STRING,
// default: "localhost",
// required: true,
// },
// port: {
// type: FIELD_TYPES.NUMBER,
// required: true,
// default: 5432,
// },
// database: {
// type: FIELD_TYPES.STRING,
// default: "postgres",
// required: true,
// },
// user: {
// type: FIELD_TYPES.STRING,
// default: "root",
// required: true,
// },
// password: {
// type: FIELD_TYPES.PASSWORD,
// default: "root",
// required: true,
// },
// ssl: {
// type: FIELD_TYPES.BOOLEAN,
// default: false,
// required: false,
// },
// },
// }
// class PostgresPlus extends Sql {
// static pool
// COLUMNS_SQL =
// "select * from information_schema.columns where table_schema = 'public'"
// PRIMARY_KEYS_SQL = `
// select tc.table_schema, tc.table_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, datasource) {
// super("pg")
// this.config = config
// this.datasource = datasource
// if (!this.pool) {
// this.pool = new Pool(this.config)
// }
// this.client = this.pool
// }
// 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 || table.primary_key)
// }
// } catch (err) {
// // TODO: this try catch method isn't right
// keys = ["id"]
// }
// const columnsResponse = await this.client.query(this.COLUMNS_SQL)
// const tables = {}
// for (let column of columnsResponse.rows) {
// const tableName = column.table_name
// const columnName = column.column_name
// // table key doesn't exist yet
// if (!tables[tableName]) {
// tables[tableName] = {
// _id: `${datasourceId}${SEPARATOR}${tableName}`,
// // TODO: this needs to accommodate composite keys
// primary: keys,
// name: tableName,
// schema: {},
// }
// }
// tables[tableName].schema[columnName] = {
// name: columnName,
// type: TYPE_MAP[column.data_type] || FIELD_TYPES.STRING,
// }
// }
// this.tables = tables
// }
// async query(json) {
// const operation = this._operation(json).toLowerCase()
// const sql = this._query(json)
// const response = await this.client.query(sql.sql, sql.bindings)
// return response.rows.length ? response.rows : [{ [operation]: true }]
// }
// }
// module.exports = {
// schema: SCHEMA,
// integration: PostgresPlus,
// }