Skip to content

Commit

Permalink
Improve join and conflict types v2 (#4318)
Browse files Browse the repository at this point in the history
Co-authored-by: Jeroen Hermans <jeroen@datacamp.com>
  • Loading branch information
kibertoad and hermansje committed Mar 2, 2021
1 parent 29b8a36 commit 887a4f6
Show file tree
Hide file tree
Showing 5 changed files with 107 additions and 58 deletions.
13 changes: 13 additions & 0 deletions test-tsd/types.test-d.ts
Expand Up @@ -100,6 +100,19 @@ expectAssignable<QueryBuilder>(
.debug(true)
);

expectType<
QueryBuilder<
User,
DeferredKeySelection<User, 'id', true, {}, true, {}, never>[]
>
>(
knexInstance
.table<User>('users')
.insert({ id: 10, active: true })
.onConflict('id')
.ignore()
);

expectAssignable<QueryBuilder>(
knexInstance
.insert({ id: 10, active: true })
Expand Down
2 changes: 1 addition & 1 deletion test/unit/migrations/util/test/package-commonjs.json
@@ -1,3 +1,3 @@
{
"type": "commonjs"
"type": "commonjs"
}
2 changes: 1 addition & 1 deletion test/unit/migrations/util/test/package-module.json
@@ -1,3 +1,3 @@
{
"type": "module"
"type": "module"
}
86 changes: 61 additions & 25 deletions types/index.d.ts
Expand Up @@ -4,7 +4,7 @@
// Matt R. Wilson <https://github.com/mastermatt>
// Satana Charuwichitratana <https://github.com/micksatana>
// Shrey Jain <https://github.com/shreyjain1994>
// TypeScript Version: 3.7
// TypeScript Version: 4.1

import tarn = require('tarn');
import events = require('events');
Expand Down Expand Up @@ -467,7 +467,7 @@ export declare namespace Knex {
interface OnConflictQueryBuilder<TRecord, TResult> {
ignore(): QueryBuilder<TRecord, TResult>;
merge(mergeColumns?: (keyof TRecord)[]): QueryBuilder<TRecord, TResult>;
merge(data?: Extract<DbRecord<TRecord>, object>): QueryBuilder<TRecord, TResult>;
merge(data?: Extract<DbRecord<ResolveTableType<TRecord, 'update'>>, object>): QueryBuilder<TRecord, TResult>;
}

//
Expand Down Expand Up @@ -827,7 +827,7 @@ export declare namespace Knex {
): QueryBuilder<TRecord, TResult2>;

onConflict<
TKey extends StrKey<TRecord>,
TKey extends StrKey<ResolveTableType<TRecord>>,
TResult2 = DeferredIndex.Augment<
UnwrapArrayMember<TResult>,
TRecord,
Expand All @@ -837,7 +837,7 @@ export declare namespace Knex {
column: TKey
): OnConflictQueryBuilder<TRecord, TResult2>;
onConflict<
TKey extends StrKey<TRecord>,
TKey extends StrKey<ResolveTableType<TRecord>>,
TResult2 = DeferredKeySelection.SetSingle<
DeferredKeySelection.Augment<UnwrapArrayMember<TResult>, TRecord, TKey>,
false
Expand Down Expand Up @@ -1067,55 +1067,73 @@ export declare namespace Knex {
TJoinTargetRecord extends {} = any,
TRecord2 extends {} = TRecord & TJoinTargetRecord,
TResult2 = DeferredKeySelection.ReplaceBase<TResult, TRecord2>
>(
>(
raw: Raw
): QueryBuilder<TRecord2, TResult2>;
<
TTable extends TableNames,
TRecord2 = ResolveTableType<TRecord> & ResolveTableType<TableType<TTable>>,
TRecord2 = ResolveTableType<TRecord> &
ResolveTableType<TableType<TTable>>,
TResult2 = DeferredKeySelection.ReplaceBase<TResult, TRecord2>
>(
>(
tableName: TTable,
clause: JoinCallback
): QueryBuilder<TRecord2, TResult2>;
<
TJoinTargetRecord extends {} = any,
TRecord2 extends {} = TRecord & TJoinTargetRecord,
TResult2 = DeferredKeySelection.ReplaceBase<TResult, TRecord2>
>(
>(
tableName: TableDescriptor | AliasDict | QueryCallback,
clause: JoinCallback
): QueryBuilder<TRecord2, TResult2>;
<
TJoinTargetRecord extends {} = any,
TRecord2 extends {} = TRecord & TJoinTargetRecord,
TResult2 = DeferredKeySelection.ReplaceBase<TResult, TRecord2>
>(
>(
tableName: TableDescriptor | AliasDict | QueryCallback,
columns: { [key: string]: string | number | boolean | Raw }
): QueryBuilder<TRecord2, TResult2>;
<
TJoinTargetRecord extends {} = any,
TRecord2 extends {} = TRecord & TJoinTargetRecord,
TResult2 = DeferredKeySelection.ReplaceBase<TResult, TRecord2>
>(
>(
tableName: TableDescriptor | AliasDict | QueryCallback,
raw: Raw
): QueryBuilder<TRecord2, TResult2>;
<
TTable extends TableNames,
TRecord2 = ResolveTableType<TRecord> & ResolveTableType<TableType<TTable>>,
TTable1 extends TableNames,
TTable2 extends TableNames,
TKey1 extends StrKey<ResolveTableType<TableType<TTable1>>> & StrKey<TRecord1>,
TKey2 extends StrKey<ResolveTableType<TableType<TTable2>>>,
TRecord1 = ResolveTableType<TRecord>,
TRecord2 = TRecord1 & ResolveTableType<TableType<TTable2>>,
TResult2 = DeferredKeySelection.ReplaceBase<TResult, TRecord2>
>(
tableName: TTable,
column1: string,
column2: string
>(
tableName: TTable2,
column1: `${TTable1}.${TKey1}`,
column2: `${TTable2}.${TKey2}`
): QueryBuilder<TRecord2, TResult2>;
<
TTable1 extends TableNames,
TTable2 extends TableNames,
TKey1 extends StrKey<ResolveTableType<TableType<TTable1>>> & StrKey<TRecord1>,
TKey2 extends StrKey<ResolveTableType<TableType<TTable2>>>,
TRecord1 = ResolveTableType<TRecord>,
TRecord2 = TRecord1 & ResolveTableType<TableType<TTable2>>,
TResult2 = DeferredKeySelection.ReplaceBase<TResult, TRecord2>
>(
tableName: TTable2,
column1: `${TTable2}.${TKey2}`,
column2: `${TTable1}.${TKey1}`
): QueryBuilder<TRecord2, TResult2>;
<
TJoinTargetRecord extends {} = any,
TRecord2 extends {} = TRecord & TJoinTargetRecord,
TResult2 = DeferredKeySelection.ReplaceBase<TResult, TRecord2>
>(
>(
tableName: TableDescriptor | AliasDict | QueryCallback,
column1: string,
column2: string
Expand All @@ -1124,26 +1142,44 @@ export declare namespace Knex {
TJoinTargetRecord extends {} = any,
TRecord2 extends {} = TRecord & TJoinTargetRecord,
TResult2 = DeferredKeySelection.ReplaceBase<TResult, TRecord2>
>(
>(
tableName: TableDescriptor | AliasDict | QueryCallback,
column1: string,
raw: Raw
): QueryBuilder<TRecord2, TResult2>;
<
TTable extends TableNames,
TRecord2 = ResolveTableType<TRecord> & ResolveTableType<TableType<TTable>>,
TTable1 extends TableNames,
TTable2 extends TableNames,
TKey1 extends StrKey<ResolveTableType<TableType<TTable1>>> & StrKey<TRecord1>,
TKey2 extends StrKey<ResolveTableType<TableType<TTable2>>>,
TRecord1 = ResolveTableType<TRecord>,
TRecord2 = TRecord1 & ResolveTableType<TableType<TTable2>>,
TResult2 = DeferredKeySelection.ReplaceBase<TResult, TRecord2>
>(
tableName: TTable,
column1: string,
>(
tableName: TTable2,
column1: `${TTable1}.${TKey1}`,
operator: string,
column2: string
column2: `${TTable2}.${TKey2}`
): QueryBuilder<TRecord2, TResult2>;
<
TTable1 extends TableNames,
TTable2 extends TableNames,
TKey1 extends StrKey<ResolveTableType<TableType<TTable1>>> & StrKey<TRecord1>,
TKey2 extends StrKey<ResolveTableType<TableType<TTable2>>>,
TRecord1 = ResolveTableType<TRecord>,
TRecord2 = TRecord1 & ResolveTableType<TableType<TTable2>>,
TResult2 = DeferredKeySelection.ReplaceBase<TResult, TRecord2>
>(
tableName: TTable2,
column1: `${TTable2}.${TKey2}`,
operator: string,
column2: `${TTable1}.${TKey1}`,
): QueryBuilder<TRecord2, TResult2>;
<
TJoinTargetRecord extends {} = any,
TRecord2 extends {} = TRecord & TJoinTargetRecord,
TResult2 = DeferredKeySelection.ReplaceBase<TResult, TRecord2>
>(
>(
tableName: TableDescriptor | AliasDict | QueryCallback,
column1: string,
operator: string,
Expand Down

0 comments on commit 887a4f6

Please sign in to comment.