This commit is contained in:
Xu Chang 2025-06-09 15:43:09 +08:00
parent df6bdc721c
commit f8c3ce3afc
3 changed files with 54 additions and 10 deletions

View File

@ -402,15 +402,27 @@ class MySqlTranslator extends sqlTranslator_1.SqlTranslator {
else if (attr2 === '$length') {
// json length
const length = o[attr2];
(0, assert_1.default)(typeof length == 'number');
if (stmt2) {
stmt2 += ' and ';
}
if (p) {
stmt2 += `(JSON_LENGTH(${alias}.${attr}->>"$${p}") = ${length})`;
if (typeof length === 'number') {
if (p) {
stmt2 += `(JSON_LENGTH(${alias}.${attr}->>"$${p}") = ${length})`;
}
else {
stmt2 += `(JSON_LENGTH(${alias}.${attr}) = ${length})`;
}
}
else {
stmt2 += `(JSON_LENGTH(${alias}.${attr})= ${length})`;
(0, assert_1.default)(typeof length === 'object');
const op = Object.keys(length)[0];
(0, assert_1.default)(op.startsWith('$'));
if (p) {
stmt2 += `(JSON_LENGTH(${alias}.${attr}->>"$${p}") ${this.translatePredicate(op, length[op])})`;
}
else {
stmt2 += `(JSON_LENGTH(${alias}.${attr}) ${this.translatePredicate(op, length[op])})`;
}
}
}
else if (attr2.startsWith('$')) {

View File

@ -437,7 +437,7 @@ export class MySqlTranslator<ED extends EntityDict & BaseEntityDict> extends Sql
stmt2 += `(JSON_CONTAINS(${alias}.${attr}->>"$${p}", CAST('${value}' AS JSON)))`;
}
else {
stmt2 += `(JSON_CONTAINS(${alias}.${attr}, CAST('${value}' AS JSON)))`;
stmt2 += `(JSON_CONTAINS(${alias}.${attr}, CAST('${value}' AS JSON)))`;
}
}
else if (attr2 === '$overlaps') {
@ -450,21 +450,33 @@ export class MySqlTranslator<ED extends EntityDict & BaseEntityDict> extends Sql
stmt2 += `(JSON_OVERLAPS(${alias}.${attr}->>"$${p}", CAST('${value}' AS JSON)))`;
}
else {
stmt2 += `(JSON_OVERLAPS(${alias}.${attr}, CAST('${value}' AS JSON)))`;
stmt2 += `(JSON_OVERLAPS(${alias}.${attr}, CAST('${value}' AS JSON)))`;
}
}
else if (attr2 === '$length') {
// json length
const length = o[attr2];
assert (typeof length == 'number');
if (stmt2) {
stmt2 += ' and ';
}
if (p) {
stmt2 += `(JSON_LENGTH(${alias}.${attr}->>"$${p}") = ${length})`;
if (typeof length === 'number') {
if (p) {
stmt2 += `(JSON_LENGTH(${alias}.${attr}->>"$${p}") = ${length})`;
}
else {
stmt2 += `(JSON_LENGTH(${alias}.${attr}) = ${length})`;
}
}
else {
stmt2 += `(JSON_LENGTH(${alias}.${attr})= ${length})`;
assert (typeof length === 'object');
const op = Object.keys(length)[0];
assert(op.startsWith('$'));
if (p) {
stmt2 += `(JSON_LENGTH(${alias}.${attr}->>"$${p}") ${this.translatePredicate(op, length[op])})`;
}
else {
stmt2 += `(JSON_LENGTH(${alias}.${attr}) ${this.translatePredicate(op, length[op])})`;
}
}
}
else if (attr2.startsWith('$')) {

View File

@ -1887,6 +1887,25 @@ describe('test mysqlstore', function () {
}
}
}, context, {});
const row10 = await store.select('oper', {
data: {
id: 1,
data: {
name: 1,
price: 1,
},
},
filter: {
data: {
price: {
$length: {
$gt: 3,
},
},
}
}
}, context, {});
await context.commit();
assert(row.length === 1);
@ -1898,6 +1917,7 @@ describe('test mysqlstore', function () {
assert(row7.length === 1);
assert(row8.length === 1);
assert(row9.length === 1);
assert(row10.length === 0);
// console.log(JSON.stringify(row7));
});