From: tanya Date: Tue, 22 Jun 2010 11:59:14 +0000 (+0300) Subject: changed database functions X-Git-Url: https://vcs.maemo.org/git/?p=meabook;a=commitdiff_plain;h=a36fe66f494c49f15d63212f126cdf7954088da0 changed database functions --- diff --git a/database/SQLite.py b/database/SQLite.py index a51f505..0b2447e 100644 --- a/database/SQLite.py +++ b/database/SQLite.py @@ -136,6 +136,7 @@ class SQLite: # update RELATION table execute("INSERT INTO relation values(?,?)", (_id, child_id)) + def get_folders(self, parent=None): """ Returns list of all folders (items with folders and files) @@ -148,7 +149,30 @@ class SQLite: else: return self.conn.execute("SELECT DISTINCT name, id FROM struct \ WHERE parent=? ORDER BY name ASC", (parent,)).fetchall() + + def _get_files(self, fields, parent=0): + + items_dict = {} + execute = self.conn.execute + fields = dict(execute("SELECT id, name FROM fields WHERE name IN (%s)" \ + % ','.join('%r' % (field,) for field in fields)).fetchall()) + """ + query = "SELECT id, field_id, value FROM data \ + left join relation on relation.data_id=data.id \ + where relation.struct_id=? and field_id in (%s)" + """ + query = "select id, field_id, value from data where id in (select data_id from relation where struct_id=?) and field_id in (%s)" + + data = execute(query % ','.join('%r' % f for f in fields.keys()), (parent,)).fetchall() + + for id, field_id, value in data: + if not items_dict.has_key(id): + items_dict[id] = {} + items_dict[id][fields[int(field_id)]] = value + return items_dict + + def get_files(self, fields, parent=0, pattern=''): """Returns list of all files from DATA table.""" @@ -172,6 +196,36 @@ class SQLite: items_dict[data_id][field_name] = field_value return items_dict + def _get_files_by_pattern(self, fields, key='cn', pattern='', search_from_start=False): + """Returns list of all files from DATA table.""" + + items_dict = {} + if key not in fields: + fields = fields + (key,) + execute = self.conn.execute + fields = dict(execute("SELECT id, name FROM fields WHERE name IN (%s)" \ + % ','.join('%r' % (field,) for field in fields)).fetchall()) + key_id = 1 + for k, val in fields.items(): + if val == key: + key_id = k + break + if search_from_start: + s = '%s%%' % pattern.capitalize() + else: + s = '%%%s%%' % pattern + + data = execute("SELECT id, field_id, value FROM data WHERE id in \ + (select id from data where value LIKE '%s' and field_id=? LIMIT 50) \ + and field_id in (%s)" % (s, ','.join('%r' % f for f in fields.keys())), (key_id,)).fetchall() + + for id, field_id, value in data: + if not items_dict.has_key(id): + items_dict[id] = {} + items_dict[id][fields[int(field_id)]] = value + return items_dict + + def get_files_by_pattern(self, pattern): """Returns list of all files, matched pattern string.""" @@ -183,6 +237,20 @@ class SQLite: return execute("SELECT id, value FROM data WHERE value LIKE '%s%%' \ AND field_id=? LIMIT 50" % pattern.capitalize(), (field_id,)).fetchall() + def _get_entry(self, _id): + """Returns full entry by it id.""" + + execute = self.conn.execute + entry_dict = {} + entry_dict = dict(execute("select fields.name, value from data \ + left join fields on fields.id=data.field_id \ + where data.id=?", (_id,)).fetchall()) + sql_res = execute('select photo from photo where data_id=?', \ + (_id,)).fetchone() + if sql_res is not None: + entry_dict['image'] = sql_res[0] + return entry_dict + def get_entry(self, _id): """Returns full entry by it id.""" @@ -198,3 +266,8 @@ class SQLite: if sql_res is not None: entry_dict['image'] = sql_res[0] return entry_dict + +if __name__ == "__main__": + db = SQLite('/tmp') + #print db.get_files(('cn', 'o', 'ou'), 0) + print db._get_files_by_pattern(('cn', 'o', 'ou'), 'cn', 'Ра', True)