This commit is contained in:
parent
df6bdc721c
commit
f8c3ce3afc
|
|
@ -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('$')) {
|
||||
|
|
|
|||
|
|
@ -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('$')) {
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue