From 8e342a16a14f3cb61c86e91c81425410b5e1ce3b Mon Sep 17 00:00:00 2001 From: steini Date: Wed, 6 Mar 2013 14:38:17 +0000 Subject: [PATCH] Fixed up a couple of query classes for flex attr support. --- beets/library.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/beets/library.py b/beets/library.py index 41cde2c37..42aa4639a 100644 --- a/beets/library.py +++ b/beets/library.py @@ -548,7 +548,12 @@ class SubstringQuery(FieldQuery): def clause(self): search = '%' + (self.pattern.replace('\\','\\\\').replace('%','\\%') .replace('_','\\_')) + '%' - clause = self.field + " like ? escape '\\'" + if self.namespace: + clause = """key = {0} AND namespace = {1} + AND value like ? escape '\\'""".format( + self.field, self.namespace) + else: + clause = self.field + " like ? escape '\\'" subvals = [search] return clause, subvals @@ -559,11 +564,15 @@ class SubstringQuery(FieldQuery): class RegexpQuery(FieldQuery): """A query that matches a regular expression in a specific item field.""" def __init__(self, field, pattern, namespace=None, entity='item'): - super(RegexpQuery, self).__init__(field, pattern) + super(RegexpQuery, self).__init__(field, pattern, namespace, entity) self.regexp = re.compile(pattern) def clause(self): - clause = self.field + " REGEXP ?" + if self.namespace: + clause = 'key = {0} AND namespace = {1} AND value REGEXP ?'.format( + self.field, self.namespace) + else: + clause = self.field + " REGEXP ?" subvals = [self.pattern] return clause, subvals @@ -1416,11 +1425,8 @@ class Library(BaseLibrary): flexins = '''INSERT INTO item_attributes (entity_id, key, value, namespace) VALUES (?,?,?);''' - flexup = '''UPDATE item_attributes SET value = ? WHERE - entity_id = ? AND key = ? AND namespace = ?;''' for ns,attrs in item.flexattrs.iteritems(): for key in attrs.dirty: - #TODO: use an upsert method to store attrs tx.mutate(flexins, (store_id, key, attrs[key], ns)) attrs.dirty.clear()