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

Commit 695676f0 by Mick Hansen

feat(sql/where): add $all support

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