objection
Advanced tools
Comparing version 2.2.5 to 2.2.6
@@ -41,3 +41,3 @@ 'use strict'; | ||
const json = this.model.$toDatabaseJson(builder); | ||
const convertedJson = this.convertFieldExpressionsToRaw(builder, json); | ||
const convertedJson = convertFieldExpressionsToRaw(builder, this.model, json); | ||
@@ -51,39 +51,2 @@ return knexBuilder.update(convertedJson); | ||
convertFieldExpressionsToRaw(builder, json) { | ||
const knex = builder.knex(); | ||
const convertedJson = {}; | ||
for (const key of Object.keys(json)) { | ||
let val = json[key]; | ||
if (key.indexOf(':') > -1) { | ||
// 'col:attr' : ref('other:lol') is transformed to | ||
// "col" : raw(`jsonb_set("col", '{attr}', to_jsonb("other"#>'{lol}'), true)`) | ||
let parsed = ref(key); | ||
let jsonRefs = '{' + parsed.parsedExpr.access.map((it) => it.ref).join(',') + '}'; | ||
let valuePlaceholder = '?'; | ||
if (isKnexQueryBuilder(val) || isKnexRaw(val)) { | ||
valuePlaceholder = 'to_jsonb(?)'; | ||
} else { | ||
val = JSON.stringify(val); | ||
} | ||
convertedJson[ | ||
parsed.column | ||
] = knex.raw(`jsonb_set(??, '${jsonRefs}', ${valuePlaceholder}, true)`, [ | ||
convertedJson[parsed.column] || parsed.column, | ||
val, | ||
]); | ||
delete this.model[key]; | ||
} else { | ||
convertedJson[key] = val; | ||
} | ||
} | ||
return convertedJson; | ||
} | ||
toFindOperation() { | ||
@@ -134,4 +97,42 @@ return null; | ||
function convertFieldExpressionsToRaw(builder, model, json) { | ||
const knex = builder.knex(); | ||
const convertedJson = {}; | ||
for (const key of Object.keys(json)) { | ||
let val = json[key]; | ||
if (key.indexOf(':') > -1) { | ||
// 'col:attr' : ref('other:lol') is transformed to | ||
// "col" : raw(`jsonb_set("col", '{attr}', to_jsonb("other"#>'{lol}'), true)`) | ||
let parsed = ref(key); | ||
let jsonRefs = '{' + parsed.parsedExpr.access.map((it) => it.ref).join(',') + '}'; | ||
let valuePlaceholder = '?'; | ||
if (isKnexQueryBuilder(val) || isKnexRaw(val)) { | ||
valuePlaceholder = 'to_jsonb(?)'; | ||
} else { | ||
val = JSON.stringify(val); | ||
} | ||
convertedJson[ | ||
parsed.column | ||
] = knex.raw(`jsonb_set(??, '${jsonRefs}', ${valuePlaceholder}, true)`, [ | ||
convertedJson[parsed.column] || parsed.column, | ||
val, | ||
]); | ||
delete model[key]; | ||
} else { | ||
convertedJson[key] = val; | ||
} | ||
} | ||
return convertedJson; | ||
} | ||
module.exports = { | ||
UpdateOperation, | ||
convertFieldExpressionsToRaw, | ||
}; |
@@ -7,2 +7,3 @@ 'use strict'; | ||
const { KnexOperation } = require('./operations/KnexOperation'); | ||
const { MergeOperation } = require('./operations/MergeOperation'); | ||
const { SelectOperation } = require('./operations/select/SelectOperation'); | ||
@@ -697,3 +698,3 @@ const { ReturningOperation } = require('./operations/ReturningOperation'); | ||
merge(...args) { | ||
return this.addOperation(new KnexOperation('merge'), args); | ||
return this.addOperation(new MergeOperation('merge'), args); | ||
} | ||
@@ -700,0 +701,0 @@ } |
@@ -7,3 +7,3 @@ 'use strict'; | ||
function isEmpty(item) { | ||
if (Array.isArray(item)) { | ||
if (Array.isArray(item) || Buffer.isBuffer(item)) { | ||
return item.length === 0; | ||
@@ -10,0 +10,0 @@ } else if (isObject(item)) { |
{ | ||
"name": "objection", | ||
"version": "2.2.5", | ||
"version": "2.2.6", | ||
"description": "An SQL-friendly ORM for Node.js", | ||
@@ -5,0 +5,0 @@ "main": "lib/objection.js", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
647560
181
20061