不要怂,就是干,撸起袖子干!

Commit 695676f0 by Mick Hansen

feat(sql/where): add $all support

1 parent cfa51164
......@@ -1736,14 +1736,14 @@ module.exports = (function() {
} else {
value = '(NULL)';
}
} else if (value && value.$any) {
comparator = '= ANY';
if (value.$any.$values) {
value = '(VALUES '+value.$any.$values.map(function (value) {
} else if (value && (value.$any || value.$all)) {
comparator = value.$any ? '= ANY' : '= ALL';
if (value.$any && value.$any.$values || value.$all && value.$all.$values) {
value = '(VALUES '+(value.$any && value.$any.$values || value.$all && value.$all.$values).map(function (value) {
return '('+this.escape(value)+')';
}.bind(this)).join(', ')+')';
} else {
value = '('+this.escape(value.$any, field)+')';
value = '('+this.escape(value.$any || value.$all, field)+')';
}
} else if (value && (value.$between || value.$notBetween)) {
comparator = 'BETWEEN';
......
......@@ -137,26 +137,28 @@ suite(Support.getTestDialectTeaser('SQL'), function() {
}, {
default: '[muscles] != 3'
});
});
testsql('muscles', {
$not: [2, 4]
suite('$notIn', function () {
testsql('equipment', {
$notIn: []
}, {
default: '[muscles] NOT IN (2, 4)'
default: '[equipment] NOT IN (NULL)'
});
testsql('muscles', {
$notIn: [2, 4]
testsql('equipment', {
$notIn: [4, 19]
}, {
default: '[muscles] NOT IN (2, 4)'
default: '[equipment] NOT IN (4, 19)'
});
});
suite('$notIn', function () {
testsql('equipment', {
$notIn: []
suite('$ne', function () {
testsql('email', {
$ne: 'jack.bauer@gmail.com'
}, {
default: '[equipment] NOT IN (NULL)'
});
default: "[email] != 'jack.bauer@gmail.com'"
})
});
suite('$and/$or', function () {
......@@ -312,6 +314,18 @@ suite(Support.getTestDialectTeaser('SQL'), function() {
});
testsql('muscles', {
$contains: [2, 5]
}, {
field: {
type: DataTypes.ARRAY(DataTypes.INTEGER)
}
}, {
postgres: '"muscles" @> ARRAY[2,5]::INTEGER[]'
});
});
suite('$overlap', function () {
testsql('muscles', {
$overlap: [3, 11]
}, {
postgres: '"muscles" && ARRAY[3,11]'
......@@ -324,13 +338,9 @@ suite(Support.getTestDialectTeaser('SQL'), function() {
});
testsql('muscles', {
$contains: [2, 5]
"&&": [9, 182]
}, {
field: {
type: DataTypes.ARRAY(DataTypes.INTEGER)
}
}, {
postgres: '"muscles" @> ARRAY[2,5]::INTEGER[]'
postgres: '"muscles" && ARRAY[9,182]'
});
});
......@@ -373,6 +383,46 @@ suite(Support.getTestDialectTeaser('SQL'), function() {
});
});
});
suite('$all', function() {
testsql('userId', {
$all: [4, 5, 6]
}, {
postgres: '"userId" = ALL (ARRAY[4,5,6])'
});
testsql('userId', {
$all: [2, 5]
}, {
field: {
type: DataTypes.ARRAY(DataTypes.INTEGER)
}
}, {
postgres: '"userId" = ALL (ARRAY[2,5]::INTEGER[])'
});
suite('$values', function () {
testsql('userId', {
$all: {
$values: [4, 5, 6]
}
}, {
postgres: '"userId" = ALL (VALUES (4), (5), (6))'
});
testsql('userId', {
$all: {
$values: [2, 5]
}
}, {
field: {
type: DataTypes.ARRAY(DataTypes.INTEGER)
}
}, {
postgres: '"userId" = ALL (VALUES (2), (5))'
});
});
});
});
}
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!