-[FEATURE] Support for literals and casts. [#950](https://github.com/sequelize/sequelize/pull/950). Thanks to durango.
-[FEATURE] Model#findOrBuild. [#960](https://github.com/sequelize/sequelize/pull/960). Thanks to durango.
-[FEATURE] Support for MariaDB. [#948](https://github.com/sequelize/sequelize/pull/948). Thanks to reedog117 and janmeier.
-[FEATURE] Filter through associations. [#991](https://github.com/sequelize/sequelize/pull/991). Thanks to snit-ram.
-[REFACTORING] hasMany now uses a single SQL statement when creating and destroying associations, instead of removing each association seperately [690](https://github.com/sequelize/sequelize/pull/690). Inspired by [#104](https://github.com/sequelize/sequelize/issues/104). janmeier
-[REFACTORING] Consistent handling of offset across dialects. Offset is now always applied, and limit is set to max table size of not limit is given [#725](https://github.com/sequelize/sequelize/pull/725). janmeier
-[REFACTORING] Moved Jasmine to Buster and then Buster to Mocha + Chai. sdepold and durango
joinQuery+=" LEFT OUTER JOIN "+this.quoteIdentifier(table)+" AS "+this.quoteIdentifier(as)+" ON "+this.quoteIdentifier(tableLeft)+"."+this.quoteIdentifier(attrLeft)+" = "+this.quoteIdentifier(tableRight)+"."+this.quoteIdentifier(attrRight)
joinQuery+=" LEFT OUTER JOIN "+this.quoteIdentifier(tableJunction)+" ON "+this.quoteIdentifier(tableSource)+"."+this.quoteIdentifier(attrSource)+" = "+this.quoteIdentifier(tableJunction)+"."+this.quoteIdentifier(identSource)
joinQuery+=" LEFT OUTER JOIN "+this.quoteIdentifier(table)+" AS "+this.quoteIdentifier(as)+" ON "+this.quoteIdentifier(tableTarget)+"."+this.quoteIdentifier(attrTarget)+" = "+this.quoteIdentifier(tableJunction)+"."+this.quoteIdentifier(identTarget)
joinQuery+=" LEFT OUTER JOIN "+this.quoteIdentifier(table)+" AS "+this.quoteIdentifier(as)+" ON "+this.quoteIdentifier(tableLeft)+"."+this.quoteIdentifier(attrLeft)+" = "+this.quoteIdentifier(tableRight)+"."+this.quoteIdentifier(attrRight)
joinQuery+=" LEFT OUTER JOIN "+this.quoteIdentifier(tableJunction)+" ON "+this.quoteIdentifier(tableSource)+"."+this.quoteIdentifier(attrSource)+" = "+this.quoteIdentifier(tableJunction)+"."+this.quoteIdentifier(identSource)
joinQuery+=" LEFT OUTER JOIN "+this.quoteIdentifier(table)+" AS "+this.quoteIdentifier(as)+" ON "+this.quoteIdentifier(tableTarget)+"."+this.quoteIdentifier(attrTarget)+" = "+this.quoteIdentifier(tableJunction)+"."+this.quoteIdentifier(identTarget)
}
}.bind(this))
options.attributes=optAttributes.join(', ')
}
varquery="SELECT "+options.attributes+" FROM "+options.table
joinQuery+=" LEFT OUTER JOIN "+this.quoteIdentifier(table)+" AS "+this.quoteIdentifier(as)+" ON "+this.quoteIdentifier(tableLeft)+"."+this.quoteIdentifier(attrLeft)+" = "+this.quoteIdentifier(tableRight)+"."+this.quoteIdentifier(attrRight)
joinQuery+=" LEFT OUTER JOIN "+this.quoteIdentifier(tableJunction)+" ON "+this.quoteIdentifier(tableSource)+"."+this.quoteIdentifier(attrSource)+" = "+this.quoteIdentifier(tableJunction)+"."+this.quoteIdentifier(identSource)
joinQuery+=" LEFT OUTER JOIN "+this.quoteIdentifier(table)+" AS "+this.quoteIdentifier(as)+" ON "+this.quoteIdentifier(tableTarget)+"."+this.quoteIdentifier(attrTarget)+" = "+this.quoteIdentifier(tableJunction)+"."+this.quoteIdentifier(identTarget)
}
}.bind(this))
options.attributes=optAttributes.join(', ')
}
varquery="SELECT "+options.attributes+" FROM "+options.table