def migrate_note_full(): # sqlite to leveldb db = xtables.get_note_table() content_db = xtables.get_note_content_table() for item in db.select(): note_key = build_note_full_key(item.id) ldb_value = dbutil.get(note_key) # 如果存在需要比较修改时间 if ldb_value and item.mtime >= ldb_value.mtime: build_full_note(item, content_db) dbutil.put(note_key, item) if ldb_value is None: build_full_note(item, content_db) dbutil.put(note_key, item) # old key to new key for item in dbutil.prefix_iter("note.full:"): new_key = build_note_full_key(item.id) new_value = dbutil.get(new_key) if new_value and item.mtime >= new_value.mtime: dbutil.put(new_key, item) if new_value is None: dbutil.put(new_key, item) return "迁移完成!"
def fill_note_info(files): db = xtables.get_note_table() for file in files: if file.category == "note": parent = xutils.call("note.get_by_id", file.parent_id) if parent is not None: file.parent_name = parent.name
def batch_query_sqlite(id_list): db = xtables.get_note_table() result = db.select(where="id IN $id_list", vars=dict(id_list=id_list)) dict_result = dict() for item in result: dict_result[item.id] = item return dict_result
def fill_note_info(files): db = xtables.get_note_table() for file in files: if file.category == "note": parent = db.select_one(where=dict(id=file.parent_id)) if parent is not None: file.parent_name = parent.name
def rdb_list_note(creator, parent_id, offset, limit): db = xtables.get_note_table() where_sql = "parent_id=$parent_id AND is_deleted=0 AND (creator=$creator OR is_public=1)" files = db.select(where=where_sql, vars=dict(parent_id=parent_id, is_deleted=0, creator=creator), order="name", limit=limit, offset=offset) return files
def migrate_note_recent(): recent_list = dbutil.prefix_iter("note_recent", include_key=True) for key, item in recent_list: dbutil.delete(key) db = xtables.get_note_table() for item in dbutil.prefix_iter("note_tiny"): if item.type != "group": dbutil.zadd("note_recent:%s" % item.creator, item.mtime, item.id) if item.is_public: dbutil.zadd("note_recent:public", item.mtime, item.id) return "迁移完成!"
def count_note(creator, parent_id): if xconfig.DB_ENGINE == "sqlite": db = xtables.get_note_table() where_sql = "parent_id=$parent_id AND is_deleted=0 AND (creator=$creator OR is_public=1)" amount = db.count(where = where_sql, vars=dict(parent_id=parent_id, creator=creator)) return amount else: # TODO 添加索引优化 def list_note_func(key, value): if value.is_deleted: return False if value.type == "group": return False return (value.is_public or value.creator == creator) and str(value.parent_id) == str(parent_id) return dbutil.prefix_count("note_tiny", list_note_func)
def get_note_table(): try: return xtables.get_note_table() except: # note table is not inited return None
def query_note_name(id): db = xtables.get_note_table() result = db.select_first(what="name", where=dict(id=id)) if result: return result.name return None