remove unique contraint for user.nickname

This commit is contained in:
j 2019-02-02 15:53:53 +05:30
parent bcfc8ba9b2
commit 4033958341
6 changed files with 36 additions and 9 deletions

View File

@ -129,7 +129,7 @@ class Parser(object):
nickname, name = v.split(':', 1)
if nickname:
try:
u = self._user.query.filter_by(nickname=nickname).one()
u = self._user.query.filter_by(nickname=nickname, peered=True).one()
except sqlalchemy.orm.exc.NoResultFound:
ids = []
return self.in_ids(ids, exclude)

View File

@ -95,4 +95,4 @@ FULLTEXT_SUPPORT = fulltext.platform_supported()
if not FULLTEXT_SUPPORT:
config['itemKeys'] = [k for k in config['itemKeys'] if k['id'] != 'fulltext']
DB_VERSION = 15
DB_VERSION = 16

View File

@ -43,11 +43,11 @@ CREATE TABLE user (
peered BOOLEAN,
online BOOLEAN,
PRIMARY KEY (id),
UNIQUE (nickname),
CHECK (queued IN (0, 1)),
CHECK (peered IN (0, 1)),
CHECK (online IN (0, 1))
);
CREATE INDEX ix_user_nichname ON user (nichname);
CREATE TABLE metadata (
created DATETIME,
modified DATETIME,

View File

@ -373,6 +373,8 @@ class Update(Thread):
db_version = migrate_13()
if db_version < 15:
db_version = migrate_15()
if db_version < 16:
db_version = migrate_16()
settings.server['db_version'] = db_version
def run(self):
@ -437,7 +439,7 @@ def migrate_5():
'DROP INDEX IF EXISTS user_metadata_index',
'CREATE UNIQUE INDEX user_metadata_index ON user_metadata(item_id, user_id)',
'UPDATE sort SET sharemetadata = 0',
]),
])
with db.session() as session:
import user.models
for m in user.models.Metadata.query:
@ -631,3 +633,28 @@ def migrate_15():
del u.info['local']
u.save()
return 15
def migrate_16():
db.run_sql([
'''CREATE TABLE user2 (
created DATETIME,
modified DATETIME,
id VARCHAR(43) NOT NULL,
info BLOB,
nickname VARCHAR(256),
pending VARCHAR(64),
queued BOOLEAN,
peered BOOLEAN,
online BOOLEAN,
PRIMARY KEY (id),
CHECK (queued IN (0, 1)),
CHECK (peered IN (0, 1)),
CHECK (online IN (0, 1))
)''',
'''INSERT INTO user2 (created, modified, id, info, nickname, pending, queued, peered, online)
SELECT created, modified, id, info, nickname, pending, queued, peered, online FROM user''',
'DROP TABLE user',
'ALTER TABLE user2 RENAME TO user',
'CREATE INDEX IF NOT EXISTS ix_user_nickname ON user (nickname)'
])
return 16

View File

@ -30,7 +30,7 @@ class User(db.Model):
id = sa.Column(sa.String(43), primary_key=True)
info = sa.Column(MutableDict.as_mutable(sa.PickleType(pickler=json_pickler)))
nickname = sa.Column(sa.String(256), unique=True)
nickname = sa.Column(sa.String(256), index=True)
pending = sa.Column(sa.String(64)) # sent|received
queued = sa.Column(sa.Boolean())

View File

@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
from tornado.websocket import WebSocketHandler
from tornado.websocket import WebSocketHandler, WebSocketClosedError
from tornado.ioloop import IOLoop
from tornado.iostream import StreamClosedError
import json
from oxtornado import json_dumps
@ -72,9 +72,9 @@ class Handler(WebSocketHandler):
try:
task = self.write_message(message)
await task
except tornado.iostream.StreamClosedError as e:
except StreamClosedError as e:
self.on_close()
except tornado.websocket.WebSocketClosedError as e:
except WebSocketClosedError as e:
self.on_close()