Use more self.sql_ instead of own cursors.
This commit is contained in:
		
							parent
							
								
									144e97d365
								
							
						
					
					
						commit
						d9f5765bcc
					
				
					 1 changed files with 59 additions and 76 deletions
				
			
		|  | @ -46,15 +46,12 @@ class PDBAlbumMixin: | |||
|         NOT case-sensitive. | ||||
|         ''' | ||||
|         filepath = pathclass.Path(filepath).absolute_path | ||||
|         cur = self.sql.cursor() | ||||
|         cur.execute( | ||||
|             'SELECT albumid FROM album_associated_directories WHERE directory == ?', | ||||
|             [filepath] | ||||
|         ) | ||||
|         fetch = cur.fetchone() | ||||
|         if fetch is None: | ||||
|         query = 'SELECT albumid FROM album_associated_directories WHERE directory == ?' | ||||
|         bindings = [filepath] | ||||
|         album_row = self.sql_select_one(query, binding) | ||||
|         if album_row is None: | ||||
|             raise exceptions.NoSuchAlbum(filepath) | ||||
|         album_id = fetch[0] | ||||
|         album_id = album_row[0] | ||||
|         return self.get_album(album_id) | ||||
| 
 | ||||
|     def get_albums(self): | ||||
|  | @ -165,12 +162,12 @@ class PDBPhotoMixin: | |||
| 
 | ||||
|     def get_photo_by_path(self, filepath): | ||||
|         filepath = pathclass.Path(filepath) | ||||
|         cur = self.sql.cursor() | ||||
|         cur.execute('SELECT * FROM photos WHERE filepath == ?', [filepath.absolute_path]) | ||||
|         fetch = cur.fetchone() | ||||
|         if fetch is None: | ||||
|         query = 'SELECT * FROM photos WHERE filepath == ?' | ||||
|         bindings = [filepath.absolute_path] | ||||
|         photo_row = self.sql_select_one(query, bindings) | ||||
|         if photo_row is None: | ||||
|             raise exceptions.NoSuchPhoto(filepath) | ||||
|         photo = objects.Photo(self, fetch) | ||||
|         photo = objects.Photo(self, photo_row) | ||||
|         return photo | ||||
| 
 | ||||
|     def get_photos_by_recent(self, count=None): | ||||
|  | @ -179,16 +176,11 @@ class PDBPhotoMixin: | |||
|         ''' | ||||
|         if count is not None and count <= 0: | ||||
|             return | ||||
|         # We're going to use a second cursor because the first one may | ||||
|         # get used for something else, deactivating this query. | ||||
|         cur = self.sql.cursor() | ||||
|         cur.execute('SELECT * FROM photos ORDER BY created DESC') | ||||
|         while True: | ||||
|             fetch = cur.fetchone() | ||||
|             if fetch is None: | ||||
|                 break | ||||
|             photo = objects.Photo(self, fetch) | ||||
| 
 | ||||
|         query = 'SELECT * FROM photos ORDER BY created DESC' | ||||
|         photo_rows = self.sql_select(query) | ||||
|         for photo_row in photo_rows: | ||||
|             photo = objects.Photo(self, photo_row) | ||||
|             yield photo | ||||
| 
 | ||||
|             if count is None: | ||||
|  | @ -629,9 +621,8 @@ class PDBPhotoMixin: | |||
|         query = '%s\n%s\n%s' % ('-' * 80, query, '-' * 80) | ||||
| 
 | ||||
|         print(query, bindings) | ||||
|         #cur = self.sql.cursor() | ||||
|         #cur.execute('EXPLAIN QUERY PLAN ' + query, bindings) | ||||
|         #print('\n'.join(str(x) for x in cur.fetchall())) | ||||
|         #explain = self.sql_execute('EXPLAIN QUERY PLAN ' + query, bindings) | ||||
|         #print('\n'.join(str(x) for x in explain.fetchall())) | ||||
|         generator = self.sql_select(query, bindings) | ||||
|         photos_received = 0 | ||||
|         for row in generator: | ||||
|  | @ -717,10 +708,9 @@ class PDBSQLMixin: | |||
|         else: | ||||
|             restore_to = self.savepoints.pop(-1) | ||||
| 
 | ||||
|         cur = self.sql.cursor() | ||||
|         self.log.debug('Rolling back to %s', restore_to) | ||||
|         query = 'ROLLBACK TO "%s"' % restore_to | ||||
|         cur.execute(query) | ||||
|         self.sql_execute(query) | ||||
|         while len(self.on_commit_queue) > 0: | ||||
|             item = self.on_commit_queue.pop(-1) | ||||
|             if item == restore_to: | ||||
|  | @ -821,21 +811,20 @@ class PDBTagMixin: | |||
|         except (exceptions.TagTooShort, exceptions.TagTooLong): | ||||
|             raise exceptions.NoSuchTag(tagname) | ||||
| 
 | ||||
|         cur = self.sql.cursor() | ||||
|         while True: | ||||
|             # Return if it's a toplevel... | ||||
|             cur.execute('SELECT * FROM tags WHERE name == ?', [tagname]) | ||||
|             fetch = cur.fetchone() | ||||
|             if fetch is not None: | ||||
|                 return objects.Tag(self, fetch) | ||||
|             tag_row = self.sql_select_one('SELECT * FROM tags WHERE name == ?', [tagname]) | ||||
|             if tag_row is not None: | ||||
|                 return objects.Tag(self, tag_row) | ||||
| 
 | ||||
|             # ...or resolve the synonym and try again. | ||||
|             cur.execute('SELECT mastername FROM tag_synonyms WHERE name == ?', [tagname]) | ||||
|             fetch = cur.fetchone() | ||||
|             if fetch is None: | ||||
|             query = 'SELECT mastername FROM tag_synonyms WHERE name == ?' | ||||
|             bindings = [tagname] | ||||
|             name_row = self.sql_select_one(query, bindings) | ||||
|             if name_row is None: | ||||
|                 # was not a master tag or synonym | ||||
|                 raise exceptions.NoSuchTag(tagname) | ||||
|             tagname = fetch[0] | ||||
|             tagname = name_row[0] | ||||
| 
 | ||||
|     def get_tags(self): | ||||
|         ''' | ||||
|  | @ -944,13 +933,12 @@ class PDBUserMixin: | |||
|         so they get their own method. | ||||
|         ''' | ||||
|         possible = string.digits + string.ascii_uppercase | ||||
|         cur = self.sql.cursor() | ||||
|         for retry in range(20): | ||||
|             user_id = [random.choice(possible) for x in range(self.config['id_length'])] | ||||
|             user_id = ''.join(user_id) | ||||
| 
 | ||||
|             cur.execute('SELECT * FROM users WHERE id == ?', [user_id]) | ||||
|             if cur.fetchone() is None: | ||||
|             user_exists = self.sql_select_one('SELECT 1 FROM users WHERE id == ?', [user_id]) | ||||
|             if user_exists is None: | ||||
|                 break | ||||
|         else: | ||||
|             raise Exception('Failed to create user id after 20 tries.') | ||||
|  | @ -961,15 +949,13 @@ class PDBUserMixin: | |||
|         if not helpers.is_xor(id, username): | ||||
|             raise exceptions.NotExclusive(['id', 'username']) | ||||
| 
 | ||||
|         cur = self.sql.cursor() | ||||
|         if username is not None: | ||||
|             cur.execute('SELECT * FROM users WHERE username == ?', [username]) | ||||
|             user_row = self.sql_select_one('SELECT * FROM users WHERE username == ?', [username]) | ||||
|         else: | ||||
|             cur.execute('SELECT * FROM users WHERE id == ?', [id]) | ||||
|             user_row = self.sql_select_one('SELECT * FROM users WHERE id == ?', [id]) | ||||
| 
 | ||||
|         fetch = cur.fetchone() | ||||
|         if fetch is not None: | ||||
|             return objects.User(self, fetch) | ||||
|         if user_row is not None: | ||||
|             return objects.User(self, user_row) | ||||
|         else: | ||||
|             raise exceptions.NoSuchUser(username or id) | ||||
| 
 | ||||
|  | @ -1010,17 +996,15 @@ class PDBUserMixin: | |||
|         ''' | ||||
|         Return the User object for the user if the credentials are correct. | ||||
|         ''' | ||||
|         cur = self.sql.cursor() | ||||
|         cur.execute('SELECT * FROM users WHERE id == ?', [user_id]) | ||||
|         fetch = cur.fetchone() | ||||
|         user_row = self.sql_select_one('SELECT * FROM users WHERE id == ?', [user_id]) | ||||
| 
 | ||||
|         if fetch is None: | ||||
|         if user_row is None: | ||||
|             raise exceptions.WrongLogin() | ||||
| 
 | ||||
|         if not isinstance(password, bytes): | ||||
|             password = password.encode('utf-8') | ||||
| 
 | ||||
|         user = objects.User(self, fetch) | ||||
|         user = objects.User(self, user_row) | ||||
| 
 | ||||
|         success = bcrypt.checkpw(password, user.password_hash) | ||||
|         if not success: | ||||
|  | @ -1353,10 +1337,7 @@ class PhotoDB( | |||
|         } | ||||
| 
 | ||||
|     def _check_version(self): | ||||
|         cur = self.sql.cursor() | ||||
| 
 | ||||
|         cur.execute('PRAGMA user_version') | ||||
|         existing_version = cur.fetchone()[0] | ||||
|         existing_version = self.sql_execute('PRAGMA user_version').fetchone()[0] | ||||
|         if existing_version != constants.DATABASE_VERSION: | ||||
|             exc = exceptions.DatabaseOutOfDate( | ||||
|                 current=existing_version, | ||||
|  | @ -1397,23 +1378,26 @@ class PhotoDB( | |||
|         if table not in ['photos', 'tags', 'albums', 'bookmarks']: | ||||
|             raise ValueError('Invalid table requested: %s.', table) | ||||
| 
 | ||||
|         cur = self.sql.cursor() | ||||
|         cur.execute('SELECT last_id FROM id_numbers WHERE tab == ?', [table]) | ||||
|         fetch = cur.fetchone() | ||||
|         if fetch is None: | ||||
|         last_id = self.sql_select_one('SELECT last_id FROM id_numbers WHERE tab == ?', [table]) | ||||
|         if last_id is None: | ||||
|             # Register new value | ||||
|             new_id_int = 1 | ||||
|             do_insert = True | ||||
|         else: | ||||
|             # Use database value | ||||
|             new_id_int = int(fetch[0]) + 1 | ||||
|             new_id_int = int(last_id[0]) + 1 | ||||
|             do_insert = False | ||||
| 
 | ||||
|         new_id = str(new_id_int).rjust(self.config['id_length'], '0') | ||||
| 
 | ||||
|         pairs = { | ||||
|             'tab': table, | ||||
|             'last_id': new_id, | ||||
|         } | ||||
|         if do_insert: | ||||
|             cur.execute('INSERT INTO id_numbers VALUES(?, ?)', [table, new_id]) | ||||
|             self.sql_insert(table='id_numbers', data=pairs) | ||||
|         else: | ||||
|             cur.execute('UPDATE id_numbers SET last_id = ? WHERE tab == ?', [new_id, table]) | ||||
|             self.sql_update(table='id_numbers', pairs=pairs, where_key='tab') | ||||
|         return new_id | ||||
| 
 | ||||
|     def get_cached_frozen_children(self): | ||||
|  | @ -1429,39 +1413,38 @@ class PhotoDB( | |||
|     def get_thing_by_id(self, thing_type, thing_id): | ||||
|         thing_map = _THING_CLASSES[thing_type] | ||||
| 
 | ||||
|         if isinstance(thing_id, thing_map['class']): | ||||
|         thing_class = thing_map['class'] | ||||
|         if isinstance(thing_id, thing_class): | ||||
|             thing_id = thing_id.id | ||||
| 
 | ||||
|         cache = self.caches[thing_type] | ||||
|         thing_cache = self.caches[thing_type] | ||||
|         try: | ||||
|             #self.log.debug('Cache hit for %s %s', thing_type, thing_id) | ||||
|             val = cache[thing_id] | ||||
|             val = thing_cache[thing_id] | ||||
|             return val | ||||
|         except KeyError: | ||||
|             pass | ||||
| 
 | ||||
|         query = 'SELECT * FROM %s WHERE id == ?' % thing_map['table'] | ||||
|         cur = self.sql.cursor() | ||||
|         cur.execute(query, [thing_id]) | ||||
|         thing = cur.fetchone() | ||||
|         if thing is None: | ||||
|         bindings = [thing_id] | ||||
|         thing_row = self.sql_select_one(query, bindings) | ||||
|         if thing_row is None: | ||||
|             raise thing_map['exception'](thing_id) | ||||
|         thing = thing_map['class'](self, thing) | ||||
|         cache[thing_id] = thing | ||||
|         thing = thing_class(self, thing_row) | ||||
|         thing_cache[thing_id] = thing | ||||
|         return thing | ||||
| 
 | ||||
|     def get_things(self, thing_type, orderby=None): | ||||
|         thing_map = _THING_CLASSES[thing_type] | ||||
| 
 | ||||
|         cur = self.sql.cursor() | ||||
|         if orderby: | ||||
|             cur.execute('SELECT * FROM %s ORDER BY %s' % (thing_map['table'], orderby)) | ||||
|             query = 'SELECT * FROM %s ORDER BY %s' % (thing_map['table'], orderby) | ||||
|         else: | ||||
|             cur.execute('SELECT * FROM %s' % thing_map['table']) | ||||
|             query = 'SELECT * FROM %s' % thing_map['table'] | ||||
| 
 | ||||
|         things = cur.fetchall() | ||||
|         for thing in things: | ||||
|             thing = thing_map['class'](self, db_row=thing) | ||||
|         things = self.sql_select(query) | ||||
|         for thing_row in things: | ||||
|             thing = thing_map['class'](self, db_row=thing_row) | ||||
|             yield thing | ||||
| 
 | ||||
|     def load_config(self): | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue