diff --git a/types/knex/index.d.ts b/types/knex/index.d.ts index 5e926679b1..0b107481f7 100644 --- a/types/knex/index.d.ts +++ b/types/knex/index.d.ts @@ -64,6 +64,11 @@ declare namespace Knex { fullOuterJoin: Join; crossJoin: Join; + // Withs + with: With; + withRaw: WithRaw; + withWrapped: WithWrapped; + // Wheres where: Where; andWhere: Where; @@ -203,6 +208,18 @@ declare namespace Knex { (tableName: string, binding?: Value): QueryBuilder; } + interface With extends WithRaw, WithWrapped { + } + + interface WithRaw { + (alias: string, raw: Raw): QueryBuilder; + (alias: string, sql: string, bindings?: Value[] | Object): QueryBuilder; + } + + interface WithWrapped { + (alias: string, callback: (queryBuilder: QueryBuilder) => any): QueryBuilder; + } + interface Where extends WhereRaw, WhereWrapped, WhereNull { (raw: Raw): QueryBuilder; (callback: (queryBuilder: QueryBuilder) => any): QueryBuilder; diff --git a/types/knex/knex-tests.ts b/types/knex/knex-tests.ts index 67b07f263b..1c2d5c4b4a 100644 --- a/types/knex/knex-tests.ts +++ b/types/knex/knex-tests.ts @@ -315,6 +315,29 @@ knex('accounts').where('activated', false).delete(); knex('accounts').where('activated', false).delete('id'); knex('accounts').where('activated', false).delete(['id', 'title']); +knex.with('old_books', function(qb) { + qb.select('*').from('books').where('published_date', '<', 1970); +}).select('*').from('old_books'); + +knex.with('new_books', knex.raw('select * from books where published_date >= 2016')) + .select('*').from('new_books'); + +knex.with('new_books', 'select * from books where published_date >= :year', { year: 2016 }) + .select('*').from('new_books'); + +knex.with('new_books', 'select * from books where published_date >= ?', [2016]) + .select('*').from('new_books'); + +knex.withRaw('recent_books', 'select * from books where published_date >= :year', { year: 2013 }) + .select('*').from('recent_books'); + +knex.withRaw('recent_books', knex.raw('select * from books where published_date >= ?', [2013])) + .select('*').from('recent_books'); + +knex.withWrapped("antique_books", function (qb) { + qb.select('*').from('books').where('published_date', '<', 1899); +}).select('*').from('antique_books'); + var someExternalMethod: Function; knex.transaction(function(trx) {