home / github

Menu
  • Search all tables
  • GraphQL API

issue_comments

Table actions
  • GraphQL API for issue_comments

15 rows where issue = 521868864 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 15

issue 1

  • The ".upsert()" method is misnamed · 15 ✖

author_association 1

  • OWNER 15
id html_url issue_url node_id user created_at updated_at ▲ author_association body reactions issue performed_via_github_app
569844426 https://github.com/simonw/sqlite-utils/issues/66#issuecomment-569844426 https://api.github.com/repos/simonw/sqlite-utils/issues/66 MDEyOklzc3VlQ29tbWVudDU2OTg0NDQyNg== simonw 9599 2019-12-31T01:30:20Z 2019-12-31T01:30:20Z OWNER

I shipped 2.0 - release notes here: https://sqlite-utils.readthedocs.io/en/stable/changelog.html#v2

I also wrote about it on my blog: https://simonwillison.net/2019/Dec/30/sqlite-utils-2/

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
The ".upsert()" method is misnamed 521868864  
569588216 https://github.com/simonw/sqlite-utils/issues/66#issuecomment-569588216 https://api.github.com/repos/simonw/sqlite-utils/issues/66 MDEyOklzc3VlQ29tbWVudDU2OTU4ODIxNg== simonw 9599 2019-12-30T05:31:45Z 2019-12-30T05:31:45Z OWNER

Last step: update changelog and ship 2.0. Then I can close this issue.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
The ".upsert()" method is misnamed 521868864  
569226620 https://github.com/simonw/sqlite-utils/issues/66#issuecomment-569226620 https://api.github.com/repos/simonw/sqlite-utils/issues/66 MDEyOklzc3VlQ29tbWVudDU2OTIyNjYyMA== simonw 9599 2019-12-27T09:05:29Z 2019-12-27T09:05:36Z OWNER

I'm going to start by ignoring the existing upsert entirely and implementing .insert(..., replace=True) and $ sqlite-utils insert --replace. Including updating the tests.

Then I'll figure out how to implement the new .upsert() / $ sqlite-utils upsert.

Then I'll update the documentation, and ship sqlite-utils 2.0.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
The ".upsert()" method is misnamed 521868864  
569131397 https://github.com/simonw/sqlite-utils/issues/66#issuecomment-569131397 https://api.github.com/repos/simonw/sqlite-utils/issues/66 MDEyOklzc3VlQ29tbWVudDU2OTEzMTM5Nw== simonw 9599 2019-12-26T20:49:11Z 2019-12-26T20:49:11Z OWNER

Don't forget to update the documentation. This will be quite an involved task.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
The ".upsert()" method is misnamed 521868864  
555690319 https://github.com/simonw/sqlite-utils/issues/66#issuecomment-555690319 https://api.github.com/repos/simonw/sqlite-utils/issues/66 MDEyOklzc3VlQ29tbWVudDU1NTY5MDMxOQ== simonw 9599 2019-11-19T20:10:17Z 2019-11-19T20:10:17Z OWNER

Thinking about this further: I believe every time I've personally used upsert in the past (either with the Python library or the CLI tool) I've actually wanted the new behaviour, where "upsert" means "update existing record with these changes, or insert a new record if one does not exist".

So I'm happy with upsert doing that, and insert --replace being added as an option that does what upsert does ta the moment.

I'll still ship it as version 2.0 since it's technically a breaking change.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
The ".upsert()" method is misnamed 521868864  
554565198 https://github.com/simonw/sqlite-utils/issues/66#issuecomment-554565198 https://api.github.com/repos/simonw/sqlite-utils/issues/66 MDEyOklzc3VlQ29tbWVudDU1NDU2NTE5OA== simonw 9599 2019-11-15T23:12:28Z 2019-11-15T23:12:28Z OWNER

Urgh this is going to be quite a bit of work, especially in the CLI module which shares an implementation for upsert and insert in a way that looks like it will have to be unwrapped.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
The ".upsert()" method is misnamed 521868864  
553574011 https://github.com/simonw/sqlite-utils/issues/66#issuecomment-553574011 https://api.github.com/repos/simonw/sqlite-utils/issues/66 MDEyOklzc3VlQ29tbWVudDU1MzU3NDAxMQ== simonw 9599 2019-11-13T19:53:45Z 2019-11-13T19:53:45Z OWNER

First step: add a replace=True argument to insert() and insert_all() that does the same thing as the current upsert=True

https://github.com/simonw/sqlite-utils/blob/8dab9fd1ccf571e188eec9ccf606a0c50fccf200/sqlite_utils/db.py#L938-L946

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
The ".upsert()" method is misnamed 521868864  
553540146 https://github.com/simonw/sqlite-utils/issues/66#issuecomment-553540146 https://api.github.com/repos/simonw/sqlite-utils/issues/66 MDEyOklzc3VlQ29tbWVudDU1MzU0MDE0Ng== simonw 9599 2019-11-13T18:33:30Z 2019-11-13T18:33:30Z OWNER

Maybe instead of inventing a new term I should tell people to use .insert(..., replace=True) directly. That matches ignore=True.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
The ".upsert()" method is misnamed 521868864  
553528850 https://github.com/simonw/sqlite-utils/issues/66#issuecomment-553528850 https://api.github.com/repos/simonw/sqlite-utils/issues/66 MDEyOklzc3VlQ29tbWVudDU1MzUyODg1MA== simonw 9599 2019-11-13T18:04:20Z 2019-11-13T18:04:20Z OWNER

This is going to affect the design of the CLI subcommands as well.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
The ".upsert()" method is misnamed 521868864  
553528386 https://github.com/simonw/sqlite-utils/issues/66#issuecomment-553528386 https://api.github.com/repos/simonw/sqlite-utils/issues/66 MDEyOklzc3VlQ29tbWVudDU1MzUyODM4Ng== simonw 9599 2019-11-13T18:03:10Z 2019-11-13T18:03:54Z OWNER

Maybe inplace() (combining "insert" and "replace")?

It could be an alias for .insert(..., replace=True)

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
The ".upsert()" method is misnamed 521868864  
553527384 https://github.com/simonw/sqlite-utils/issues/66#issuecomment-553527384 https://api.github.com/repos/simonw/sqlite-utils/issues/66 MDEyOklzc3VlQ29tbWVudDU1MzUyNzM4NA== simonw 9599 2019-11-13T18:00:41Z 2019-11-13T18:00:41Z OWNER

Is replace() a good name here? It doesn't really convey the idea that a brand new record will be created if there isn't an existing one to replace.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
The ".upsert()" method is misnamed 521868864  
553526685 https://github.com/simonw/sqlite-utils/issues/66#issuecomment-553526685 https://api.github.com/repos/simonw/sqlite-utils/issues/66 MDEyOklzc3VlQ29tbWVudDU1MzUyNjY4NQ== simonw 9599 2019-11-13T17:58:59Z 2019-11-13T17:58:59Z OWNER

This warrants making a backwards compatible change, which means I'll need to bump the major version number and release 2.0.

I'm going to rename the existing upsert() and upsert_all() methods to replace() and replace_all() - then write new upsert() and upsert_all() methods that implement the correct behavior.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
The ".upsert()" method is misnamed 521868864  
553171414 https://github.com/simonw/sqlite-utils/issues/66#issuecomment-553171414 https://api.github.com/repos/simonw/sqlite-utils/issues/66 MDEyOklzc3VlQ29tbWVudDU1MzE3MTQxNA== simonw 9599 2019-11-12T23:52:35Z 2019-11-12T23:52:35Z OWNER

If I do implement the correct definition of .upsert() I think I'll use this pattern, since it works in versions of SQLite prior to 3.24: sql INSERT OR IGNORE INTO book(id) VALUES(1001); UPDATE book SET name = 'Programming' WHERE id = 1001;

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
The ".upsert()" method is misnamed 521868864  
553171011 https://github.com/simonw/sqlite-utils/issues/66#issuecomment-553171011 https://api.github.com/repos/simonw/sqlite-utils/issues/66 MDEyOklzc3VlQ29tbWVudDU1MzE3MTAxMQ== simonw 9599 2019-11-12T23:50:52Z 2019-11-12T23:50:52Z OWNER

Fixing this is going to be a real pain. There's lots of code out there that uses sqlite-utils with the expectation that upsert() behaves as it currently does.

Maybe I need to introduce new terms for both of these different patterns and deprecate the existing .upsert() and .upsert_all() since their behaviour can't be changed?

Or maybe I fix this and ship sqlite-utils 2.0 with a breaking change?

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
The ".upsert()" method is misnamed 521868864  
553170650 https://github.com/simonw/sqlite-utils/issues/66#issuecomment-553170650 https://api.github.com/repos/simonw/sqlite-utils/issues/66 MDEyOklzc3VlQ29tbWVudDU1MzE3MDY1MA== simonw 9599 2019-11-12T23:49:29Z 2019-11-12T23:49:29Z OWNER

This relates to this bug: https://github.com/dogsheep/github-to-sqlite/pull/8#issuecomment-549233778

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
The ".upsert()" method is misnamed 521868864  

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 31.516ms · About: github-to-sqlite
  • Sort ascending
  • Sort descending
  • Facet by this
  • Hide this column
  • Show all columns
  • Show not-blank rows