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

Commit cc80c087 by Mick Hansen

feat(sql/where): add ANY and ANY VALUES support

1 parent de1d3e9d
......@@ -1705,6 +1705,15 @@ module.exports = (function() {
value = '('+(value.$in || value.$not || value.$notIn || value).map(function (item) {
return self.escape(item);
}).join(', ')+')';
} else if (value && value.$any) {
comparator = '= ANY';
if (value.$any.$values) {
value = '(VALUES '+value.$any.$values.map(function (value) {
return '('+this.escape(value)+')';
}.bind(this)).join(', ')+')';
} else {
value = '('+this.escape(value.$any, field)+')';
}
} else if (value && (value.$between || value.$notBetween)) {
comparator = 'BETWEEN';
if (value.$notBetween) comparator = 'NOT BETWEEN';
......
......@@ -237,38 +237,80 @@ suite(Support.getTestDialectTeaser('SQL'), function() {
if (current.dialect.supports['ARRAY']) {
suite('ARRAY', function () {
testsql('muscles', {
$contains: [2, 3]
}, {
postgres: '"muscles" @> ARRAY[2,3]'
});
suite('$contains', function () {
testsql('muscles', {
$contains: [2, 3]
}, {
postgres: '"muscles" @> ARRAY[2,3]'
});
testsql('muscles', {
$contained: [6, 8]
}, {
postgres: '"muscles" <@ ARRAY[6,8]'
});
testsql('muscles', {
$contained: [6, 8]
}, {
postgres: '"muscles" <@ ARRAY[6,8]'
});
testsql('muscles', {
$overlap: [3, 11]
}, {
postgres: '"muscles" && ARRAY[3,11]'
});
testsql('muscles', {
$overlap: [3, 11]
}, {
postgres: '"muscles" && ARRAY[3,11]'
});
testsql('muscles', {
$overlap: [3, 1]
}, {
postgres: '"muscles" && ARRAY[3,1]'
testsql('muscles', {
$overlap: [3, 1]
}, {
postgres: '"muscles" && ARRAY[3,1]'
});
testsql('muscles', {
$contains: [2, 5]
}, {
field: {
type: DataTypes.ARRAY(DataTypes.INTEGER)
}
}, {
postgres: '"muscles" @> ARRAY[2,5]::INTEGER[]'
});
});
testsql('muscles', {
$contains: [2, 5]
}, {
field: {
type: DataTypes.ARRAY(DataTypes.INTEGER)
}
}, {
postgres: '"muscles" @> ARRAY[2,5]::INTEGER[]'
suite('$any', function() {
testsql('userId', {
$any: [4, 5, 6]
}, {
postgres: '"userId" = ANY (ARRAY[4,5,6])'
});
testsql('userId', {
$any: [2, 5]
}, {
field: {
type: DataTypes.ARRAY(DataTypes.INTEGER)
}
}, {
postgres: '"userId" = ANY (ARRAY[2,5]::INTEGER[])'
});
suite('$values', function () {
testsql('userId', {
$any: {
$values: [4, 5, 6]
}
}, {
postgres: '"userId" = ANY (VALUES (4), (5), (6))'
});
testsql('userId', {
$any: {
$values: [2, 5]
}
}, {
field: {
type: DataTypes.ARRAY(DataTypes.INTEGER)
}
}, {
postgres: '"userId" = ANY (VALUES (2), (5))'
});
});
});
});
}
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!