github
html_url | issue_url | id | node_id | user | created_at | updated_at | author_association | body | reactions | issue | performed_via_github_app |
---|---|---|---|---|---|---|---|---|---|---|---|
https://github.com/simonw/sqlite-utils/issues/411#issuecomment-1065597709 | https://api.github.com/repos/simonw/sqlite-utils/issues/411 | 1065597709 | IC_kwDOCGYnMM4_g7sN | 9599 | 2022-03-11T22:32:43Z | 2022-03-11T22:32:43Z | OWNER | Trying to figure out what that extra field in `table_info` compared to `table_xinfo` is: ``` >>> list(db.query("PRAGMA table_xinfo('t')")) [{'cid': 0, 'name': 'body', 'type': 'TEXT', 'notnull': 0, 'dflt_value': None, 'pk': 0, 'hidden': 0}, {'cid': 1, 'name': 'd', 'type': 'INT', 'notnull': 0, 'dflt_value': None, 'pk': 0, 'hidden': 2}] `` Presumably `hidden` 0 v.s 2 v.s. other values has meaning. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
1160034488 | |
https://github.com/simonw/sqlite-utils/issues/411#issuecomment-1065596417 | https://api.github.com/repos/simonw/sqlite-utils/issues/411 | 1065596417 | IC_kwDOCGYnMM4_g7YB | 9599 | 2022-03-11T22:30:15Z | 2022-03-11T22:30:15Z | OWNER | I tried it out in Jupyter and it works as advertised: <img width="1076" alt="image" src="https://user-images.githubusercontent.com/9599/157980825-b362a162-b774-4fb5-8ec0-a7f539e62bd7.png"> Introspection is a bit weird: there doesn't seem to be a way to introspect generated columns outside of parsing the stored SQL schema for the columns at the moment! And the `.columns` method doesn't return them at all: https://github.com/simonw/sqlite-utils/blob/433813612ff9b4b501739fd7543bef0040dd51fe/sqlite_utils/db.py#L1207-L1213 Here's why: ``` >>> db.execute("PRAGMA table_info('t')").fetchall() [(0, 'body', 'TEXT', 0, None, 0)] >>> db.execute("PRAGMA table_xinfo('t')").fetchall() [(0, 'body', 'TEXT', 0, None, 0, 0), (1, 'd', 'INT', 0, None, 0, 2)] ``` So `table_xinfo()` is needed to get back columns including generated columns: https://www.sqlite.org/pragma.html#pragma_table_xinfo > **PRAGMA** *schema.***table_xinfo(***table-name***);** > > This pragma returns one row for each column in the named table, including [hidden columns](https://www.sqlite.org/vtab.html#hiddencol) in virtual tables. The output is the same as for [PRAGMA table_info](https://www.sqlite.org/pragma.html#pragma_table_info) except that hidden columns are shown rather than being omitted. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
1160034488 | |
https://github.com/simonw/sqlite-utils/issues/411#issuecomment-1065402557 | https://api.github.com/repos/simonw/sqlite-utils/issues/411 | 1065402557 | IC_kwDOCGYnMM4_gMC9 | 9599 | 2022-03-11T19:01:08Z | 2022-03-11T21:42:25Z | OWNER | Just spotted this in https://www.sqlite.org/gencol.html > The only functional difference is that one cannot add new STORED columns using the [ALTER TABLE ADD COLUMN](https://www.sqlite.org/lang_altertable.html#altertabaddcol) command. Only VIRTUAL columns can be added using ALTER TABLE. So to add stored columns to an existing table we would need to use the `.transform()` trick. Which implies that this should actually be a capability of the various `.create()` methods, since transform works by creating a new table with those and then copying across the old data. Here's where `.transform()` calls `.create_table_sql()` under the hood: https://github.com/simonw/sqlite-utils/blob/9388edf57aa15719095e3cf0952c1653cd070c9b/sqlite_utils/db.py#L1627-L1637 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
1160034488 | |
https://github.com/simonw/sqlite-utils/issues/411#issuecomment-1065389386 | https://api.github.com/repos/simonw/sqlite-utils/issues/411 | 1065389386 | IC_kwDOCGYnMM4_gI1K | 9599 | 2022-03-11T18:42:53Z | 2022-03-11T21:40:51Z | OWNER | The Python API could be: ```python db[table_name].add_generated_column("field", str, "json_extract(data, '$.field')", stored=True) ``` | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
1160034488 | |
https://github.com/simonw/sqlite-utils/issues/411#issuecomment-1065458729 | https://api.github.com/repos/simonw/sqlite-utils/issues/411 | 1065458729 | IC_kwDOCGYnMM4_gZwp | 9599 | 2022-03-11T19:58:50Z | 2022-03-11T20:00:25Z | OWNER | I'm coming round to your suggestion to have this as extra arguments to `sqlite-utils add-column` now, especially since you also need to pass a column type. I'd like to come up with syntax for `sqlite-utils create-table` as well. https://sqlite-utils.datasette.io/en/stable/cli-reference.html#create-table Maybe extra `--generated-stored colname expression` (and `--generated`) options would work there. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
1160034488 | |
https://github.com/simonw/sqlite-utils/issues/411#issuecomment-1065440445 | https://api.github.com/repos/simonw/sqlite-utils/issues/411 | 1065440445 | IC_kwDOCGYnMM4_gVS9 | 9599 | 2022-03-11T19:52:15Z | 2022-03-11T19:52:15Z | OWNER | Two new parameters to `.create_table()` and friends: - `generated={...}` - generated column definitions - `generated_stored={...}` generated stored column definitions These columns will be added at the end of the table, but you can use the `column_order=` parameter to apply a different order. | { "total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 1, "rocket": 0, "eyes": 0 } |
1160034488 | |
https://github.com/simonw/sqlite-utils/issues/411#issuecomment-1065386352 | https://api.github.com/repos/simonw/sqlite-utils/issues/411 | 1065386352 | IC_kwDOCGYnMM4_gIFw | 9599 | 2022-03-11T18:41:37Z | 2022-03-11T18:41:37Z | OWNER | I like `add-generated-column` - feels very clear to me, and is a nice place for adding logic that checks if the DB version supports it or not and shows a useful error. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
1160034488 |