{"id": 623755723, "node_id": "MDExOlB1bGxSZXF1ZXN0NjIzNzU1NzIz", "number": 258, "state": "closed", "locked": 0, "title": "Fixing insert from JSON containing strings with non-ascii characters \u2026", "user": {"value": 6586811, "label": "dylan-wu"}, "body": "\u2026are escaped aps unicode for lists, tuples, dicts\r\n\r\nFix of #257 ", "created_at": "2021-04-26T20:50:00Z", "updated_at": "2021-05-19T02:47:44Z", "closed_at": "2021-05-19T02:47:44Z", "merged_at": "2021-05-19T02:47:44Z", "merge_commit_sha": "6f4f9a3effeb16de0348d3cf136664f7531f498d", "assignee": null, "milestone": null, "draft": 0, "head": "27e7c1ae1913e2127361af4fc664c2061fb76627", "base": "22f1d9e1999f70af4c5b0f880a820cd9eead3942", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/258", "merged_by": null, "auto_merge": null} {"id": 719998225, "node_id": "MDExOlB1bGxSZXF1ZXN0NzE5OTk4MjI1", "number": 322, "state": "closed", "locked": 0, "title": "Add dict type to be mapped as TEXT in sqllite", "user": {"value": 2496189, "label": "minaeid90"}, "body": "the library deal with Postgres type jsonb as dictionary, add dict type as a TEXT for mapping to sqlite\r\n\r\n", "created_at": "2021-08-25T20:54:26Z", "updated_at": "2021-11-15T00:27:40Z", "closed_at": "2021-11-15T00:27:40Z", "merged_at": "2021-11-15T00:27:40Z", "merge_commit_sha": "271b894af52eb6437ae6cd84eba9867ad8dd43f6", "assignee": null, "milestone": null, "draft": 0, "head": "69619f68c26478fdee479110e084fd22711013a3", "base": "77c240df56068341561e95e4a412cbfa24dc5bc7", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/322", "merged_by": null, "auto_merge": null} {"id": 1000800283, "node_id": "PR_kwDOCGYnMM47pwAb", "number": 455, "state": "closed", "locked": 0, "title": "in extract code, check equality with IS instead of = for nulls", "user": {"value": 536941, "label": "fgregg"}, "body": "sqlite \"IS\" is equivalent to SQL \"IS NOT DISTINCT FROM\"\r\n\r\ncloses #423", "created_at": "2022-07-19T13:40:25Z", "updated_at": "2022-08-27T14:45:03Z", "closed_at": "2022-08-27T14:45:03Z", "merged_at": "2022-08-27T14:45:03Z", "merge_commit_sha": "c5f8a2eb1a81a18b52825cc649112f71fe419b12", "assignee": null, "milestone": null, "draft": 0, "head": "1b35a92e3ede76f0f29f6f8dcd899f44b2abbb02", "base": "855bce8c3823718def13e0b8928c58bf857e41b2", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/455", "merged_by": null, "auto_merge": null} {"id": 1083804914, "node_id": "PR_kwDOCGYnMM5AmYzy", "number": 499, "state": "open", "locked": 0, "title": "feat: recreate fts triggers after table transform", "user": {"value": 7908073, "label": "chapmanjacobd"}, "body": "https://github.com/simonw/sqlite-utils/pull/498\r\n\r\n\r\n----\r\n:books: Documentation preview :books:: https://sqlite-utils--499.org.readthedocs.build/en/499/\r\n\r\n\r\n\r\nalternatively, `self.disable_fts()`", "created_at": "2022-10-11T20:35:39Z", "updated_at": "2022-10-26T17:54:51Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "6c71562a7a21ab93541a14453961ce3d6abca3cc", "assignee": null, "milestone": null, "draft": 0, "head": "a25e83841f2703afb08aff4589cb559ae9060776", "base": "d792dad1cf5f16525da81b1e162fb71d469995f3", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/499", "merged_by": null, "auto_merge": null} {"id": 1504920193, "node_id": "PR_kwDOCGYnMM5Zs0KB", "number": 591, "state": "closed", "locked": 0, "title": "Test against Python 3.12 preview", "user": {"value": 9599, "label": "simonw"}, "body": "https://dev.to/hugovk/help-test-python-312-beta-1508/\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://sqlite-utils--591.org.readthedocs.build/en/591/\n\r\n", "created_at": "2023-09-06T16:10:00Z", "updated_at": "2023-11-04T00:58:03Z", "closed_at": "2023-11-04T00:58:02Z", "merged_at": null, "merge_commit_sha": "ac0db3c705355178bd5a337b8dd74df141b12c7a", "assignee": null, "milestone": null, "draft": 0, "head": "1f14df1de4a214b12abfba6edd61a4bfa0b8473e", "base": "347fdc865e91b8d3410f49a5c9d5b499fbb594c1", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/591", "merged_by": null, "auto_merge": null} {"id": 1105985162, "node_id": "PR_kwDOCGYnMM5B6_6K", "number": 508, "state": "closed", "locked": 0, "title": "Allow surrogates in parameters", "user": {"value": 7908073, "label": "chapmanjacobd"}, "body": "closes #507\r\n\r\nhttps://dwheeler.com/essays/fixing-unix-linux-filenames.html\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://sqlite-utils--508.org.readthedocs.build/en/508/\n\r\n", "created_at": "2022-10-31T22:11:49Z", "updated_at": "2022-11-17T15:11:16Z", "closed_at": "2022-10-31T22:55:36Z", "merged_at": null, "merge_commit_sha": "3b551597240d9a6058b1c3c720073120db213678", "assignee": null, "milestone": null, "draft": 0, "head": "43a8c4c91fc22fb6bea07846f144072b0d047f4e", "base": "529110e7d8c4a6b1bbf5fb61f2e29d72aa95a611", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/508", "merged_by": null, "auto_merge": null} {"id": 1034485141, "node_id": "PR_kwDOCGYnMM49qP2V", "number": 468, "state": "closed", "locked": 0, "title": "db[table].create(..., transform=True) and create-table --transform", "user": {"value": 9599, "label": "simonw"}, "body": "Work in progress. Still needs documentation and tests (and to cover more cases of things that might have changed).\r\n\r\nRefs:\r\n- #467\r\n\r\n\r\n----\r\n:books: Documentation preview :books:: https://sqlite-utils--468.org.readthedocs.build/en/468/\r\n\r\n", "created_at": "2022-08-23T17:27:58Z", "updated_at": "2022-08-27T23:17:55Z", "closed_at": "2022-08-27T23:17:55Z", "merged_at": "2022-08-27T23:17:55Z", "merge_commit_sha": "104f37fa4d2e7e5999c1d829267b62c737f74d3e", "assignee": null, "milestone": {"value": 8355157, "label": "3.29"}, "draft": 0, "head": "2f6a64f61d561df821d737719941c678dcb1a03c", "base": "c5f8a2eb1a81a18b52825cc649112f71fe419b12", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/468", "merged_by": null, "auto_merge": null} {"id": 1015320511, "node_id": "PR_kwDOCGYnMM48hI-_", "number": 460, "state": "closed", "locked": 0, "title": "Cross-link CLI to Python docs", "user": {"value": 9599, "label": "simonw"}, "body": "Work in progress, partly to test the ReadTheDocs preview link action.\r\n\r\nRefs:\r\n- #426\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://readthedocs-preview--460.org.readthedocs.build/en/460/\n\r\n", "created_at": "2022-08-02T16:18:28Z", "updated_at": "2022-08-18T21:58:10Z", "closed_at": "2022-08-18T21:58:07Z", "merged_at": "2022-08-18T21:58:07Z", "merge_commit_sha": "f4fb78fa95057fbc86c734020835a3155695297f", "assignee": null, "milestone": null, "draft": 0, "head": "f21f4ccf7197e7a0ac8c2eb5086659fc3eb5bc05", "base": "1856002e3c0fcc9f09f72ab7d97ad8c75f6de7df", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/460", "merged_by": null, "auto_merge": null} {"id": 727012996, "node_id": "MDExOlB1bGxSZXF1ZXN0NzI3MDEyOTk2", "number": 324, "state": "closed", "locked": 0, "title": "Use python-dateutil package instead of dateutils", "user": {"value": 191622, "label": "meatcar"}, "body": "While working on updating `sqlite-utils` for NixOS/Nixpkgs, I came a cross the following:\r\n\r\nIn 5ec6686153e29ae10d4921a1ad4c841f192f20e2, a new dependency was added on `dateutils` (https://pypi.org/project/dateutils/). \r\n\r\nI believe this is unintentional, and instead `python-dateutil` (https://pypi.org/project/python-dateutil/) was intended.\r\n\r\nMy reasoning is:\r\n- `python-dateutil` is imported here in [recipes.py](https://github.com/simonw/sqlite-utils/blob/5ec6686153e29ae10d4921a1ad4c841f192f20e2/sqlite_utils/recipes.py#L1) \r\n- The `mypy` `type-python-dateutil` dependency in [setup.py](https://github.com/simonw/sqlite-utils/blob/5ec6686153e29ae10d4921a1ad4c841f192f20e2/setup.py#L36)\r\n- `python-dateutil` is a dependency of `dateutils` as seen in the output in [docs/tutorial.ipynb](https://github.com/simonw/sqlite-utils/blob/77c240df56068341561e95e4a412cbfa24dc5bc7/docs/tutorial.ipynb#L43)\r\n\r\nSeems like the trailing \"s\" seems to be the source of confusion \ud83d\ude05\r\n\r\nI've swapped the dependencies out, hope this helps.", "created_at": "2021-09-03T18:31:19Z", "updated_at": "2021-11-14T23:25:40Z", "closed_at": "2021-11-14T23:25:40Z", "merged_at": "2021-11-14T23:25:40Z", "merge_commit_sha": "bc4c42d68879c710c851dba3c98deda96ca6caa8", "assignee": null, "milestone": null, "draft": 0, "head": "275ac3b282947fa5df5d18de835d5d958a778e72", "base": "77c240df56068341561e95e4a412cbfa24dc5bc7", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/324", "merged_by": null, "auto_merge": null} {"id": 925807233, "node_id": "PR_kwDOCGYnMM43LrKB", "number": 429, "state": "closed", "locked": 0, "title": "Depend on click-default-group-wheel", "user": {"value": 9599, "label": "simonw"}, "body": "Trying to get this to work with Pyodide.\r\n\r\nRefs: https://github.com/simonw/click-default-group-wheel/issues/3", "created_at": "2022-05-02T18:03:10Z", "updated_at": "2022-05-02T18:52:42Z", "closed_at": "2022-05-02T18:05:00Z", "merged_at": "2022-05-02T18:05:00Z", "merge_commit_sha": "ed6fd516082e8cc83b199798f62dd67728a6974f", "assignee": null, "milestone": null, "draft": 0, "head": "4a02dcf265702a4f11eed943bf8feaa502c590d5", "base": "e3a14c33a033b0c2fc00f2470666caaf9027e446", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/429", "merged_by": null, "auto_merge": null} {"id": 729731441, "node_id": "MDExOlB1bGxSZXF1ZXN0NzI5NzMxNDQx", "number": 326, "state": "closed", "locked": 0, "title": "Test against 3.10-dev", "user": {"value": 9599, "label": "simonw"}, "body": "This tests against the latest 3.10 RC, https://www.python.org/downloads/release/python-3100rc2/", "created_at": "2021-09-08T15:01:15Z", "updated_at": "2021-10-13T21:49:28Z", "closed_at": "2021-10-13T21:49:28Z", "merged_at": null, "merge_commit_sha": "c563260408e1b802cbbc81ec7c1e398350a1ca3a", "assignee": null, "milestone": null, "draft": 0, "head": "078a08765d8aefa5ce376a03b2643d4ebe1aa57e", "base": "77c240df56068341561e95e4a412cbfa24dc5bc7", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/326", "merged_by": null, "auto_merge": null} {"id": 1136499802, "node_id": "PR_kwDOCGYnMM5DvZxa", "number": 515, "state": "closed", "locked": 0, "title": "upsert new rows with constraints, fixes #514", "user": {"value": 193185, "label": "cldellow"}, "body": "This fixes #514 by making the initial insert for upserts include all columns, so that new rows can be added to tables with non-pkey columns that have constraints.\r\n\r\n(aside: I'm not a python programmer. `pip`? `pipenv`? `venv`? These are mystical incantations to me. The process to set up this repo for local development and testing was _so easy_. Thank you for the excellent contributing documentation!)\r\n\r\n\r\n----\r\n:books: Documentation preview :books:: https://sqlite-utils--515.org.readthedocs.build/en/515/\r\n\r\n", "created_at": "2022-11-26T16:15:21Z", "updated_at": "2023-05-08T21:27:11Z", "closed_at": "2023-05-08T21:27:10Z", "merged_at": null, "merge_commit_sha": "c3713ef6944cbeacf36e462712cecac2176db692", "assignee": null, "milestone": null, "draft": 0, "head": "32f8173a8fe830c224e39a0a514cd12e78de7028", "base": "965ca0d5f5bffe06cc02cd7741344d1ddddf9d56", "author_association": "NONE", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/515", "merged_by": null, "auto_merge": null} {"id": 672359609, "node_id": "MDExOlB1bGxSZXF1ZXN0NjcyMzU5NjA5", "number": 277, "state": "closed", "locked": 0, "title": "add -h support closes #276", "user": {"value": 601708, "label": "mcint"}, "body": "This appears to be the [canonical solution](https://click.palletsprojects.com/en/7.x/documentation/#help-parameter-customization).", "created_at": "2021-06-17T08:08:26Z", "updated_at": "2021-06-18T14:56:59Z", "closed_at": "2021-06-18T14:56:59Z", "merged_at": "2021-06-18T14:56:59Z", "merge_commit_sha": "aa652b6afe43d2b40fabc7a513c3e68866e030a5", "assignee": null, "milestone": null, "draft": 0, "head": "abbd324a2178f09b19966ec36ab2f584d1824c59", "base": "a19ce1a4d0048d389411cfe11a5dbe4c503720e1", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/277", "merged_by": null, "auto_merge": null} {"id": 1272169404, "node_id": "PR_kwDOCGYnMM5L08O8", "number": 531, "state": "closed", "locked": 0, "title": "Add paths for homebrew on Apple silicon", "user": {"value": 25778, "label": "eyeseast"}, "body": "This also passes in the extension path when specified in GIS methods. Wherever we know an extension path, we use `db.init_spatialite(find_spatialite() or load_extension)`.\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://sqlite-utils--531.org.readthedocs.build/en/531/\n\r\n", "created_at": "2023-03-11T22:27:52Z", "updated_at": "2023-04-09T01:49:44Z", "closed_at": "2023-04-09T01:49:43Z", "merged_at": null, "merge_commit_sha": "24f3eb082b98b8d676bab2eab4f763cd9b50fe96", "assignee": null, "milestone": null, "draft": 0, "head": "afdf6187716b19fce8692f6887a1d45c85477fee", "base": "c0251cc9271260de73b4227859a51fab9b4cb745", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/531", "merged_by": null, "auto_merge": null} {"id": 313105634, "node_id": "MDExOlB1bGxSZXF1ZXN0MzEzMTA1NjM0", "number": 57, "state": "closed", "locked": 0, "title": "Add triggers while enabling FTS", "user": {"value": 49260, "label": "amjith"}, "body": "This adds the option for a user to set up triggers in the database to keep their FTS table in sync with the parent table. \r\n\r\nRef: https://sqlite.org/fts5.html#external_content_and_contentless_tables\r\n\r\nI would prefer to make the creation of triggers the default behavior, but that will break existing usage where people have been calling `populate_fts` after inserting new rows.\r\n\r\nI am happy to make changes to the PR as you see fit. ", "created_at": "2019-09-02T04:23:40Z", "updated_at": "2019-09-03T01:03:59Z", "closed_at": "2019-09-02T23:42:29Z", "merged_at": "2019-09-02T23:42:29Z", "merge_commit_sha": "405e092d5916e70df10f82d15e9c052aa9ee8d80", "assignee": null, "milestone": null, "draft": 0, "head": "e01943271b17115fbe0e81d523126d2fb1c7c24b", "base": "cb70f7d10996b844154bf3da88779dd1f65590bc", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/57", "merged_by": null, "auto_merge": null} {"id": 992299943, "node_id": "PR_kwDOCGYnMM47JUun", "number": 452, "state": "closed", "locked": 0, "title": "Add duplicate table feature", "user": {"value": 1690072, "label": "davidleejy"}, "body": "This PR addresses a feature request raised in issue #449. Specifically this PR adds a functionality that lets users duplicate a table via:\r\n\r\n```python\r\ntable_new = db[\"my_table\"].duplicate(\"new_table\")\r\n```\r\n\r\nTest added in file `tests/test_duplicate.py`.\r\n\r\nHappy to make changes to meet maintainers' feedback, if any. ", "created_at": "2022-07-09T20:24:31Z", "updated_at": "2022-07-15T21:21:37Z", "closed_at": "2022-07-15T21:21:36Z", "merged_at": "2022-07-15T21:21:36Z", "merge_commit_sha": "b366e68deb0780048a23610c279552f8529d4726", "assignee": null, "milestone": null, "draft": 0, "head": "eef350fe543c6301c61b257c5f708e0e16ed5a34", "base": "42440d6345c242ee39778045e29143fb550bd2c2", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/452", "merged_by": null, "auto_merge": null} {"id": 313007483, "node_id": "MDExOlB1bGxSZXF1ZXN0MzEzMDA3NDgz", "number": 56, "state": "closed", "locked": 0, "title": "Escape the table name in populate_fts and search.", "user": {"value": 49260, "label": "amjith"}, "body": "The table names weren't escaped using double quotes in the populate_fts method. \r\n\r\nReproducible case: \r\n```\r\n>>> import sqlite_utils\r\n>>> db = sqlite_utils.Database(\"abc.db\")\r\n>>> db[\"http://example.com\"].insert_all([\r\n... {\"id\": 1, \"age\": 4, \"name\": \"Cleo\"},\r\n... {\"id\": 2, \"age\": 2, \"name\": \"Pancakes\"}\r\n... ], pk=\"id\")\r\n