Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 9 additions & 10 deletions drizzle-orm/src/operations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,18 @@ export type RequiredKeyOnly<TKey extends string, T extends Column> = T extends A
}> ? TKey
: never;

export type OptionalKeyOnly<
TKey extends string,
T extends Column,
OverrideT extends boolean | undefined = false,
> = TKey extends RequiredKeyOnly<TKey, T> ? never
: T extends {
export type OptionalKeyOnly<TKey extends string, T extends Column, OverrideT extends boolean | undefined = false> =
TKey extends RequiredKeyOnly<TKey, T> ? never : T extends {
_: {
generated: undefined;
};
} ? (
T['_']['identity'] extends 'always' ? OverrideT extends true ? TKey : never
: TKey
)
} ? (T extends {
_: {
identity: undefined;
};
} ? TKey
: T['_']['identity'] extends 'always' ? OverrideT extends true ? TKey : never
: TKey)
: never;

// TODO: SQL -> SQLWrapper
Expand Down
106 changes: 106 additions & 0 deletions drizzle-orm/type-tests/geldb/no-strict-null-checks/test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
import { drizzle } from '~/gel';
import { gelTable, integer, text } from '~/gel-core';

export const test = gelTable(
'test',
{
id: text('id')
.primaryKey()
.generatedAlwaysAs('genstr'),
intId: integer('int_id')
.primaryKey()
.generatedAlwaysAsIdentity(),
int2Id: integer('int2_id').generatedByDefaultAsIdentity(),
name: text('name').$defaultFn(() => '' as string),
title: text('title').notNull(),
description: text('description'),
dbdef: text('dbdef').default('dbdefval'),
},
);

const db = drizzle.mock();

db.update(test)
.set({
// @ts-expect-error
id: '1',
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.update(test)
.set({
// @ts-expect-error
intId: 1,
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.update(test)
.set({
int2Id: 1,
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.update(test)
.set({
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.insert(test).values({
// @ts-expect-error
id: '1',
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.insert(test).values({
// @ts-expect-error
intId: 1,
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.insert(test).values({
int2Id: 1,
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.insert(test).values({
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.insert(test).values({
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.insert(test).values({
title: 'title',
description: 'desc',
});

db.insert(test).values({
title: 'title',
});
10 changes: 10 additions & 0 deletions drizzle-orm/type-tests/geldb/no-strict-null-checks/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"noEmit": true,
"strictNullChecks": false,
"strictPropertyInitialization": false,
"exactOptionalPropertyTypes": false
},
"include": ["./test.ts"]
}
66 changes: 66 additions & 0 deletions drizzle-orm/type-tests/mysql/no-strict-null-checks/test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import { mysqlTable, text } from '~/mysql-core';
import { drizzle } from '~/mysql2';

export const test = mysqlTable(
'test',
{
id: text('id')
.primaryKey()
.generatedAlwaysAs('genstr'),
name: text('name').$defaultFn(() => '' as string),
title: text('title').notNull(),
description: text('description'),
dbdef: text('dbdef').default('dbdefval'),
},
);

const db = drizzle.mock();

db.update(test)
.set({
// @ts-expect-error
id: '1',
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.update(test)
.set({
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.insert(test).values({
// @ts-expect-error
id: '1',
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.insert(test).values({
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.insert(test).values({
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.insert(test).values({
title: 'title',
description: 'desc',
});

db.insert(test).values({
title: 'title',
});
10 changes: 10 additions & 0 deletions drizzle-orm/type-tests/mysql/no-strict-null-checks/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"noEmit": true,
"strictNullChecks": false,
"strictPropertyInitialization": false,
"exactOptionalPropertyTypes": false
},
"include": ["./test.ts"]
}
106 changes: 106 additions & 0 deletions drizzle-orm/type-tests/pg/no-strict-null-checks/test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
import { drizzle } from '~/node-postgres';
import { integer, pgTable, text } from '~/pg-core';

export const test = pgTable(
'test',
{
id: text('id')
.primaryKey()
.generatedAlwaysAs('genstr'),
intId: integer('int_id')
.primaryKey()
.generatedAlwaysAsIdentity(),
int2Id: integer('int2_id').generatedByDefaultAsIdentity(),
name: text('name').$defaultFn(() => '' as string),
title: text('title').notNull(),
description: text('description'),
dbdef: text('dbdef').default('dbdefval'),
},
);

const db = drizzle.mock();

db.update(test)
.set({
// @ts-expect-error
id: '1',
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.update(test)
.set({
// @ts-expect-error
intId: 1,
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.update(test)
.set({
int2Id: 1,
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.update(test)
.set({
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.insert(test).values({
// @ts-expect-error
id: '1',
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.insert(test).values({
// @ts-expect-error
intId: 1,
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.insert(test).values({
int2Id: 1,
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.insert(test).values({
name: 'name',
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.insert(test).values({
title: 'title',
description: 'desc',
dbdef: 'upddef',
});

db.insert(test).values({
title: 'title',
description: 'desc',
});

db.insert(test).values({
title: 'title',
});
10 changes: 10 additions & 0 deletions drizzle-orm/type-tests/pg/no-strict-null-checks/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"noEmit": true,
"strictNullChecks": false,
"strictPropertyInitialization": false,
"exactOptionalPropertyTypes": false
},
"include": ["./test.ts"]
}
Loading