Fix bugs
Use Not(IsNull())
This commit is contained in:
		| @@ -128,6 +128,20 @@ query.andWhere(new Brackets(qb => { | ||||
| })); | ||||
| ``` | ||||
|  | ||||
| ### Not `null` in TypeORM | ||||
| ```ts | ||||
| const foo = await Foos.findOne({ | ||||
| 	bar: Not(null) | ||||
| }); | ||||
| ``` | ||||
| のようなクエリ(`bar`が`null`ではない)は期待通りに動作しない。 | ||||
| 次のようにします: | ||||
| ```ts | ||||
| const foo = await Foos.findOne({ | ||||
| 	bar: Not(IsNull()) | ||||
| }); | ||||
| ``` | ||||
|  | ||||
| ### `null` in SQL | ||||
| SQLを発行する際、パラメータが`null`になる可能性のある場合はSQL文を出し分けなければならない | ||||
| 例えば | ||||
|   | ||||
| @@ -4,7 +4,7 @@ import define from '../../define'; | ||||
| import { maximum } from '../../../../prelude/array'; | ||||
| import { ApiError } from '../../error'; | ||||
| import { getUser } from '../../common/getters'; | ||||
| import { Not, In } from 'typeorm'; | ||||
| import { Not, In, IsNull } from 'typeorm'; | ||||
| import { Notes, Users } from '../../../../models'; | ||||
| import { types, bool } from '../../../../misc/schema'; | ||||
|  | ||||
| @@ -58,7 +58,7 @@ export default define(meta, async (ps, me) => { | ||||
| 	const recentNotes = await Notes.find({ | ||||
| 		where: { | ||||
| 			userId: user.id, | ||||
| 			replyId: Not(null) | ||||
| 			replyId: Not(IsNull()) | ||||
| 		}, | ||||
| 		order: { | ||||
| 			id: -1 | ||||
|   | ||||
| @@ -2,7 +2,7 @@ import autobind from 'autobind-decorator'; | ||||
| import Chart, { Obj, DeepPartial } from '../../core'; | ||||
| import { SchemaType } from '../../../../misc/schema'; | ||||
| import { DriveFiles } from '../../../../models'; | ||||
| import { Not } from 'typeorm'; | ||||
| import { Not, IsNull } from 'typeorm'; | ||||
| import { DriveFile } from '../../../../models/entities/drive-file'; | ||||
| import { name, schema } from '../schemas/drive'; | ||||
|  | ||||
| @@ -31,7 +31,7 @@ export default class DriveChart extends Chart<DriveLog> { | ||||
| 	protected async fetchActual(): Promise<DeepPartial<DriveLog>> { | ||||
| 		const [localCount, remoteCount, localSize, remoteSize] = await Promise.all([ | ||||
| 			DriveFiles.count({ userHost: null }), | ||||
| 			DriveFiles.count({ userHost: Not(null) }), | ||||
| 			DriveFiles.count({ userHost: Not(IsNull()) }), | ||||
| 			DriveFiles.clacDriveUsageOfLocal(), | ||||
| 			DriveFiles.clacDriveUsageOfRemote() | ||||
| 		]); | ||||
|   | ||||
| @@ -2,7 +2,7 @@ import autobind from 'autobind-decorator'; | ||||
| import Chart, { Obj, DeepPartial } from '../../core'; | ||||
| import { SchemaType } from '../../../../misc/schema'; | ||||
| import { Notes } from '../../../../models'; | ||||
| import { Not } from 'typeorm'; | ||||
| import { Not, IsNull } from 'typeorm'; | ||||
| import { Note } from '../../../../models/entities/note'; | ||||
| import { name, schema } from '../schemas/notes'; | ||||
|  | ||||
| @@ -29,7 +29,7 @@ export default class NotesChart extends Chart<NotesLog> { | ||||
| 	protected async fetchActual(): Promise<DeepPartial<NotesLog>> { | ||||
| 		const [localCount, remoteCount] = await Promise.all([ | ||||
| 			Notes.count({ userHost: null }), | ||||
| 			Notes.count({ userHost: Not(null) }) | ||||
| 			Notes.count({ userHost: Not(IsNull()) }) | ||||
| 		]); | ||||
|  | ||||
| 		return { | ||||
|   | ||||
| @@ -2,7 +2,7 @@ import autobind from 'autobind-decorator'; | ||||
| import Chart, { Obj, DeepPartial } from '../../core'; | ||||
| import { SchemaType } from '../../../../misc/schema'; | ||||
| import { Followings, Users } from '../../../../models'; | ||||
| import { Not } from 'typeorm'; | ||||
| import { Not, IsNull } from 'typeorm'; | ||||
| import { User } from '../../../../models/entities/user'; | ||||
| import { name, schema } from '../schemas/per-user-following'; | ||||
|  | ||||
| @@ -45,8 +45,8 @@ export default class PerUserFollowingChart extends Chart<PerUserFollowingLog> { | ||||
| 		] = await Promise.all([ | ||||
| 			Followings.count({ followerId: group, followeeHost: null }), | ||||
| 			Followings.count({ followeeId: group, followerHost: null }), | ||||
| 			Followings.count({ followerId: group, followeeHost: Not(null) }), | ||||
| 			Followings.count({ followeeId: group, followerHost: Not(null) }) | ||||
| 			Followings.count({ followerId: group, followeeHost: Not(IsNull()) }), | ||||
| 			Followings.count({ followeeId: group, followerHost: Not(IsNull()) }) | ||||
| 		]); | ||||
|  | ||||
| 		return { | ||||
|   | ||||
| @@ -2,7 +2,7 @@ import autobind from 'autobind-decorator'; | ||||
| import Chart, { Obj, DeepPartial } from '../../core'; | ||||
| import { SchemaType } from '../../../../misc/schema'; | ||||
| import { Users } from '../../../../models'; | ||||
| import { Not } from 'typeorm'; | ||||
| import { Not, IsNull } from 'typeorm'; | ||||
| import { User } from '../../../../models/entities/user'; | ||||
| import { name, schema } from '../schemas/users'; | ||||
|  | ||||
| @@ -29,7 +29,7 @@ export default class UsersChart extends Chart<UsersLog> { | ||||
| 	protected async fetchActual(): Promise<DeepPartial<UsersLog>> { | ||||
| 		const [localCount, remoteCount] = await Promise.all([ | ||||
| 			Users.count({ host: null }), | ||||
| 			Users.count({ host: Not(null) }) | ||||
| 			Users.count({ host: Not(IsNull()) }) | ||||
| 		]); | ||||
|  | ||||
| 		return { | ||||
|   | ||||
| @@ -1,14 +1,14 @@ | ||||
| import * as promiseLimit from 'promise-limit'; | ||||
| import del from '../services/drive/delete-file'; | ||||
| import { DriveFiles } from '../models'; | ||||
| import { Not } from 'typeorm'; | ||||
| import { Not, IsNull } from 'typeorm'; | ||||
| import { DriveFile } from '../models/entities/drive-file'; | ||||
| import { ensure } from '../prelude/ensure'; | ||||
|  | ||||
| const limit = promiseLimit(16); | ||||
|  | ||||
| DriveFiles.find({ | ||||
| 	userHost: Not(null) | ||||
| 	userHost: Not(IsNull()) | ||||
| }).then(async files => { | ||||
| 	console.log(`there is ${files.length} files`); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 syuilo
					syuilo