home / github

Menu
  • Search all tables
  • GraphQL API

issue_comments

Table actions
  • GraphQL API for issue_comments

11 rows where issue = 1428630253 sorted by updated_at descending

✖
✖

✎ View and edit SQL

This data as json, CSV (advanced)

Suggested facets: created_at (date), updated_at (date)

user 1

  • simonw 11

issue 1

  • Ensure insert API has good tests for rowid and compound primark key tables · 11 ✖

author_association 1

  • OWNER 11
id html_url issue_url node_id user created_at updated_at ▲ author_association body reactions issue performed_via_github_app
1298919552 https://github.com/simonw/datasette/issues/1873#issuecomment-1298919552 https://api.github.com/repos/simonw/datasette/issues/1873 IC_kwDOBm6k_c5Na_CA simonw 9599 2022-11-01T18:11:27Z 2022-11-01T18:11:27Z OWNER

I forgot to document ignore and replace. Also I need to add tests that cover:

  • Forgetting to include a primary key on a non-autoincrement table
  • Compound primary keys
  • Rowid only tables with and without rowid specified

I think my validation logic here will get caught out by the fact that rowid does not show up as a valid column name: https://github.com/simonw/datasette/blob/9bec7c38eb93cde5afb16df9bdd96aea2a5b0459/datasette/views/table.py#L1151-L1160

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ensure insert API has good tests for rowid and compound primark key tables 1428630253  
1298905135 https://github.com/simonw/datasette/issues/1873#issuecomment-1298905135 https://api.github.com/repos/simonw/datasette/issues/1873 IC_kwDOBm6k_c5Na7gv simonw 9599 2022-11-01T17:59:59Z 2022-11-01T17:59:59Z OWNER

It's a bit surprising that you can send "ignore": true, "return_rows": true and the returned "inserted" key will list rows that were NOT inserted (since they were ignored).

Three options:

  1. Ignore that and document it
  2. Fix it so "inserted" only returns rows that were actually inserted (bit tricky)
  3. Change the name of "inserted" to something else

I'm picking 3 - I'm going to change it to be called "rows" instead.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ensure insert API has good tests for rowid and compound primark key tables 1428630253  
1298885451 https://github.com/simonw/datasette/issues/1873#issuecomment-1298885451 https://api.github.com/repos/simonw/datasette/issues/1873 IC_kwDOBm6k_c5Na2tL simonw 9599 2022-11-01T17:42:20Z 2022-11-01T17:42:20Z OWNER

Design decision: json { "rows": [{"id": 1, "title": "The title"}], "ignore": true } Or "replace": true.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ensure insert API has good tests for rowid and compound primark key tables 1428630253  
1296343716 https://github.com/simonw/datasette/issues/1873#issuecomment-1296343716 https://api.github.com/repos/simonw/datasette/issues/1873 IC_kwDOBm6k_c5NRKKk simonw 9599 2022-10-30T20:24:55Z 2022-10-30T20:24:55Z OWNER

I think the key feature I need here is going to be the equivalent of ignore=True and replace=True for dealing with primary key collisions, see https://sqlite-utils.datasette.io/en/stable/reference.html#sqlite_utils.db.Table.insert

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ensure insert API has good tests for rowid and compound primark key tables 1428630253  
1296343317 https://github.com/simonw/datasette/issues/1873#issuecomment-1296343317 https://api.github.com/repos/simonw/datasette/issues/1873 IC_kwDOBm6k_c5NRKEV simonw 9599 2022-10-30T20:22:40Z 2022-10-30T20:22:40Z OWNER

So maybe they're not actually worth worrying about separately, because they are guaranteed to have a primary key set.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ensure insert API has good tests for rowid and compound primark key tables 1428630253  
1296343173 https://github.com/simonw/datasette/issues/1873#issuecomment-1296343173 https://api.github.com/repos/simonw/datasette/issues/1873 IC_kwDOBm6k_c5NRKCF simonw 9599 2022-10-30T20:21:54Z 2022-10-30T20:22:20Z OWNER

One last case to consider: WITHOUT ROWID tables.

https://www.sqlite.org/withoutrowid.html

By default, every row in SQLite has a special column, usually called the "rowid", that uniquely identifies that row within the table. However if the phrase "WITHOUT ROWID" is added to the end of a CREATE TABLE statement, then the special "rowid" column is omitted. There are sometimes space and performance advantages to omitting the rowid.

...

Every WITHOUT ROWID table must have a PRIMARY KEY. An error is raised if a CREATE TABLE statement with the WITHOUT ROWID clause lacks a PRIMARY KEY.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ensure insert API has good tests for rowid and compound primark key tables 1428630253  
1296343014 https://github.com/simonw/datasette/issues/1873#issuecomment-1296343014 https://api.github.com/repos/simonw/datasette/issues/1873 IC_kwDOBm6k_c5NRJ_m simonw 9599 2022-10-30T20:21:01Z 2022-10-30T20:21:01Z OWNER

Actually, for simplicity I'm going to say that you can always set the primary key, even for auto-incrementing primary key columns... but you cannot set it on pure rowid columns.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ensure insert API has good tests for rowid and compound primark key tables 1428630253  
1296342814 https://github.com/simonw/datasette/issues/1873#issuecomment-1296342814 https://api.github.com/repos/simonw/datasette/issues/1873 IC_kwDOBm6k_c5NRJ8e simonw 9599 2022-10-30T20:20:05Z 2022-10-30T20:20:05Z OWNER

Some notes on what Datasette does already

https://latest.datasette.io/fixtures/tags.json?_shape=array returns: json [ { "tag": "canine" }, { "tag": "feline" } ] That table is defined like this: sql CREATE TABLE tags ( tag TEXT PRIMARY KEY ); Here's a rowid table with no explicit primary key: https://latest.datasette.io/fixtures/binary_data

https://latest.datasette.io/fixtures/binary_data.json?_shape=array json [ { "rowid": 1, "data": { "$base64": true, "encoded": "FRwCx60F/g==" } }, { "rowid": 2, "data": { "$base64": true, "encoded": "FRwDx60F/g==" } }, { "rowid": 3, "data": null } ] sql CREATE TABLE binary_data ( data BLOB ); https://latest.datasette.io/fixtures/simple_primary_key has a text primary key:

https://latest.datasette.io/fixtures/simple_primary_key.json?_shape=array json [ { "id": "1", "content": "hello" }, { "id": "2", "content": "world" }, { "id": "3", "content": "" }, { "id": "4", "content": "RENDER_CELL_DEMO" }, { "id": "5", "content": "RENDER_CELL_ASYNC" } ] sql CREATE TABLE simple_primary_key ( id varchar(30) primary key, content text ); https://latest.datasette.io/fixtures/compound_primary_key is a compound primary key.

https://latest.datasette.io/fixtures/compound_primary_key.json?_shape=array json [ { "pk1": "a", "pk2": "b", "content": "c" }, { "pk1": "a/b", "pk2": ".c-d", "content": "c" } ] sql CREATE TABLE compound_primary_key ( pk1 varchar(30), pk2 varchar(30), content text, PRIMARY KEY (pk1, pk2) );

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ensure insert API has good tests for rowid and compound primark key tables 1428630253  
1296341469 https://github.com/simonw/datasette/issues/1873#issuecomment-1296341469 https://api.github.com/repos/simonw/datasette/issues/1873 IC_kwDOBm6k_c5NRJnd simonw 9599 2022-10-30T20:13:50Z 2022-10-30T20:13:50Z OWNER

I checked and SQLite itself does allow you to set the rowid on that kind of table - it then increments from whatever you inserted: % sqlite3 /tmp/t.db SQLite version 3.39.4 2022-09-07 20:51:41 Enter ".help" for usage hints. sqlite> create table docs (title text); sqlite> insert into docs (title) values ('one'); sqlite> select rowid, title from docs; 1|one sqlite> insert into docs (rowid, title) values (3, 'three'); sqlite> select rowid, title from docs; 1|one 3|three sqlite> insert into docs (title) values ('another'); sqlite> select rowid, title from docs; 1|one 3|three 4|another

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ensure insert API has good tests for rowid and compound primark key tables 1428630253  
1296341055 https://github.com/simonw/datasette/issues/1873#issuecomment-1296341055 https://api.github.com/repos/simonw/datasette/issues/1873 IC_kwDOBm6k_c5NRJg_ simonw 9599 2022-10-30T20:11:47Z 2022-10-30T20:12:30Z OWNER

If a table has an auto-incrementing primary key, should you be allowed to insert records with an explicit key into it?

I'm torn on this one. It's something you can do with direct database access, but it's something I very rarely want to do.

I'm inclined to disallow it and say that if you want that you can get it using a writable canned query instead.

Likewise, I'm not going to provide a way to set the rowid explicitly on a freshly inserted row.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ensure insert API has good tests for rowid and compound primark key tables 1428630253  
1296131681 https://github.com/simonw/datasette/issues/1873#issuecomment-1296131681 https://api.github.com/repos/simonw/datasette/issues/1873 IC_kwDOBm6k_c5NQWZh simonw 9599 2022-10-30T06:27:12Z 2022-10-30T06:27:12Z OWNER

Relevant TODO: https://github.com/simonw/datasette/blob/c35859ae3df163406f1a1895ccf9803e933b2d8e/datasette/views/table.py#L1131-L1135

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ensure insert API has good tests for rowid and compound primark key tables 1428630253  

Advanced export

JSON shape: default, array, newline-delimited, object

CSV options:

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]);
Powered by Datasette · Queries took 23.65ms · About: github-to-sqlite
  • Sort ascending
  • Sort descending
  • Facet by this
  • Hide this column
  • Show all columns
  • Show not-blank rows