Skip to content
Snippets Groups Projects
Unverified Commit e7dd5e15 authored by syuilo's avatar syuilo
Browse files

Fix bugs

Use Not(IsNull())
parent 5a3ea38b
No related branches found
No related tags found
No related merge requests found
......@@ -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 {
......
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`);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment