-
Notifications
You must be signed in to change notification settings - Fork 642
Closed
Description
Hi Koskimas,
I upgraded to v1.3.0 today and am now getting the following error, which I think is related to the change in #1077:
TypeError: raw.sql.replace is not a function
at replaceRawArrBindings (/Users/jeff/VSCode/api/node_modules/knex/lib/raw.js:151:21)
at Raw.toSQL (/Users/jeff/VSCode/api/node_modules/knex/lib/raw.js:107:13)
at Formatter.unwrapRaw (/Users/jeff/VSCode/api/node_modules/knex/lib/formatter.js:127:21)
at Formatter.wrap (/Users/jeff/VSCode/api/node_modules/knex/lib/formatter.js:159:20)
at QueryCompiler_MySQL.onBasic (/Users/jeff/VSCode/api/node_modules/knex/lib/query/compiler.js:523:119)
at QueryCompiler_MySQL.join (/Users/jeff/VSCode/api/node_modules/knex/lib/query/compiler.js:305:39)
at /Users/jeff/VSCode/api/node_modules/knex/lib/query/compiler.js:127:31
at Array.map (<anonymous>)
at QueryCompiler_MySQL.select (/Users/jeff/VSCode/api/node_modules/knex/lib/query/compiler.js:126:33)
at QueryCompiler_MySQL.toSQL (/Users/jeff/VSCode/api/node_modules/knex/lib/query/compiler.js:74:27)
at Builder.toSQL (/Users/jeff/VSCode/api/node_modules/knex/lib/query/builder.js:70:44)
at /Users/jeff/VSCode/api/node_modules/knex/lib/runner.js:39:32
at tryCatcher (/Users/jeff/VSCode/api/node_modules/bluebird/js/release/util.js:16:23)
at /Users/jeff/VSCode/api/node_modules/bluebird/js/release/using.js:185:26
at tryCatcher (/Users/jeff/VSCode/api/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/Users/jeff/VSCode/api/node_modules/bluebird/js/release/promise.js:512:31)
at Promise._settlePromise (/Users/jeff/VSCode/api/node_modules/bluebird/js/release/promise.js:569:18)
at Promise._settlePromise0 (/Users/jeff/VSCode/api/node_modules/bluebird/js/release/promise.js:614:10)
at Promise._settlePromises (/Users/jeff/VSCode/api/node_modules/bluebird/js/release/promise.js:694:18)
at Promise._fulfill (/Users/jeff/VSCode/api/node_modules/bluebird/js/release/promise.js:638:18)
at PromiseArray._resolve (/Users/jeff/VSCode/api/node_modules/bluebird/js/release/promise_array.js:126:19)
at PromiseArray._promiseFulfilled (/Users/jeff/VSCode/api/node_modules/bluebird/js/release/promise_array.js:144:14)
at Promise._settlePromise (/Users/jeff/VSCode/api/node_modules/bluebird/js/release/promise.js:574:26)
at Promise._settlePromise0 (/Users/jeff/VSCode/api/node_modules/bluebird/js/release/promise.js:614:10)
at Promise._settlePromises (/Users/jeff/VSCode/api/node_modules/bluebird/js/release/promise.js:694:18)
at _drainQueueStep (/Users/jeff/VSCode/api/node_modules/bluebird/js/release/async.js:138:12)
at _drainQueue (/Users/jeff/VSCode/api/node_modules/bluebird/js/release/async.js:131:9)
at Async._drainQueues (/Users/jeff/VSCode/api/node_modules/bluebird/js/release/async.js:147:5)
at Immediate.Async.drainQueues (/Users/jeff/VSCode/api/node_modules/bluebird/js/release/async.js:17:14)
Here is the function from my code failing the tests:
static getRevenueSitesDetail(accountId, params) {
const order = _order.has(params.order) ? params.order : 'trans';
const dir = _dir.has(params.dir) ? params.dir : 'desc';
const order2 = order !== 'raw' && order !== 'unique' ? 'raw' : 'trans';
let limit = Number(params.limit) || 20;
let page = Number(params.page) || 1;
// Ensure limit is sane.
if (limit > 100) {
limit = 100;
} else if (limit < 1) {
limit = 1;
}
// Ensure page is sane.
if (page < 1) {
page = 1;
}
// Create a UNION ALL of agg_aff_trans and agg_aff_hit as a derived table.
const derived = AggAffTrans.query()
.select(
'landing_page',
'count',
'amount',
AggAffTrans.raw('0 as `raw`'),
AggAffTrans.raw('0 as `unique`')
)
.where({
affiliate_id: accountId,
site_id: params.id,
})
.andWhere('date', '>=', params.start)
.andWhere('date', '<', params.end)
.unionAll(
AggAffHit.query()
.select(
'landing_page',
AggAffHit.raw('0'),
AggAffHit.raw('0'),
'raw',
'unique'
)
.where({
affiliate_id: accountId,
site_id: params.id,
})
.andWhere('date', '>=', params.start)
.andWhere('date', '<', params.end)
.andWhere('landing_page', '!=', 2) // exclude 'Payment Gateway'
)
.as('d');
// Combine the derived table with agg_aff_lookup.
const query = AggAffLookup.query()
.alias('l')
.select('l.value as landing_page', 's.title as site', 's.domain as domain')
.sum('d.count as trans')
.sum('d.amount as payout')
.sum('d.raw as raw')
.sum('d.unique as unique')
.join('sites as s', 's.id', AggAffLookup.raw(params.id))
.join(derived, 'd.landing_page', 'l.id');
// Add search criteria, if supplied.
if (params.keywords) {
query.whereRaw('`l`.`value` LIKE ?', `${params.keywords}%`);
}
return query
.groupBy('l.id')
.orderBy(order, dir)
.orderBy(order2, 'desc')
.page(page - 1, limit)
.then((data) => {
for (const d of data.results) {
d.payout = Utils.currencyFormat(d.payout);
d.trans = d.trans > 999 ? Utils.numberFormat(d.trans) : String(d.trans);
d.raw = d.raw > 999 ? Utils.numberFormat(d.raw) : String(d.raw);
d.unique = d.unique > 999 ? Utils.numberFormat(d.unique) : String(d.unique);
}
return {
result_count: data.total,
page,
page_result_limit: limit,
start: params.start,
end: params.end,
details: data.results,
};
});
}I'm using the Model.raw() stuff in here quite a bit, but not doing anything too crazy. Not sure which usage is causing the error. I use Model.raw() in several other places in my code, but this is the only section causing a problem. Reverting to v1.2.3 gets rid of the error.
Let me know if there is anything else I can provide to help. Thanks!
Metadata
Metadata
Assignees
Labels
No labels