···
create table if not exists posts (
21
-
grapheme_length integer unique,
21
+
grapheme_length integer,
25
+
create unique index if not exists ll_idx on posts(grapheme_length, lang);
self.logger = logging.getLogger('feeds.battle')
···
post_uri = f'at://{repo}/{path}'
45
-
l = grapheme.length(record['text'])
46
+
length = grapheme.length(record['text'])
ts = self.safe_timestamp(record['createdAt']).timestamp()
self.transaction_begin(self.db_cnx)
···
insert into posts(uri, grapheme_length, create_ts, lang)
values(:uri, :length, :ts, :lang)
55
-
on conflict(grapheme_length) do update set uri = :uri
56
-
""", dict(uri=post_uri, length=l, ts=ts, lang=lang))
56
+
on conflict do update set uri = :uri, create_ts = :ts
57
+
""", dict(uri=post_uri, length=length, ts=ts, lang=lang))
def commit_changes(self):
self.logger.debug('committing changes')
···
self.wal_checkpoint(self.db_cnx, 'RESTART')
def serve_feed(self, limit, offset, langs):
65
-
# cur = self.db_cnx.execute(
66
-
# "select uri from posts order by grapheme_length asc limit :limit offset :offset",
67
-
# dict(limit=limit, offset=offset)
69
-
# return [uri for (uri,) in cur]
71
-
# lang_values = list(langs.values())
72
-
# lang_selects = ['select uri, grapheme_length from posts where lang = ?'] * len(lang_values)
73
-
# lang_clause = ' union '.join(lang_selects)
74
-
# cur = self.db_cnx.execute(
75
-
# lang_clause + ' order by grapheme_length asc limit ? offset ?',
76
-
# [*lang_values, limit, offset]
78
-
# return [uri for (uri, create_ts) in cur]
66
+
cur = self.db_cnx.execute("""
69
+
order by grapheme_length asc
70
+
limit :limit offset :offset
71
+
""", dict(limit=limit, offset=offset))
72
+
return [uri for (uri,) in cur]
74
+
lang_values = list(langs.values())
75
+
lang_selects = ['select uri, grapheme_length from posts where lang = ?'] * len(lang_values)
76
+
lang_clause = ' union '.join(lang_selects)
77
+
cur = self.db_cnx.execute(
78
+
lang_clause + ' order by grapheme_length asc limit ? offset ?',
79
+
[*lang_values, limit, offset]
81
+
return [uri for (uri, grapheme_length) in cur]
80
-
cur = self.db_cnx.execute("""
83
-
order by grapheme_length asc
84
-
limit :limit offset :offset
85
-
""", dict(limit=limit, offset=offset))
86
-
return [uri for (uri,) in cur]
83
+
def serve_feed_debug(self, limit, offset, langs):
86
+
select *, unixepoch('now') - create_ts as age_seconds
88
+
order by grapheme_length asc
89
+
limit :limit offset :offset
91
+
bindings = [limit, offset]
93
+
lang_values = list(langs.values())
94
+
lang_selects = ["select *, unixepoch('now') - create_ts as age_seconds from posts where lang = ?"] * len(lang_values)
95
+
lang_clause = ' union '.join(lang_selects)
96
+
query = lang_clause + ' order by grapheme_length asc limit ? offset ?'
97
+
bindings = [*lang_values, limit, offset]
88
-
def serve_feed_debug(self, limit, offset, langs):
92
-
order by grapheme_length asc
93
-
limit :limit offset :offset
95
-
bindings = dict(limit=limit, offset=offset)
return apsw.ext.format_query_table(
self.db_cnx, query, bindings,
string_sanitize=2, text_width=9999, use_unicode=True