{"html_url": "https://github.com/simonw/sqlite-utils/issues/207#issuecomment-743966801", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/207", "id": 743966801, "node_id": "MDEyOklzc3VlQ29tbWVudDc0Mzk2NjgwMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-13T07:25:23Z", "updated_at": "2020-12-13T07:25:23Z", "author_association": "OWNER", "body": "CLI documentation: https://sqlite-utils.readthedocs.io/en/latest/cli.html#analyzing-tables\r\n\r\nPython library documentation: https://sqlite-utils.readthedocs.io/en/latest/python-api.html#analyzing-a-column", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 763283616, "label": "sqlite-utils analyze-tables command"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/pull/203#issuecomment-743966289", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/203", "id": 743966289, "node_id": "MDEyOklzc3VlQ29tbWVudDc0Mzk2NjI4OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-13T07:20:51Z", "updated_at": "2020-12-13T07:20:51Z", "author_association": "OWNER", "body": "Sorry for not reviewing this yet! I'll try to carve out time to look at it in the next few days.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 743384829, "label": "changes to allow for compound foreign keys"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/pull/208#issuecomment-743956666", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/208", "id": 743956666, "node_id": "MDEyOklzc3VlQ29tbWVudDc0Mzk1NjY2Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-13T05:44:49Z", "updated_at": "2020-12-13T05:44:49Z", "author_association": "OWNER", "body": "Example output:\r\n```\r\n% sqlite-utils analyze-tables github.db tags \r\ntags.repo: (1/3)\r\n\r\n Total rows: 261\r\n Null rows: 0\r\n Blank rows: 0\r\n\r\n Distinct values: 14\r\n\r\n Most common:\r\n 88: 107914493\r\n 75: 140912432\r\n 27: 206156866\r\n 21: 207052882\r\n 17: 197431109\r\n 8: 197882382\r\n 5: 256834907\r\n 5: 205429375\r\n 4: 248903544\r\n 3: 206202864\r\n\r\n Least common:\r\n 1: 209590345\r\n 2: 206649770\r\n 2: 303218369\r\n 3: 206202864\r\n 3: 213286752\r\n 4: 248903544\r\n 5: 205429375\r\n 5: 256834907\r\n 8: 197882382\r\n 17: 197431109\r\n\r\ntags.name: (2/3)\r\n\r\n Total rows: 261\r\n Null rows: 0\r\n Blank rows: 0\r\n\r\n Distinct values: 175\r\n\r\n Most common:\r\n 10: 0.2\r\n 9: 0.1\r\n 7: 0.3\r\n 6: 0.4\r\n 5: 0.7\r\n 5: 0.5\r\n 5: 0.1a\r\n 4: 0.9\r\n 4: 0.8\r\n 4: 0.6\r\n\r\n Least common:\r\n 1: 0.1.1\r\n 1: 0.11.1\r\n 1: 0.1a2\r\n 1: 0.20.1\r\n 1: 0.21.1\r\n 1: 0.21.2\r\n 1: 0.21.3\r\n 1: 0.22\r\n 1: 0.22.1\r\n 1: 0.23\r\n\r\ntags.sha: (3/3)\r\n\r\n Total rows: 261\r\n Null rows: 0\r\n Blank rows: 0\r\n\r\n Distinct values: 261\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 763320133, "label": "sqlite-utils analyze-tables command and table.analyze_column() method"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1142#issuecomment-743913004", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1142", "id": 743913004, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MzkxMzAwNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-12T22:17:46Z", "updated_at": "2020-12-12T22:17:46Z", "author_association": "OWNER", "body": "You're actually choosing between two options here: the 100 rows you can see on the screen, or the x,000 rows that match the current query.\r\n\r\nMaybe a radio box would be more obvious?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 763361458, "label": "\"Stream all rows\" is not at all obvious"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1142#issuecomment-743912875", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1142", "id": 743912875, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MzkxMjg3NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-12T22:16:38Z", "updated_at": "2020-12-12T22:16:38Z", "author_association": "OWNER", "body": "Yeah, maybe with the number of rows to make it completely clear. `Include all 2,455 rows` perhaps.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 763361458, "label": "\"Stream all rows\" is not at all obvious"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1142#issuecomment-743732440", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1142", "id": 743732440, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MzczMjQ0MA==", "user": {"value": 6622733, "label": "nitinpaultifr"}, "created_at": "2020-12-12T09:56:40Z", "updated_at": "2020-12-12T09:56:40Z", "author_association": "NONE", "body": "'Include all rows' seem like a fairly obvious alternative", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 763361458, "label": "\"Stream all rows\" is not at all obvious"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/pull/208#issuecomment-743708524", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/208", "id": 743708524, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MzcwODUyNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-12T05:48:20Z", "updated_at": "2020-12-12T05:48:32Z", "author_association": "OWNER", "body": "```\r\n% sqlite-utils analyze-tables ../datasette/fixtures.db facetable --column pk\r\n1/1: ColumnDetails(table='facetable', column='pk', total_rows=15, num_null=0, num_blank=0, num_distinct=15, most_common=None, least_common=None)\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 763320133, "label": "sqlite-utils analyze-tables command and table.analyze_column() method"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/pull/208#issuecomment-743708325", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/208", "id": 743708325, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MzcwODMyNQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-12T05:46:27Z", "updated_at": "2020-12-12T05:46:27Z", "author_association": "OWNER", "body": "It would be neat if you could optionally specify a subset of columns to analyze, using `-c` or `--column`.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 763320133, "label": "sqlite-utils analyze-tables command and table.analyze_column() method"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/pull/208#issuecomment-743708169", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/208", "id": 743708169, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MzcwODE2OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-12T05:44:46Z", "updated_at": "2020-12-12T05:44:46Z", "author_association": "OWNER", "body": "If there are less than ten values is it worth outputting them twice, once in `most_common` and then in reverse in `least_common`? Feels redundant - I think I should leave `least_common` empty in that case.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 763320133, "label": "sqlite-utils analyze-tables command and table.analyze_column() method"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/pull/208#issuecomment-743708080", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/208", "id": 743708080, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MzcwODA4MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-12T05:43:45Z", "updated_at": "2020-12-12T05:43:45Z", "author_association": "OWNER", "body": "CLI output looks like this at the moment, which is bad:\r\n```\r\n % sqlite-utils analyze-tables ../datasette/fixtures.db facetable\r\n1/10: ColumnDetails(table='facetable', column='pk', total_rows=15, num_null=0, num_blank=0, num_distinct=15, most_common=None, least_common=None)\r\n2/10: ColumnDetails(table='facetable', column='created', total_rows=15, num_null=0, num_blank=0, num_distinct=4, most_common=[('2019-01-17 08:00:00', 4), ('2019-01-15 08:00:00', 4), ('2019-01-14 08:00:00', 4), ('2019-01-16 08:00:00', 3)], least_common=[('2019-01-16 08:00:00', 3), ('2019-01-14 08:00:00', 4), ('2019-01-15 08:00:00', 4), ('2019-01-17 08:00:00', 4)])\r\n3/10: ColumnDetails(table='facetable', column='planet_int', total_rows=15, num_null=0, num_blank=0, num_distinct=2, most_common=[(1, 14), (2, 1)], least_common=[(2, 1), (1, 14)])\r\n4/10: ColumnDetails(table='facetable', column='on_earth', total_rows=15, num_null=0, num_blank=0, num_distinct=2, most_common=[(1, 14), (0, 1)], least_common=[(0, 1), (1, 14)])\r\n5/10: ColumnDetails(table='facetable', column='state', total_rows=15, num_null=0, num_blank=0, num_distinct=3, most_common=[('CA', 10), ('MI', 4), ('MC', 1)], least_common=[('MC', 1), ('MI', 4), ('CA', 10)])\r\n6/10: ColumnDetails(table='facetable', column='city_id', total_rows=15, num_null=0, num_blank=0, num_distinct=4, most_common=[(1, 6), (3, 4), (2, 4), (4, 1)], least_common=[(4, 1), (2, 4), (3, 4), (1, 6)])\r\n7/10: ColumnDetails(table='facetable', column='neighborhood', total_rows=15, num_null=0, num_blank=0, num_distinct=14, most_common=[('Downtown', 2), ('Tenderloin', 1), ('SOMA', 1), ('Mission', 1), ('Mexicantown', 1), ('Los Feliz', 1), ('Koreatown', 1), ('Hollywood', 1), ('Hayes Valley', 1), ('Greektown', 1)], least_common=[('Arcadia Planitia', 1), ('Bernal Heights', 1), ('Corktown', 1), ('Dogpatch', 1), ('Greektown', 1), ('Hayes Valley', 1), ('Hollywood', 1), ('Koreatown', 1), ('Los Feliz', 1), ('Mexicantown', 1)])\r\n8/10: ColumnDetails(table='facetable', column='tags', total_rows=15, num_null=0, num_blank=0, num_distinct=3, most_common=[('[]', 13), ('[\"tag1\", \"tag3\"]', 1), ('[\"tag1\", \"tag2\"]', 1)], least_common=[('[\"tag1\", \"tag2\"]', 1), ('[\"tag1\", \"tag3\"]', 1), ('[]', 13)])\r\n9/10: ColumnDetails(table='facetable', column='complex_array', total_rows=15, num_null=0, num_blank=0, num_distinct=2, most_common=[('[]', 14), ('[{\"foo\": \"bar\"}]', 1)], least_common=[('[{\"foo\": \"bar\"}]', 1), ('[]', 14)])\r\n10/10: ColumnDetails(table='facetable', column='distinct_some_null', total_rows=15, num_null=13, num_blank=0, num_distinct=2, most_common=[(None, 13), ('two', 1), ('one', 1)], least_common=[('one', 1), ('two', 1), (None, 13)])\r\n(sqlite-utils) sqlite-utils % \r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 763320133, "label": "sqlite-utils analyze-tables command and table.analyze_column() method"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/pull/208#issuecomment-743707969", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/208", "id": 743707969, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MzcwNzk2OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-12T05:42:26Z", "updated_at": "2020-12-12T05:43:06Z", "author_association": "OWNER", "body": "Should truncate values in the least/most common JSON array to a sensible length, otherwise you end up with stuff like this:\r\n```json\r\n[\r\n [\r\n \"b'\\\\x00\\\\x05barry\\\\x03\\\\x01\\\\x02\\\\x00\\\\x00\\\\x03cat\\\\x03\\\\x01\\\\x03\\\\x00\\\\x00\\\\x03dog\\\\x08\\\\x01\\\\x01\\\\x01\\\\x03\\\\x00\\\\x01\\\\x03\\\\x00\\\\x00\\\\x07panther\\\\x05\\\\x01\\\\x01\\\\x02\\\\x02\\\\x00\\\\x01\\\\x03uma\\\\x05\\\\x02\\\\x01\\\\x02\\\\x02\\\\x00\\\\x00\\\\x04sara\\\\x05\\\\x02\\\\x01\\\\x01\\\\x02\\\\x00\\\\x00\\\\x05terry\\\\x08\\\\x01\\\\x01\\\\x01\\\\x02\\\\x00\\\\x01\\\\x02\\\\x00\\\\x00\\\\x06weasel\\\\x05\\\\x02\\\\x01\\\\x01\\\\x03\\\\x00'\",\r\n 1\r\n ]\r\n]\r\n```\r\nThis example also shows that binary values (like those in `_fts` tables) look a bit weird, but I think I'm OK with that since binary data can't be represented neatly in JSON anyway.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 763320133, "label": "sqlite-utils analyze-tables command and table.analyze_column() method"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/207#issuecomment-743701697", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/207", "id": 743701697, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MzcwMTY5Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-12T04:39:51Z", "updated_at": "2020-12-12T04:39:51Z", "author_association": "OWNER", "body": "CLI could be:\r\n\r\n sqlite-utils analyze-tables\r\n\r\nTo analyze all tables or:\r\n\r\n sqlite-utils analyze-tables table1 table2\r\n\r\nTo analyze specific tables.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 763283616, "label": "sqlite-utils analyze-tables command"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/207#issuecomment-743701599", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/207", "id": 743701599, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MzcwMTU5OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-12T04:38:52Z", "updated_at": "2020-12-12T04:39:07Z", "author_association": "OWNER", "body": "I'll add a `table.analyze_column(column)` method which is used by the CLI tool - with a note that this is an unstable interface which may change in the future.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 763283616, "label": "sqlite-utils analyze-tables command"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/207#issuecomment-743701422", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/207", "id": 743701422, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MzcwMTQyMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-12T04:37:14Z", "updated_at": "2020-12-12T04:38:25Z", "author_association": "OWNER", "body": "Prototype:\r\n```python\r\nfrom collections import namedtuple\r\n\r\nColumnDetails = namedtuple(\"ColumnDetails\", (\"column\", \"num_null\", \"num_blank\", \"num_distinct\", \"most_common\", \"least_common\"))\r\n\r\ndef analyze_column(db, table, column, values=10):\r\n num_null = db.execute(\"select count(*) from [{}] where [{}] is null\".format(table, column)).fetchone()[0]\r\n num_blank = db.execute(\"select count(*) from [{}] where [{}] = ''\".format(table, column)).fetchone()[0]\r\n num_distinct = db.execute(\"select count(distinct [{}]) from [{}]\".format(column, table)).fetchone()[0]\r\n most_common = None\r\n least_common = None\r\n if num_distinct != 1:\r\n most_common = [(r[0], r[1]) for r in db.execute(\r\n \"select [{}], count(*) from [{}] group by [{}] order by count(*) desc limit \".format(column, table, column, values)\r\n ).fetchall()]\r\n if num_distinct <= values:\r\n # No need to run the query if it will just return the results in revers order\r\n least_common = most_common[::-1]\r\n else:\r\n least_common = [(r[0], r[1]) for r in db.execute(\r\n \"select [{}], count(*) from [{}] group by [{}] order by count(*) limit {}\".format(column, table, column, values)\r\n ).fetchall()]\r\n return ColumnDetails(column, num_null, num_blank, num_distinct, most_common, least_common)\r\n\r\n\r\ndef analyze_table(db, table):\r\n for column in db[table].columns:\r\n details = analyze_column(db, table, column.name)\r\n print(details)\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 763283616, "label": "sqlite-utils analyze-tables command"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/998#issuecomment-743080047", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/998", "id": 743080047, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MzA4MDA0Nw==", "user": {"value": 6371750, "label": "JBPressac"}, "created_at": "2020-12-11T09:25:09Z", "updated_at": "2020-12-11T09:25:09Z", "author_association": "CONTRIBUTOR", "body": "Hello Simon,\r\nI have a similar problem with horizontal scrollbar display with Datasette version 0.51 and superior for a table with more than 30 rows. With Datasette 0.50, the horizontal scrollbar is displayed, if I upgrade Datasette to 0.51 and superior, the horizontal scrollbar disappears.\r\n\r\nDatasette 0.50: horizontal scrollbar\r\n\r\n![2020-12-11 10_23_28-CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US](https://user-images.githubusercontent.com/6371750/101885620-a5f17800-3b9a-11eb-8870-654e7d4372ca.png)\r\n\r\nDatasette 0.51 and superior: no horizontal scrollbar\r\n\r\n![2020-12-11 10_24_55-CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US](https://user-images.githubusercontent.com/6371750/101885782-dfc27e80-3b9a-11eb-9d55-6c9a56227bf2.png)\r\n\r\nThanks,", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 717699884, "label": "Wide tables should scroll horizontally within the page"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/205#issuecomment-742737794", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/205", "id": 742737794, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MjczNzc5NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-10T19:18:22Z", "updated_at": "2020-12-10T19:18:22Z", "author_association": "OWNER", "body": "Yup, it looks like you're using a window function that was added in SQLite 3.25.0: https://www.sqlite.org/changes.html#version_3_25_0", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 760960559, "label": "sqlite3.OperationalError: near \"(\": syntax error"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/205#issuecomment-742299584", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/205", "id": 742299584, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MjI5OTU4NA==", "user": {"value": 765871, "label": "kaihendry"}, "created_at": "2020-12-10T07:24:22Z", "updated_at": "2020-12-10T07:24:22Z", "author_association": "NONE", "body": "Bumping to ubuntu-20.04 appears to have solved my syntax error. \ud83e\udd37", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 760960559, "label": "sqlite3.OperationalError: near \"(\": syntax error"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1134#issuecomment-742260116", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1134", "id": 742260116, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MjI2MDExNg==", "user": {"value": 2181410, "label": "clausjuhl"}, "created_at": "2020-12-10T05:57:17Z", "updated_at": "2020-12-10T05:57:17Z", "author_association": "NONE", "body": "Hi Simon\r\n\r\nThank you for the quick fix! And glad you like our use of Datasette (launches 1. january 2021). It's a site that currently (more to come) makes all minutes and their annexes from Aarhus City Council and the major committees (1997-2019) available to the public. So we're putting Datasette to good use :)", "reactions": "{\"total_count\": 2, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 2, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 760312579, "label": "\"_searchmode=raw\" throws an index out of range error when combined with \"_search_COLUMN\""}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1091#issuecomment-741992106", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1091", "id": 741992106, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MTk5MjEwNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-09T19:19:54Z", "updated_at": "2020-12-09T20:27:45Z", "author_association": "OWNER", "body": "Could you try removing the `ProxyPassReverse /datasette http://0.0.0.0:8001` line?\r\n\r\nMy hunch is that `ProxyPassReverse` is rewriting some of the links in the HTML (or maybe in the HTTP headers) in a way that breaks things.\r\n\r\nNormally you would need `ProxyPassReverse` to compensate for the underlying application being unable to rewrite its links - but Datasette's `base_url` setting causes Datasette to rewrite all of the links for you, so `ProxyPassReverse` should be unneccessary.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 742011049, "label": ".json and .csv exports fail to apply base_url"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1134#issuecomment-742024588", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1134", "id": 742024588, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MjAyNDU4OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-09T20:19:59Z", "updated_at": "2020-12-09T20:20:33Z", "author_association": "OWNER", "body": "https://byraadsarkivet.aarhus.dk/db/cases?_searchmode=raw&_search=sundhedsfrem%2A is an absolutely beautiful example of a themed Datasette! Very excited to show this to people.", "reactions": "{\"total_count\": 1, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 1, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 760312579, "label": "\"_searchmode=raw\" throws an index out of range error when combined with \"_search_COLUMN\""}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1134#issuecomment-742023775", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1134", "id": 742023775, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MjAyMzc3NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-09T20:18:23Z", "updated_at": "2020-12-09T20:18:23Z", "author_association": "OWNER", "body": "A fix for this should be available if you upgrade to 0.52.5", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 760312579, "label": "\"_searchmode=raw\" throws an index out of range error when combined with \"_search_COLUMN\""}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1091#issuecomment-742023541", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1091", "id": 742023541, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MjAyMzU0MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-09T20:17:54Z", "updated_at": "2020-12-09T20:17:54Z", "author_association": "OWNER", "body": "OK that is really weird. I'll have another go at replicating this locally.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 742011049, "label": ".json and .csv exports fail to apply base_url"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1136#issuecomment-742023111", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1136", "id": 742023111, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MjAyMzExMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-09T20:17:02Z", "updated_at": "2020-12-09T20:17:02Z", "author_association": "OWNER", "body": "Documentation for this procedure is now here: https://docs.datasette.io/en/latest/contributing.html#releasing-bug-fixes-from-a-branch", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 760621356, "label": "Establish pattern for release branches to support bug fixes"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1136#issuecomment-742022222", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1136", "id": 742022222, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MjAyMjIyMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-09T20:15:24Z", "updated_at": "2020-12-09T20:15:51Z", "author_association": "OWNER", "body": "Used this procedure for the first time for 0.52.5 - deploy run here: https://github.com/simonw/datasette/actions/runs/411465648 - PyPI release here: https://pypi.org/project/datasette/0.52.5/", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 760621356, "label": "Establish pattern for release branches to support bug fixes"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1136#issuecomment-742017622", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1136", "id": 742017622, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MjAxNzYyMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-09T20:06:47Z", "updated_at": "2020-12-09T20:06:47Z", "author_association": "OWNER", "body": "Then I can ship the release directly from that branch, creating the tag as part of the release process:\r\n\r\n\"New_release_\u00b7_simonw_datasette\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 760621356, "label": "Establish pattern for release branches to support bug fixes"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1136#issuecomment-742014881", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1136", "id": 742014881, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MjAxNDg4MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-09T20:01:27Z", "updated_at": "2020-12-09T20:01:27Z", "author_association": "OWNER", "body": "I'll write the release notes in the branch, then cherry-pick them over to `main`.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 760621356, "label": "Establish pattern for release branches to support bug fixes"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1136#issuecomment-742014366", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1136", "id": 742014366, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MjAxNDM2Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-09T20:00:35Z", "updated_at": "2020-12-09T20:00:35Z", "author_association": "OWNER", "body": "Actually I'll start from 0.52.4 and then cherry-pick the fixes.\r\n\r\n git branch 0.52.x 0.52.4\r\n git checkout 0.52.x\r\n git cherry-pick COMMIT", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 760621356, "label": "Establish pattern for release branches to support bug fixes"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1091#issuecomment-742010306", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1091", "id": 742010306, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MjAxMDMwNg==", "user": {"value": 6739646, "label": "tballison"}, "created_at": "2020-12-09T19:53:18Z", "updated_at": "2020-12-09T19:59:52Z", "author_association": "NONE", "body": "I can't imagine this helps (esp. given your point about potential rewrites), but you can see that /datasette/ was correctly added to the sql form, but not to the \"export-links\"\r\n\r\n \"Screen\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 742011049, "label": ".json and .csv exports fail to apply base_url"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1134#issuecomment-742012324", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1134", "id": 742012324, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MjAxMjMyNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-09T19:57:05Z", "updated_at": "2020-12-09T19:57:05Z", "author_association": "OWNER", "body": "Thanks for the bug report!", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 760312579, "label": "\"_searchmode=raw\" throws an index out of range error when combined with \"_search_COLUMN\""}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1136#issuecomment-742009294", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1136", "id": 742009294, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MjAwOTI5NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-09T19:51:18Z", "updated_at": "2020-12-09T19:51:18Z", "author_association": "OWNER", "body": "Likewise, Read The Docs publishes as stable the docs from the latest tagged release, so I would expect that to work fine as well.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 760621356, "label": "Establish pattern for release branches to support bug fixes"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1136#issuecomment-742009101", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1136", "id": 742009101, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MjAwOTEwMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-09T19:50:53Z", "updated_at": "2020-12-09T19:50:53Z", "author_association": "OWNER", "body": "My concern is if this will break anything about CI. I don't think it will - the code that deploys the latest `main` to https://latest.datasette.io/ should be unaffected, and the checkout code in `publish.yml` should check out the correct code based on the tag used for that release.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 760621356, "label": "Establish pattern for release branches to support bug fixes"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1136#issuecomment-742008087", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1136", "id": 742008087, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MjAwODA4Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-09T19:48:56Z", "updated_at": "2020-12-09T19:48:56Z", "author_association": "OWNER", "body": "I think I'm going to create a branch called `0.52.x` that starts with `8ae0f9f7f0d644b0161165a1084f53acd2786f7c` and then tag the release from there.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 760621356, "label": "Establish pattern for release branches to support bug fixes"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1091#issuecomment-742001510", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1091", "id": 742001510, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MjAwMTUxMA==", "user": {"value": 6739646, "label": "tballison"}, "created_at": "2020-12-09T19:36:42Z", "updated_at": "2020-12-09T19:38:04Z", "author_association": "NONE", "body": "I don't think this fixes it:\r\n\r\n```\r\ngrep -R datasette .\r\n./sites-available/000-default.conf: ProxyPass /datasette http://127.0.0.1:8001/\r\n./sites-available/000-default.conf: #ProxyPassReverse /datasette http://127.0.0.1:8001/\r\n./sites-available/corpora-le-ssl.conf: ProxyPass /datasette http://0.0.0.0:8001\r\n./sites-available/corpora-le-ssl.conf: #ProxyPassReverse /datasette http://0.0.0.0:8001\r\n./sites-enabled/corpora-le-ssl.conf: ProxyPass /datasette http://0.0.0.0:8001\r\n./sites-enabled/corpora-le-ssl.conf: #ProxyPassReverse /datasette http://0.0.0.0:8001\r\n```\r\n\r\nAnd I confirmed that I actually restarted the server. :rofl: \r\n\r\nhttps://corpora.tika.apache.org/datasette/file_profiles", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 742011049, "label": ".json and .csv exports fail to apply base_url"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1091#issuecomment-741804334", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1091", "id": 741804334, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MTgwNDMzNA==", "user": {"value": 6739646, "label": "tballison"}, "created_at": "2020-12-09T14:26:05Z", "updated_at": "2020-12-09T14:26:05Z", "author_association": "NONE", "body": "Anything we can do to help debug this? Thank you, again!", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 742011049, "label": ".json and .csv exports fail to apply base_url"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/766#issuecomment-741665253", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/766", "id": 741665253, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MTY2NTI1Mw==", "user": {"value": 2181410, "label": "clausjuhl"}, "created_at": "2020-12-09T09:59:05Z", "updated_at": "2020-12-09T09:59:05Z", "author_association": "NONE", "body": "Hi Simon. Any news on using wildcard-searches with datasette? Thanks!", "reactions": "{\"total_count\": 1, \"+1\": 1, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 617323873, "label": "Enable wildcard-searches by default"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1133#issuecomment-740850920", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1133", "id": 740850920, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MDg1MDkyMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-08T18:55:59Z", "updated_at": "2020-12-08T18:55:59Z", "author_association": "OWNER", "body": "Inspiration was this script: https://gist.github.com/simonw/f6e3cd29fde5d15ea9cd746c942046ba - which pipes output through `tail -n +2` to strip off the headers.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 759695780, "label": "Option to omit header row in CSV export"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1133#issuecomment-740850057", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1133", "id": 740850057, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MDg1MDA1Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-08T18:55:29Z", "updated_at": "2020-12-08T18:55:29Z", "author_association": "OWNER", "body": "Can work on this as part of #1062.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 759695780, "label": "Option to omit header row in CSV export"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/pull/204#issuecomment-740796067", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/204", "id": 740796067, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MDc5NjA2Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-08T17:49:22Z", "updated_at": "2020-12-08T17:49:22Z", "author_association": "OWNER", "body": "Great catch, thank you.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 752888228, "label": "use jsonify_if_need for sql updates"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/815#issuecomment-740385032", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/815", "id": 740385032, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MDM4NTAzMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-08T05:26:09Z", "updated_at": "2020-12-08T05:26:16Z", "author_association": "OWNER", "body": "Sure! It's a bit of a fiddle one - I've not found an approach that I like, but I also haven't thought about it since June. I'd love to see what you come up with!", "reactions": "{\"total_count\": 1, \"+1\": 0, \"-1\": 0, \"laugh\": 1, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 634663505, "label": "Group permission checks by request on /-/permissions debug page"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/815#issuecomment-740383884", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/815", "id": 740383884, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MDM4Mzg4NA==", "user": {"value": 11761973, "label": "sturzl"}, "created_at": "2020-12-08T05:23:18Z", "updated_at": "2020-12-08T05:23:18Z", "author_association": "NONE", "body": "hey! I'd like to take a look at this if you're open to a PR for it", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 634663505, "label": "Group permission checks by request on /-/permissions debug page"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1132#issuecomment-740228858", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1132", "id": 740228858, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MDIyODg1OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-07T22:50:36Z", "updated_at": "2020-12-07T22:50:36Z", "author_association": "OWNER", "body": "Documented here: https://docs.datasette.io/en/latest/json_api.html#column-filter-arguments\r\n\r\nDemo: https://latest.datasette.io/fixtures/facetable?tags__arraynotcontains=tag2", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 758899581, "label": "New filter: array does not contain"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1131#issuecomment-739414118", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1131", "id": 739414118, "node_id": "MDEyOklzc3VlQ29tbWVudDczOTQxNDExOA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-05T20:48:33Z", "updated_at": "2020-12-05T20:48:33Z", "author_association": "OWNER", "body": "Oddly enough, I tried fixing this with `sys.stderr.write(\"{}\\n\".format(e))` - but my Click `CLIRunner` tests failed because `result.stderr` was an empty string. Adding `sys.stderr.flush()` to the code that output errors fixed that issue.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 757481949, "label": "\"datasette inspect\" outputs invalid JSON if an error is logged"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/398#issuecomment-739357330", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/398", "id": 739357330, "node_id": "MDEyOklzc3VlQ29tbWVudDczOTM1NzMzMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-05T19:36:27Z", "updated_at": "2020-12-05T19:36:27Z", "author_association": "OWNER", "body": "This was fixed in #749 by 88ac538b41a4753c3de9b509c3a0e13077f66182", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 398011658, "label": "Ensure downloading a 100+MB SQLite database file works"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1128#issuecomment-739355855", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1128", "id": 739355855, "node_id": "MDEyOklzc3VlQ29tbWVudDczOTM1NTg1NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-05T19:34:57Z", "updated_at": "2020-12-05T19:34:57Z", "author_association": "OWNER", "body": "Thanks for this!", "reactions": "{\"total_count\": 1, \"+1\": 1, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756867924, "label": "Fix startup error on windows"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1131#issuecomment-739083673", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1131", "id": 739083673, "node_id": "MDEyOklzc3VlQ29tbWVudDczOTA4MzY3Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-05T00:02:10Z", "updated_at": "2020-12-05T00:02:10Z", "author_association": "OWNER", "body": "https://clig.dev/#the-basics\r\n\r\n> **Send messaging to stderr**. Log messages, errors, and so on should all be sent to stderr. This means that when commands are piped together, these messages are displayed to the user and not fed into the next command.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 757481949, "label": "\"datasette inspect\" outputs invalid JSON if an error is logged"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1131#issuecomment-739083472", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1131", "id": 739083472, "node_id": "MDEyOklzc3VlQ29tbWVudDczOTA4MzQ3Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-05T00:01:12Z", "updated_at": "2020-12-05T00:01:12Z", "author_association": "OWNER", "body": "Here's why: https://github.com/simonw/datasette/blob/37f87b5e52e7f8ddd1c4ffcf368bd7a62a406a6d/datasette/database.py#L158-L163", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 757481949, "label": "\"datasette inspect\" outputs invalid JSON if an error is logged"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/pull/29#issuecomment-739058820", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/29", "id": 739058820, "node_id": "MDEyOklzc3VlQ29tbWVudDczOTA1ODgyMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-04T22:32:35Z", "updated_at": "2020-12-04T22:32:35Z", "author_association": "MEMBER", "body": "Thanks for this!", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 638375985, "label": "Fixed bug in SQL query for photo scores"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1130#issuecomment-738907852", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1130", "id": 738907852, "node_id": "MDEyOklzc3VlQ29tbWVudDczODkwNzg1Mg==", "user": {"value": 3243482, "label": "abdusco"}, "created_at": "2020-12-04T17:22:29Z", "updated_at": "2020-12-04T17:31:25Z", "author_association": "CONTRIBUTOR", "body": "EDIT: I misunderstood the problem. This seems like a fix better suited for Safari. But I don't have any Apple device to test it.\r\n\r\n```css\r\nbody {\r\n min-height: 100vh;\r\n min-height: -webkit-fill-available;\r\n}\r\nhtml {\r\n height: -webkit-fill-available;\r\n}\r\n```\r\nhttps://css-tricks.com/css-fix-for-100vh-in-mobile-webkit/\r\n\r\n---\r\n\r\nIt's actually not that difficult to fix.\r\nWell, this is actually a workaround to keep viewport in place.\r\n\r\nI usually put a transition (forgot to do it here) that keeps page from resizing.\r\n\r\n```css\r\n.container {\r\n min-height: 100vh;\r\n transition: height 10000s steps(0);\r\n}\r\n```\r\n\r\n`steps()` function prevents excessive layout calculations, and lets the page snap back into place (10000s ~= 3h later) in a single step.\r\nThis fix also prevents page from jumping around when the keyboard pops up and down.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756876238, "label": "Fix footer not sticking to bottom in short pages"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/188#issuecomment-738905376", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/188", "id": 738905376, "node_id": "MDEyOklzc3VlQ29tbWVudDczODkwNTM3Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-04T17:18:34Z", "updated_at": "2020-12-04T17:18:34Z", "author_association": "OWNER", "body": "This is likely to be covered by plugin hooks: #860 for the metadata and after investigating in #1042 it looks like the existing `prepare_jinja2_environment` hook may already be enough to load templates from the database.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 309047460, "label": "Ability to bundle metadata and templates inside the SQLite file"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/111#issuecomment-738904347", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/111", "id": 738904347, "node_id": "MDEyOklzc3VlQ29tbWVudDczODkwNDM0Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-04T17:16:56Z", "updated_at": "2020-12-04T17:16:56Z", "author_association": "OWNER", "body": "This is STILL a good idea.", "reactions": "{\"total_count\": 1, \"+1\": 1, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 274615452, "label": "Add \u201cupdated\u201d to metadata"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1130#issuecomment-738897582", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1130", "id": 738897582, "node_id": "MDEyOklzc3VlQ29tbWVudDczODg5NzU4Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-04T17:03:30Z", "updated_at": "2020-12-04T17:03:30Z", "author_association": "OWNER", "body": "I deployed this to https://datasette-issue-1129.vercel.app/ (using `datasette publish vercel fixtures.db --branch 8d4c69c6fb0ef741a19070f5172017ea3522e83c --about_url https://github.com/simonw/datasette/issues/1129 --about datasette/issues/1129 --project datasette-issue-1129`) - weirdly, on Mobile Safari the footer appears just below the visible window:\r\n\r\n![RPReplay_Final1607100726](https://user-images.githubusercontent.com/9599/101191950-336b2000-360f-11eb-8f14-ed83bd86515c.gif)\r\n\r\nI've seen other problems with fixed footers on Mobile Safari too: at Eventbrite this was a really nasty problem for us to figure out: https://www.eventbrite.com/engineering/mobile-safari-why/", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756876238, "label": "Fix footer not sticking to bottom in short pages"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1130#issuecomment-738620153", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1130", "id": 738620153, "node_id": "MDEyOklzc3VlQ29tbWVudDczODYyMDE1Mw==", "user": {"value": 22429695, "label": "codecov[bot]"}, "created_at": "2020-12-04T07:34:48Z", "updated_at": "2020-12-04T07:34:48Z", "author_association": "NONE", "body": "# [Codecov](https://codecov.io/gh/simonw/datasette/pull/1130?src=pr&el=h1) Report\n> Merging [#1130](https://codecov.io/gh/simonw/datasette/pull/1130?src=pr&el=desc) (8d4c69c) into [main](https://codecov.io/gh/simonw/datasette/commit/49d8fc056844d5a537d6cfd96dab0dd5686fe718?el=desc) (49d8fc0) will **not change** coverage.\n> The diff coverage is `n/a`.\n\n[![Impacted file tree graph](https://codecov.io/gh/simonw/datasette/pull/1130/graphs/tree.svg?width=650&height=150&src=pr&token=eSahVY7kw1)](https://codecov.io/gh/simonw/datasette/pull/1130?src=pr&el=tree)\n\n```diff\n@@ Coverage Diff @@\n## main #1130 +/- ##\n=======================================\n Coverage 91.42% 91.42% \n=======================================\n Files 31 31 \n Lines 3873 3873 \n=======================================\n Hits 3541 3541 \n Misses 332 332 \n```\n\n\n\n------\n\n[Continue to review full report at Codecov](https://codecov.io/gh/simonw/datasette/pull/1130?src=pr&el=continue).\n> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)\n> `\u0394 = absolute (impact)`, `\u00f8 = not affected`, `? = missing data`\n> Powered by [Codecov](https://codecov.io/gh/simonw/datasette/pull/1130?src=pr&el=footer). Last update [49d8fc0...8d4c69c](https://codecov.io/gh/simonw/datasette/pull/1130?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756876238, "label": "Fix footer not sticking to bottom in short pages"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1128#issuecomment-738613497", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1128", "id": 738613497, "node_id": "MDEyOklzc3VlQ29tbWVudDczODYxMzQ5Nw==", "user": {"value": 22429695, "label": "codecov[bot]"}, "created_at": "2020-12-04T07:17:12Z", "updated_at": "2020-12-04T07:17:12Z", "author_association": "NONE", "body": "# [Codecov](https://codecov.io/gh/simonw/datasette/pull/1128?src=pr&el=h1) Report\n> Merging [#1128](https://codecov.io/gh/simonw/datasette/pull/1128?src=pr&el=desc) (7004c3b) into [main](https://codecov.io/gh/simonw/datasette/commit/49d8fc056844d5a537d6cfd96dab0dd5686fe718?el=desc) (49d8fc0) will **decrease** coverage by `0.00%`.\n> The diff coverage is `n/a`.\n\n[![Impacted file tree graph](https://codecov.io/gh/simonw/datasette/pull/1128/graphs/tree.svg?width=650&height=150&src=pr&token=eSahVY7kw1)](https://codecov.io/gh/simonw/datasette/pull/1128?src=pr&el=tree)\n\n```diff\n@@ Coverage Diff @@\n## main #1128 +/- ##\n==========================================\n- Coverage 91.42% 91.42% -0.01% \n==========================================\n Files 31 31 \n Lines 3873 3872 -1 \n==========================================\n- Hits 3541 3540 -1 \n Misses 332 332 \n```\n\n\n| [Impacted Files](https://codecov.io/gh/simonw/datasette/pull/1128?src=pr&el=tree) | Coverage \u0394 | |\n|---|---|---|\n| [datasette/utils/asgi.py](https://codecov.io/gh/simonw/datasette/pull/1128/diff?src=pr&el=tree#diff-ZGF0YXNldHRlL3V0aWxzL2FzZ2kucHk=) | `92.13% <\u00f8> (-0.04%)` | :arrow_down: |\n\n------\n\n[Continue to review full report at Codecov](https://codecov.io/gh/simonw/datasette/pull/1128?src=pr&el=continue).\n> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)\n> `\u0394 = absolute (impact)`, `\u00f8 = not affected`, `? = missing data`\n> Powered by [Codecov](https://codecov.io/gh/simonw/datasette/pull/1128?src=pr&el=footer). Last update [49d8fc0...7004c3b](https://codecov.io/gh/simonw/datasette/pull/1128?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756867924, "label": "Fix startup error on windows"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1125#issuecomment-738554392", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1125", "id": 738554392, "node_id": "MDEyOklzc3VlQ29tbWVudDczODU1NDM5Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-04T04:16:57Z", "updated_at": "2020-12-04T04:16:57Z", "author_association": "OWNER", "body": "https://latest.datasette.io/-/versions now shows this:\r\n```json\r\n{\r\n \"python\": {\r\n \"version\": \"3.8.6\",\r\n \"full\": \"3.8.6 (default, Nov 18 2020, 13:49:49) \\n[GCC 8.3.0]\"\r\n },\r\n \"datasette\": {\r\n \"version\": \"0.52.3\",\r\n \"note\": \"49d8fc056844d5a537d6cfd96dab0dd5686fe718\"\r\n },\r\n \"asgi\": \"3.0\",\r\n \"uvicorn\": \"0.12.3\",\r\n \"sqlite\": {\r\n \"version\": \"3.33.0\",\r\n \"fts_versions\": [\r\n \"FTS5\",\r\n \"FTS4\",\r\n \"FTS3\"\r\n ],\r\n \"extensions\": {\r\n \"json1\": null\r\n },\r\n \"compile_options\": []\r\n },\r\n \"pysqlite3\": \"0.4.4\"\r\n}\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756622648, "label": "Show pysqlite3 version on /-/versions"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1125#issuecomment-738551280", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1125", "id": 738551280, "node_id": "MDEyOklzc3VlQ29tbWVudDczODU1MTI4MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-04T04:03:54Z", "updated_at": "2020-12-04T04:03:54Z", "author_association": "OWNER", "body": "I'm going to check `pkg_resources.get_distribution(\"pysqlite3-binary\").version` too.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756622648, "label": "Show pysqlite3 version on /-/versions"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1125#issuecomment-738550588", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1125", "id": 738550588, "node_id": "MDEyOklzc3VlQ29tbWVudDczODU1MDU4OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-04T04:01:10Z", "updated_at": "2020-12-04T04:01:10Z", "author_association": "OWNER", "body": "Urgh, figuring out the version of `pysqlite3` is WAY harder than I expected. The `getversion` module looks like the smartest attempt at solving this problem generally, but I'd like to avoid adding another dependency just for this: https://github.com/smarie/python-getversion", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756622648, "label": "Show pysqlite3 version on /-/versions"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1125#issuecomment-738548693", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1125", "id": 738548693, "node_id": "MDEyOklzc3VlQ29tbWVudDczODU0ODY5Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-04T03:52:51Z", "updated_at": "2020-12-04T03:52:51Z", "author_association": "OWNER", "body": "That didn't work - https://latest.datasette.io/-/versions isn't showing the package.\r\n\r\nI bet that's because I'm actually installing `pysqlite3-binary` here: https://github.com/simonw/datasette/blob/e2fea36540e952d8d72c1bd0af7144b85b7a4671/.github/workflows/deploy-latest.yml#L57", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756622648, "label": "Show pysqlite3 version on /-/versions"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1126#issuecomment-738548393", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1126", "id": 738548393, "node_id": "MDEyOklzc3VlQ29tbWVudDczODU0ODM5Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-04T03:51:38Z", "updated_at": "2020-12-04T03:51:38Z", "author_association": "OWNER", "body": "That worked.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756761963, "label": "Switch to google-github-actions/setup-gcloud for demo deploy"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1125#issuecomment-738347171", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1125", "id": 738347171, "node_id": "MDEyOklzc3VlQ29tbWVudDczODM0NzE3MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-03T22:04:52Z", "updated_at": "2020-12-03T22:04:52Z", "author_association": "OWNER", "body": "```\r\npkg_resources.get_distribution(\"pysqlite3\").version\r\nOut[14]: '0.4.4'\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756622648, "label": "Show pysqlite3 version on /-/versions"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1124#issuecomment-738215686", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1124", "id": 738215686, "node_id": "MDEyOklzc3VlQ29tbWVudDczODIxNTY4Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-03T18:50:48Z", "updated_at": "2020-12-03T21:42:02Z", "author_association": "OWNER", "body": "I'm going to punt on writing a unit test for this (not sure how I'd simulate those symlinks) - I'll manually test it and push out a dot release instead.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756439516, "label": "Datasette on Amazon Linux on ARM returns 404 for static assets"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1124#issuecomment-738215487", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1124", "id": 738215487, "node_id": "MDEyOklzc3VlQ29tbWVudDczODIxNTQ4Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-03T18:50:26Z", "updated_at": "2020-12-03T21:41:25Z", "author_association": "OWNER", "body": "This fix works - calling `.resolve()` on the `root_path` before the comparison to ensure symlinks are resolved:\r\n```python\r\n # Ensure full_path is within root_path to avoid weird \"../\" tricks\r\n try:\r\n print(\"full_path={}, root_path={}\".format(full_path, root_path))\r\n full_path.relative_to(root_path.resolve())\r\n except ValueError as e:\r\n print(\" ValueError:\", e)\r\n await asgi_send_html(send, \"404\", 404)\r\n return\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756439516, "label": "Datasette on Amazon Linux on ARM returns 404 for static assets"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1124#issuecomment-738213342", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1124", "id": 738213342, "node_id": "MDEyOklzc3VlQ29tbWVudDczODIxMzM0Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-03T18:46:22Z", "updated_at": "2020-12-03T21:40:51Z", "author_association": "OWNER", "body": "I replaced that function with this code:\r\n```python\r\ndef asgi_static(root_path, chunk_size=4096, headers=None, content_type=None):\r\n async def inner_static(request, send):\r\n path = request.scope[\"url_route\"][\"kwargs\"][\"path\"]\r\n print(\"path =\", path)\r\n try:\r\n full_path = (Path(root_path) / path).resolve().absolute()\r\n except FileNotFoundError as e:\r\n print(\"FileNotFoundError:\", e)\r\n await asgi_send_html(send, \"404\", 404)\r\n return\r\n if full_path.is_dir():\r\n await asgi_send_html(send, \"403: Directory listing is not allowed\", 403)\r\n return\r\n # Ensure full_path is within root_path to avoid weird \"../\" tricks\r\n try:\r\n print(\"full_path={}, root_path={}\".format(full_path, root_path))\r\n full_path.relative_to(root_path)\r\n except ValueError as e:\r\n print(\" ValueError:\", e)\r\n await asgi_send_html(send, \"404\", 404)\r\n return\r\n try:\r\n await asgi_send_file(send, full_path, chunk_size=chunk_size)\r\n except FileNotFoundError:\r\n await asgi_send_html(send, \"404\", 404)\r\n return\r\n\r\n return inner_static\r\n```\r\nEdited using `vi /home/ec2-user/.local/pipx/venvs/datasette/lib/python3.7/site-packages/datasette/utils/asgi.py`\r\n\r\nThe output shows me what the bug is:\r\n```\r\n$ datasette --get /-/static/app.css --pdb\r\napp_root = /home/ec2-user/.local/pipx/venvs/datasette/lib64/python3.7/site-packages\r\npath = app.css\r\nfull_path=/home/ec2-user/.local/pipx/venvs/datasette/lib/python3.7/site-packages/datasette/static/app.css, root_path=/home/ec2-user/.local/pipx/venvs/datasette/lib64/python3.7/site-packages/datasette/static\r\n ValueError: '/home/ec2-user/.local/pipx/venvs/datasette/lib/python3.7/site-packages/datasette/static/app.css' does not start with '/home/ec2-user/.local/pipx/venvs/datasette/lib64/python3.7/site-packages/datasette/static'\r\n404\r\n```\r\n` ValueError: '/home/ec2-user/.local/pipx/venvs/datasette/lib/python3.7/site-packages/datasette/static/app.css' does not start with '/home/ec2-user/.local/pipx/venvs/datasette/lib64/python3.7/site-packages/datasette/static'`\r\n\r\nOne is `../lib/python3.7/..` and the other is `../lib64/python3.7/..` - there's clearly some kind of symlink in play here which I'm not taking into account.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756439516, "label": "Datasette on Amazon Linux on ARM returns 404 for static assets"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1124#issuecomment-738313399", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1124", "id": 738313399, "node_id": "MDEyOklzc3VlQ29tbWVudDczODMxMzM5OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-03T21:10:54Z", "updated_at": "2020-12-03T21:10:54Z", "author_association": "OWNER", "body": "Confirmed that installing a fresh copy of Datasette 0.52.3 on that server works correctly as expected.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756439516, "label": "Datasette on Amazon Linux on ARM returns 404 for static assets"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1124#issuecomment-738224865", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1124", "id": 738224865, "node_id": "MDEyOklzc3VlQ29tbWVudDczODIyNDg2NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-03T19:01:52Z", "updated_at": "2020-12-03T19:01:52Z", "author_association": "OWNER", "body": "https://github.com/simonw/datasette/runs/1494631261\r\n```\r\n/home/runner/work/datasette/datasette/tests/test_html.py:81: AssertionError\r\n----------------------------- Captured stderr call -----------------------------\r\nTraceback (most recent call last):\r\n File \"/home/runner/work/datasette/datasette/datasette/app.py\", line 1039, in route_path\r\n response = await view(request, send)\r\n File \"/home/runner/work/datasette/datasette/datasette/utils/asgi.py\", line 297, in inner_static\r\n full_path.relative_to(root_path.resolve())\r\nAttributeError: 'str' object has no attribute 'resolve'\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756439516, "label": "Datasette on Amazon Linux on ARM returns 404 for static assets"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1124#issuecomment-738220067", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1124", "id": 738220067, "node_id": "MDEyOklzc3VlQ29tbWVudDczODIyMDA2Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-03T18:58:17Z", "updated_at": "2020-12-03T18:58:17Z", "author_association": "OWNER", "body": "I tested this by running:\r\n\r\n pipx uninstall datasette\r\n pipx install 'https://github.com/simonw/datasette/archive/6b4c55efea3e9d34d92cbe5f0066553ad9b14071.zip'\r\n\r\nTo replace that version of Datasette (in the correct virtual environment) with this patch. It worked!\r\n\r\n```\r\n[ec2-user@ip-172-31-30-7 ~]$ datasette --get /-/static/app.css\r\n/* Reset and Page Setup ==================================================== */\r\n...\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756439516, "label": "Datasette on Amazon Linux on ARM returns 404 for static assets"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1124#issuecomment-738211776", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1124", "id": 738211776, "node_id": "MDEyOklzc3VlQ29tbWVudDczODIxMTc3Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-03T18:43:21Z", "updated_at": "2020-12-03T18:43:21Z", "author_association": "OWNER", "body": "I'm suspicious of this code here:https://github.com/simonw/datasette/blob/e048791a9a2686f47d81a2c8aa88aa1966d82521/datasette/utils/asgi.py#L284-L307", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756439516, "label": "Datasette on Amazon Linux on ARM returns 404 for static assets"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1124#issuecomment-738211152", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1124", "id": 738211152, "node_id": "MDEyOklzc3VlQ29tbWVudDczODIxMTE1Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-03T18:42:12Z", "updated_at": "2020-12-03T18:42:12Z", "author_association": "OWNER", "body": "Added a line to print out `app_root` from https://github.com/simonw/datasette/blob/e048791a9a2686f47d81a2c8aa88aa1966d82521/datasette/app.py#L848-L853\r\n```\r\napp_root = /home/ec2-user/.local/pipx/venvs/datasette/lib64/python3.7/site-packages\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756439516, "label": "Datasette on Amazon Linux on ARM returns 404 for static assets"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1124#issuecomment-738209642", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1124", "id": 738209642, "node_id": "MDEyOklzc3VlQ29tbWVudDczODIwOTY0Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-03T18:39:19Z", "updated_at": "2020-12-03T18:39:19Z", "author_association": "OWNER", "body": "The CSS files are in the expected location:\r\n```\r\n[ec2-user@ip-172-31-30-7 ~]$ find /home/ec2-user/.local/pipx/venvs/datasette | grep css\r\n/home/ec2-user/.local/pipx/venvs/datasette/lib/python3.7/site-packages/datasette/static/app.css\r\n/home/ec2-user/.local/pipx/venvs/datasette/lib/python3.7/site-packages/datasette/static/codemirror-5.57.0.min.css\r\n```\r\nWow it's running an ANCIENT version of SQLite:\r\n```\r\n[ec2-user@ip-172-31-30-7 ~]$ datasette --get /-/versions.json\r\n{\"python\": {\"version\": \"3.7.9\", \"full\": \"3.7.9 (default, Aug 27 2020, 21:58:41) \\n[GCC 7.3.1 20180712 (Red Hat 7.3.1-9)]\"}, \"datasette\": {\"version\": \"0.52.2\"}, \"asgi\": \"3.0\", \"uvicorn\": \"0.12.3\", \"sqlite\": {\"version\": \"3.7.17\", \"fts_versions\": [\"FTS4\", \"FTS3\"], \"extensions\": {}, \"compile_options\": [\"DISABLE_DIRSYNC\", \"ENABLE_COLUMN_METADATA\", \"ENABLE_FTS3\", \"ENABLE_RTREE\", \"ENABLE_UNLOCK_NOTIFY\", \"SECURE_DELETE\", \"TEMP_STORE=1\", \"THREADSAFE=1\"]}}\r\n```\r\nhttp://www.sqlite.org/releaselog/3_7_17.html - SQLite Release 3.7.17 On 2013-05-20", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 756439516, "label": "Datasette on Amazon Linux on ARM returns 404 for static assets"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1121#issuecomment-737591281", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1121", "id": 737591281, "node_id": "MDEyOklzc3VlQ29tbWVudDczNzU5MTI4MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-03T01:03:18Z", "updated_at": "2020-12-03T01:03:18Z", "author_association": "OWNER", "body": "Demo: https://latest.datasette.io/fixtures?_bot=1\r\n\r\n\"fixtures\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 754178780, "label": "Table actions cog is misaligned"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1100#issuecomment-737589314", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1100", "id": 737589314, "node_id": "MDEyOklzc3VlQ29tbWVudDczNzU4OTMxNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-03T00:57:35Z", "updated_at": "2020-12-03T00:57:35Z", "author_association": "OWNER", "body": "Fixed in the demo:\r\n```\r\n% curl -XOPTIONS https://latest.datasette.io/fixtures.json\r\nok%\r\n```\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 747702144, "label": "Error on OPTIONS request to database"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1123#issuecomment-737586248", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1123", "id": 737586248, "node_id": "MDEyOklzc3VlQ29tbWVudDczNzU4NjI0OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-03T00:47:37Z", "updated_at": "2020-12-03T00:47:37Z", "author_association": "OWNER", "body": "Affected tests:\r\n```\r\nFAILED tests/test_plugins.py::test_hook_table_actions[facetable] - AssertionE...\r\nFAILED tests/test_plugins.py::test_hook_table_actions[simple_view] - Assertio...\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 755721275, "label": "Table actions hook are order dependent, should not be"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1100#issuecomment-737581719", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1100", "id": 737581719, "node_id": "MDEyOklzc3VlQ29tbWVudDczNzU4MTcxOQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-03T00:35:23Z", "updated_at": "2020-12-03T00:35:23Z", "author_association": "OWNER", "body": "Replicated this against the live demo as well:\r\n```\r\n/tmp % curl -XOPTIONS https://latest.datasette.io/fixtures.json\r\n{\"ok\": false, \"error\": \"object Response can't be used in 'await' expression\", \"status\": 500, \"title\": null}% /tmp % \r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 747702144, "label": "Error on OPTIONS request to database"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1122#issuecomment-737580813", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1122", "id": 737580813, "node_id": "MDEyOklzc3VlQ29tbWVudDczNzU4MDgxMw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-03T00:33:09Z", "updated_at": "2020-12-03T00:33:09Z", "author_association": "OWNER", "body": "This is a very neat fix, thank you.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 754179035, "label": "Fix misaligned table actions cog"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/749#issuecomment-737580084", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/749", "id": 737580084, "node_id": "MDEyOklzc3VlQ29tbWVudDczNzU4MDA4NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-03T00:31:14Z", "updated_at": "2020-12-03T00:31:14Z", "author_association": "OWNER", "body": "This works!\r\n\r\n```\r\n/tmp % wget 'https://covid-19.datasettes.com/covid.db'\r\n--2020-12-02 16:28:02-- https://covid-19.datasettes.com/covid.db\r\nResolving covid-19.datasettes.com (covid-19.datasettes.com)... 172.217.5.83\r\nConnecting to covid-19.datasettes.com (covid-19.datasettes.com)|172.217.5.83|:443... connected.\r\nHTTP request sent, awaiting response... 200 OK\r\nLength: unspecified [application/octet-stream]\r\nSaving to: \u2018covid.db\u2019\r\n\r\ncovid.db [ <=> ] 306.42M 3.27MB/s in 98s \r\n\r\n2020-12-02 16:29:40 (3.13 MB/s) - \u2018covid.db\u2019 saved [321306624]\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 610829227, "label": "Cloud Run fails to serve database files larger than 32MB"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/749#issuecomment-737563699", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/749", "id": 737563699, "node_id": "MDEyOklzc3VlQ29tbWVudDczNzU2MzY5OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-02T23:45:42Z", "updated_at": "2020-12-02T23:45:42Z", "author_association": "OWNER", "body": "I asked about this on Twitter - https://twitter.com/steren/status/1334281184965140483\r\n\r\n> You simply need to send the `Transfer-Encoding: chunked` header.", "reactions": "{\"total_count\": 2, \"+1\": 2, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 610829227, "label": "Cloud Run fails to serve database files larger than 32MB"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/942#issuecomment-737463116", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/942", "id": 737463116, "node_id": "MDEyOklzc3VlQ29tbWVudDczNzQ2MzExNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-02T20:02:10Z", "updated_at": "2020-12-02T20:03:01Z", "author_association": "OWNER", "body": "My idea is that if you installed my proposed plugin you wouldn't need `metadata.json` at all - your metadata would instead live in a table in the connected SQLite database files - either one table per database (so the metadata can live in the same place as the data) or maybe also in a dedicated separate database file, for if you want to add metadata to an otherwise read-only database.\r\n\r\nThe plugin would then provide a UI for editing that metadata - maybe by configuring some writable canned queries or maybe something more custom than that. Or you could edit the metadata by manually editing the SQLite database file (or loading data into it using a tool like [yaml-to-sqlite](https://github.com/simonw/yaml-to-sqlite)).", "reactions": "{\"total_count\": 1, \"+1\": 1, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 681334912, "label": "Support column descriptions in metadata.json"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/942#issuecomment-737428262", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/942", "id": 737428262, "node_id": "MDEyOklzc3VlQ29tbWVudDczNzQyODI2Mg==", "user": {"value": 596279, "label": "zaneselvans"}, "created_at": "2020-12-02T18:55:21Z", "updated_at": "2020-12-02T18:55:21Z", "author_association": "NONE", "body": "Are you thinking that those metadata tables would be added to the SQLite DB by Datasette, when you tell it to wrap up the database, with the metadata coming from the `metadata.json`? Would it be easy to allow the prepopulation of those tables in the database itself? We've been struggling with the best way to make sure that the data is always accompanied by metadata, and baking it all into the database itself would be nice, since then we wouldn't need to worry about separately distributing different files in different contexts.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 681334912, "label": "Support column descriptions in metadata.json"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/942#issuecomment-737402392", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/942", "id": 737402392, "node_id": "MDEyOklzc3VlQ29tbWVudDczNzQwMjM5Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-02T18:08:55Z", "updated_at": "2020-12-02T18:08:55Z", "author_association": "OWNER", "body": "SQLite does let you add comments in your CREATE TABLE statements:\r\n```sql\r\nCREATE TABLE something (\r\n id integer primary key, -- integer primary key\r\n created text -- created date as ISO datetime\r\n);\r\n```\r\nBut the only mechanism for reading those back is to retrieve that `CREATE TABLE` block of SQL from the `sqlite_master` table and run a parser against it.\r\n\r\nI've so far resisted adding a SQL syntax parser to Datasette for complexity reasons - though I'm increasingly thinking I'll need to do it at some point.\r\n\r\nI think I'll leave this to plugins. I'm definitely going to build a plugin that lets you store metadata for tables and columns in a SQLite database table, which will then support interactively editing metadata through a UI.\r\n\r\nA plugin which extracts column comments from the SQLite CREATE TABLE comments would be feasible too, if I design the plugin hooks well.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 681334912, "label": "Support column descriptions in metadata.json"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1111#issuecomment-736322290", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1111", "id": 736322290, "node_id": "MDEyOklzc3VlQ29tbWVudDczNjMyMjI5MA==", "user": {"value": 3243482, "label": "abdusco"}, "created_at": "2020-12-01T08:54:47Z", "updated_at": "2020-12-01T08:54:47Z", "author_association": "CONTRIBUTOR", "body": "Somewhat related: https://github.com/simonw/datasette/issues/859\r\nI fixed the issue with forking and disabling the counts for hidden tables.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 751195017, "label": "Accessing a database's `.json` is slow for very large SQLite files"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1122#issuecomment-736318377", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1122", "id": 736318377, "node_id": "MDEyOklzc3VlQ29tbWVudDczNjMxODM3Nw==", "user": {"value": 22429695, "label": "codecov[bot]"}, "created_at": "2020-12-01T08:47:33Z", "updated_at": "2020-12-01T08:47:33Z", "author_association": "NONE", "body": "# [Codecov](https://codecov.io/gh/simonw/datasette/pull/1122?src=pr&el=h1) Report\n> Merging [#1122](https://codecov.io/gh/simonw/datasette/pull/1122?src=pr&el=desc) (94ea22f) into [main](https://codecov.io/gh/simonw/datasette/commit/a970276b9999687b96c5e11ea1c817d814f5d267?el=desc) (a970276) will **not change** coverage.\n> The diff coverage is `n/a`.\n\n[![Impacted file tree graph](https://codecov.io/gh/simonw/datasette/pull/1122/graphs/tree.svg?width=650&height=150&src=pr&token=eSahVY7kw1)](https://codecov.io/gh/simonw/datasette/pull/1122?src=pr&el=tree)\n\n```diff\n@@ Coverage Diff @@\n## main #1122 +/- ##\n=======================================\n Coverage 91.49% 91.49% \n=======================================\n Files 31 31 \n Lines 3856 3856 \n=======================================\n Hits 3528 3528 \n Misses 328 328 \n```\n\n\n\n------\n\n[Continue to review full report at Codecov](https://codecov.io/gh/simonw/datasette/pull/1122?src=pr&el=continue).\n> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)\n> `\u0394 = absolute (impact)`, `\u00f8 = not affected`, `? = missing data`\n> Powered by [Codecov](https://codecov.io/gh/simonw/datasette/pull/1122?src=pr&el=footer). Last update [a970276...94ea22f](https://codecov.io/gh/simonw/datasette/pull/1122?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 754179035, "label": "Fix misaligned table actions cog"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/942#issuecomment-736173084", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/942", "id": 736173084, "node_id": "MDEyOklzc3VlQ29tbWVudDczNjE3MzA4NA==", "user": {"value": 596279, "label": "zaneselvans"}, "created_at": "2020-12-01T02:20:58Z", "updated_at": "2020-12-01T02:20:58Z", "author_association": "NONE", "body": "Are there common patterns for storing column-based metadata inside SQLite itself? I know Postgres allows \"comment\" fields, which this is kind of trying to replicate. Should the `units` and `description` and possibly other per-column metadata fields be combined into a single (tabular?) structure, that would be displayed above the data on the table / query results page?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 681334912, "label": "Support column descriptions in metadata.json"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1119#issuecomment-736142201", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1119", "id": 736142201, "node_id": "MDEyOklzc3VlQ29tbWVudDczNjE0MjIwMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-01T00:41:14Z", "updated_at": "2020-12-01T00:41:14Z", "author_association": "OWNER", "body": "On my laptop:\r\n\r\n\"fixtures__generated_columns__1_row\"\r\n\r\nhttps://latest.datasette.io/-/versions is running SQLite 3.27.2 at the moment so it won't show that table until it gets to 3.31.0.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 753876808, "label": "Include generated columns in fixtures.db, if SQLite version supports it"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1120#issuecomment-736135125", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1120", "id": 736135125, "node_id": "MDEyOklzc3VlQ29tbWVudDczNjEzNTEyNQ==", "user": {"value": 22429695, "label": "codecov[bot]"}, "created_at": "2020-12-01T00:22:36Z", "updated_at": "2020-12-01T00:22:36Z", "author_association": "NONE", "body": "# [Codecov](https://codecov.io/gh/simonw/datasette/pull/1120?src=pr&el=h1) Report\n> Merging [#1120](https://codecov.io/gh/simonw/datasette/pull/1120?src=pr&el=desc) (ddad8db) into [main](https://codecov.io/gh/simonw/datasette/commit/461670a0b87efa953141b449a9a261919864ceb3?el=desc) (461670a) will **increase** coverage by `0.00%`.\n> The diff coverage is `100.00%`.\n\n[![Impacted file tree graph](https://codecov.io/gh/simonw/datasette/pull/1120/graphs/tree.svg?width=650&height=150&src=pr&token=eSahVY7kw1)](https://codecov.io/gh/simonw/datasette/pull/1120?src=pr&el=tree)\n\n```diff\n@@ Coverage Diff @@\n## main #1120 +/- ##\n=======================================\n Coverage 91.48% 91.49% \n=======================================\n Files 31 31 \n Lines 3852 3856 +4 \n=======================================\n+ Hits 3524 3528 +4 \n Misses 328 328 \n```\n\n\n| [Impacted Files](https://codecov.io/gh/simonw/datasette/pull/1120?src=pr&el=tree) | Coverage \u0394 | |\n|---|---|---|\n| [datasette/utils/\\_\\_init\\_\\_.py](https://codecov.io/gh/simonw/datasette/pull/1120/diff?src=pr&el=tree#diff-ZGF0YXNldHRlL3V0aWxzL19faW5pdF9fLnB5) | `94.10% <100.00%> (\u00f8)` | |\n| [datasette/utils/sqlite.py](https://codecov.io/gh/simonw/datasette/pull/1120/diff?src=pr&el=tree#diff-ZGF0YXNldHRlL3V0aWxzL3NxbGl0ZS5weQ==) | `100.00% <100.00%> (\u00f8)` | |\n\n------\n\n[Continue to review full report at Codecov](https://codecov.io/gh/simonw/datasette/pull/1120?src=pr&el=continue).\n> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)\n> `\u0394 = absolute (impact)`, `\u00f8 = not affected`, `? = missing data`\n> Powered by [Codecov](https://codecov.io/gh/simonw/datasette/pull/1120?src=pr&el=footer). Last update [461670a...ddad8db](https://codecov.io/gh/simonw/datasette/pull/1120?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 753898359, "label": "generated_columns table in fixtures.py"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1117#issuecomment-736088949", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1117", "id": 736088949, "node_id": "MDEyOklzc3VlQ29tbWVudDczNjA4ODk0OQ==", "user": {"value": 2789593, "label": "nattaylor"}, "created_at": "2020-11-30T22:15:58Z", "updated_at": "2020-11-30T22:23:19Z", "author_association": "NONE", "body": "I just deployed this and its working great.\r\n\r\n~In a very unscientific benchmark my response times went from around 22-25ms to 33-36ms, but I didn't even dig enough to confirm the latency is related to the change. It's on a VPS, so maybe the load changed.~ I don't see any difference in performance.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 753767911, "label": "Support for generated columns"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1117#issuecomment-736067475", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1117", "id": 736067475, "node_id": "MDEyOklzc3VlQ29tbWVudDczNjA2NzQ3NQ==", "user": {"value": 22429695, "label": "codecov[bot]"}, "created_at": "2020-11-30T21:28:22Z", "updated_at": "2020-11-30T21:28:22Z", "author_association": "NONE", "body": "# [Codecov](https://codecov.io/gh/simonw/datasette/pull/1117?src=pr&el=h1) Report\n> Merging [#1117](https://codecov.io/gh/simonw/datasette/pull/1117?src=pr&el=desc) (ccdf2c6) into [main](https://codecov.io/gh/simonw/datasette/commit/dea3c508b39528e566d711c38a467b3d372d220b?el=desc) (dea3c50) will **decrease** coverage by `0.00%`.\n> The diff coverage is `95.23%`.\n\n[![Impacted file tree graph](https://codecov.io/gh/simonw/datasette/pull/1117/graphs/tree.svg?width=650&height=150&src=pr&token=eSahVY7kw1)](https://codecov.io/gh/simonw/datasette/pull/1117?src=pr&el=tree)\n\n```diff\n@@ Coverage Diff @@\n## main #1117 +/- ##\n==========================================\n- Coverage 91.48% 91.48% -0.01% \n==========================================\n Files 30 31 +1 \n Lines 3841 3852 +11 \n==========================================\n+ Hits 3514 3524 +10 \n- Misses 327 328 +1 \n```\n\n\n| [Impacted Files](https://codecov.io/gh/simonw/datasette/pull/1117?src=pr&el=tree) | Coverage \u0394 | |\n|---|---|---|\n| [datasette/utils/\\_\\_init\\_\\_.py](https://codecov.io/gh/simonw/datasette/pull/1117/diff?src=pr&el=tree#diff-ZGF0YXNldHRlL3V0aWxzL19faW5pdF9fLnB5) | `94.10% <87.50%> (-0.20%)` | :arrow_down: |\n| [datasette/utils/sqlite.py](https://codecov.io/gh/simonw/datasette/pull/1117/diff?src=pr&el=tree#diff-ZGF0YXNldHRlL3V0aWxzL3NxbGl0ZS5weQ==) | `100.00% <100.00%> (\u00f8)` | |\n\n------\n\n[Continue to review full report at Codecov](https://codecov.io/gh/simonw/datasette/pull/1117?src=pr&el=continue).\n> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)\n> `\u0394 = absolute (impact)`, `\u00f8 = not affected`, `? = missing data`\n> Powered by [Codecov](https://codecov.io/gh/simonw/datasette/pull/1117?src=pr&el=footer). Last update [dea3c50...ccdf2c6](https://codecov.io/gh/simonw/datasette/pull/1117?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 753767911, "label": "Support for generated columns"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1116#issuecomment-736030599", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1116", "id": 736030599, "node_id": "MDEyOklzc3VlQ29tbWVudDczNjAzMDU5OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-11-30T20:41:41Z", "updated_at": "2020-11-30T20:41:41Z", "author_association": "OWNER", "body": "Here's the problem: https://www.sqlite.org/changes.html#version_3_26_0\r\n\r\n> ### 2018-12-01 (3.26.0)\r\n> \r\n> - Added [PRAGMA table_xinfo](https://www.sqlite.org/pragma.html#pragma_table_xinfo) that works just like [PRAGMA table_info](https://www.sqlite.org/pragma.html#pragma_table_info) except that it also shows [hidden columns](https://www.sqlite.org/vtab.html#hiddencol) in virtual tables.\r\n\r\nCI is running 3.22.0.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 753668177, "label": "GENERATED column support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1117#issuecomment-736029337", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1117", "id": 736029337, "node_id": "MDEyOklzc3VlQ29tbWVudDczNjAyOTMzNw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-11-30T20:39:06Z", "updated_at": "2020-11-30T20:39:06Z", "author_association": "OWNER", "body": "Here's the problem: https://www.sqlite.org/changes.html#version_3_26_0\r\n\r\n> ### 2018-12-01 (3.26.0)\r\n> \r\n> - Added [PRAGMA table_xinfo](https://www.sqlite.org/pragma.html#pragma_table_xinfo) that works just like [PRAGMA table_info](https://www.sqlite.org/pragma.html#pragma_table_info) except that it also shows [hidden columns](https://www.sqlite.org/vtab.html#hiddencol) in virtual tables.\r\n\r\nCI is running 3.22.0.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 753767911, "label": "Support for generated columns"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1117#issuecomment-736028726", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1117", "id": 736028726, "node_id": "MDEyOklzc3VlQ29tbWVudDczNjAyODcyNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-11-30T20:37:50Z", "updated_at": "2020-11-30T20:37:50Z", "author_association": "OWNER", "body": "This kind of problem is why I have a `tmate` workflow:\r\n\r\n\"Actions_\u00b7_simonw_datasette\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 753767911, "label": "Support for generated columns"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1117#issuecomment-736023089", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1117", "id": 736023089, "node_id": "MDEyOklzc3VlQ29tbWVudDczNjAyMzA4OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-11-30T20:26:27Z", "updated_at": "2020-11-30T20:26:27Z", "author_association": "OWNER", "body": "On my laptop:\r\n```\r\nplatform darwin -- Python 3.8.6, pytest-6.0.1, py-1.9.0, pluggy-0.13.1\r\nSQLite: 3.33.0\r\n```\r\nIn CI they are all SQLite: 3.22.0", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 753767911, "label": "Support for generated columns"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1117#issuecomment-736018609", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1117", "id": 736018609, "node_id": "MDEyOklzc3VlQ29tbWVudDczNjAxODYwOQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-11-30T20:17:31Z", "updated_at": "2020-11-30T20:17:31Z", "author_association": "OWNER", "body": "I need to replicate these failures on my laptop. My hunch is that this is down to the version of SQLite available to Python.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 753767911, "label": "Support for generated columns"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1116#issuecomment-736015487", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1116", "id": 736015487, "node_id": "MDEyOklzc3VlQ29tbWVudDczNjAxNTQ4Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-11-30T20:11:07Z", "updated_at": "2020-11-30T20:11:07Z", "author_association": "OWNER", "body": "Working on this in a pull request: https://github.com/simonw/datasette/pull/1117", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 753668177, "label": "GENERATED column support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1116#issuecomment-736014372", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1116", "id": 736014372, "node_id": "MDEyOklzc3VlQ29tbWVudDczNjAxNDM3Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-11-30T20:08:48Z", "updated_at": "2020-11-30T20:08:48Z", "author_association": "OWNER", "body": "Ouch, the tests pass on my laptop but failed in CI: https://github.com/simonw/datasette/actions/runs/392367997\r\n\r\nLots of failures look like this:\r\n```\r\nERROR: conn=, sql = 'select rowid, from facetable order by rowid limit 51', params = {}: near \"from\": syntax error\r\n```\r\nNote the `select rowid, from...` - so it looks like invalid SQL queries are being constructed maybe due to mis-detecting columns somehow.\r\n\r\nI wonder why it didn't fail on my laptop?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 753668177, "label": "GENERATED column support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1116#issuecomment-736010720", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1116", "id": 736010720, "node_id": "MDEyOklzc3VlQ29tbWVudDczNjAxMDcyMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-11-30T20:01:53Z", "updated_at": "2020-11-30T20:01:53Z", "author_association": "OWNER", "body": "I'm OK exposing hidden columns, unless someone comes up with a pressing reason not to.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 753668177, "label": "GENERATED column support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1116#issuecomment-736005833", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1116", "id": 736005833, "node_id": "MDEyOklzc3VlQ29tbWVudDczNjAwNTgzMw==", "user": {"value": 2789593, "label": "nattaylor"}, "created_at": "2020-11-30T19:54:39Z", "updated_at": "2020-11-30T19:54:39Z", "author_association": "NONE", "body": "@simonw thanks for investigating so quickly. If it is undesirable to change that hidden behavior, maybe something like this is a suitable workaround:\r\n```\r\nSELECT * FROM pragma_table_xinfo('deeds') where hidden in (0,2);\r\n0|body|TEXT|0||0|0\r\n1|id|INT GENERATED ALWAYS|0||0|2\r\n2|consideration|INT GENERATED ALWAYS|0||0|2\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 753668177, "label": "GENERATED column support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1116#issuecomment-736004383", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1116", "id": 736004383, "node_id": "MDEyOklzc3VlQ29tbWVudDczNjAwNDM4Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-11-30T19:51:51Z", "updated_at": "2020-11-30T19:51:51Z", "author_association": "OWNER", "body": "This change will also have an impact on how hidden virtual FTS tables are displayed, since apparently those have some hidden columns: https://latest.datasette.io/fixtures?sql=select+*+from+pragma_table_xinfo%28%27searchable_fts%27%29\r\n\r\n| cid | name | type | notnull | dflt_value | pk | hidden |\r\n| --- | --- | --- | --- | --- | --- | --- |\r\n| 0 | text1 | | 0 | | 0 | 0 |\r\n| 1 | text2 | | 0 | | 0 | 0 |\r\n| 2 | name with . and spaces | | 0 | | 0 | 0 |\r\n| 3 | searchable_fts | | 0 | | 0 | 1 |\r\n| 4 | docid | | 0 | | 0 | 1 |\r\n| 5 | __langid | | 0 | | 0 | 1 |", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 753668177, "label": "GENERATED column support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1116#issuecomment-735995695", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1116", "id": 735995695, "node_id": "MDEyOklzc3VlQ29tbWVudDczNTk5NTY5NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-11-30T19:34:15Z", "updated_at": "2020-11-30T19:34:15Z", "author_association": "OWNER", "body": "Generated column support was added in SQLite 3.31.0, so any unit tests I write for this should use skipIf to only run on that version or later.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 753668177, "label": "GENERATED column support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1116#issuecomment-735993935", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1116", "id": 735993935, "node_id": "MDEyOklzc3VlQ29tbWVudDczNTk5MzkzNQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-11-30T19:30:44Z", "updated_at": "2020-11-30T19:32:15Z", "author_association": "OWNER", "body": "It looks like `PRAGMA table_info` skips \"hidden\" columns: https://www.sqlite.org/pragma.html#pragma_table_info\r\n\r\nBut `PRAGMA table_xinfo` does not: https://www.sqlite.org/pragma.html#pragma_table_xinfo\r\n\r\nCompare https://latest.datasette.io/fixtures?sql=select+*+from+pragma_table_info%28%27searchable%27%29 to https://latest.datasette.io/fixtures?sql=select+*+from+pragma_table_xinfo%28%27searchable%27%29 - the `xinfo` one has an additional `hidden` column.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 753668177, "label": "GENERATED column support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1116#issuecomment-735992106", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1116", "id": 735992106, "node_id": "MDEyOklzc3VlQ29tbWVudDczNTk5MjEwNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-11-30T19:27:10Z", "updated_at": "2020-11-30T19:27:10Z", "author_association": "OWNER", "body": "I'm treating this as a bug - these columns should definitely be visible in Datasette.\r\n\r\nI created my own test database using SQLite from Homebrew like this:\r\n```\r\n/usr/local/Cellar/sqlite/3.33.0/bin/sqlite3 deeds.db << EOF\r\nCREATE TABLE deeds (\r\n body TEXT,\r\n id INT GENERATED ALWAYS AS (json_extract(body, '$.id')) STORED,\r\n consideration INT GENERATED ALWAYS AS (json_extract(body, '$.consideration')) STORED\r\n);\r\nINSERT INTO deeds (body) VALUES ('{\r\n \"id\": 1,\r\n \"consideration\": \"This is the consideration\"\r\n}');\r\nEOF\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 753668177, "label": "GENERATED column support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/263#issuecomment-735960132", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/263", "id": 735960132, "node_id": "MDEyOklzc3VlQ29tbWVudDczNTk2MDEzMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-11-30T18:25:17Z", "updated_at": "2020-11-30T18:25:17Z", "author_association": "OWNER", "body": "Fixing this would unblock this issue for switching `datasette-graphql` to using `datasette.client` internally: https://github.com/simonw/datasette-graphql/issues/61", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 323671577, "label": "Facets should not execute for ?shape=array|object"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/github-to-sqlite/issues/53#issuecomment-735485677", "issue_url": "https://api.github.com/repos/dogsheep/github-to-sqlite/issues/53", "id": 735485677, "node_id": "MDEyOklzc3VlQ29tbWVudDczNTQ4NTY3Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-11-30T00:36:09Z", "updated_at": "2020-11-30T00:36:09Z", "author_association": "MEMBER", "body": "Given rate limits (see #51) this command might be better implemented by running a `git clone` into a temporary directory - doing so would retrieve all of the files in one go.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 753000405, "label": "Command for fetching file contents"}, "performed_via_github_app": null}