From f08190e2988c71377430f5028d4a663cc39ee8b0 Mon Sep 17 00:00:00 2001 From: spacejack Date: Tue, 21 Aug 2018 15:30:10 -0400 Subject: [PATCH 1/2] Add overloads to aggregate function signatures --- types/knex/index.d.ts | 15 +++++++++++++++ types/knex/knex-tests.ts | 23 +++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/types/knex/index.d.ts b/types/knex/index.d.ts index 54dece1068..916ee32326 100644 --- a/types/knex/index.d.ts +++ b/types/knex/index.d.ts @@ -139,12 +139,27 @@ declare namespace Knex { // Aggregation count(columnName?: string): QueryBuilder; + count(columnName: {[key: string]: string}): QueryBuilder; + count(columnName: {[key: string]: string[]}): QueryBuilder; + count(columnName: {[key: string]: Knex.Raw}): QueryBuilder; countDistinct(columnName?: string): QueryBuilder; min(columnName: string): QueryBuilder; + min(columnName: {[key: string]: string}): QueryBuilder; + min(columnName: {[key: string]: string[]}): QueryBuilder; + min(columnName: {[key: string]: Knex.Raw}): QueryBuilder; max(columnName: string): QueryBuilder; + max(columnName: {[key: string]: string}): QueryBuilder; + max(columnName: {[key: string]: string[]}): QueryBuilder; + max(columnName: {[key: string]: Knex.Raw}): QueryBuilder; sum(columnName: string): QueryBuilder; + sum(columnName: {[key: string]: string}): QueryBuilder; + sum(columnName: {[key: string]: string[]}): QueryBuilder; + sum(columnName: {[key: string]: Knex.Raw}): QueryBuilder; sumDistinct(columnName: string): QueryBuilder; avg(columnName: string): QueryBuilder; + avg(columnName: {[key: string]: string}): QueryBuilder; + avg(columnName: {[key: string]: string[]}): QueryBuilder; + avg(columnName: {[key: string]: Knex.Raw}): QueryBuilder; avgDistinct(columnName: string): QueryBuilder; increment(columnName: string, amount?: number): QueryBuilder; decrement(columnName: string, amount?: number): QueryBuilder; diff --git a/types/knex/knex-tests.ts b/types/knex/knex-tests.ts index 0037948415..317e5746cc 100644 --- a/types/knex/knex-tests.ts +++ b/types/knex/knex-tests.ts @@ -251,6 +251,29 @@ knex('users').whereRaw('id = ?', [1]); knex('users').whereRaw('id = :id', { id: 1 }); knex('users').whereRaw('id = :id', { id: knex('users').select('id').limit(1) }); +// Aggregate functions can use string/object parameters +knex('users').count(); +knex('users').count('*'); +knex('users').count({count: '*'}); +knex('users').count({count: ['id', 'votes']}); +knex('users').count({count: knex.raw('*')}); +knex('users').avg('id'); +knex('users').avg({avg: 'id'}); +knex('users').avg({avg: ['id', 'votes']}); +knex('users').avg({ab: knex.raw('a + b')}); +knex('users').max('id'); +knex('users').max({max: 'id'}); +knex('users').max({max: ['id', 'votes']}); +knex('users').max({ab: knex.raw('a + b')}); +knex('users').min('id'); +knex('users').min({min: 'id'}); +knex('users').min({min: ['id', 'votes']}); +knex('users').min({ab: knex.raw('a + b')}); +knex('users').sum('id'); +knex('users').sum({sum: 'id'}); +knex('users').sum({sum: ['id', 'votes']}); +knex('users').sum({ab: knex.raw('a + b')}); + // Join methods knex('users') .join('contacts', 'users.id', '=', 'contacts.user_id') From 0299d99241469a16a431cf149868efa8beb2befd Mon Sep 17 00:00:00 2001 From: spacejack Date: Fri, 24 Aug 2018 22:36:50 -0400 Subject: [PATCH 2/2] Merge and add more missing signatures --- types/knex/index.d.ts | 36 +++++++++++++----------------------- types/knex/knex-tests.ts | 29 +++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 23 deletions(-) diff --git a/types/knex/index.d.ts b/types/knex/index.d.ts index 916ee32326..8945a16168 100644 --- a/types/knex/index.d.ts +++ b/types/knex/index.d.ts @@ -138,29 +138,19 @@ declare namespace Knex { limit(limit: number): QueryBuilder; // Aggregation - count(columnName?: string): QueryBuilder; - count(columnName: {[key: string]: string}): QueryBuilder; - count(columnName: {[key: string]: string[]}): QueryBuilder; - count(columnName: {[key: string]: Knex.Raw}): QueryBuilder; - countDistinct(columnName?: string): QueryBuilder; - min(columnName: string): QueryBuilder; - min(columnName: {[key: string]: string}): QueryBuilder; - min(columnName: {[key: string]: string[]}): QueryBuilder; - min(columnName: {[key: string]: Knex.Raw}): QueryBuilder; - max(columnName: string): QueryBuilder; - max(columnName: {[key: string]: string}): QueryBuilder; - max(columnName: {[key: string]: string[]}): QueryBuilder; - max(columnName: {[key: string]: Knex.Raw}): QueryBuilder; - sum(columnName: string): QueryBuilder; - sum(columnName: {[key: string]: string}): QueryBuilder; - sum(columnName: {[key: string]: string[]}): QueryBuilder; - sum(columnName: {[key: string]: Knex.Raw}): QueryBuilder; - sumDistinct(columnName: string): QueryBuilder; - avg(columnName: string): QueryBuilder; - avg(columnName: {[key: string]: string}): QueryBuilder; - avg(columnName: {[key: string]: string[]}): QueryBuilder; - avg(columnName: {[key: string]: Knex.Raw}): QueryBuilder; - avgDistinct(columnName: string): QueryBuilder; + count(...columnNames: string[]): QueryBuilder; + count(columnName: Record | Knex.Raw): QueryBuilder; + countDistinct(columnName: string | Record | Knex.Raw): QueryBuilder; + min(columnName: string, ...columnNames: string[]): QueryBuilder; + min(columnName: Record | Knex.Raw): QueryBuilder; + max(columnName: string, ...columnNames: string[]): QueryBuilder; + max(columnName: Record | Knex.Raw): QueryBuilder; + sum(columnName: string, ...columnNames: string[]): QueryBuilder; + sum(columnName: Record | Knex.Raw): QueryBuilder; + sumDistinct(columnName: string | Record | Knex.Raw): QueryBuilder; + avg(columnName: string, ...columnNames: string[]): QueryBuilder; + avg(columnName: Record | Knex.Raw): QueryBuilder; + avgDistinct(columnName: string | Record | Knex.Raw): QueryBuilder; increment(columnName: string, amount?: number): QueryBuilder; decrement(columnName: string, amount?: number): QueryBuilder; diff --git a/types/knex/knex-tests.ts b/types/knex/knex-tests.ts index 317e5746cc..e7fb3e1b81 100644 --- a/types/knex/knex-tests.ts +++ b/types/knex/knex-tests.ts @@ -254,25 +254,54 @@ knex('users').whereRaw('id = :id', { id: knex('users').select('id').limit(1) }); // Aggregate functions can use string/object parameters knex('users').count(); knex('users').count('*'); +knex('users').count('id', 'votes'); knex('users').count({count: '*'}); knex('users').count({count: ['id', 'votes']}); knex('users').count({count: knex.raw('*')}); +knex('users').count(knex.raw('id')); + +knex('users').countDistinct('votes'); +knex('users').countDistinct(knex.raw('votes')); +knex('users').countDistinct({votes: 'votes'}); +knex('users').countDistinct({votes: knex.raw('votes')}); + knex('users').avg('id'); +knex('users').avg('id', 'votes'); knex('users').avg({avg: 'id'}); knex('users').avg({avg: ['id', 'votes']}); knex('users').avg({ab: knex.raw('a + b')}); +knex('users').avg(knex.raw('votes')); + +knex('users').avgDistinct('votes'); +knex('users').avgDistinct(knex.raw('votes')); +knex('users').avgDistinct({votes: 'votes'}); +knex('users').avgDistinct({votes: knex.raw('votes')}); + knex('users').max('id'); +knex('users').max('id', 'votes'); knex('users').max({max: 'id'}); knex('users').max({max: ['id', 'votes']}); knex('users').max({ab: knex.raw('a + b')}); +knex('users').max(knex.raw('votes')); + knex('users').min('id'); +knex('users').min('id', 'votes'); knex('users').min({min: 'id'}); knex('users').min({min: ['id', 'votes']}); knex('users').min({ab: knex.raw('a + b')}); +knex('users').min(knex.raw('votes')); + knex('users').sum('id'); +knex('users').sum('id', 'votes'); knex('users').sum({sum: 'id'}); knex('users').sum({sum: ['id', 'votes']}); knex('users').sum({ab: knex.raw('a + b')}); +knex('users').sum(knex.raw('votes')); + +knex('users').sumDistinct('votes'); +knex('users').sumDistinct(knex.raw('votes')); +knex('users').sumDistinct({votes: 'votes'}); +knex('users').sumDistinct({votes: knex.raw('votes')}); // Join methods knex('users')