This commit is contained in:
Kovid Goyal 2007-06-07 07:39:25 +00:00
parent 80b8992a97
commit 2f75ac2fe9

View File

@ -38,7 +38,7 @@ class Concatenate(object):
def _connect(path): def _connect(path):
conn = sqlite.connect(path, detect_types=sqlite.PARSE_DECLTYPES|sqlite.PARSE_COLNAMES) conn = sqlite.connect(path, detect_types=sqlite.PARSE_DECLTYPES|sqlite.PARSE_COLNAMES)
conn.row_factory = sqlite.Row conn.row_factory = lambda cursor, row : list(row)
conn.create_aggregate('concat', 1, Concatenate) conn.create_aggregate('concat', 1, Concatenate)
title_pat = re.compile('^(A|The|An\s+)', re.IGNORECASE) title_pat = re.compile('^(A|The|An\s+)', re.IGNORECASE)
def title_sort(title): def title_sort(title):
@ -644,6 +644,7 @@ class LibraryDatabase(object):
id = self.data[row][0] id = self.data[row][0]
cols = {'title' : 1, 'authors': 2, 'publisher': 3, 'rating':4} cols = {'title' : 1, 'authors': 2, 'publisher': 3, 'rating':4}
col = cols[column] col = cols[column]
self.data[row][col] = val self.data[row][col] = val
for item in self.cache: for item in self.cache:
if item[0] == id: if item[0] == id:
@ -658,19 +659,18 @@ class LibraryDatabase(object):
self.set_publisher(id, val) self.set_publisher(id, val)
elif column == 'rating': elif column == 'rating':
self.set_rating(id, val) self.set_rating(id, val)
print row, col, val
def set_authors(self, id, authors): def set_authors(self, id, authors):
self.conn.execute('DELETE FROM books_authors_link WHERE book=?',(id,)) self.conn.execute('DELETE FROM books_authors_link WHERE book=?',(id,))
for a in authors: for a in authors:
if not a: if not a:
continue continue
author = conn.execute('SELECT id from authors WHERE name=?', (a,)).fetchone() author = self.conn.execute('SELECT id from authors WHERE name=?', (a,)).fetchone()
if author: if author:
aid = author[0] aid = author[0]
else: else:
aid = conn.execute('INSERT INTO authors(name) VALUES (?)', (a,)).lastrowid aid = self.conn.execute('INSERT INTO authors(name) VALUES (?)', (a,)).lastrowid
conn.execute('INSERT INTO books_authors_link(book, author) VALUES (?,?)', (id, aid)) self.conn.execute('INSERT INTO books_authors_link(book, author) VALUES (?,?)', (id, aid))
self.conn.commit() self.conn.commit()
def set_title(self, id, title): def set_title(self, id, title):
@ -683,20 +683,21 @@ class LibraryDatabase(object):
if not publisher: if not publisher:
return return
self.conn.execute('DELETE FROM books_publishers_link WHERE book=?',(id,)) self.conn.execute('DELETE FROM books_publishers_link WHERE book=?',(id,))
pub = conn.execute('SELECT id from publishers WHERE name=?', (publisher,)).fetchone() pub = self.conn.execute('SELECT id from publishers WHERE name=?', (publisher,)).fetchone()
if pub: if pub:
aid = pub[0] aid = pub[0]
else: else:
pub = conn.execute('INSERT INTO publishers(name) VALUES (?)', (publisher,)).lastrowid aid = self.conn.execute('INSERT INTO publishers(name) VALUES (?)', (publisher,)).lastrowid
conn.execute('INSERT INTO books_publishers_link(book, publisher) VALUES (?,?)', (id, aid)) self.conn.execute('INSERT INTO books_publishers_link(book, publisher) VALUES (?,?)', (id, aid))
self.conn.commit() self.conn.commit()
def set_rating(self, id, rating): def set_rating(self, id, rating):
rating = int(rating) rating = int(rating)
self.conn.execute('DELETE FROM books_ratings_link WHERE book=?',(id,)) self.conn.execute('DELETE FROM books_ratings_link WHERE book=?',(id,))
rat = conn.execute('SELECT id FROM ratings WHERE rating=?', (rating,)).fetchone() rat = self.conn.execute('SELECT id FROM ratings WHERE rating=?', (rating,)).fetchone()
rat = rat[0] if rat else conn.execute('INSERT INTO ratings(rating) VALUES (?)', (rating,)).lastrowid rat = rat[0] if rat else self.conn.execute('INSERT INTO ratings(rating) VALUES (?)', (rating,)).lastrowid
conn.execute('INSERT INTO books_ratings_link(book, rating) VALUES (?,?)', (id, rat)) self.conn.execute('INSERT INTO books_ratings_link(book, rating) VALUES (?,?)', (id, rat))
self.conn.commit()
if __name__ == '__main__': if __name__ == '__main__':
from IPython.Shell import IPShellEmbed from IPython.Shell import IPShellEmbed