issue_comments
8,358 rows where author_association = "OWNER" and user = 9599 sorted by updated_at descending
This data as json, CSV (advanced)
user 1
- simonw · 2,817 ✖
id | html_url | issue_url | node_id | user | created_at | updated_at ▲ | author_association | body | reactions | issue | performed_via_github_app |
---|---|---|---|---|---|---|---|---|---|---|---|
688482355 | https://github.com/simonw/sqlite-utils/issues/149#issuecomment-688482355 | https://api.github.com/repos/simonw/sqlite-utils/issues/149 | MDEyOklzc3VlQ29tbWVudDY4ODQ4MjM1NQ== | simonw 9599 | 2020-09-07T19:22:51Z | 2020-09-07T19:22:51Z | OWNER | And the SQLite documentation says:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
FTS table with 7 rows has _fts_docsize table with 9,141 rows 695319258 | |
688482055 | https://github.com/simonw/sqlite-utils/issues/149#issuecomment-688482055 | https://api.github.com/repos/simonw/sqlite-utils/issues/149 | MDEyOklzc3VlQ29tbWVudDY4ODQ4MjA1NQ== | simonw 9599 | 2020-09-07T19:21:42Z | 2020-09-07T19:21:42Z | OWNER | Using
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
FTS table with 7 rows has _fts_docsize table with 9,141 rows 695319258 | |
688481374 | https://github.com/simonw/sqlite-utils/issues/149#issuecomment-688481374 | https://api.github.com/repos/simonw/sqlite-utils/issues/149 | MDEyOklzc3VlQ29tbWVudDY4ODQ4MTM3NA== | simonw 9599 | 2020-09-07T19:19:08Z | 2020-09-07T19:19:08Z | OWNER | reading through the code for
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
FTS table with 7 rows has _fts_docsize table with 9,141 rows 695319258 | |
688480665 | https://github.com/simonw/sqlite-utils/issues/149#issuecomment-688480665 | https://api.github.com/repos/simonw/sqlite-utils/issues/149 | MDEyOklzc3VlQ29tbWVudDY4ODQ4MDY2NQ== | simonw 9599 | 2020-09-07T19:16:20Z | 2020-09-07T19:16:20Z | OWNER | Aha! I have managed to replicate the bug:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
FTS table with 7 rows has _fts_docsize table with 9,141 rows 695319258 | |
688464181 | https://github.com/simonw/sqlite-utils/issues/149#issuecomment-688464181 | https://api.github.com/repos/simonw/sqlite-utils/issues/149 | MDEyOklzc3VlQ29tbWVudDY4ODQ2NDE4MQ== | simonw 9599 | 2020-09-07T18:19:54Z | 2020-09-07T18:19:54Z | OWNER | Even though that table doesn't declare an integer primary key it does have a | rowid | key | name | spdx_id | url | node_id | | --- | --- | --- | --- | --- | --- | | 9150 | apache-2.0 | Apache License 2.0 | Apache-2.0 | https://api.github.com/licenses/apache-2.0 | MDc6TGljZW5zZTI= | | 112 | bsd-3-clause | BSD 3-Clause "New" or "Revised" License | BSD-3-Clause | https://api.github.com/licenses/bsd-3-clause | MDc6TGljZW5zZTU= | https://www.sqlite.org/rowidtable.html explains has this clue:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
FTS table with 7 rows has _fts_docsize table with 9,141 rows 695319258 | |
688460865 | https://github.com/simonw/sqlite-utils/issues/149#issuecomment-688460865 | https://api.github.com/repos/simonw/sqlite-utils/issues/149 | MDEyOklzc3VlQ29tbWVudDY4ODQ2MDg2NQ== | simonw 9599 | 2020-09-07T18:07:14Z | 2020-09-07T18:07:14Z | OWNER | Another likely culprit: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
FTS table with 7 rows has _fts_docsize table with 9,141 rows 695319258 | |
688460729 | https://github.com/simonw/sqlite-utils/issues/149#issuecomment-688460729 | https://api.github.com/repos/simonw/sqlite-utils/issues/149 | MDEyOklzc3VlQ29tbWVudDY4ODQ2MDcyOQ== | simonw 9599 | 2020-09-07T18:06:44Z | 2020-09-07T18:06:44Z | OWNER | First posted on SQLite forum here but I'm pretty sure this is a bug in how |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
FTS table with 7 rows has _fts_docsize table with 9,141 rows 695319258 | |
688434226 | https://github.com/simonw/sqlite-utils/issues/148#issuecomment-688434226 | https://api.github.com/repos/simonw/sqlite-utils/issues/148 | MDEyOklzc3VlQ29tbWVudDY4ODQzNDIyNg== | simonw 9599 | 2020-09-07T16:50:33Z | 2020-09-07T16:50:33Z | OWNER | This may be as easy as applying I could apply that to a few other queries in that code as well. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
More attractive indentation of created FTS table schema 695276328 | |
683528149 | https://github.com/simonw/sqlite-utils/issues/147#issuecomment-683528149 | https://api.github.com/repos/simonw/sqlite-utils/issues/147 | MDEyOklzc3VlQ29tbWVudDY4MzUyODE0OQ== | simonw 9599 | 2020-08-31T03:17:26Z | 2020-08-31T03:17:26Z | OWNER | +1 to making this something that users can customize. An optional argument to the I think there's a terrifying way that we could find this value... we could perform a binary search for it! Open up a memory connection and try running different bulk inserts against it and catch the exceptions - then adjust and try again. My hunch is that we could perform just 2 or 3 probes (maybe against carefully selected values) to find the highest value that works. If this process took less than a few ms to run I'd be happy to do it automatically when the class is instantiated (and let users disable that automatic proving by setting a value using the constructor argument). |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
SQLITE_MAX_VARS maybe hard-coded too low 688670158 | |
683448569 | https://github.com/simonw/datasette/issues/948#issuecomment-683448569 | https://api.github.com/repos/simonw/datasette/issues/948 | MDEyOklzc3VlQ29tbWVudDY4MzQ0ODU2OQ== | simonw 9599 | 2020-08-30T17:39:09Z | 2020-08-30T18:34:34Z | OWNER | So the steps needed are:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Upgrade CodeMirror 684925907 | |
683452613 | https://github.com/simonw/datasette/issues/948#issuecomment-683452613 | https://api.github.com/repos/simonw/datasette/issues/948 | MDEyOklzc3VlQ29tbWVudDY4MzQ1MjYxMw== | simonw 9599 | 2020-08-30T18:16:28Z | 2020-08-30T18:16:28Z | OWNER | I added documentation on how to upgrade CodeMirror for the future here: https://docs.datasette.io/en/latest/contributing.html#upgrading-codemirror |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Upgrade CodeMirror 684925907 | |
683449837 | https://github.com/simonw/datasette/issues/655#issuecomment-683449837 | https://api.github.com/repos/simonw/datasette/issues/655 | MDEyOklzc3VlQ29tbWVudDY4MzQ0OTgzNw== | simonw 9599 | 2020-08-30T17:51:38Z | 2020-08-30T17:51:38Z | OWNER | I think was fixed by #948 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Copy and paste doesn't work reliably on iPhone for SQL editor 542553350 | |
683449804 | https://github.com/simonw/datasette/issues/948#issuecomment-683449804 | https://api.github.com/repos/simonw/datasette/issues/948 | MDEyOklzc3VlQ29tbWVudDY4MzQ0OTgwNA== | simonw 9599 | 2020-08-30T17:51:18Z | 2020-08-30T17:51:18Z | OWNER | Copy and paste on mobile safari seems to work now. #655 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Upgrade CodeMirror 684925907 | |
683448635 | https://github.com/simonw/datasette/issues/948#issuecomment-683448635 | https://api.github.com/repos/simonw/datasette/issues/948 | MDEyOklzc3VlQ29tbWVudDY4MzQ0ODYzNQ== | simonw 9599 | 2020-08-30T17:39:54Z | 2020-08-30T17:39:54Z | OWNER | I'll wait for this to deploy to https://latest.datasette.io/ and then test it in various desktop and mobile browsers. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Upgrade CodeMirror 684925907 | |
683445704 | https://github.com/simonw/datasette/issues/948#issuecomment-683445704 | https://api.github.com/repos/simonw/datasette/issues/948 | MDEyOklzc3VlQ29tbWVudDY4MzQ0NTcwNA== | simonw 9599 | 2020-08-30T17:11:58Z | 2020-08-30T17:33:30Z | OWNER | One catch: this stripped the license information from the top of the JS. I fixed this by editing the license to be a single
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Upgrade CodeMirror 684925907 | |
683445114 | https://github.com/simonw/datasette/issues/948#issuecomment-683445114 | https://api.github.com/repos/simonw/datasette/issues/948 | MDEyOklzc3VlQ29tbWVudDY4MzQ0NTExNA== | simonw 9599 | 2020-08-30T17:06:39Z | 2020-08-30T17:06:39Z | OWNER | Minifying using |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Upgrade CodeMirror 684925907 | |
683357092 | https://github.com/simonw/datasette/issues/957#issuecomment-683357092 | https://api.github.com/repos/simonw/datasette/issues/957 | MDEyOklzc3VlQ29tbWVudDY4MzM1NzA5Mg== | simonw 9599 | 2020-08-30T00:15:51Z | 2020-08-30T00:16:02Z | OWNER | Weirdly even removing this single |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Simplify imports of common classes 688622148 | |
683356440 | https://github.com/simonw/datasette/issues/957#issuecomment-683356440 | https://api.github.com/repos/simonw/datasette/issues/957 | MDEyOklzc3VlQ29tbWVudDY4MzM1NjQ0MA== | simonw 9599 | 2020-08-30T00:08:18Z | 2020-08-30T00:10:26Z | OWNER | Annoyingly this seems to be the line that causes the circular import:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Simplify imports of common classes 688622148 | |
683355993 | https://github.com/simonw/datasette/issues/957#issuecomment-683355993 | https://api.github.com/repos/simonw/datasette/issues/957 | MDEyOklzc3VlQ29tbWVudDY4MzM1NTk5Mw== | simonw 9599 | 2020-08-30T00:02:11Z | 2020-08-30T00:04:18Z | OWNER | I tried doing this and got this error: ``` (datasette) datasette % pytest ==================================================================== test session starts ===================================================================== platform darwin -- Python 3.8.5, pytest-6.0.1, py-1.9.0, pluggy-0.13.1 rootdir: /Users/simon/Dropbox/Development/datasette, configfile: pytest.ini plugins: asyncio-0.14.0, timeout-1.4.2 collected 1 item / 23 errors =========================================================================== ERRORS ===========================================================================
_________ ERROR collecting tests/test_api.py ________
ImportError while importing test module '/Users/simon/Dropbox/Development/datasette/tests/testapi.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/usr/local/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/importlib/init__.py:127: in import_module
return _bootstrap._gcd_import(name[level:], package, level)
tests/test_api.py:1: in <module>
from datasette.plugins import DEFAULT_PLUGINS
datasette/init.py:2: in <module>
from .app import Datasette
datasette/app.py:30: in <module>
from .views.base import DatasetteError, ureg
datasette/views/base.py:12: in <module>
from datasette.plugins import pm
datasette/plugins.py:26: in <module>
mod = importlib.import_module(plugin)
/usr/local/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/importlib/init.py:127: in import_module
return _bootstrap._gcd_import(name[level:], package, level)
datasette/publish/heroku.py:2: in <module>
from datasette import hookimpl
E ImportError: cannot import name 'hookimpl' from partially initialized module 'datasette' (most likely due to a circular import) (/Users/simon/Dropbox/Development/datasette/datasette/init.py)
all = [ "actor_matches_allow", "hookimpl", "hookspec", "QueryInterrupted", "Forbidden", "NotFound", "Response", "Datasette", ] ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Simplify imports of common classes 688622148 | |
683355598 | https://github.com/simonw/datasette/issues/957#issuecomment-683355598 | https://api.github.com/repos/simonw/datasette/issues/957 | MDEyOklzc3VlQ29tbWVudDY4MzM1NTU5OA== | simonw 9599 | 2020-08-29T23:55:10Z | 2020-08-29T23:55:34Z | OWNER | Of these I think I'm going to promote the following to being importable directly
All of the rest are infrequently used enough (or clearly named enough) that I'm happy to leave them as-is. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Simplify imports of common classes 688622148 | |
683355508 | https://github.com/simonw/datasette/issues/957#issuecomment-683355508 | https://api.github.com/repos/simonw/datasette/issues/957 | MDEyOklzc3VlQ29tbWVudDY4MzM1NTUwOA== | simonw 9599 | 2020-08-29T23:54:01Z | 2020-08-29T23:54:01Z | OWNER | Reviewing https://github.com/search?q=user%3Asimonw+%22from+datasette%22&type=Code I spotted these others: ```python Various:from datasette.utils import path_with_replaced_args from datasette.plugins import pm from datasette.utils import QueryInterrupted from datasette.utils.asgi import Response, Forbidden, NotFound datasette-publish-vercel:from datasette.publish.common import ( add_common_publish_arguments_and_options, fail_if_publish_binary_not_installed ) from datasette.utils import temporary_docker_directory datasette-insertfrom datasette.utils import actor_matches_allow, sqlite3 obsolete: russian-ira-facebook-ads-datasettefrom datasette.utils import TableFilter simonw/museumsfrom datasette.utils.asgi import asgi_send datasette-mediafrom datasette.utils.asgi import Response, asgi_send_file datasette/tests/plugins/my_plugin.pyfrom datasette.facets import Facet datasette-graphqlfrom datasette.views.table import TableView ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Simplify imports of common classes 688622148 | |
683214102 | https://github.com/simonw/datasette/issues/956#issuecomment-683214102 | https://api.github.com/repos/simonw/datasette/issues/956 | MDEyOklzc3VlQ29tbWVudDY4MzIxNDEwMg== | simonw 9599 | 2020-08-29T01:32:21Z | 2020-08-29T01:32:21Z | OWNER | Maybe the bug here is the double colon? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Push to Docker Hub failed - but it shouldn't run for alpha releases anyway 688427751 | |
683213973 | https://github.com/simonw/datasette/issues/956#issuecomment-683213973 | https://api.github.com/repos/simonw/datasette/issues/956 | MDEyOklzc3VlQ29tbWVudDY4MzIxMzk3Mw== | simonw 9599 | 2020-08-29T01:31:39Z | 2020-08-29T01:31:39Z | OWNER | Here's how the old Travis mechanism worked: https://github.com/simonw/datasette/blob/52eabb019d4051084b21524bd0fd9c2731126985/.travis.yml#L41-L47 So I was assuming that the eqivalent of |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Push to Docker Hub failed - but it shouldn't run for alpha releases anyway 688427751 | |
683212960 | https://github.com/simonw/datasette/issues/956#issuecomment-683212960 | https://api.github.com/repos/simonw/datasette/issues/956 | MDEyOklzc3VlQ29tbWVudDY4MzIxMjk2MA== | simonw 9599 | 2020-08-29T01:25:34Z | 2020-08-29T01:25:34Z | OWNER | So I guess this bit is wrong: https://github.com/simonw/datasette/blob/c36e287d71d68ecb2a45e9808eede15f19f931fb/.github/workflows/publish.yml#L71-L73 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Push to Docker Hub failed - but it shouldn't run for alpha releases anyway 688427751 | |
683212421 | https://github.com/simonw/datasette/issues/956#issuecomment-683212421 | https://api.github.com/repos/simonw/datasette/issues/956 | MDEyOklzc3VlQ29tbWVudDY4MzIxMjQyMQ== | simonw 9599 | 2020-08-29T01:22:23Z | 2020-08-29T01:22:23Z | OWNER | Here's the error message again:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Push to Docker Hub failed - but it shouldn't run for alpha releases anyway 688427751 | |
683212246 | https://github.com/simonw/datasette/issues/956#issuecomment-683212246 | https://api.github.com/repos/simonw/datasette/issues/956 | MDEyOklzc3VlQ29tbWVudDY4MzIxMjI0Ng== | simonw 9599 | 2020-08-29T01:21:26Z | 2020-08-29T01:21:26Z | OWNER | I added this but I have no idea if I got it right or not: https://github.com/simonw/datasette/blob/c36e287d71d68ecb2a45e9808eede15f19f931fb/.github/workflows/publish.yml#L58-L63 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Push to Docker Hub failed - but it shouldn't run for alpha releases anyway 688427751 | |
683189334 | https://github.com/simonw/datasette/issues/955#issuecomment-683189334 | https://api.github.com/repos/simonw/datasette/issues/955 | MDEyOklzc3VlQ29tbWVudDY4MzE4OTMzNA== | simonw 9599 | 2020-08-28T23:30:48Z | 2020-08-28T23:30:48Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release updated datasette-atom and datasette-ics 687711713 | ||
683185861 | https://github.com/simonw/datasette/issues/955#issuecomment-683185861 | https://api.github.com/repos/simonw/datasette/issues/955 | MDEyOklzc3VlQ29tbWVudDY4MzE4NTg2MQ== | simonw 9599 | 2020-08-28T23:17:09Z | 2020-08-28T23:17:09Z | OWNER | I released 0.49a0 which means I can update the main branches of those two plugins - I'll push a release of them once 0.49 is fully shipped. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release updated datasette-atom and datasette-ics 687711713 | |
683180581 | https://github.com/simonw/sqlite-utils/issues/144#issuecomment-683180581 | https://api.github.com/repos/simonw/sqlite-utils/issues/144 | MDEyOklzc3VlQ29tbWVudDY4MzE4MDU4MQ== | simonw 9599 | 2020-08-28T22:57:04Z | 2020-08-28T22:57:04Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Run some tests against numpy 688395275 | ||
683179678 | https://github.com/simonw/sqlite-utils/issues/144#issuecomment-683179678 | https://api.github.com/repos/simonw/sqlite-utils/issues/144 | MDEyOklzc3VlQ29tbWVudDY4MzE3OTY3OA== | simonw 9599 | 2020-08-28T22:53:17Z | 2020-08-28T22:53:17Z | OWNER | I'm going to try doing this as a GitHub Actions test matrix. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Run some tests against numpy 688395275 | |
683178570 | https://github.com/simonw/sqlite-utils/issues/139#issuecomment-683178570 | https://api.github.com/repos/simonw/sqlite-utils/issues/139 | MDEyOklzc3VlQ29tbWVudDY4MzE3ODU3MA== | simonw 9599 | 2020-08-28T22:48:51Z | 2020-08-28T22:48:51Z | OWNER | Thanks @simonwiles, this is now released in 2.16.1: https://sqlite-utils.readthedocs.io/en/stable/changelog.html |
{ "total_count": 2, "+1": 1, "-1": 0, "laugh": 0, "hooray": 1, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
insert_all(..., alter=True) should work for new columns introduced after the first 100 records 686978131 | |
683175491 | https://github.com/simonw/sqlite-utils/issues/143#issuecomment-683175491 | https://api.github.com/repos/simonw/sqlite-utils/issues/143 | MDEyOklzc3VlQ29tbWVudDY4MzE3NTQ5MQ== | simonw 9599 | 2020-08-28T22:37:15Z | 2020-08-28T22:37:15Z | OWNER | I'm going to start running black exclusively in the GitHub Actions workflow, rather than having it run by the unit tests themselves. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Move to GitHub Actions CI 688389933 | |
683173375 | https://github.com/simonw/sqlite-utils/pull/142#issuecomment-683173375 | https://api.github.com/repos/simonw/sqlite-utils/issues/142 | MDEyOklzc3VlQ29tbWVudDY4MzE3MzM3NQ== | simonw 9599 | 2020-08-28T22:29:02Z | 2020-08-28T22:29:02Z | OWNER | Yeah I think that failure is actually because there's a brand new release of Black out and it subtly changes some of the formatting rules. I'll merge this and then run Black against the entire codebase. |
{ "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
insert_all(..., alter=True) should work for new columns introduced after the first 100 records 688386219 | |
683172829 | https://github.com/simonw/sqlite-utils/pull/142#issuecomment-683172829 | https://api.github.com/repos/simonw/sqlite-utils/issues/142 | MDEyOklzc3VlQ29tbWVudDY4MzE3MjgyOQ== | simonw 9599 | 2020-08-28T22:27:05Z | 2020-08-28T22:27:05Z | OWNER | Looks like it failed the "black" formatting test - possibly because there's a new release if black out. I'm going to merge despite that failure. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
insert_all(..., alter=True) should work for new columns introduced after the first 100 records 688386219 | |
683172082 | https://github.com/simonw/sqlite-utils/pull/142#issuecomment-683172082 | https://api.github.com/repos/simonw/sqlite-utils/issues/142 | MDEyOklzc3VlQ29tbWVudDY4MzE3MjA4Mg== | simonw 9599 | 2020-08-28T22:24:25Z | 2020-08-28T22:24:25Z | OWNER | Thanks very much! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
insert_all(..., alter=True) should work for new columns introduced after the first 100 records 688386219 | |
683146200 | https://github.com/simonw/sqlite-utils/issues/119#issuecomment-683146200 | https://api.github.com/repos/simonw/sqlite-utils/issues/119 | MDEyOklzc3VlQ29tbWVudDY4MzE0NjIwMA== | simonw 9599 | 2020-08-28T21:05:37Z | 2020-08-28T21:05:37Z | OWNER | Maybe use |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ability to remove a foreign key 652700770 | |
682771226 | https://github.com/simonw/sqlite-utils/issues/139#issuecomment-682771226 | https://api.github.com/repos/simonw/sqlite-utils/issues/139 | MDEyOklzc3VlQ29tbWVudDY4Mjc3MTIyNg== | simonw 9599 | 2020-08-28T15:57:42Z | 2020-08-28T15:57:42Z | OWNER | That pull request should update this section of the documentation too:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
insert_all(..., alter=True) should work for new columns introduced after the first 100 records 686978131 | |
682762911 | https://github.com/simonw/sqlite-utils/issues/139#issuecomment-682762911 | https://api.github.com/repos/simonw/sqlite-utils/issues/139 | MDEyOklzc3VlQ29tbWVudDY4Mjc2MjkxMQ== | simonw 9599 | 2020-08-28T15:54:57Z | 2020-08-28T15:55:20Z | OWNER | Here's a suggested test update: ```diff diff --git a/sqlite_utils/db.py b/sqlite_utils/db.py index a8791c3..12fa2f2 100644 --- a/sqlite_utils/db.py +++ b/sqlite_utils/db.py @@ -1074,6 +1074,13 @@ class Table(Queryable): all_columns = list(sorted(all_columns)) if hash_id: all_columns.insert(0, hash_id) + else: + all_columns += [ + column + for record in chunk + for column in record + if column not in all_columns + ] validate_column_names(all_columns) first = False # values is the list of insert data that is passed to the diff --git a/tests/test_create.py b/tests/test_create.py index a84eb8d..3a7fafc 100644 --- a/tests/test_create.py +++ b/tests/test_create.py @@ -707,13 +707,15 @@ def test_insert_thousands_using_generator(fresh_db): assert 10000 == fresh_db["test"].count -def test_insert_thousands_ignores_extra_columns_after_first_100(fresh_db): +def test_insert_thousands_adds_extra_columns_after_first_100(fresh_db): + # https://github.com/simonw/sqlite-utils/issues/139 fresh_db["test"].insert_all( [{"i": i, "word": "word_{}".format(i)} for i in range(100)] - + [{"i": 101, "extra": "This extra column should cause an exception"}] + + [{"i": 101, "extra": "Should trigger ALTER"}], + alter=True, ) rows = fresh_db.execute_returning_dicts("select * from test where i = 101") - assert [{"i": 101, "word": None}] == rows + assert [{"i": 101, "word": None, "extra": "Should trigger ALTER"}] == rows def test_insert_ignore(fresh_db): ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
insert_all(..., alter=True) should work for new columns introduced after the first 100 records 686978131 | |
682312736 | https://github.com/simonw/datasette/issues/954#issuecomment-682312736 | https://api.github.com/repos/simonw/datasette/issues/954 | MDEyOklzc3VlQ29tbWVudDY4MjMxMjczNg== | simonw 9599 | 2020-08-28T04:05:01Z | 2020-08-28T04:05:10Z | OWNER |
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Remove old register_output_renderer dict mechanism in Datasette 1.0 687694947 | |
682312494 | https://github.com/simonw/datasette/issues/953#issuecomment-682312494 | https://api.github.com/repos/simonw/datasette/issues/953 | MDEyOklzc3VlQ29tbWVudDY4MjMxMjQ5NA== | simonw 9599 | 2020-08-28T04:03:56Z | 2020-08-28T04:03:56Z | OWNER | Documentation says that the old dictionary mechanism will be deprecated by 1.0: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
register_output_renderer render function should be able to return a Response 687681018 | |
682285212 | https://github.com/simonw/sqlite-utils/issues/139#issuecomment-682285212 | https://api.github.com/repos/simonw/sqlite-utils/issues/139 | MDEyOklzc3VlQ29tbWVudDY4MjI4NTIxMg== | simonw 9599 | 2020-08-28T02:12:51Z | 2020-08-28T02:12:51Z | OWNER | I'd be happy to accept a PR for this, provided it included updated unit tests that illustrate it working. I think this is a really good improvement. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
insert_all(..., alter=True) should work for new columns introduced after the first 100 records 686978131 | |
682284908 | https://github.com/simonw/sqlite-utils/issues/139#issuecomment-682284908 | https://api.github.com/repos/simonw/sqlite-utils/issues/139 | MDEyOklzc3VlQ29tbWVudDY4MjI4NDkwOA== | simonw 9599 | 2020-08-28T02:11:40Z | 2020-08-28T02:11:40Z | OWNER | This is deliberate behaviour, but I'm not at all attached to it - you're right in pointing out that it's actually pretty unexpected. I'd be happy to change this behaviour so if you pass |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
insert_all(..., alter=True) should work for new columns introduced after the first 100 records 686978131 | |
680374196 | https://github.com/simonw/datasette/issues/950#issuecomment-680374196 | https://api.github.com/repos/simonw/datasette/issues/950 | MDEyOklzc3VlQ29tbWVudDY4MDM3NDE5Ng== | simonw 9599 | 2020-08-26T00:43:50Z | 2020-08-26T00:43:50Z | OWNER | The problem with the term "private" is that it could be confused with the concept of databases that aren't visible to the public due to the permissions system - the ones that are displayed with the padlock icon e.g. on https://datasette-auth-passwords-demo.datasette.io/ So I think "secret" is a better term for these. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Private/secret databases: database files that are only visible to plugins 685806511 | |
680264202 | https://github.com/simonw/datasette/issues/950#issuecomment-680264202 | https://api.github.com/repos/simonw/datasette/issues/950 | MDEyOklzc3VlQ29tbWVudDY4MDI2NDIwMg== | simonw 9599 | 2020-08-25T20:53:13Z | 2020-08-25T20:53:13Z | OWNER | Forcing people to spell out |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Private/secret databases: database files that are only visible to plugins 685806511 | |
680263999 | https://github.com/simonw/datasette/issues/950#issuecomment-680263999 | https://api.github.com/repos/simonw/datasette/issues/950 | MDEyOklzc3VlQ29tbWVudDY4MDI2Mzk5OQ== | simonw 9599 | 2020-08-25T20:52:47Z | 2020-08-25T20:52:47Z | OWNER | Naming challenge: secret databases or private databases? I prefer private. But |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Private/secret databases: database files that are only visible to plugins 685806511 | |
680263427 | https://github.com/simonw/datasette/issues/950#issuecomment-680263427 | https://api.github.com/repos/simonw/datasette/issues/950 | MDEyOklzc3VlQ29tbWVudDY4MDI2MzQyNw== | simonw 9599 | 2020-08-25T20:51:30Z | 2020-08-25T20:52:13Z | OWNER |
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Private/secret databases: database files that are only visible to plugins 685806511 | |
679367931 | https://github.com/simonw/datasette/issues/949#issuecomment-679367931 | https://api.github.com/repos/simonw/datasette/issues/949 | MDEyOklzc3VlQ29tbWVudDY3OTM2NzkzMQ== | simonw 9599 | 2020-08-24T21:09:50Z | 2020-08-24T21:09:50Z | OWNER | I'm attracted to this because of how good GraphiQL is for auto-completing queries. But I realize there's a problem here: GraphQL is designed to be autocomplete-friendly, but SQL is not. If you type |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Try out CodeMirror SQL hints 684961449 | |
679363710 | https://github.com/simonw/datasette/issues/949#issuecomment-679363710 | https://api.github.com/repos/simonw/datasette/issues/949 | MDEyOklzc3VlQ29tbWVudDY3OTM2MzcxMA== | simonw 9599 | 2020-08-24T21:00:43Z | 2020-08-24T21:00:43Z | OWNER | I think this requires three extra files from https://github.com/codemirror/CodeMirror/tree/5.57.0/addon/hint
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Try out CodeMirror SQL hints 684961449 | |
679355426 | https://github.com/simonw/datasette/issues/948#issuecomment-679355426 | https://api.github.com/repos/simonw/datasette/issues/948 | MDEyOklzc3VlQ29tbWVudDY3OTM1NTQyNg== | simonw 9599 | 2020-08-24T20:43:07Z | 2020-08-24T20:43:07Z | OWNER | It would also be interesting to try out the SQL hint mode, which can autocomplete against tables and columns. This demo shows how to configure that: https://codemirror.net/mode/sql/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Upgrade CodeMirror 684925907 | |
679333717 | https://github.com/simonw/datasette/issues/948#issuecomment-679333717 | https://api.github.com/repos/simonw/datasette/issues/948 | MDEyOklzc3VlQ29tbWVudDY3OTMzMzcxNw== | simonw 9599 | 2020-08-24T19:55:59Z | 2020-08-24T19:55:59Z | OWNER | CodeMirror 6 is in pre-release at the moment and is a complete rewrite. I'll stick with the 5.x series for now. https://github.com/codemirror/codemirror.next/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Upgrade CodeMirror 684925907 | |
678732667 | https://github.com/simonw/sqlite-utils/issues/138#issuecomment-678732667 | https://api.github.com/repos/simonw/sqlite-utils/issues/138 | MDEyOklzc3VlQ29tbWVudDY3ODczMjY2Nw== | simonw 9599 | 2020-08-23T05:46:10Z | 2020-08-23T05:46:10Z | OWNER | Actually the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
extracts= doesn't configure foreign keys 684118950 | |
678508056 | https://github.com/simonw/sqlite-utils/issues/136#issuecomment-678508056 | https://api.github.com/repos/simonw/sqlite-utils/issues/136 | MDEyOklzc3VlQ29tbWVudDY3ODUwODA1Ng== | simonw 9599 | 2020-08-21T21:13:41Z | 2020-08-21T21:13:41Z | OWNER | The |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
--load-extension=spatialite shortcut option 683812642 | |
678507502 | https://github.com/simonw/sqlite-utils/issues/137#issuecomment-678507502 | https://api.github.com/repos/simonw/sqlite-utils/issues/137 | MDEyOklzc3VlQ29tbWVudDY3ODUwNzUwMg== | simonw 9599 | 2020-08-21T21:13:19Z | 2020-08-21T21:13:19Z | OWNER | Adding |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
--load-extension for other sqlite-utils commands 683830416 | |
678497497 | https://github.com/simonw/sqlite-utils/issues/134#issuecomment-678497497 | https://api.github.com/repos/simonw/sqlite-utils/issues/134 | MDEyOklzc3VlQ29tbWVudDY3ODQ5NzQ5Nw== | simonw 9599 | 2020-08-21T21:06:26Z | 2020-08-21T21:06:26Z | OWNER | Ended up needing two skipIfs: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
--load-extension option for sqlite-utils query 683804172 | |
678480969 | https://github.com/simonw/sqlite-utils/issues/136#issuecomment-678480969 | https://api.github.com/repos/simonw/sqlite-utils/issues/136 | MDEyOklzc3VlQ29tbWVudDY3ODQ4MDk2OQ== | simonw 9599 | 2020-08-21T20:33:45Z | 2020-08-21T20:33:45Z | OWNER | I think this should initialize SpatiaLite against the current database if it has not been initialized already. Relevant code: https://github.com/simonw/shapefile-to-sqlite/blob/e754d0747ca2facf9a7433e2d5d15a6a37a9cf6e/shapefile_to_sqlite/utils.py#L112-L126 ```python def init_spatialite(db, lib): db.conn.enable_load_extension(True) db.conn.load_extension(lib) # Initialize SpatiaLite if not yet initialized if "spatial_ref_sys" in db.table_names(): return db.conn.execute("select InitSpatialMetadata(1)") def ensure_table_has_geometry(db, table, table_srid):
if "geometry" not in db[table].columns_dict:
db.conn.execute(
"SELECT AddGeometryColumn(?, 'geometry', ?, 'GEOMETRY', 2);",
[table, table_srid],
)
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
--load-extension=spatialite shortcut option 683812642 | |
678479741 | https://github.com/simonw/sqlite-utils/issues/135#issuecomment-678479741 | https://api.github.com/repos/simonw/sqlite-utils/issues/135 | MDEyOklzc3VlQ29tbWVudDY3ODQ3OTc0MQ== | simonw 9599 | 2020-08-21T20:30:37Z | 2020-08-21T20:30:37Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Code for finding SpatiaLite in the usual locations 683805434 | ||
678476842 | https://github.com/simonw/sqlite-utils/issues/135#issuecomment-678476842 | https://api.github.com/repos/simonw/sqlite-utils/issues/135 | MDEyOklzc3VlQ29tbWVudDY3ODQ3Njg0Mg== | simonw 9599 | 2020-08-21T20:23:13Z | 2020-08-21T20:23:13Z | OWNER | I'm going to start with just the first two - I'm not convinced I understand the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Code for finding SpatiaLite in the usual locations 683805434 | |
678476338 | https://github.com/simonw/sqlite-utils/issues/134#issuecomment-678476338 | https://api.github.com/repos/simonw/sqlite-utils/issues/134 | MDEyOklzc3VlQ29tbWVudDY3ODQ3NjMzOA== | simonw 9599 | 2020-08-21T20:22:02Z | 2020-08-21T20:22:02Z | OWNER | I think that adds it as |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
--load-extension option for sqlite-utils query 683804172 | |
678475578 | https://github.com/simonw/sqlite-utils/issues/135#issuecomment-678475578 | https://api.github.com/repos/simonw/sqlite-utils/issues/135 | MDEyOklzc3VlQ29tbWVudDY3ODQ3NTU3OA== | simonw 9599 | 2020-08-21T20:20:05Z | 2020-08-21T20:20:05Z | OWNER | https://github.com/simonw/cryptozoology/blob/2ad69168f3b78ebd90a2cbeea8136c9115e2a9b7/build_cryptids_database.py#L16-L22
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Code for finding SpatiaLite in the usual locations 683805434 | |
678474928 | https://github.com/simonw/sqlite-utils/issues/134#issuecomment-678474928 | https://api.github.com/repos/simonw/sqlite-utils/issues/134 | MDEyOklzc3VlQ29tbWVudDY3ODQ3NDkyOA== | simonw 9599 | 2020-08-21T20:18:33Z | 2020-08-21T20:18:33Z | OWNER | This should get me SpatiaLite in the GitHub Actions Ubuntu:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
--load-extension option for sqlite-utils query 683804172 | |
678474018 | https://github.com/simonw/sqlite-utils/issues/134#issuecomment-678474018 | https://api.github.com/repos/simonw/sqlite-utils/issues/134 | MDEyOklzc3VlQ29tbWVudDY3ODQ3NDAxOA== | simonw 9599 | 2020-08-21T20:16:20Z | 2020-08-21T20:16:20Z | OWNER | Trickiest part of this is how to write a test for it. I'll do a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
--load-extension option for sqlite-utils query 683804172 | |
676556377 | https://github.com/simonw/datasette/issues/945#issuecomment-676556377 | https://api.github.com/repos/simonw/datasette/issues/945 | MDEyOklzc3VlQ29tbWVudDY3NjU1NjM3Nw== | simonw 9599 | 2020-08-19T17:21:16Z | 2020-08-19T17:21:16Z | OWNER | Documented here: https://docs.datasette.io/en/latest/plugins.html#installing-plugins |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
datasette install -U for upgrading packages 682005535 | |
675889865 | https://github.com/simonw/datasette/issues/943#issuecomment-675889865 | https://api.github.com/repos/simonw/datasette/issues/943 | MDEyOklzc3VlQ29tbWVudDY3NTg4OTg2NQ== | simonw 9599 | 2020-08-19T06:57:00Z | 2020-08-19T06:57:00Z | OWNER | Maybe |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
await datasette.client.get(path) mechanism for executing internal requests 681375466 | |
675889551 | https://github.com/simonw/datasette/issues/943#issuecomment-675889551 | https://api.github.com/repos/simonw/datasette/issues/943 | MDEyOklzc3VlQ29tbWVudDY3NTg4OTU1MQ== | simonw 9599 | 2020-08-19T06:56:06Z | 2020-08-19T06:56:17Z | OWNER | I'm leaning towards defaulting to JSON as the requested format - you can pass But weird that it's different from the web UI. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
await datasette.client.get(path) mechanism for executing internal requests 681375466 | |
675884980 | https://github.com/simonw/datasette/issues/943#issuecomment-675884980 | https://api.github.com/repos/simonw/datasette/issues/943 | MDEyOklzc3VlQ29tbWVudDY3NTg4NDk4MA== | simonw 9599 | 2020-08-19T06:44:26Z | 2020-08-19T06:44:26Z | OWNER | Need to decide what to do about JSON responses. When called from a template it's likely the intent will be to further loop through the JSON data returned. It would be annoying to have to run Maybe a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
await datasette.client.get(path) mechanism for executing internal requests 681375466 | |
675830678 | https://github.com/simonw/datasette/issues/944#issuecomment-675830678 | https://api.github.com/repos/simonw/datasette/issues/944 | MDEyOklzc3VlQ29tbWVudDY3NTgzMDY3OA== | simonw 9599 | 2020-08-19T03:30:10Z | 2020-08-19T03:30:10Z | OWNER | These templates will need a way to raise a 404 - so that if the template itself is deciding if the page exists (for example using This can imitate the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Path parameters for custom pages 681516976 | |
675829942 | https://github.com/simonw/datasette/issues/944#issuecomment-675829942 | https://api.github.com/repos/simonw/datasette/issues/944 | MDEyOklzc3VlQ29tbWVudDY3NTgyOTk0Mg== | simonw 9599 | 2020-08-19T03:27:25Z | 2020-08-19T03:27:25Z | OWNER | I created a template file called Here's the implementation of that But caching it would be pretty easy - either until the server is restarted or as an in-memory cache for a few seconds. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Path parameters for custom pages 681516976 | |
675788203 | https://github.com/simonw/datasette/issues/943#issuecomment-675788203 | https://api.github.com/repos/simonw/datasette/issues/943 | MDEyOklzc3VlQ29tbWVudDY3NTc4ODIwMw== | simonw 9599 | 2020-08-19T00:46:08Z | 2020-08-19T00:46:23Z | OWNER | Also fun: the inevitable plugin that exposes this to the template language - so Datasette templates can stitch together data from multiple other internal API calls. Fun way to take advantage of |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
await datasette.client.get(path) mechanism for executing internal requests 681375466 | |
675787416 | https://github.com/simonw/datasette/issues/943#issuecomment-675787416 | https://api.github.com/repos/simonw/datasette/issues/943 | MDEyOklzc3VlQ29tbWVudDY3NTc4NzQxNg== | simonw 9599 | 2020-08-19T00:42:38Z | 2020-08-19T00:42:38Z | OWNER | I just realised that this mechanism is kind of like being able to use microservices - make API calls within your application - except that everything runs in the same process against SQLite databases so calls will be lightning fast. It also means that a plugin can add a new internal API to Datasette that's accessible to other plugins by registering a new route with |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
await datasette.client.get(path) mechanism for executing internal requests 681375466 | |
675753114 | https://github.com/simonw/datasette/issues/943#issuecomment-675753114 | https://api.github.com/repos/simonw/datasette/issues/943 | MDEyOklzc3VlQ29tbWVudDY3NTc1MzExNA== | simonw 9599 | 2020-08-18T22:34:55Z | 2020-08-18T22:34:55Z | OWNER | Maybe allow this:
This could cause problems if users ever need to pass literal
Not convinced this is useful - it's a bit unintuitive. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
await datasette.client.get(path) mechanism for executing internal requests 681375466 | |
675752436 | https://github.com/simonw/datasette/issues/943#issuecomment-675752436 | https://api.github.com/repos/simonw/datasette/issues/943 | MDEyOklzc3VlQ29tbWVudDY3NTc1MjQzNg== | simonw 9599 | 2020-08-18T22:32:44Z | 2020-08-18T22:32:44Z | OWNER | One thing to consider here: Datasette's table and database name escaping rules can be a little bit convoluted. If a plugin wants to get back the first five rows of a table, it will need to construct a URL Here's how the It would be an improvement to have this logic abstracted out somewhere and documented so plugins can use it. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
await datasette.client.get(path) mechanism for executing internal requests 681375466 | |
675751719 | https://github.com/simonw/datasette/issues/943#issuecomment-675751719 | https://api.github.com/repos/simonw/datasette/issues/943 | MDEyOklzc3VlQ29tbWVudDY3NTc1MTcxOQ== | simonw 9599 | 2020-08-18T22:30:27Z | 2020-08-18T22:30:27Z | OWNER | Right now calling I think a single |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
await datasette.client.get(path) mechanism for executing internal requests 681375466 | |
675751136 | https://github.com/simonw/datasette/issues/915#issuecomment-675751136 | https://api.github.com/repos/simonw/datasette/issues/915 | MDEyOklzc3VlQ29tbWVudDY3NTc1MTEzNg== | simonw 9599 | 2020-08-18T22:28:36Z | 2020-08-18T22:28:36Z | OWNER | I'm closing this in favour of an internal requests mechanism in #943. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Refactor TableView class so things like datasette-graphql can reuse the logic 671763164 | |
675750845 | https://github.com/simonw/datasette/issues/943#issuecomment-675750845 | https://api.github.com/repos/simonw/datasette/issues/943 | MDEyOklzc3VlQ29tbWVudDY3NTc1MDg0NQ== | simonw 9599 | 2020-08-18T22:27:43Z | 2020-08-18T22:27:43Z | OWNER | What about authentication checks etc? Won't they run twice? I think that's OK too, in fact it's desirable: think of the case of |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
await datasette.client.get(path) mechanism for executing internal requests 681375466 | |
675750382 | https://github.com/simonw/datasette/issues/943#issuecomment-675750382 | https://api.github.com/repos/simonw/datasette/issues/943 | MDEyOklzc3VlQ29tbWVudDY3NTc1MDM4Mg== | simonw 9599 | 2020-08-18T22:26:15Z | 2020-08-18T22:26:15Z | OWNER | Should internal requests executed in this way be handled by plugins that used the Hard to be sure one way or the other. I'm worried about logging middleware triggering twice - but actually anyone doing serious logging of their Datasette instance is probably doing it in a different layer (uvicorn logs or nginx proxy or whatever) so they wouldn't be affected. There aren't any ASGI logging middlewares out there that I've seen. Also: if you run into a situation where your stuff is breaking because So I think it DOES execute |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
await datasette.client.get(path) mechanism for executing internal requests 681375466 | |
675749319 | https://github.com/simonw/datasette/issues/943#issuecomment-675749319 | https://api.github.com/repos/simonw/datasette/issues/943 | MDEyOklzc3VlQ29tbWVudDY3NTc0OTMxOQ== | simonw 9599 | 2020-08-18T22:23:01Z | 2020-08-18T22:23:01Z | OWNER | Actually no -
(I'll probably add |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
await datasette.client.get(path) mechanism for executing internal requests 681375466 | |
675749076 | https://github.com/simonw/datasette/issues/943#issuecomment-675749076 | https://api.github.com/repos/simonw/datasette/issues/943 | MDEyOklzc3VlQ29tbWVudDY3NTc0OTA3Ng== | simonw 9599 | 2020-08-18T22:22:21Z | 2020-08-18T22:22:21Z | OWNER | Alternative name possibilities:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
await datasette.client.get(path) mechanism for executing internal requests 681375466 | |
675748573 | https://github.com/simonw/datasette/issues/943#issuecomment-675748573 | https://api.github.com/repos/simonw/datasette/issues/943 | MDEyOklzc3VlQ29tbWVudDY3NTc0ODU3Mw== | simonw 9599 | 2020-08-18T22:20:52Z | 2020-08-18T22:20:52Z | OWNER | Should it default to treating things as if they had the I think I'm OK with people having to add |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
await datasette.client.get(path) mechanism for executing internal requests 681375466 | |
675747878 | https://github.com/simonw/datasette/issues/943#issuecomment-675747878 | https://api.github.com/repos/simonw/datasette/issues/943 | MDEyOklzc3VlQ29tbWVudDY3NTc0Nzg3OA== | simonw 9599 | 2020-08-18T22:18:46Z | 2020-08-18T22:19:12Z | OWNER | Could be as simple as Bit weird calling it |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
await datasette.client.get(path) mechanism for executing internal requests 681375466 | |
675746544 | https://github.com/simonw/datasette/issues/915#issuecomment-675746544 | https://api.github.com/repos/simonw/datasette/issues/915 | MDEyOklzc3VlQ29tbWVudDY3NTc0NjU0NA== | simonw 9599 | 2020-08-18T22:14:41Z | 2020-08-18T22:14:41Z | OWNER | I'm actually pretty happy with how I just did a horrible hack here that simulates an internal request, so supporting them as a feature would definitely make sense: https://github.com/natbat/tidepools_near_me/commit/ec102c6da5a5d86f17628740d90b6365b671b5e1 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Refactor TableView class so things like datasette-graphql can reuse the logic 671763164 | |
675725464 | https://github.com/simonw/datasette/issues/268#issuecomment-675725464 | https://api.github.com/repos/simonw/datasette/issues/268 | MDEyOklzc3VlQ29tbWVudDY3NTcyNTQ2NA== | simonw 9599 | 2020-08-18T21:18:07Z | 2020-08-18T21:18:35Z | OWNER | I want this on the table page - but that means that the table page will need to run a slightly more complex query since it needs access to a BUT... that join needs to be constructed in a way that keeps existing filters, Here's a prototype using SQLite CTEs: https://register-of-members-interests.datasettes.com/regmem?sql=with+original+as+%28select+rowid%2C++from+items%29%0D%0Aselect%0D%0A++original.%2C%0D%0A++items_fts.rank+as+items_fts_rank%0D%0Afrom%0D%0A++original+join+items_fts+on+original.rowid+%3D+items_fts.rowid%0D%0Awhere%0D%0A++items_fts+match+escape_fts%28%3Asearch%29%0D%0Aorder+by+items_fts_rank+desc+limit+10&search=hotel
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Mechanism for ranking results from SQLite full-text search 323718842 | |
675720040 | https://github.com/simonw/datasette/issues/942#issuecomment-675720040 | https://api.github.com/repos/simonw/datasette/issues/942 | MDEyOklzc3VlQ29tbWVudDY3NTcyMDA0MA== | simonw 9599 | 2020-08-18T21:05:24Z | 2020-08-18T21:05:24Z | OWNER | Is Alternative names:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support column descriptions in metadata.json 681334912 | |
675718593 | https://github.com/simonw/datasette/issues/942#issuecomment-675718593 | https://api.github.com/repos/simonw/datasette/issues/942 | MDEyOklzc3VlQ29tbWVudDY3NTcxODU5Mw== | simonw 9599 | 2020-08-18T21:02:11Z | 2020-08-18T21:02:24Z | OWNER | Easiest solution: if you provide column metadata it gets displayed above the table, something like on https://fivethirtyeight.datasettes.com/fivethirtyeight/antiquities-act%2Factions_under_antiquities_act HTML |
{ "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support column descriptions in metadata.json 681334912 | |
675715472 | https://github.com/simonw/datasette/issues/942#issuecomment-675715472 | https://api.github.com/repos/simonw/datasette/issues/942 | MDEyOklzc3VlQ29tbWVudDY3NTcxNTQ3Mg== | simonw 9599 | 2020-08-18T20:55:02Z | 2020-08-18T20:55:02Z | OWNER | Could display these as tooltips on icons something like this (from the experimental This would need to take accessibility into account, and would need a different display for the mobile web layout. Need to consider how it will interact with the column menu suggested in #690. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support column descriptions in metadata.json 681334912 | |
675610275 | https://github.com/simonw/datasette/issues/873#issuecomment-675610275 | https://api.github.com/repos/simonw/datasette/issues/873 | MDEyOklzc3VlQ29tbWVudDY3NTYxMDI3NQ== | simonw 9599 | 2020-08-18T17:24:05Z | 2020-08-18T17:26:10Z | OWNER | Maybe I can do this with ASGI after all. Here's the output of |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"datasette -p 0 --root" gives the wrong URL 647095487 | |
675609109 | https://github.com/simonw/datasette/issues/873#issuecomment-675609109 | https://api.github.com/repos/simonw/datasette/issues/873 | MDEyOklzc3VlQ29tbWVudDY3NTYwOTEwOQ== | simonw 9599 | 2020-08-18T17:21:51Z | 2020-08-18T17:21:51Z | OWNER | Asked about this on the encode gitter here: https://gitter.im/encode/community?at=5f3c0dcaa8c17801765940c0 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"datasette -p 0 --root" gives the wrong URL 647095487 | |
675538586 | https://github.com/simonw/datasette/issues/940#issuecomment-675538586 | https://api.github.com/repos/simonw/datasette/issues/940 | MDEyOklzc3VlQ29tbWVudDY3NTUzODU4Ng== | simonw 9599 | 2020-08-18T15:11:36Z | 2020-08-18T15:11:36Z | OWNER | I tested this new publish pattern (running the tests in parallel before the deploy step) on |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Move CI to GitHub Issues 679808124 | |
675253373 | https://github.com/simonw/datasette/issues/940#issuecomment-675253373 | https://api.github.com/repos/simonw/datasette/issues/940 | MDEyOklzc3VlQ29tbWVudDY3NTI1MzM3Mw== | simonw 9599 | 2020-08-18T05:10:17Z | 2020-08-18T05:10:17Z | OWNER | I'll close this after the next release successfully goes out. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Move CI to GitHub Issues 679808124 | |
675251613 | https://github.com/simonw/datasette/issues/940#issuecomment-675251613 | https://api.github.com/repos/simonw/datasette/issues/940 | MDEyOklzc3VlQ29tbWVudDY3NTI1MTYxMw== | simonw 9599 | 2020-08-18T05:05:15Z | 2020-08-18T05:05:15Z | OWNER | I think this is ready. I'll only know for sure the first time I push a release through it though! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Move CI to GitHub Issues 679808124 | |
674590583 | https://github.com/simonw/datasette/issues/940#issuecomment-674590583 | https://api.github.com/repos/simonw/datasette/issues/940 | MDEyOklzc3VlQ29tbWVudDY3NDU5MDU4Mw== | simonw 9599 | 2020-08-16T23:15:51Z | 2020-08-18T05:04:43Z | OWNER | This example of jobs depending on each other and sharing data via artifacts looks relevant: https://docs.github.com/en/actions/configuring-and-managing-workflows/persisting-workflow-data-using-artifacts#passing-data-between-jobs-in-a-workflow |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Move CI to GitHub Issues 679808124 | |
675250280 | https://github.com/simonw/datasette/issues/940#issuecomment-675250280 | https://api.github.com/repos/simonw/datasette/issues/940 | MDEyOklzc3VlQ29tbWVudDY3NTI1MDI4MA== | simonw 9599 | 2020-08-18T05:01:34Z | 2020-08-18T05:01:42Z | OWNER | I think |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Move CI to GitHub Issues 679808124 | |
674589472 | https://github.com/simonw/datasette/issues/940#issuecomment-674589472 | https://api.github.com/repos/simonw/datasette/issues/940 | MDEyOklzc3VlQ29tbWVudDY3NDU4OTQ3Mg== | simonw 9599 | 2020-08-16T23:05:57Z | 2020-08-16T23:05:57Z | OWNER | When I figure this out I'll update the https://github.com/simonw/datasette-plugin/blob/main/datasette-%7B%7Bcookiecutter.hyphenated%7D%7D/.github/workflows/publish.yml default workflow to do this - right now it runs the tests once on just a single version of Python as part of the package deploy to PyPI step. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Move CI to GitHub Issues 679808124 | |
674589321 | https://github.com/simonw/datasette/issues/940#issuecomment-674589321 | https://api.github.com/repos/simonw/datasette/issues/940 | MDEyOklzc3VlQ29tbWVudDY3NDU4OTMyMQ== | simonw 9599 | 2020-08-16T23:04:34Z | 2020-08-16T23:04:34Z | OWNER |
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Move CI to GitHub Issues 679808124 | |
674589035 | https://github.com/simonw/datasette/issues/940#issuecomment-674589035 | https://api.github.com/repos/simonw/datasette/issues/940 | MDEyOklzc3VlQ29tbWVudDY3NDU4OTAzNQ== | simonw 9599 | 2020-08-16T23:02:23Z | 2020-08-16T23:02:23Z | OWNER | I'd like to set these up as different workflows that depend on each other, if that's possible. I want to start three test runs in parallel (on three different Python versions), then if all three pass kick off the PyPI push (without running more tests), then if that passes do the Docker build and push. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Move CI to GitHub Issues 679808124 | |
674578388 | https://github.com/simonw/datasette/issues/914#issuecomment-674578388 | https://api.github.com/repos/simonw/datasette/issues/914 | MDEyOklzc3VlQ29tbWVudDY3NDU3ODM4OA== | simonw 9599 | 2020-08-16T21:10:27Z | 2020-08-16T21:10:27Z | OWNER | Demo of the fix: https://latest.datasette.io/fixtures/binary_data.json?_sort_desc=data&_shape=array&_nl=on
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"Object of type bytes is not JSON serializable" for _nl=on 671056788 | |
674566618 | https://github.com/simonw/datasette/issues/940#issuecomment-674566618 | https://api.github.com/repos/simonw/datasette/issues/940 | MDEyOklzc3VlQ29tbWVudDY3NDU2NjYxOA== | simonw 9599 | 2020-08-16T19:20:58Z | 2020-08-16T19:20:58Z | OWNER | I need to figure out how to build and push the Docker image on releases. Here's the Travis code for that: https://github.com/simonw/datasette/blob/52eabb019d4051084b21524bd0fd9c2731126985/.travis.yml#L38-L47 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Move CI to GitHub Issues 679808124 | |
674558631 | https://github.com/simonw/datasette/issues/938#issuecomment-674558631 | https://api.github.com/repos/simonw/datasette/issues/938 | MDEyOklzc3VlQ29tbWVudDY3NDU1ODYzMQ== | simonw 9599 | 2020-08-16T18:10:23Z | 2020-08-16T18:10:23Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Pass columns to extra CSS/JS/etc plugin hooks 679700269 | ||
674551826 | https://github.com/simonw/datasette/issues/938#issuecomment-674551826 | https://api.github.com/repos/simonw/datasette/issues/938 | MDEyOklzc3VlQ29tbWVudDY3NDU1MTgyNg== | simonw 9599 | 2020-08-16T17:07:57Z | 2020-08-16T17:07:57Z | OWNER | extra_tenplate_vars should he documented first and should be the only one to document the arguments and the async return feature. Others should refer back to it rather than duplicating that. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Pass columns to extra CSS/JS/etc plugin hooks 679700269 | |
674548163 | https://github.com/simonw/datasette/issues/939#issuecomment-674548163 | https://api.github.com/repos/simonw/datasette/issues/939 | MDEyOklzc3VlQ29tbWVudDY3NDU0ODE2Mw== | simonw 9599 | 2020-08-16T16:34:30Z | 2020-08-16T16:34:30Z | OWNER | Docs also need to note that |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
extra_ plugin hooks should take the same arguments 679779797 | |
674547811 | https://github.com/simonw/datasette/issues/939#issuecomment-674547811 | https://api.github.com/repos/simonw/datasette/issues/939 | MDEyOklzc3VlQ29tbWVudDY3NDU0NzgxMQ== | simonw 9599 | 2020-08-16T16:31:20Z | 2020-08-16T16:31:20Z | OWNER | And the docs need to be updated too. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
extra_ plugin hooks should take the same arguments 679779797 |
Advanced export
JSON shape: default, array, newline-delimited, object
CREATE TABLE [issue_comments] ( [html_url] TEXT, [issue_url] TEXT, [id] INTEGER PRIMARY KEY, [node_id] TEXT, [user] INTEGER REFERENCES [users]([id]), [created_at] TEXT, [updated_at] TEXT, [author_association] TEXT, [body] TEXT, [reactions] TEXT, [issue] INTEGER REFERENCES [issues]([id]) , [performed_via_github_app] TEXT); CREATE INDEX [idx_issue_comments_issue] ON [issue_comments] ([issue]); CREATE INDEX [idx_issue_comments_user] ON [issue_comments] ([user]);
issue >30