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

Commit ae9260ff by Nuno Sousa

Fix postgres casting conflict in named parameters

1 parent 8c678a7e
Showing with 12 additions and 1 deletions
...@@ -143,7 +143,11 @@ SqlString.format = function(sql, values, timeZone, dialect) { ...@@ -143,7 +143,11 @@ SqlString.format = function(sql, values, timeZone, dialect) {
} }
SqlString.formatNamedParameters = function(sql, values, timeZone, dialect) { SqlString.formatNamedParameters = function(sql, values, timeZone, dialect) {
return sql.replace(/\:(?!\d)(\w+)/g, function (value, key) { return sql.replace(/\:+(?!\d)(\w+)/g, function (value, key) {
if ('postgres' === dialect && '::' === value.slice(0, 2)) {
return value
}
if (values.hasOwnProperty(key)) { if (values.hasOwnProperty(key)) {
return SqlString.escape(values[key], false, timeZone, dialect) return SqlString.escape(values[key], false, timeZone, dialect)
} else { } else {
......
...@@ -390,6 +390,13 @@ describe(Support.getTestDialectTeaser("Sequelize"), function () { ...@@ -390,6 +390,13 @@ describe(Support.getTestDialectTeaser("Sequelize"), function () {
}) })
if (Support.getTestDialect() === 'postgres') { if (Support.getTestDialect() === 'postgres') {
it('replaces named parameters with the passed object and ignores casts', function(done) {
this.sequelize.query('select :one as foo, :two as bar, \'1000\'::integer as baz', null, { raw: true }, { one: 1, two: 2 }).success(function(result) {
expect(result).to.deep.equal([{ foo: 1, bar: 2, baz: 1000 }])
done()
})
})
it('supports WITH queries', function(done) { it('supports WITH queries', function(done) {
this this
.sequelize .sequelize
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!