knex: RangeError: Maximum call stack size exceeded

I am using knex 0.12.6 and node 6.9.1 and there seems to be a problem with where clauses and functions.

With a simple query:

const query = knex('store')
  .where(function where() {
    this.where('id', 1);
  })
  .toSQL();

It doesn’t even get in the where callback it errors before.

RangeError: Maximum call stack size exceeded
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:97:27)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)
    at Object.containsUndefined (/srv/dp/api/current/node_modules/knex/lib/helpers.js:115:35)

It may be similar to #1725 but upgrading to latest knex did not fix the issue.

About this issue

  • Original URL
  • State: closed
  • Created 7 years ago
  • Comments: 24 (6 by maintainers)

Most upvoted comments

In your case you are creating query builder instance and then you modify inplace that instance and put it inside itself… same kind of case like in this, but in more sutil form:

const builder = knex('table');
builder.select('1');
builder.where('id', builder);

I would say that it would be better to throw an error, but it is not very easy to check before compiling the query, because there can be same kind of indirect loops passing through multiple nested query builders