Merge pull request #5179 from Budibase/fix/5153

Fix for MySQL Limits and offsets (numbers in bindings)
This commit is contained in:
Michael Drury 2022-03-30 15:23:31 +01:00 committed by GitHub
commit 5bc426bb33
3 changed files with 21 additions and 7 deletions

View File

@ -181,11 +181,7 @@ export interface QueryJson {
export interface SqlQuery { export interface SqlQuery {
sql: string sql: string
bindings?: bindings?: string[]
| string[]
| {
[key: string]: any
}
} }
export interface QueryOptions { export interface QueryOptions {

View File

@ -80,6 +80,20 @@ module MySQLModule {
}, },
} }
function bindingTypeCoerce(bindings: any[]) {
for (let i = 0; i < bindings.length; i++) {
const binding = bindings[i]
if (typeof binding !== "string") {
continue
}
const matches = binding.match(/^\d*/g)
if (matches && matches[0] !== "" && !isNaN(Number(matches[0]))) {
bindings[i] = parseFloat(binding)
}
}
return bindings
}
class MySQLIntegration extends Sql implements DatasourcePlus { class MySQLIntegration extends Sql implements DatasourcePlus {
private config: MySQLConfig private config: MySQLConfig
private client: any private client: any
@ -122,7 +136,7 @@ module MySQLModule {
// Node MySQL is callback based, so we must wrap our call in a promise // Node MySQL is callback based, so we must wrap our call in a promise
const response = await this.client.query( const response = await this.client.query(
query.sql, query.sql,
query.bindings || [] bindingTypeCoerce(query.bindings || [])
) )
return response[0] return response[0]
} finally { } finally {

View File

@ -3,6 +3,9 @@ const { EmailTemplatePurpose } = require("../../../constants")
const nodemailer = require("nodemailer") const nodemailer = require("nodemailer")
const fetch = require("node-fetch") const fetch = require("node-fetch")
// for the real email tests give them a long time to try complete/fail
jest.setTimeout(30000)
describe("/api/global/email", () => { describe("/api/global/email", () => {
let request = setup.getRequest() let request = setup.getRequest()
let config = setup.getConfig() let config = setup.getConfig()
@ -27,6 +30,7 @@ describe("/api/global/email", () => {
userId: user._id, userId: user._id,
}) })
.set(config.defaultHeaders()) .set(config.defaultHeaders())
.timeout(20000)
// ethereal hiccup, can't test right now // ethereal hiccup, can't test right now
if (res.status >= 300) { if (res.status >= 300) {
return return
@ -39,7 +43,7 @@ describe("/api/global/email", () => {
text = await response.text() text = await response.text()
} catch (err) { } catch (err) {
// ethereal hiccup, can't test right now // ethereal hiccup, can't test right now
if (parseInt(err.status) >= 300) { if (parseInt(err.status) >= 300 || (err && err.errno === "ETIME")) {
return return
} else { } else {
throw err throw err