1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- // This file contains additional Squel commands for use with MySQL
- squel.flavours['mysql'] = function(_squel) {
- let cls = _squel.cls;
- // ON DUPLICATE KEY UPDATE ...
- cls.MysqlOnDuplicateKeyUpdateBlock = class extends cls.AbstractSetFieldBlock {
- onDupUpdate (field, value, options) {
- this._set(field, value, options);
- }
- _toParamString (options = {}) {
- let totalStr = "",
- totalValues = [];
- for (let i = 0; i < this._fields.length; ++i) {
- totalStr = _pad(totalStr, ', ');
- let field = this._fields[i];
- let value = this._values[0][i];
- let valueOptions = this._valueOptions[0][i];
- // e.g. if field is an expression such as: count = count + 1
- if (typeof value === 'undefined') {
- totalStr += field;
- } else {
- let ret = this._buildString(
- `${field} = ${this.options.parameterCharacter}`,
- [value],
- {
- buildParameterized: options.buildParameterized,
- formattingOptions: valueOptions,
- }
- );
- totalStr += ret.text;
- totalValues.push(...ret.values);
- }
- }
- return {
- text: !totalStr.length ? "" : `ON DUPLICATE KEY UPDATE ${totalStr}`,
- values: totalValues,
- };
- }
- }
- // INSERT query builder.
- cls.Insert = class extends cls.QueryBuilder {
- constructor (options, blocks = null) {
- blocks = blocks || [
- new cls.StringBlock(options, 'INSERT'),
- new cls.IntoTableBlock(options),
- new cls.InsertFieldValueBlock(options),
- new cls.InsertFieldsFromQueryBlock(options),
- new cls.MysqlOnDuplicateKeyUpdateBlock(options),
- ];
- super(options, blocks);
- }
- }
- };
|