home / github

Menu
  • Search all tables
  • GraphQL API

issue_comments

Table actions
  • GraphQL API for issue_comments

8 rows where "created_at" is on date 2022-10-30 and 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 8

issue 1

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

author_association 1

  • OWNER 8
id html_url issue_url node_id user created_at updated_at ▲ author_association body reactions issue performed_via_github_app
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 44.303ms · About: github-to-sqlite