Fix bugs
Use Not(IsNull())
This commit is contained in:
parent
5a3ea38bbf
commit
e7dd5e155d
@ -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`);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user