home / github / issue_comments

Menu
  • Search all tables
  • GraphQL API

issue_comments: 1109164803

This data as json

html_url issue_url id node_id user created_at updated_at author_association body reactions issue performed_via_github_app
https://github.com/simonw/datasette/issues/1720#issuecomment-1109164803 https://api.github.com/repos/simonw/datasette/issues/1720 1109164803 IC_kwDOBm6k_c5CHIMD 9599 2022-04-26T00:21:40Z 2022-04-26T00:21:40Z OWNER

What would the existing https://latest.datasette.io/fixtures/simple_primary_key/1.json?_extras=foreign_key_tables feature look like if it was re-imagined as a register_row_extras() plugin?

Rough sketch, copying most of the code from https://github.com/simonw/datasette/blob/579f59dcec43a91dd7d404e00b87a00afd8515f2/datasette/views/row.py#L98

```python from datasette import hookimpl

@hookimpl def register_row_extras(datasette): return [foreign_key_tables]

async def foreign_key_tables(datasette, database, table, pk_values): if len(pk_values) != 1: return [] db = datasette.get_database(database) all_foreign_keys = await db.get_all_foreign_keys() foreign_keys = all_foreign_keys[table]["incoming"] if len(foreign_keys) == 0: return []

sql = "select " + ", ".join(
    [
        "(select count(*) from {table} where {column}=:id)".format(
            table=escape_sqlite(fk["other_table"]),
            column=escape_sqlite(fk["other_column"]),
        )
        for fk in foreign_keys
    ]
)
try:
    rows = list(await db.execute(sql, {"id": pk_values[0]}))
except QueryInterrupted:
    # Almost certainly hit the timeout
    return []

foreign_table_counts = dict(
    zip(
        [(fk["other_table"], fk["other_column"]) for fk in foreign_keys],
        list(rows[0]),
    )
)
foreign_key_tables = []
for fk in foreign_keys:
    count = (
        foreign_table_counts.get((fk["other_table"], fk["other_column"])) or 0
    )
    key = fk["other_column"]
    if key.startswith("_"):
        key += "__exact"
    link = "{}?{}={}".format(
        self.ds.urls.table(database, fk["other_table"]),
        key,
        ",".join(pk_values),
    )
    foreign_key_tables.append({**fk, **{"count": count, "link": link}})
return foreign_key_tables

```

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
1215174094  
Powered by Datasette · Queries took 1.376ms · About: github-to-sqlite