Merge branch 'master' into cheeks-fixes

This commit is contained in:
Andrew Kingston 2024-12-12 14:12:19 +00:00 committed by GitHub
commit 3be6800626
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 50 additions and 20 deletions

View File

@ -155,7 +155,7 @@ jobs:
strategy: strategy:
matrix: matrix:
datasource: datasource:
[mssql, mysql, postgres, mongodb, mariadb, oracle, sqs, none] [mssql, mysql, postgres, postgres_legacy, mongodb, mariadb, oracle, sqs, none]
steps: steps:
- name: Checkout repo - name: Checkout repo
uses: actions/checkout@v4 uses: actions/checkout@v4
@ -190,6 +190,8 @@ jobs:
docker pull mariadb@${{ steps.dotenv.outputs.MARIADB_SHA }} docker pull mariadb@${{ steps.dotenv.outputs.MARIADB_SHA }}
elif [ "${{ matrix.datasource }}" == "oracle" ]; then elif [ "${{ matrix.datasource }}" == "oracle" ]; then
docker pull budibase/oracle-database:23.2-slim-faststart docker pull budibase/oracle-database:23.2-slim-faststart
elif [ "${{ matrix.datasource }}" == "postgres_legacy" ]; then
docker pull postgres:9.5.25
fi fi
docker pull minio/minio & docker pull minio/minio &
docker pull redis & docker pull redis &

View File

@ -1244,9 +1244,9 @@ ms@^2.1.1:
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
nanoid@^3.3.6: nanoid@^3.3.6:
version "3.3.7" version "3.3.8"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf"
integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==
natural-compare@^1.4.0: natural-compare@^1.4.0:
version "1.4.0" version "1.4.0"

View File

@ -1,6 +1,6 @@
{ {
"$schema": "node_modules/lerna/schemas/lerna-schema.json", "$schema": "node_modules/lerna/schemas/lerna-schema.json",
"version": "3.2.27", "version": "3.2.28",
"npmClient": "yarn", "npmClient": "yarn",
"concurrency": 20, "concurrency": 20,
"command": { "command": {

View File

@ -16,7 +16,7 @@
}, },
"scripts": { "scripts": {
"build": "vite build", "build": "vite build",
"dev": "vite build --watch" "dev": "vite build --watch --mode=dev"
}, },
"dependencies": { "dependencies": {
"@budibase/bbui": "*", "@budibase/bbui": "*",

View File

@ -25,8 +25,8 @@ export default defineConfig(({ mode }) => {
outDir: "dist", outDir: "dist",
name: "budibase_client", name: "budibase_client",
fileName: () => "budibase-client.js", fileName: () => "budibase-client.js",
minify: isProduction,
}, },
minify: isProduction,
}, },
plugins: [ plugins: [
svelte({ svelte({

@ -1 +1 @@
Subproject commit 977baca179fef1192f8fe051122288a4128f7a63 Subproject commit e7c9f08aeb0498a20594f3c912afedcfdc220a6a

View File

@ -596,7 +596,7 @@ const datasources = datasourceDescribe({
if (datasources.length) { if (datasources.length) {
describe.each(datasources)( describe.each(datasources)(
"$dbName", "$dbName",
({ config, dsProvider, isPostgres, isMySQL, isMariaDB }) => { ({ config, dsProvider, isPostgres, isLegacy, isMySQL, isMariaDB }) => {
let datasource: Datasource let datasource: Datasource
let client: Knex let client: Knex
@ -647,6 +647,13 @@ if (datasources.length) {
// can load it. We're using postgres 16 in tests at the time of writing. // can load it. We're using postgres 16 in tests at the time of writing.
schema = schema.replace("SET transaction_timeout = 0;", "") schema = schema.replace("SET transaction_timeout = 0;", "")
} }
if (isPostgres && isLegacy) {
// in older versions of Postgres, this is not a valid option - Postgres 9.5 does not support this.
schema = schema.replace(
"SET idle_in_transaction_session_timeout = 0;",
""
)
}
await config.api.table.destroy(table._id!, table._rev!) await config.api.table.destroy(table._id!, table._rev!)

View File

@ -1,5 +1,4 @@
import { Datasource, FieldType, Table } from "@budibase/types" import { Datasource, FieldType, Table } from "@budibase/types"
import _ from "lodash"
import { generator } from "@budibase/backend-core/tests" import { generator } from "@budibase/backend-core/tests"
import { import {
DatabaseName, DatabaseName,
@ -8,7 +7,9 @@ import {
} from "../integrations/tests/utils" } from "../integrations/tests/utils"
import { Knex } from "knex" import { Knex } from "knex"
const mainDescriptions = datasourceDescribe({ only: [DatabaseName.POSTGRES] }) const mainDescriptions = datasourceDescribe({
only: [DatabaseName.POSTGRES, DatabaseName.POSTGRES_LEGACY],
})
if (mainDescriptions.length) { if (mainDescriptions.length) {
describe.each(mainDescriptions)( describe.each(mainDescriptions)(

View File

@ -173,8 +173,13 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
` `
COLUMNS_SQL = () => ` COLUMNS_SQL = () => `
select * from information_schema.columns where table_schema = ANY(current_schemas(false)) SELECT columns.*
AND pg_table_is_visible(to_regclass(format('%I.%I', table_schema, table_name))); FROM information_schema.columns columns
JOIN pg_class pg_class ON pg_class.relname = columns.table_name
JOIN pg_namespace name_space ON name_space.oid = pg_class.relnamespace
WHERE columns.table_schema = ANY(current_schemas(false))
AND columns.table_schema = name_space.nspname
AND pg_table_is_visible(pg_class.oid);
` `
constructor(config: PostgresConfig) { constructor(config: PostgresConfig) {

View File

@ -9,5 +9,6 @@ dotenv.config({
export const MSSQL_IMAGE = `mcr.microsoft.com/mssql/server@${process.env.MSSQL_SHA}` export const MSSQL_IMAGE = `mcr.microsoft.com/mssql/server@${process.env.MSSQL_SHA}`
export const MYSQL_IMAGE = `mysql@${process.env.MYSQL_SHA}` export const MYSQL_IMAGE = `mysql@${process.env.MYSQL_SHA}`
export const POSTGRES_IMAGE = `postgres@${process.env.POSTGRES_SHA}` export const POSTGRES_IMAGE = `postgres@${process.env.POSTGRES_SHA}`
export const POSTGRES_LEGACY_IMAGE = `postgres:9.5.25`
export const MONGODB_IMAGE = `mongo@${process.env.MONGODB_SHA}` export const MONGODB_IMAGE = `mongo@${process.env.MONGODB_SHA}`
export const MARIADB_IMAGE = `mariadb@${process.env.MARIADB_SHA}` export const MARIADB_IMAGE = `mariadb@${process.env.MARIADB_SHA}`

View File

@ -16,6 +16,7 @@ export const { startContainer } = testContainerUtils
export enum DatabaseName { export enum DatabaseName {
POSTGRES = "postgres", POSTGRES = "postgres",
POSTGRES_LEGACY = "postgres_legacy",
MONGODB = "mongodb", MONGODB = "mongodb",
MYSQL = "mysql", MYSQL = "mysql",
SQL_SERVER = "mssql", SQL_SERVER = "mssql",
@ -26,6 +27,7 @@ export enum DatabaseName {
const providers: Record<DatabaseName, DatasourceProvider> = { const providers: Record<DatabaseName, DatasourceProvider> = {
[DatabaseName.POSTGRES]: postgres.getDatasource, [DatabaseName.POSTGRES]: postgres.getDatasource,
[DatabaseName.POSTGRES_LEGACY]: postgres.getLegacyDatasource,
[DatabaseName.MONGODB]: mongodb.getDatasource, [DatabaseName.MONGODB]: mongodb.getDatasource,
[DatabaseName.MYSQL]: mysql.getDatasource, [DatabaseName.MYSQL]: mysql.getDatasource,
[DatabaseName.SQL_SERVER]: mssql.getDatasource, [DatabaseName.SQL_SERVER]: mssql.getDatasource,
@ -145,7 +147,11 @@ export function datasourceDescribe(opts: DatasourceDescribeOpts) {
DatabaseName.ORACLE, DatabaseName.ORACLE,
].includes(dbName), ].includes(dbName),
isMySQL: dbName === DatabaseName.MYSQL, isMySQL: dbName === DatabaseName.MYSQL,
isPostgres: dbName === DatabaseName.POSTGRES, isPostgres:
dbName === DatabaseName.POSTGRES ||
dbName === DatabaseName.POSTGRES_LEGACY,
// check if any of the legacy tags
isLegacy: dbName === DatabaseName.POSTGRES_LEGACY,
isMongodb: dbName === DatabaseName.MONGODB, isMongodb: dbName === DatabaseName.MONGODB,
isMSSQL: dbName === DatabaseName.SQL_SERVER, isMSSQL: dbName === DatabaseName.SQL_SERVER,
isOracle: dbName === DatabaseName.ORACLE, isOracle: dbName === DatabaseName.ORACLE,

View File

@ -3,14 +3,14 @@ import { GenericContainer, Wait } from "testcontainers"
import { generator, testContainerUtils } from "@budibase/backend-core/tests" import { generator, testContainerUtils } from "@budibase/backend-core/tests"
import { startContainer } from "." import { startContainer } from "."
import knex, { Knex } from "knex" import knex, { Knex } from "knex"
import { POSTGRES_IMAGE } from "./images" import { POSTGRES_IMAGE, POSTGRES_LEGACY_IMAGE } from "./images"
let ports: Promise<testContainerUtils.Port[]> let ports: Promise<testContainerUtils.Port[]>
export async function getDatasource(): Promise<Datasource> { async function datasourceWithImage(image: string): Promise<Datasource> {
if (!ports) { if (!ports) {
ports = startContainer( ports = startContainer(
new GenericContainer(POSTGRES_IMAGE) new GenericContainer(image)
.withExposedPorts(5432) .withExposedPorts(5432)
.withEnvironment({ POSTGRES_PASSWORD: "password" }) .withEnvironment({ POSTGRES_PASSWORD: "password" })
.withWaitStrategy( .withWaitStrategy(
@ -51,6 +51,14 @@ export async function getDatasource(): Promise<Datasource> {
return datasource return datasource
} }
export async function getDatasource(): Promise<Datasource> {
return datasourceWithImage(POSTGRES_IMAGE)
}
export async function getLegacyDatasource(): Promise<Datasource> {
return datasourceWithImage(POSTGRES_LEGACY_IMAGE)
}
export async function knexClient( export async function knexClient(
ds: Datasource, ds: Datasource,
opts?: Knex.Config opts?: Knex.Config

View File

@ -16187,9 +16187,9 @@ path-scurry@^1.11.1, path-scurry@^1.6.1:
minipass "^5.0.0 || ^6.0.2 || ^7.0.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
path-to-regexp@^0.1.10: path-to-regexp@^0.1.10:
version "0.1.11" version "0.1.12"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.11.tgz#a527e662c89efc4646dbfa8100bf3e847e495761" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7"
integrity sha512-c0t+KCuUkO/YDLPG4WWzEwx3J5F/GHXsD1h/SNZfySqAIKe/BaP95x8fWtOfRJokpS5yYHRJjMtYlXD8jxnpbw== integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==
path-to-regexp@^6.1.0, path-to-regexp@^6.3.0: path-to-regexp@^6.1.0, path-to-regexp@^6.3.0:
version "6.3.0" version "6.3.0"