{"html_url": "https://github.com/simonw/sqlite-utils/pull/584#issuecomment-1683122490", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/584", "id": 1683122490, "node_id": "IC_kwDOCGYnMM5kUmk6", "user": {"value": 22429695, "label": "codecov[bot]"}, "created_at": "2023-08-17T23:45:44Z", "updated_at": "2023-08-18T00:46:07Z", "author_association": "NONE", "body": "## [Codecov](https://app.codecov.io/gh/simonw/sqlite-utils/pull/584?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison) Report\nPatch coverage: **`92.85%`** and project coverage change: **`-0.07%`** :warning:\n> Comparison is base [(`1dc6b5a`)](https://app.codecov.io/gh/simonw/sqlite-utils/commit/1dc6b5aa644a92d3654f7068110ed7930989ce71?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison) 95.82% compared to head [(`2915050`)](https://app.codecov.io/gh/simonw/sqlite-utils/pull/584?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison) 95.76%.\n> Report is 1 commits behind head on main.\n\n
Additional details and impacted files\n\n\n```diff\n@@ Coverage Diff @@\n## main #584 +/- ##\n==========================================\n- Coverage 95.82% 95.76% -0.07% \n==========================================\n Files 8 8 \n Lines 2829 2834 +5 \n==========================================\n+ Hits 2711 2714 +3 \n- Misses 118 120 +2 \n```\n\n\n| [Files Changed](https://app.codecov.io/gh/simonw/sqlite-utils/pull/584?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison) | Coverage \u0394 | |\n|---|---|---|\n| [sqlite\\_utils/db.py](https://app.codecov.io/gh/simonw/sqlite-utils/pull/584?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison#diff-c3FsaXRlX3V0aWxzL2RiLnB5) | `97.22% <92.85%> (-0.15%)` | :arrow_down: |\n\n\n
\n\n[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/simonw/sqlite-utils/pull/584?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison). \n:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison).\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1855838223, "label": ".transform() instead of modifying sqlite_master for add_foreign_keys"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/pull/584#issuecomment-1683122767", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/584", "id": 1683122767, "node_id": "IC_kwDOCGYnMM5kUmpP", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-08-17T23:46:09Z", "updated_at": "2023-08-17T23:46:09Z", "author_association": "OWNER", "body": "Oops, `mypy` failures:\r\n\r\n```\r\nsqlite_utils/db.py:781: error: Incompatible types in assignment (expression has type \"Tuple[Any, ...]\", variable has type \"Union[str, ForeignKey, Tuple[str, str], Tuple[str, str, str], Tuple[str, str, str, str]]\") [assignment]\r\nsqlite_utils/db.py:1164: error: Need type annotation for \"by_table\" (hint: \"by_table: Dict[, ] = ...\") [var-annotated]\r\nsqlite_utils/db.py:1169: error: Item \"View\" of \"Union[Table, View]\" has no attribute \"transform\" [union-attr]\r\nsqlite_utils/db.py:1813: error: Argument 1 to \"append\" of \"list\" has incompatible type \"ForeignKey\"; expected [arg-type]\r\nsqlite_utils/db.py:1824: error: Argument 1 to \"append\" of \"list\" has incompatible type \"ForeignKey\"; expected [arg-type]\r\nFound 5 errors in 1 file (checked 56 source files)\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1855838223, "label": ".transform() instead of modifying sqlite_master for add_foreign_keys"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/pull/584#issuecomment-1683118376", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/584", "id": 1683118376, "node_id": "IC_kwDOCGYnMM5kUlko", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-08-17T23:41:10Z", "updated_at": "2023-08-17T23:41:10Z", "author_association": "OWNER", "body": "The problem here is that the table created by this line:\r\n```python\r\nfresh_db.create_table(\"breeds\", {\"name\": str})\r\n```\r\nHas this schema:\r\n```sql\r\nCREATE TABLE [breeds] (\r\n [name] TEXT\r\n);\r\n```\r\nSQLite creates an invisible `rowid` column for it automatically.\r\n\r\nOn the `main` branch with the old implementation that table ends up looking like this after the foreign key has been added:\r\n```sql\r\n(Pdb) print(fresh_db.schema)\r\nCREATE TABLE [dogs] (\r\n [name] TEXT\r\n, [breed_id] INTEGER,\r\n FOREIGN KEY([breed_id]) REFERENCES [breeds]([rowid])\r\n);\r\nCREATE TABLE [breeds] (\r\n [name] TEXT\r\n);\r\n```\r\nBut I think this validation check is failing now: https://github.com/simonw/sqlite-utils/blob/842b61321fc6a9f0bdb913ab138e39d71bf42e00/sqlite_utils/db.py#L875-L884\r\n\r\nHere's what the debugger reveals about this code:\r\n```python\r\n for fk in foreign_keys:\r\n if fk.other_table == name and columns.get(fk.other_column):\r\n continue\r\n if not any(\r\n c for c in self[fk.other_table].columns if c.name == fk.other_column\r\n ):\r\n raise AlterError(\r\n \"No such column: {}.{}\".format(fk.other_table, fk.other_column)\r\n )\r\n```\r\n```\r\n(Pdb) fk\r\nForeignKey(table='dogs', column='breed_id', other_table='breeds', other_column='rowid')\r\n(Pdb) self[fk.other_table].columns\r\n[Column(cid=0, name='name', type='TEXT', notnull=0, default_value=None, is_pk=0)]\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1855838223, "label": ".transform() instead of modifying sqlite_master for add_foreign_keys"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/pull/584#issuecomment-1683114719", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/584", "id": 1683114719, "node_id": "IC_kwDOCGYnMM5kUkrf", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-08-17T23:36:02Z", "updated_at": "2023-08-17T23:36:02Z", "author_association": "OWNER", "body": "Just these three lines recreate the problem:\r\n```python\r\nfrom sqlite_utils import Database\r\n\r\nfresh_db = Database(memory=True)\r\n\r\nfresh_db.create_table(\"dogs\", {\"name\": str})\r\nfresh_db.create_table(\"breeds\", {\"name\": str})\r\nfresh_db[\"dogs\"].add_column(\"breed_id\", fk=\"breeds\")\r\n```\r\nTraceback:\r\n```\r\nTraceback (most recent call last):\r\n File \"\", line 1, in \r\n File \"/Users/simon/Dropbox/Development/sqlite-utils/sqlite_utils/db.py\", line 2170, in add_column\r\n self.add_foreign_key(col_name, fk, fk_col)\r\n File \"/Users/simon/Dropbox/Development/sqlite-utils/sqlite_utils/db.py\", line 2273, in add_foreign_key\r\n self.db.add_foreign_keys([(self.name, column, other_table, other_column)])\r\n File \"/Users/simon/Dropbox/Development/sqlite-utils/sqlite_utils/db.py\", line 1169, in add_foreign_keys\r\n self[table].transform(add_foreign_keys=fks)\r\n File \"/Users/simon/Dropbox/Development/sqlite-utils/sqlite_utils/db.py\", line 1728, in transform\r\n sqls = self.transform_sql(\r\n ^^^^^^^^^^^^^^^^^^^\r\n File \"/Users/simon/Dropbox/Development/sqlite-utils/sqlite_utils/db.py\", line 1896, in transform_sql\r\n self.db.create_table_sql(\r\n File \"/Users/simon/Dropbox/Development/sqlite-utils/sqlite_utils/db.py\", line 882, in create_table_sql\r\n raise AlterError(\r\nsqlite_utils.db.AlterError: No such column: breeds.rowid\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1855838223, "label": ".transform() instead of modifying sqlite_master for add_foreign_keys"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/pull/584#issuecomment-1683112857", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/584", "id": 1683112857, "node_id": "IC_kwDOCGYnMM5kUkOZ", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-08-17T23:33:58Z", "updated_at": "2023-08-17T23:33:58Z", "author_association": "OWNER", "body": "Full test:\r\n\r\nhttps://github.com/simonw/sqlite-utils/blob/842b61321fc6a9f0bdb913ab138e39d71bf42e00/tests/test_create.py#L468-L484", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1855838223, "label": ".transform() instead of modifying sqlite_master for add_foreign_keys"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/pull/584#issuecomment-1683112298", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/584", "id": 1683112298, "node_id": "IC_kwDOCGYnMM5kUkFq", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-08-17T23:33:14Z", "updated_at": "2023-08-17T23:33:14Z", "author_association": "OWNER", "body": "Just one failing test left:\r\n\r\n```\r\n # Soundness check foreign_keys point to existing tables\r\n for fk in foreign_keys:\r\n if fk.other_table == name and columns.get(fk.other_column):\r\n continue\r\n if not any(\r\n c for c in self[fk.other_table].columns if c.name == fk.other_column\r\n ):\r\n> raise AlterError(\r\n \"No such column: {}.{}\".format(fk.other_table, fk.other_column)\r\n )\r\nE sqlite_utils.db.AlterError: No such column: breeds.rowid\r\n\r\nsqlite_utils/db.py:882: AlterError\r\n==== short test summary info ====\r\nFAILED tests/test_create.py::test_add_column_foreign_key - sqlite_utils.db.AlterError: No such column: breeds.rowid\r\n==== 1 failed, 378 deselected in 0.49s ====\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1855838223, "label": ".transform() instead of modifying sqlite_master for add_foreign_keys"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/583#issuecomment-1683110636", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/583", "id": 1683110636, "node_id": "IC_kwDOCGYnMM5kUjrs", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-08-17T23:31:27Z", "updated_at": "2023-08-17T23:31:27Z", "author_association": "OWNER", "body": "Spotted this while working on:\r\n- #577 ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1855836914, "label": "Get rid of test.utils.collapse_whitespace"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/577#issuecomment-1683098094", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/577", "id": 1683098094, "node_id": "IC_kwDOCGYnMM5kUgnu", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-08-17T23:15:36Z", "updated_at": "2023-08-17T23:15:36Z", "author_association": "OWNER", "body": "An interesting side-effect of this change is that it does result in a slightly different schema - e.g. this test: https://github.com/simonw/sqlite-utils/blob/1dc6b5aa644a92d3654f7068110ed7930989ce71/tests/test_extract.py#L118-L133\r\n\r\nNeeds updating like so:\r\n```diff\r\ndiff --git a/tests/test_extract.py b/tests/test_extract.py\r\nindex 70ad0cf..fd52534 100644\r\n--- a/tests/test_extract.py\r\n+++ b/tests/test_extract.py\r\n@@ -127,8 +127,7 @@ def test_extract_rowid_table(fresh_db):\r\n assert fresh_db[\"tree\"].schema == (\r\n 'CREATE TABLE \"tree\" (\\n'\r\n \" [name] TEXT,\\n\"\r\n- \" [common_name_latin_name_id] INTEGER,\\n\"\r\n- \" FOREIGN KEY([common_name_latin_name_id]) REFERENCES [common_name_latin_name]([id])\\n\"\r\n+ \" [common_name_latin_name_id] INTEGER REFERENCES [common_name_latin_name]([id])\\n\"\r\n \")\"\r\n )\r\n assert (\r\n```\r\nUnfortunately this means it may break other test suites that depend on `sqlite-utils` that have schema tests like this baked in.\r\n\r\nI don't think this should count as a breaking change release though, but it's still worth noting.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1817289521, "label": "Get `add_foreign_keys()` to work without modifying `sqlite_master`"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/577#issuecomment-1683076325", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/577", "id": 1683076325, "node_id": "IC_kwDOCGYnMM5kUbTl", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-08-17T22:48:36Z", "updated_at": "2023-08-17T22:48:36Z", "author_association": "OWNER", "body": "I'm inclined to just go with the `.transform()` method and not attempt to keep around the method that involves updating `sqlite_master` and then add code to detect if that's possible (or catch if it fails) and fall back on the other mechanism.\r\n\r\nIt would be nice to drop some code complexity, plus I don't yet have a way of running automated tests against Python + SQLite versions that exhibit the problem.", "reactions": "{\"total_count\": 1, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 1, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1817289521, "label": "Get `add_foreign_keys()` to work without modifying `sqlite_master`"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/577#issuecomment-1683074009", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/577", "id": 1683074009, "node_id": "IC_kwDOCGYnMM5kUavZ", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-08-17T22:45:29Z", "updated_at": "2023-08-17T22:47:08Z", "author_association": "OWNER", "body": "Actually I think `table.transform()` might get the following optional arguments:\r\n```python\r\n def transform(\r\n self,\r\n *,\r\n # ...\r\n # This one exists already:\r\n drop_foreign_keys: Optional[Iterable] = None,\r\n # These two are new. This one specifies keys to add:\r\n add_foreign_keys: Optional[ForeignKeysType] = None,\r\n # Or this one causes them all to be replaced with the new definitions:\r\n foreign_keys: Optional[ForeignKeysType] = None,\r\n```\r\nThere should be validation that forbids you from using `foreign_keys=` at the same time as either `drop_foreign_keys=` or `add_foreign_keys=` because the point of `foreign_keys=` is to define the keys for the new table all in one go.\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": 1817289521, "label": "Get `add_foreign_keys()` to work without modifying `sqlite_master`"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/577#issuecomment-1683074857", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/577", "id": 1683074857, "node_id": "IC_kwDOCGYnMM5kUa8p", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-08-17T22:46:40Z", "updated_at": "2023-08-17T22:46:40Z", "author_association": "OWNER", "body": "As a reminder:\r\nhttps://github.com/simonw/sqlite-utils/blob/1dc6b5aa644a92d3654f7068110ed7930989ce71/sqlite_utils/db.py#L159-L165", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1817289521, "label": "Get `add_foreign_keys()` to work without modifying `sqlite_master`"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/577#issuecomment-1683074546", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/577", "id": 1683074546, "node_id": "IC_kwDOCGYnMM5kUa3y", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-08-17T22:46:18Z", "updated_at": "2023-08-17T22:46:18Z", "author_association": "OWNER", "body": "Maybe this:\r\n```python\r\n drop_foreign_keys: Optional[Iterable] = None,\r\n```\r\nShould be this:\r\n```python\r\n drop_foreign_keys: Optional[Iterable[str]] = None,\r\n```\r\nBecause it takes a list of column names that should have their foreign keys dropped.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1817289521, "label": "Get `add_foreign_keys()` to work without modifying `sqlite_master`"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/577#issuecomment-1683071519", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/577", "id": 1683071519, "node_id": "IC_kwDOCGYnMM5kUaIf", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-08-17T22:42:28Z", "updated_at": "2023-08-17T22:42:28Z", "author_association": "OWNER", "body": "Looking at the whole of the `.add_foreign_keys()` method, the first section of it can remain unchanged - it's just a bunch of validation:\r\n\r\nhttps://github.com/simonw/sqlite-utils/blob/13ebcc575d2547c45e8d31288b71a3242c16b886/sqlite_utils/db.py#L1106-L1149\r\n\r\nAt that point we have `foreign_keys_to_create` as the ones that are new, but we should instead try to build up a `foreign_keys` which is both new and old, ready to be passed to `.transform()`.\r\n\r\nHere's the rest of that function, which will be replaced by a called to `.transform(foreign_keys=foreign_keys)`:\r\n\r\nhttps://github.com/simonw/sqlite-utils/blob/13ebcc575d2547c45e8d31288b71a3242c16b886/sqlite_utils/db.py#L1151-L1177", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1817289521, "label": "Get `add_foreign_keys()` to work without modifying `sqlite_master`"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/577#issuecomment-1683068505", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/577", "id": 1683068505, "node_id": "IC_kwDOCGYnMM5kUZZZ", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-08-17T22:39:17Z", "updated_at": "2023-08-17T22:39:38Z", "author_association": "OWNER", "body": "This would help address these issues, among potentially many others:\r\n- https://github.com/simonw/llm/issues/60\r\n- https://github.com/simonw/llm/issues/116\r\n- https://github.com/simonw/llm/issues/123", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1817289521, "label": "Get `add_foreign_keys()` to work without modifying `sqlite_master`"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/577#issuecomment-1683066934", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/577", "id": 1683066934, "node_id": "IC_kwDOCGYnMM5kUZA2", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-08-17T22:37:18Z", "updated_at": "2023-08-17T22:37:18Z", "author_association": "OWNER", "body": "I'm certain this could work.\r\n\r\nIt turns out the `.transform()` method already has code that creates the new table with a copy of foreign keys from the old one - dropping any foreign keys that were specified in the `drop_foreign_keys=` parameter:\r\n\r\nhttps://github.com/simonw/sqlite-utils/blob/1dc6b5aa644a92d3654f7068110ed7930989ce71/sqlite_utils/db.py#L1850-L1872\r\n\r\nImproving this code to support adding foreign keys as well would be pretty simple.\r\n\r\nAnd then the `.add_foreign_keys()` and `.add_foreign_key()` methods could be updated to use `.transform(...)` under the hood instead.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1817289521, "label": "Get `add_foreign_keys()` to work without modifying `sqlite_master`"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/2142#issuecomment-1682272492", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/2142", "id": 1682272492, "node_id": "IC_kwDOBm6k_c5kRXDs", "user": {"value": 22429695, "label": "codecov[bot]"}, "created_at": "2023-08-17T13:18:08Z", "updated_at": "2023-08-17T13:18:08Z", "author_association": "NONE", "body": "## [Codecov](https://app.codecov.io/gh/simonw/datasette/pull/2142?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison) Report\nPatch and project coverage have no change.\n> Comparison is base [(`943df09`)](https://app.codecov.io/gh/simonw/datasette/commit/943df09dcca93c3b9861b8c96277a01320db8662?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison) 92.06% compared to head [(`6b617f7`)](https://app.codecov.io/gh/simonw/datasette/pull/2142?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison) 92.06%.\n\n
Additional details and impacted files\n\n\n```diff\n@@ Coverage Diff @@\n## main #2142 +/- ##\n=======================================\n Coverage 92.06% 92.06% \n=======================================\n Files 40 40 \n Lines 5937 5937 \n=======================================\n Hits 5466 5466 \n Misses 471 471 \n```\n\n\n\n\n
\n\n[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/simonw/datasette/pull/2142?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison). \n:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison).\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1854970601, "label": "Bump the python-packages group with 2 updates"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/2141#issuecomment-1682256251", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/2141", "id": 1682256251, "node_id": "IC_kwDOBm6k_c5kRTF7", "user": {"value": 49699333, "label": "dependabot[bot]"}, "created_at": "2023-08-17T13:07:43Z", "updated_at": "2023-08-17T13:07:43Z", "author_association": "CONTRIBUTOR", "body": "Looks like blacken-docs is updatable in another way, so this is no longer needed.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1853289039, "label": "Bump the python-packages group with 1 update"}, "performed_via_github_app": null}