home / github

Menu
  • GraphQL API

github

Custom SQL query returning 101 rows (hide)

Query parameters

This data as json, CSV

html_urlissue_urlidnode_idusercreated_atupdated_atauthor_associationbodyreactionsissueperformed_via_github_app
https://github.com/simonw/datasette/issues/44#issuecomment-345342512 https://api.github.com/repos/simonw/datasette/issues/44 345342512 MDEyOklzc3VlQ29tbWVudDM0NTM0MjUxMg== 9599 2017-11-17T19:27:53Z 2017-11-20T04:37:35Z OWNER This should support multiple columns, e.g. `?_group_count=precinct&_group_count=candidate` {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 269731374  
https://github.com/simonw/datasette/issues/44#issuecomment-345343079 https://api.github.com/repos/simonw/datasette/issues/44 345343079 MDEyOklzc3VlQ29tbWVudDM0NTM0MzA3OQ== 9599 2017-11-17T19:29:43Z 2017-11-17T19:29:43Z OWNER Should this support sum/avg/etc as well? {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 269731374  
https://github.com/simonw/datasette/pull/117#issuecomment-345404257 https://api.github.com/repos/simonw/datasette/issues/117 345404257 MDEyOklzc3VlQ29tbWVudDM0NTQwNDI1Nw== 9599 2017-11-18T00:53:58Z 2017-11-18T00:53:58Z OWNER Thanks! {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 274900388  
https://github.com/simonw/datasette/pull/104#issuecomment-345447161 https://api.github.com/repos/simonw/datasette/issues/104 345447161 MDEyOklzc3VlQ29tbWVudDM0NTQ0NzE2MQ== 9599 2017-11-18T14:53:17Z 2017-11-18T14:53:17Z OWNER any reason I shouldn't land this? {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 274284246  
https://github.com/simonw/datasette/issues/36#issuecomment-345448756 https://api.github.com/repos/simonw/datasette/issues/36 345448756 MDEyOklzc3VlQ29tbWVudDM0NTQ0ODc1Ng== 9599 2017-11-18T15:17:43Z 2017-11-18T15:17:43Z OWNER This may be useful: https://github.com/coleifer/peewee/blob/db85167d93861451a1fe7cde8c4f05748b222634/peewee.py#L162-L185 {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 268262480  
https://github.com/simonw/datasette/issues/121#issuecomment-345452215 https://api.github.com/repos/simonw/datasette/issues/121 345452215 MDEyOklzc3VlQ29tbWVudDM0NTQ1MjIxNQ== 9599 2017-11-18T16:11:23Z 2017-11-18T16:11:23Z OWNER If a column value is invalid JSON, let's return the invalid JSON as a regular string. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275089535  
https://github.com/simonw/datasette/pull/104#issuecomment-345452669 https://api.github.com/repos/simonw/datasette/issues/104 345452669 MDEyOklzc3VlQ29tbWVudDM0NTQ1MjY2OQ== 21148 2017-11-18T16:18:45Z 2017-11-18T16:18:45Z CONTRIBUTOR I'd like to do a bit of cleanup, and some error checking in case heroku/heroku-builds isn't installed. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 274284246  
https://github.com/simonw/datasette/issues/105#issuecomment-345493344 https://api.github.com/repos/simonw/datasette/issues/105 345493344 MDEyOklzc3VlQ29tbWVudDM0NTQ5MzM0NA== 9599 2017-11-19T05:28:49Z 2017-11-19T05:28:49Z OWNER Looks like there are a ton of interesting datasets packaged in this way at http://datahub.io/docs/core-data - see also https://github.com/datasets {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 274314940  
https://github.com/simonw/datasette/issues/105#issuecomment-345494052 https://api.github.com/repos/simonw/datasette/issues/105 345494052 MDEyOklzc3VlQ29tbWVudDM0NTQ5NDA1Mg== 9599 2017-11-19T05:49:53Z 2017-11-19T05:49:53Z OWNER https://github.com/rgieseke/pandas-datapackage-reader {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 274314940  
https://github.com/simonw/datasette/issues/85#issuecomment-345494724 https://api.github.com/repos/simonw/datasette/issues/85 345494724 MDEyOklzc3VlQ29tbWVudDM0NTQ5NDcyNA== 9599 2017-11-19T06:08:19Z 2017-11-19T06:08:19Z OWNER This is working really nicely now: <img width="1082" alt="sf-trees__street_tree_list" src="https://user-images.githubusercontent.com/9599/32987909-ef2c6008-ccac-11e7-81ce-4451f5372ab9.png"> <img width="461" alt="sf-trees__qspecies" src="https://user-images.githubusercontent.com/9599/32987911-fa5ce538-ccac-11e7-83b9-2e97dea82d86.png"> {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 273678673  
https://github.com/simonw/datasette/issues/86#issuecomment-345494775 https://api.github.com/repos/simonw/datasette/issues/86 345494775 MDEyOklzc3VlQ29tbWVudDM0NTQ5NDc3NQ== 9599 2017-11-19T06:09:43Z 2017-11-19T06:09:43Z OWNER Now that we have foreign key support (#85) this is even more important, since foreign key support actively encourages linking to filtered table views. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 273703829  
https://github.com/simonw/datasette/issues/86#issuecomment-345494918 https://api.github.com/repos/simonw/datasette/issues/86 345494918 MDEyOklzc3VlQ29tbWVudDM0NTQ5NDkxOA== 9599 2017-11-19T06:14:17Z 2017-11-19T06:14:17Z OWNER If the selected relationship is a foreign key reference, we should resolve that foreign key and display it on the page. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 273703829  
https://github.com/simonw/datasette/issues/44#issuecomment-345494971 https://api.github.com/repos/simonw/datasette/issues/44 345494971 MDEyOklzc3VlQ29tbWVudDM0NTQ5NDk3MQ== 9599 2017-11-19T06:15:39Z 2017-11-19T06:15:39Z OWNER It would be great if this could support foreign key references and automatically resolve and hyperlink them if they are detected. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 269731374  
https://github.com/simonw/datasette/issues/127#issuecomment-345495046 https://api.github.com/repos/simonw/datasette/issues/127 345495046 MDEyOklzc3VlQ29tbWVudDM0NTQ5NTA0Ng== 9599 2017-11-19T06:17:42Z 2017-11-19T06:17:42Z OWNER Maybe I should support `&_count=1` to handle this - that would be easy to Ajax-in in conjenction with the other filters. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275135719  
https://github.com/simonw/datasette/issues/86#issuecomment-345496540 https://api.github.com/repos/simonw/datasette/issues/86 345496540 MDEyOklzc3VlQ29tbWVudDM0NTQ5NjU0MA== 9599 2017-11-19T06:59:40Z 2017-11-19T06:59:40Z OWNER OK,I've figured out how to do an initial version of this without JavaScript. I'll provide three form fields labell d "add filter": * a select box of all of the columns * a select box of the available operations * a value box Submit those and the site will redirect you to a correctly populated querystring for that filter. If you have filters applied, those will display as prepopulated form field triples. For foreign key reference filters, I will display the resolved value next to the text box containing the numeric ID. In the future this can get a select2 style treatment. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 273703829  
https://github.com/simonw/datasette/issues/86#issuecomment-345497453 https://api.github.com/repos/simonw/datasette/issues/86 345497453 MDEyOklzc3VlQ29tbWVudDM0NTQ5NzQ1Mw== 9599 2017-11-19T07:21:22Z 2017-11-19T07:21:22Z OWNER I'm going to be a bit classier about this and auto generate a title for the page that describes the currently applied filters. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 273703829  
https://github.com/simonw/datasette/issues/86#issuecomment-345497534 https://api.github.com/repos/simonw/datasette/issues/86 345497534 MDEyOklzc3VlQ29tbWVudDM0NTQ5NzUzNA== 9599 2017-11-19T07:23:33Z 2017-11-19T07:23:33Z OWNER "Tablename: 3,567 rows where status = 3 (published) and n > 55" {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 273703829  
https://github.com/simonw/datasette/issues/86#issuecomment-345497689 https://api.github.com/repos/simonw/datasette/issues/86 345497689 MDEyOklzc3VlQ29tbWVudDM0NTQ5NzY4OQ== 9599 2017-11-19T07:27:40Z 2017-11-19T07:27:40Z OWNER I'll have to refactor the foreign key annotating code to be usable in other contexts - at the moment it only works for annotating displays of rows, but I need to use it to resolve selected filters as well. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 273703829  
https://github.com/simonw/datasette/issues/105#issuecomment-345503897 https://api.github.com/repos/simonw/datasette/issues/105 345503897 MDEyOklzc3VlQ29tbWVudDM0NTUwMzg5Nw== 198537 2017-11-19T09:38:08Z 2017-11-19T09:38:08Z CONTRIBUTOR Thanks, I wrote this very simple reader because the default approach as described on the Datahub pages seemed to complicated. I had metadata from the `datapackage.json` attached to the returned DataFrames but removed this due to some attribute handling change in the latest Pandas version. This could also be useful for getting from Data Package to SQL db: https://github.com/frictionlessdata/tableschema-sql-py I maintain a few climate science related dataset at https://github.com/openclimatedata/ The Data Retriever (mainly ecological data) by @ethanwhite et al. is also using the Data Package format for metadata and has some tooling for different dbs: https://frictionlessdata.io/articles/the-data-retriever/ https://github.com/weecology/retriever The Open Power System Data project also has a couple of datasets that show nicely how CSV is great for assembling and then already make SQLite files available. It's one of the first data sets I tried with Datasette, perfect for the use case of getting an API for putting power stations on a map ... https://data.open-power-system-data.org/ {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 274314940  
https://github.com/simonw/datasette/issues/97#issuecomment-345509500 https://api.github.com/repos/simonw/datasette/issues/97 345509500 MDEyOklzc3VlQ29tbWVudDM0NTUwOTUwMA== 231923 2017-11-19T11:26:58Z 2017-11-19T11:26:58Z NONE Specifically docs should make it clearer this file exists https://parlgov.datasettes.com/.json And from that you can build https://parlgov.datasettes.com/parlgov-25f9855.json Then https://parlgov.datasettes.com/parlgov-25f9855/cabinet.json {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 274022950  
https://github.com/simonw/datasette/issues/131#issuecomment-345526171 https://api.github.com/repos/simonw/datasette/issues/131 345526171 MDEyOklzc3VlQ29tbWVudDM0NTUyNjE3MQ== 9599 2017-11-19T15:44:30Z 2017-11-19T15:44:30Z OWNER Relevant SQLite docs: * https://sqlite.org/fts5.html * https://www.sqlite.org/fts3.html {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275166669  
https://github.com/simonw/datasette/issues/131#issuecomment-345526517 https://api.github.com/repos/simonw/datasette/issues/131 345526517 MDEyOklzc3VlQ29tbWVudDM0NTUyNjUxNw== 9599 2017-11-19T15:48:28Z 2017-11-19T15:48:28Z OWNER Since SQLite supports column specifications in the MATCH body itself, there's no need to provide a separate mechanism for specifying columns in the query string: https://sqlite.org/fts5.html#fts5_column_filters {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275166669  
https://github.com/simonw/datasette/issues/131#issuecomment-345533274 https://api.github.com/repos/simonw/datasette/issues/131 345533274 MDEyOklzc3VlQ29tbWVudDM0NTUzMzI3NA== 9599 2017-11-19T17:17:37Z 2017-11-19T17:18:05Z OWNER Demo: https://sf-trees.now.sh/sf-trees-ebc2ad9/Street_Tree_List?_search=grove+st <img width="906" alt="sf-trees__street_tree_list_and_https___datasette-publish-dev_now_sh_auth__code_jigy80kxgsfddalfdwqwldzm" src="https://user-images.githubusercontent.com/9599/32993276-8bd62cce-cd0a-11e7-9d91-dc718d3eb4ab.png"> {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275166669  
https://github.com/simonw/datasette/issues/134#issuecomment-345537268 https://api.github.com/repos/simonw/datasette/issues/134 345537268 MDEyOklzc3VlQ29tbWVudDM0NTUzNzI2OA== 9599 2017-11-19T18:10:48Z 2017-11-19T18:10:48Z OWNER Dupe of #127 {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275176094  
https://github.com/simonw/datasette/issues/44#issuecomment-345537315 https://api.github.com/repos/simonw/datasette/issues/44 345537315 MDEyOklzc3VlQ29tbWVudDM0NTUzNzMxNQ== 9599 2017-11-19T18:11:27Z 2017-11-19T18:11:27Z OWNER This would enable faceted search - moving it to the search milestone. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 269731374  
https://github.com/simonw/datasette/issues/127#issuecomment-345538016 https://api.github.com/repos/simonw/datasette/issues/127 345538016 MDEyOklzc3VlQ29tbWVudDM0NTUzODAxNg== 9599 2017-11-19T18:22:45Z 2017-11-19T18:22:45Z OWNER I implemented a basic version of this in f59c840e7db8870afcdeba7a53bdea07bb674334 for custom SQL. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275135719  
https://github.com/simonw/datasette/issues/122#issuecomment-345552358 https://api.github.com/repos/simonw/datasette/issues/122 345552358 MDEyOklzc3VlQ29tbWVudDM0NTU1MjM1OA== 9599 2017-11-19T21:45:38Z 2017-12-05T19:09:52Z OWNER For the overall shape of the rows: `?_shape=lists` (default), `?_shape=objects`, `?_shape=object` (primary key as object keys) For getting back extra keys: `?_extras=schema,query,timing` For expanding columns: `?_expand_all=1` Or `?_expand=qSpecies&_expand=qCaretaker` The template view will only be allowed to work with data it can request using extra options. That leaves one sighted nasty edge-case: the default view will expand all columns, but the `.json` view of it won't? I think that's OK. The default view won't include the extras used by the template to render the page either. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275092453  
https://github.com/simonw/datasette/issues/122#issuecomment-345552440 https://api.github.com/repos/simonw/datasette/issues/122 345552440 MDEyOklzc3VlQ29tbWVudDM0NTU1MjQ0MA== 9599 2017-11-19T21:46:43Z 2017-11-19T21:46:43Z OWNER This calls for refactoring the code so the table view, the row view and the custom SQL view share as much logic as possible. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275092453  
https://github.com/simonw/datasette/issues/122#issuecomment-345552500 https://api.github.com/repos/simonw/datasette/issues/122 345552500 MDEyOklzc3VlQ29tbWVudDM0NTU1MjUwMA== 9599 2017-11-19T21:47:27Z 2017-11-19T21:47:27Z OWNER To start with, I could just ditch the .jsono in favour of the new _shape argument. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275092453  
https://github.com/simonw/datasette/issues/86#issuecomment-345559864 https://api.github.com/repos/simonw/datasette/issues/86 345559864 MDEyOklzc3VlQ29tbWVudDM0NTU1OTg2NA== 9599 2017-11-19T23:35:48Z 2017-11-19T23:35:48Z OWNER I need a nicer abstraction around the concept of filters. It needs to be able to: - convert querystring parameters into filters - convert filters into a querystring - iterate through currently applied filters - convert selected filters into a human description (e.g. for a title) - expand filters that involve a foreign key - add filters - remove filters - define different types of filters It should replace my current `build_where_clauses` implementation, in particular this bit: https://github.com/simonw/datasette/blob/a5881e105a02830d26f07e98177248d5910893da/datasette/utils.py#L38-L56 {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 273703829  
https://github.com/simonw/datasette/issues/44#issuecomment-345601103 https://api.github.com/repos/simonw/datasette/issues/44 345601103 MDEyOklzc3VlQ29tbWVudDM0NTYwMTEwMw== 9599 2017-11-20T06:13:35Z 2017-11-20T06:13:35Z OWNER Some demos: Single column: https://sf-trees-flat.now.sh/sf-trees-flat-ba738ce/Street_Tree_List?_group_count=qSpecies Multi column: https://sf-trees-flat.now.sh/sf-trees-flat-ba738ce/Street_Tree_List?_group_count=qLegalStatus&_group_count=qSpecies {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 269731374  
https://github.com/simonw/datasette/issues/133#issuecomment-345601870 https://api.github.com/repos/simonw/datasette/issues/133 345601870 MDEyOklzc3VlQ29tbWVudDM0NTYwMTg3MA== 9599 2017-11-20T06:18:53Z 2017-11-20T06:18:53Z OWNER This may be tackled by the filters work happening in #86 {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275176006  
https://github.com/simonw/datasette/issues/27#issuecomment-345652450 https://api.github.com/repos/simonw/datasette/issues/27 345652450 MDEyOklzc3VlQ29tbWVudDM0NTY1MjQ1MA== 198537 2017-11-20T10:19:39Z 2017-11-20T10:19:39Z CONTRIBUTOR If Data Package metadata gets adopted (#105) the views spec work might also be worth a look: http://frictionlessdata.io/specs/views/ http://datahub.io/docs/features/views {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 267886330  
https://github.com/simonw/datasette/issues/137#issuecomment-345750135 https://api.github.com/repos/simonw/datasette/issues/137 345750135 MDEyOklzc3VlQ29tbWVudDM0NTc1MDEzNQ== 9599 2017-11-20T16:30:56Z 2018-07-10T17:53:13Z OWNER One possible route: introduce prefixes eg `?a.Trees.age__gt=5&a.Trees._group_count=qSpecies&b.Trees.age__gt=10&b.Trees._group_count=qSpecies` {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275415799  
https://github.com/simonw/datasette/issues/129#issuecomment-345793887 https://api.github.com/repos/simonw/datasette/issues/129 345793887 MDEyOklzc3VlQ29tbWVudDM0NTc5Mzg4Nw== 9599 2017-11-20T19:00:30Z 2017-11-20T19:00:30Z OWNER Need to hide these from the index summary page as well: <img width="1237" alt="datasette__archive-fires-indonesia__conventional_power_plants_eu__fatal-police-shootings-data__fivethirtyeight__flights__google-trends__nhsadmin__northwind__openelections__polar-bears__sf-trees-fks__venue_profile" src="https://user-images.githubusercontent.com/9599/33036011-0471beaa-cde2-11e7-8d01-86eb45476943.png"> {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275164558  
https://github.com/simonw/datasette/issues/105#issuecomment-345809808 https://api.github.com/repos/simonw/datasette/issues/105 345809808 MDEyOklzc3VlQ29tbWVudDM0NTgwOTgwOA== 9599 2017-11-20T19:50:53Z 2017-11-20T19:50:53Z OWNER OK, https://github.com/openclimatedata/global-carbon-budget/blob/master/datapackage.json really does look like it covers all of the bases I need for #138. Closing this ticket in favour of that new one. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 274314940  
https://github.com/simonw/datasette/issues/42#issuecomment-345810031 https://api.github.com/repos/simonw/datasette/issues/42 345810031 MDEyOklzc3VlQ29tbWVudDM0NTgxMDAzMQ== 9599 2017-11-20T19:51:29Z 2017-11-20T19:51:29Z OWNER See also #138 {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 268591332  
https://github.com/simonw/datasette/issues/14#issuecomment-345893877 https://api.github.com/repos/simonw/datasette/issues/14 345893877 MDEyOklzc3VlQ29tbWVudDM0NTg5Mzg3Nw== 9599 2017-11-21T02:11:27Z 2017-11-21T02:11:27Z OWNER http://setuptools.readthedocs.io/en/latest/setuptools.html#dynamic-discovery-of-services-and-plugins Is pretty good {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 267707940  
https://github.com/simonw/datasette/pull/104#issuecomment-346116745 https://api.github.com/repos/simonw/datasette/issues/104 346116745 MDEyOklzc3VlQ29tbWVudDM0NjExNjc0NQ== 21148 2017-11-21T18:23:25Z 2017-11-21T18:23:25Z CONTRIBUTOR @simonw ready for a review and merge if you want. There's still some nasty duplicated code in cli.py and utils.py, which is just going to get worse if/when we start adding any other deploy targets (and I want to do one for cloud.gov, at least). I think there's an opportunity for some refactoring here. I'm happy to do that now as part of this PR, or if you merge this first I'll do it in a different one. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 274284246  
https://github.com/simonw/datasette/pull/104#issuecomment-346124073 https://api.github.com/repos/simonw/datasette/issues/104 346124073 MDEyOklzc3VlQ29tbWVudDM0NjEyNDA3Mw== 21148 2017-11-21T18:49:55Z 2017-11-21T18:49:55Z CONTRIBUTOR Actually hang on, don't merge - there are some bugs that #141 masked when I tested this out elsewhere. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 274284246  
https://github.com/simonw/datasette/pull/104#issuecomment-346124764 https://api.github.com/repos/simonw/datasette/issues/104 346124764 MDEyOklzc3VlQ29tbWVudDM0NjEyNDc2NA== 21148 2017-11-21T18:52:14Z 2017-11-21T18:52:14Z CONTRIBUTOR OK, now this should work. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 274284246  
https://github.com/simonw/datasette/issues/141#issuecomment-346157542 https://api.github.com/repos/simonw/datasette/issues/141 346157542 MDEyOklzc3VlQ29tbWVudDM0NjE1NzU0Mg== 9599 2017-11-21T20:53:47Z 2017-11-21T20:53:47Z OWNER I think a copy is the right thing to do here - it will be cleaned up when the temp directory is removed. The hard link thing was always intended to save space, but if we can't do a hard link I don't see any harm in a temporary file copy. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275814941  
https://github.com/simonw/datasette/issues/90#issuecomment-346161985 https://api.github.com/repos/simonw/datasette/issues/90 346161985 MDEyOklzc3VlQ29tbWVudDM0NjE2MTk4NQ== 9599 2017-11-21T21:10:22Z 2017-11-21T21:10:22Z OWNER Woohoo! I've found one tiny issue: right now, the following doesn't work: datasette publish heroku ../demo-databses/google-trends.db It results in this error in the Heroku logs: 2017-11-21T21:03:29.210511+00:00 app[web.1]: Usage: datasette serve [OPTIONS] [FILES]... 2017-11-21T21:03:29.210524+00:00 app[web.1]: 2017-11-21T21:03:29.210555+00:00 app[web.1]: Error: Invalid value for "files": Path "../demo-databses/google-trends.db" does not exist. The command works fine if you run it in the same directory as the database file you are publishing. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 273846123  
https://github.com/simonw/datasette/issues/90#issuecomment-346163513 https://api.github.com/repos/simonw/datasette/issues/90 346163513 MDEyOklzc3VlQ29tbWVudDM0NjE2MzUxMw== 9599 2017-11-21T21:16:16Z 2017-11-21T21:16:16Z OWNER The reason relative paths work for `publish now` is that the `make_dockerfile()` function is called by passing the file names, not the full file paths: https://github.com/simonw/datasette/blob/e47117ce1d15f11246a3120aa49de70205713d05/datasette/utils.py#L166 Clearly the correct thing to do here is for us to refactor the shared code between heroku/package/now. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 273846123  
https://github.com/simonw/datasette/issues/142#issuecomment-346217739 https://api.github.com/repos/simonw/datasette/issues/142 346217739 MDEyOklzc3VlQ29tbWVudDM0NjIxNzczOQ== 9599 2017-11-22T01:45:30Z 2017-11-22T01:45:30Z OWNER Might be nice to have a --no-limits option that disables time and maximum row count limits. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275917760  
https://github.com/simonw/datasette/issues/14#issuecomment-346244871 https://api.github.com/repos/simonw/datasette/issues/14 346244871 MDEyOklzc3VlQ29tbWVudDM0NjI0NDg3MQ== 21148 2017-11-22T05:06:30Z 2017-11-22T05:06:30Z CONTRIBUTOR I'd also suggest taking a look at [stevedore](https://docs.openstack.org/stevedore/latest/), which has a ton of tools for doing plugin stuff. I've had good luck with it in the past. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 267707940  
https://github.com/simonw/datasette/issues/144#issuecomment-346405660 https://api.github.com/repos/simonw/datasette/issues/144 346405660 MDEyOklzc3VlQ29tbWVudDM0NjQwNTY2MA== 9599 2017-11-22T16:38:05Z 2017-11-22T16:38:05Z OWNER I have a solution for FTS already, but I'm interested in apsw as a mechanism for allowing custom virtual tables to be written in Python (pysqlite only lets you write custom functions) Not having PyPI support is pretty tough though. I'm planning a plugin/extension system which would be ideal for things like an optional apsw mode, but that's a lot harder if apsw isn't in PyPI. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 276091279  
https://github.com/simonw/datasette/issues/14#issuecomment-346406009 https://api.github.com/repos/simonw/datasette/issues/14 346406009 MDEyOklzc3VlQ29tbWVudDM0NjQwNjAwOQ== 9599 2017-11-22T16:39:08Z 2017-11-22T16:39:08Z OWNER Oh thanks, that definitely looks like an interesting option. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 267707940  
https://github.com/simonw/datasette/issues/144#issuecomment-346427794 https://api.github.com/repos/simonw/datasette/issues/144 346427794 MDEyOklzc3VlQ29tbWVudDM0NjQyNzc5NA== 649467 2017-11-22T17:55:45Z 2017-11-22T17:55:45Z NONE Thanks. There is a way to use pip to grab apsw, which also let's you configure it (flags to build extensions, use an internal sqlite, etc). Don't know how that works as a dependency for another package, though. On November 22, 2017 11:38:06 AM EST, Simon Willison <notifications@github.com> wrote: >I have a solution for FTS already, but I'm interested in apsw as a >mechanism for allowing custom virtual tables to be written in Python >(pysqlite only lets you write custom functions) > >Not having PyPI support is pretty tough though. I'm planning a >plugin/extension system which would be ideal for things like an >optional apsw mode, but that's a lot harder if apsw isn't in PyPI. > >-- >You are receiving this because you authored the thread. >Reply to this email directly or view it on GitHub: >https://github.com/simonw/datasette/issues/144#issuecomment-346405660 {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 276091279  
https://github.com/simonw/datasette/issues/129#issuecomment-346463342 https://api.github.com/repos/simonw/datasette/issues/129 346463342 MDEyOklzc3VlQ29tbWVudDM0NjQ2MzM0Mg== 9599 2017-11-22T20:22:02Z 2017-11-22T20:22:02Z OWNER On the index page: <img width="590" alt="datasette__archive-fires-indonesia__conventional_power_plants_eu__fatal-police-shootings-data__fivethirtyeight__flights__google-trends__nhsadmin__northwind__openelections__polar-bears__sf-trees__sf-trees-fks__venue_profile_and_hide_fts-crea" src="https://user-images.githubusercontent.com/9599/33148136-7b8964ea-cf7f-11e7-87ff-654b4d152645.png"> On the database index page: <img width="321" alt="sf-trees" src="https://user-images.githubusercontent.com/9599/33148156-87df1aa0-cf7f-11e7-8480-64cc29201984.png"> After clicking that link: <img width="744" alt="sf-trees" src="https://user-images.githubusercontent.com/9599/33148178-9f7d510e-cf7f-11e7-8959-5ad64f8637a8.png"> {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275164558  
https://github.com/simonw/datasette/issues/86#issuecomment-346530498 https://api.github.com/repos/simonw/datasette/issues/86 346530498 MDEyOklzc3VlQ29tbWVudDM0NjUzMDQ5OA== 9599 2017-11-23T04:35:07Z 2017-11-23T04:35:07Z OWNER Here's where I am now. Needs a bit of UI tidy up and it will be good to release: <img width="1126" alt="conventional_power_plants_eu__conventional_power_plants_eu" src="https://user-images.githubusercontent.com/9599/33159075-9e985bb8-cfc4-11e7-888d-6828ebdeb1ca.png"> {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 273703829  
https://github.com/simonw/datasette/issues/146#issuecomment-346682905 https://api.github.com/repos/simonw/datasette/issues/146 346682905 MDEyOklzc3VlQ29tbWVudDM0NjY4MjkwNQ== 9599 2017-11-23T18:55:08Z 2017-11-23T18:55:08Z OWNER <img width="478" alt="compute_engine_-_simonwillisonblog" src="https://user-images.githubusercontent.com/9599/33186224-c3e32d44-d03c-11e7-9cd8-6acc6c1d1d01.png"> {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 276455748  
https://github.com/simonw/datasette/issues/86#issuecomment-346691243 https://api.github.com/repos/simonw/datasette/issues/86 346691243 MDEyOklzc3VlQ29tbWVudDM0NjY5MTI0Mw== 9599 2017-11-23T20:07:15Z 2017-11-23T20:07:15Z OWNER <img width="566" alt="fivethirtyeight__bob-ross_elements-by-episode_csv" src="https://user-images.githubusercontent.com/9599/33187492-d6fb6068-d046-11e7-80fc-470c04a46386.png"> {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 273703829  
https://github.com/simonw/datasette/issues/86#issuecomment-346694211 https://api.github.com/repos/simonw/datasette/issues/86 346694211 MDEyOklzc3VlQ29tbWVudDM0NjY5NDIxMQ== 9599 2017-11-23T20:34:32Z 2017-11-23T20:34:32Z OWNER And with ef3eacf622e69723d48ab1ad597645770a7361db I'm ready to call this one done. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 273703829  
https://github.com/simonw/datasette/issues/132#issuecomment-346701751 https://api.github.com/repos/simonw/datasette/issues/132 346701751 MDEyOklzc3VlQ29tbWVudDM0NjcwMTc1MQ== 9599 2017-11-23T21:51:51Z 2017-11-23T21:51:51Z OWNER <img width="846" alt="fatal-police-shootings-data__fatal-police-shootings-data" src="https://user-images.githubusercontent.com/9599/33189202-73891af2-d055-11e7-9e79-6be7d8df36aa.png"> {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275175929  
https://github.com/simonw/datasette/issues/133#issuecomment-346705879 https://api.github.com/repos/simonw/datasette/issues/133 346705879 MDEyOklzc3VlQ29tbWVudDM0NjcwNTg3OQ== 9599 2017-11-23T22:43:42Z 2017-11-24T22:07:46Z OWNER Easiest way to do this will be to move it into the same `<form>` as the filters. Would be nice to detect `?_search=<blank>` and redirect to URL without the `_search` parameter, just for aesthetics. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275176006  
https://github.com/simonw/datasette/issues/147#issuecomment-346900554 https://api.github.com/repos/simonw/datasette/issues/147 346900554 MDEyOklzc3VlQ29tbWVudDM0NjkwMDU1NA== 9599 2017-11-24T22:02:22Z 2017-11-24T22:02:22Z OWNER <img width="798" alt="conventional_power_plants_eu__conventional_power_plants_eu__14_rows_where_company____nuon_" src="https://user-images.githubusercontent.com/9599/33224603-15e7a406-d120-11e7-89c1-32d3d0aff021.png"> {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 276476670  
https://github.com/simonw/datasette/issues/133#issuecomment-346902583 https://api.github.com/repos/simonw/datasette/issues/133 346902583 MDEyOklzc3VlQ29tbWVudDM0NjkwMjU4Mw== 9599 2017-11-24T22:30:32Z 2017-11-24T22:30:32Z OWNER <img width="662" alt="sf-trees__street_tree_list__1_row_where_search_matches__ocean___qcareassistant____1__qcareassistant_is_not_blank_and_qlegalstatus___1" src="https://user-images.githubusercontent.com/9599/33224944-03bf054a-d124-11e7-8a97-58c8dee892a1.png"> {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275176006  
https://github.com/simonw/datasette/issues/149#issuecomment-346903317 https://api.github.com/repos/simonw/datasette/issues/149 346903317 MDEyOklzc3VlQ29tbWVudDM0NjkwMzMxNw== 9599 2017-11-24T22:41:58Z 2017-11-24T22:41:58Z OWNER Custom SQL results now look like this: <img width="769" alt="banners_and_alerts_and_conventional_power_plants_eu" src="https://user-images.githubusercontent.com/9599/33225056-9c09c58c-d125-11e7-9981-a209a52ac7fb.png"> {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 276704127  
https://github.com/simonw/datasette/issues/141#issuecomment-346974336 https://api.github.com/repos/simonw/datasette/issues/141 346974336 MDEyOklzc3VlQ29tbWVudDM0Njk3NDMzNg== 50138 2017-11-26T00:00:35Z 2017-11-26T00:00:35Z NONE FWIW I worked around this by setting TMPDIR to ~/tmp before running the command. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275814941  
https://github.com/simonw/datasette/issues/124#issuecomment-346987395 https://api.github.com/repos/simonw/datasette/issues/124 346987395 MDEyOklzc3VlQ29tbWVudDM0Njk4NzM5NQ== 50138 2017-11-26T06:24:08Z 2017-11-26T06:24:08Z NONE Are there performance gains when using immutable as opposed to read-only? From what I see other processes can still modify the DB when immutable, but there are no change notifications. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275125805  
https://github.com/simonw/datasette/issues/124#issuecomment-347049888 https://api.github.com/repos/simonw/datasette/issues/124 347049888 MDEyOklzc3VlQ29tbWVudDM0NzA0OTg4OA== 9599 2017-11-27T00:01:08Z 2017-11-27T00:01:08Z OWNER https://sqlite.org/c3ref/open.html Is the only documentation I've been able to find of the immutable option: > **immutable**: The immutable parameter is a boolean query parameter that indicates that the database file is stored on read-only media. When immutable is set, SQLite assumes that the database file cannot be changed, even by a process with higher privilege, and so the database is opened read-only and all locking and change detection is disabled. Caution: Setting the immutable property on a database file that does in fact change can result in incorrect query results and/or SQLITE_CORRUPT errors. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275125805  
https://github.com/simonw/datasette/issues/153#issuecomment-347050235 https://api.github.com/repos/simonw/datasette/issues/153 347050235 MDEyOklzc3VlQ29tbWVudDM0NzA1MDIzNQ== 9599 2017-11-27T00:06:24Z 2017-11-27T00:06:24Z OWNER I've been thinking about 1. a bit - I actually think it would be fine to have a rule that says "if the contents of the cell starts with `http://` or `https://` and doesn't contain any whitespace, turn that into a link". If you need the non-linked version that will always be available in the JSON. For the other two... I think #12 may be the way to go here: if you can easily over-ride the `row.html` and `table.html` templates for specific databases you can easily set pre-formatted text or similar for certain values - maybe even with CSS that targets a specific table column. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 276842536  
https://github.com/simonw/datasette/issues/153#issuecomment-347051331 https://api.github.com/repos/simonw/datasette/issues/153 347051331 MDEyOklzc3VlQ29tbWVudDM0NzA1MTMzMQ== 9599 2017-11-27T00:23:40Z 2017-11-27T03:58:49Z OWNER One quick fix could be to add a `extra_css_url` key to the `metadata.json` format (which currently hosts `title`, `license_url` etc) - if populated, we can inject a link to that stylesheet on every page. We could add a few classes in strategic places that include the database and table names to give people styling hooks. While we're at it, an `extra_js_url` key would let people go really nuts! {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 276842536  
https://github.com/simonw/datasette/issues/124#issuecomment-347123991 https://api.github.com/repos/simonw/datasette/issues/124 347123991 MDEyOklzc3VlQ29tbWVudDM0NzEyMzk5MQ== 50138 2017-11-27T09:25:15Z 2017-11-27T09:25:15Z NONE That's the only reference to immutable I saw as well, making me think that there may be no perceivable advantages over simply using mode=ro. Since the database is never or seldom updated the change notifications should not impact performance. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275125805  
https://github.com/simonw/datasette/issues/124#issuecomment-347236102 https://api.github.com/repos/simonw/datasette/issues/124 347236102 MDEyOklzc3VlQ29tbWVudDM0NzIzNjEwMg== 9599 2017-11-27T16:24:15Z 2017-11-27T16:24:15Z OWNER I'd really like to get some benchmarks working so I can see the actual impact of this kind of thing. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275125805  
https://github.com/simonw/datasette/issues/155#issuecomment-347713453 https://api.github.com/repos/simonw/datasette/issues/155 347713453 MDEyOklzc3VlQ29tbWVudDM0NzcxMzQ1Mw== 9599 2017-11-29T00:41:30Z 2017-11-29T00:41:30Z OWNER Could you provide the SQL to create a reproducible test case (both CREATE TABLE and INSERT statements)? {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 277589569  
https://github.com/simonw/datasette/issues/155#issuecomment-347714314 https://api.github.com/repos/simonw/datasette/issues/155 347714314 MDEyOklzc3VlQ29tbWVudDM0NzcxNDMxNA== 388154 2017-11-29T00:46:25Z 2017-11-29T00:46:25Z NONE ``` CREATE TABLE rhs ( id INTEGER PRIMARY KEY, name TEXT ); CREATE TABLE lhs ( symbol INTEGER PRIMARY KEY, FOREIGN KEY (symbol) REFERENCES rhs(id) ); INSERT INTO rhs VALUES (1, "foo"); INSERT INTO rhs VALUES (2, "bar"); INSERT INTO lhs VALUES (1); INSERT INTO lhs VALUES (2); ``` It's expected that in lhs's view, foo / bar should be displayed. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 277589569  
https://github.com/simonw/datasette/issues/155#issuecomment-347714471 https://api.github.com/repos/simonw/datasette/issues/155 347714471 MDEyOklzc3VlQ29tbWVudDM0NzcxNDQ3MQ== 9599 2017-11-29T00:47:21Z 2017-11-29T00:47:21Z OWNER Thanks! {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 277589569  
https://github.com/simonw/datasette/issues/155#issuecomment-347715452 https://api.github.com/repos/simonw/datasette/issues/155 347715452 MDEyOklzc3VlQ29tbWVudDM0NzcxNTQ1Mg== 9599 2017-11-29T00:52:30Z 2017-11-29T00:52:30Z OWNER Interestingly, it almost does the right thing on the individual row page: https://bug-155-dkcqckhgki.now.sh/bug-155-9a7bb68/lhs/1 <img width="303" alt="cursor_and_bug-155__lhs" src="https://user-images.githubusercontent.com/9599/33352129-511419e4-d45c-11e7-98f3-9c1dfefa6350.png"> The symbol has been expanded, but there's a rogue '1' that shouldn't be there at all - I think that's bug #152 The table view itself is definitely doing the wrong thing: https://bug-155-dkcqckhgki.now.sh/bug-155-9a7bb68/lhs <img width="546" alt="cursor_and_bug-155__lhs__2_rows_and_paradise_papers_tie_kushner_startup_to_russian_money_ _the_forward" src="https://user-images.githubusercontent.com/9599/33352178-8491b9a2-d45c-11e7-8d89-fedd455cfcba.png"> {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 277589569  
https://github.com/simonw/datasette/issues/153#issuecomment-347735334 https://api.github.com/repos/simonw/datasette/issues/153 347735334 MDEyOklzc3VlQ29tbWVudDM0NzczNTMzNA== 9599 2017-11-29T02:45:03Z 2017-11-29T02:45:03Z OWNER @ftrain OK I've shipped the first version of this. Here's the initial documentation: Create a `metadata.json` file that looks like this: { "extra_css_urls": [ "https://simonwillison.net/static/css/all.bf8cd891642c.css" ], "extra_js_urls": [ "https://code.jquery.com/jquery-3.2.1.slim.min.js" ] } Then start datasette like this: datasette mydb.db --metadata=metadata.json The CSS and JavaScript files will be linked in the `<head>` of every page. You can also specify a SRI (subresource integrity hash) for these assets: { "extra_css_urls": [ { "url": "https://simonwillison.net/static/css/all.bf8cd891642c.css", "sri": "sha384-9qIZekWUyjCyDIf2YK1FRoKiPJq4PHt6tp/ulnuuyRBvazd0hG7pWbE99zvwSznI" } ], "extra_js_urls": [ { "url": "https://code.jquery.com/jquery-3.2.1.slim.min.js", "sri": "sha256-k2WSCIexGzOj3Euiig+TlR8gA0EmPjuc79OEeY5L45g=" } ] } Modern browsers will only execute the stylsheet or JavaScript if the SRI hash matches the content served. You can generate hashes using www.srihash.org This isn't shipped in a release yet, but you can still access these features in `datasette publish` like so: datasette publish now mydb.db --metadata=metadata.json --branch=master The `--branch=master` option will pull the latest master build of Datasette from GitHub. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 276842536  
https://github.com/simonw/datasette/issues/153#issuecomment-347735598 https://api.github.com/repos/simonw/datasette/issues/153 347735598 MDEyOklzc3VlQ29tbWVudDM0NzczNTU5OA== 9599 2017-11-29T02:46:31Z 2017-11-29T02:47:27Z OWNER To style individual columns you'll currently need to use the `nth-of-type` selector, e.g.: td:nth-of-type(5):before { white-space: pre } {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 276842536  
https://github.com/simonw/datasette/issues/153#issuecomment-347735724 https://api.github.com/repos/simonw/datasette/issues/153 347735724 MDEyOklzc3VlQ29tbWVudDM0NzczNTcyNA== 9599 2017-11-29T02:47:14Z 2017-11-29T02:47:14Z OWNER (This only addresses point 2 in your issue description - points 1 and point 3 are still to come) {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 276842536  
https://github.com/simonw/datasette/issues/153#issuecomment-347928926 https://api.github.com/repos/simonw/datasette/issues/153 347928926 MDEyOklzc3VlQ29tbWVudDM0NzkyODkyNg== 9599 2017-11-29T17:09:40Z 2017-11-29T17:09:40Z OWNER OK, that's point 1 covered. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 276842536  
https://github.com/simonw/datasette/issues/153#issuecomment-348103270 https://api.github.com/repos/simonw/datasette/issues/153 348103270 MDEyOklzc3VlQ29tbWVudDM0ODEwMzI3MA== 9599 2017-11-30T07:16:40Z 2017-11-30T07:16:40Z OWNER Every template now gets CSS classes in the body designed to support custom styling. The index template (the top level page at /) gets this: <body class="index"> The database template (/dbname/) gets this: <body class="db db-dbname"> The table template (/dbname/tablename) gets: <body class="table db-dbname table-tablename"> The row template (/dbname/tablename/rowid) gets: <body class="row db-dbname table-tablename"> The db-x and table-x classes use the database or table names themselves IF they are valid CSS identifiers. If they aren't, we strip any invalid characters out and append a 6 character md5 digest of the original name, in order to ensure that multiple tables which resolve to the same stripped character version still have different CSS classes. Some examples (extracted from the unit tests): "simple" => "simple" "MixedCase" => "MixedCase" "-no-leading-hyphens" => "no-leading-hyphens-65bea6" "_no-leading-underscores" => "no-leading-underscores-b921bc" "no spaces" => "no-spaces-7088d7" "-" => "336d5e" "no $ characters" => "no--characters-59e024" {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 276842536  
https://github.com/simonw/datasette/issues/12#issuecomment-348245757 https://api.github.com/repos/simonw/datasette/issues/12 348245757 MDEyOklzc3VlQ29tbWVudDM0ODI0NTc1Nw== 9599 2017-11-30T16:39:45Z 2017-11-30T16:39:45Z OWNER It is now possible to over-ride templates on a per-database / per-row or per- table basis. When you access e.g. `/mydatabase/mytable` Datasette will look for the following: - table-mydatabase-mytable.html - table.html If you provided a `--template-dir` argument to datasette serve it will look in that directory first. The lookup rules are as follows: Index page (/): index.html Database page (/mydatabase): database-mydatabase.html database.html Table page (/mydatabase/mytable): table-mydatabase-mytable.html table.html Row page (/mydatabase/mytable/id): row-mydatabase-mytable.html row.html If a table name has spaces or other unexpected characters in it, the template filename will follow the same rules as our custom `<body>` CSS classes introduced in 8ab3a16 - for example, a table called "Food Trucks" will attempt to load the following templates: table-mydatabase-Food-Trucks-399138.html table.html It is possible to extend the default templates using Jinja template inheritance. If you want to customize EVERY row template with some additional content you can do so by creating a `row.html` template like this: {% extends "default:row.html" %} {% block content %} <h1>EXTRA HTML AT THE TOP OF THE CONTENT BLOCK</h1> <p>This line renders the original block:</p> {{ super() }} {% endblock %} {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 267523511  
https://github.com/simonw/datasette/issues/153#issuecomment-348245843 https://api.github.com/repos/simonw/datasette/issues/153 348245843 MDEyOklzc3VlQ29tbWVudDM0ODI0NTg0Mw== 9599 2017-11-30T16:40:02Z 2017-11-30T16:40:02Z OWNER It is now possible to over-ride templates on a per-database / per-row or per- table basis. When you access e.g. `/mydatabase/mytable` Datasette will look for the following: - table-mydatabase-mytable.html - table.html If you provided a `--template-dir` argument to datasette serve it will look in that directory first. The lookup rules are as follows: Index page (/): index.html Database page (/mydatabase): database-mydatabase.html database.html Table page (/mydatabase/mytable): table-mydatabase-mytable.html table.html Row page (/mydatabase/mytable/id): row-mydatabase-mytable.html row.html If a table name has spaces or other unexpected characters in it, the template filename will follow the same rules as our custom `<body>` CSS classes introduced in 8ab3a16 - for example, a table called "Food Trucks" will attempt to load the following templates: table-mydatabase-Food-Trucks-399138.html table.html It is possible to extend the default templates using Jinja template inheritance. If you want to customize EVERY row template with some additional content you can do so by creating a `row.html` template like this: {% extends "default:row.html" %} {% block content %} <h1>EXTRA HTML AT THE TOP OF THE CONTENT BLOCK</h1> <p>This line renders the original block:</p> {{ super() }} {% endblock %} {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 276842536  
https://github.com/simonw/datasette/issues/153#issuecomment-348248406 https://api.github.com/repos/simonw/datasette/issues/153 348248406 MDEyOklzc3VlQ29tbWVudDM0ODI0ODQwNg== 9599 2017-11-30T16:47:45Z 2017-11-30T16:47:45Z OWNER Remaining work on this now lives in a milestone: https://github.com/simonw/datasette/milestone/6 {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 276842536  
https://github.com/simonw/datasette/issues/126#issuecomment-348248957 https://api.github.com/repos/simonw/datasette/issues/126 348248957 MDEyOklzc3VlQ29tbWVudDM0ODI0ODk1Nw== 9599 2017-11-30T16:49:24Z 2017-11-30T16:49:24Z OWNER https://simonwillison.net/2017/Nov/25/new-in-datasette/ {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275135535  
https://github.com/simonw/datasette/issues/153#issuecomment-348252037 https://api.github.com/repos/simonw/datasette/issues/153 348252037 MDEyOklzc3VlQ29tbWVudDM0ODI1MjAzNw== 20264 2017-11-30T16:59:00Z 2017-11-30T16:59:00Z NONE WOW! -- Paul Ford // (646) 369-7128 // @ftrain On Thu, Nov 30, 2017 at 11:47 AM, Simon Willison <notifications@github.com> wrote: > Remaining work on this now lives in a milestone: > https://github.com/simonw/datasette/milestone/6 > > — > You are receiving this because you were mentioned. > Reply to this email directly, view it on GitHub > <https://github.com/simonw/datasette/issues/153#issuecomment-348248406>, > or mute the thread > <https://github.com/notifications/unsubscribe-auth/AABPKHzaVPKwTOoHouK2aMUnM-mPnPk6ks5s7twzgaJpZM4Qq2zW> > . > {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 276842536  
https://github.com/simonw/datasette/issues/156#issuecomment-348255782 https://api.github.com/repos/simonw/datasette/issues/156 348255782 MDEyOklzc3VlQ29tbWVudDM0ODI1NTc4Mg== 9599 2017-11-30T17:11:34Z 2017-11-30T17:11:34Z OWNER http://datasette.readthedocs.io/en/latest/custom_templates.html {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 278189708  
https://github.com/simonw/datasette/issues/153#issuecomment-348255925 https://api.github.com/repos/simonw/datasette/issues/153 348255925 MDEyOklzc3VlQ29tbWVudDM0ODI1NTkyNQ== 9599 2017-11-30T17:12:03Z 2017-11-30T17:12:03Z OWNER Documentation is now live for this: http://datasette.readthedocs.io/en/latest/custom_templates.html {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 276842536  
https://github.com/simonw/datasette/issues/160#issuecomment-348404864 https://api.github.com/repos/simonw/datasette/issues/160 348404864 MDEyOklzc3VlQ29tbWVudDM0ODQwNDg2NA== 9599 2017-12-01T05:26:57Z 2017-12-01T05:26:57Z OWNER Question is... what should happen to the default static stuff? At the moment that's just https://fivethirtyeight.datasettes.com/-/static/app.css - though I want to improve that to include a content hash, see #154 {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 278208011  
https://github.com/simonw/datasette/issues/154#issuecomment-348404988 https://api.github.com/repos/simonw/datasette/issues/154 348404988 MDEyOklzc3VlQ29tbWVudDM0ODQwNDk4OA== 9599 2017-12-01T05:27:40Z 2017-12-01T05:27:40Z OWNER If I do add additional static file bundling should that automatically get content hashes as well? #160 - problem with that is then I might have to parse the CSS files and rewrite their internal background-url references etc. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 276873891  
https://github.com/simonw/datasette/issues/20#issuecomment-348420129 https://api.github.com/repos/simonw/datasette/issues/20 348420129 MDEyOklzc3VlQ29tbWVudDM0ODQyMDEyOQ== 9599 2017-12-01T07:16:25Z 2017-12-01T07:16:25Z OWNER I've found some examples of canned queries I want to support that can't be represented as views, so I'm going to reopen this. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 267759136  
https://github.com/simonw/datasette/issues/20#issuecomment-348420955 https://api.github.com/repos/simonw/datasette/issues/20 348420955 MDEyOklzc3VlQ29tbWVudDM0ODQyMDk1NQ== 9599 2017-12-01T07:21:08Z 2017-12-01T07:21:08Z OWNER I'll use the existing metadata.json file: { "databases": { "mydb": { "queries": { "custom_thingy": {... The query definition can either be just a string of SQL, or it can be an object with a sql key and optional title and description keys. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 267759136  
https://github.com/simonw/datasette/issues/160#issuecomment-348719680 https://api.github.com/repos/simonw/datasette/issues/160 348719680 MDEyOklzc3VlQ29tbWVudDM0ODcxOTY4MA== 9599 2017-12-02T20:59:27Z 2017-12-02T20:59:27Z OWNER This is about more than just CSS and JavaScript - there are plenty of reasons someone might want to bundle HTML as well, e.g. for building something like https://sf-tree-search.now.sh/ So, instead of thinking about this in terms of /static/, I'm going to think about this in terms of allowing people to mount one or more document roots (or docroots). datasette serve mydb.db -d my-doc-root/ This will cause the root of the server to show content from the `my-doc-root/` directory (assuming it has an index.html file in it). A more common option will be to mount specific folders to specific directories, like this: datasette serve mydb.db -d static:my-static/ Now any hits to `/static/foo.css` will serve content from `my-static/foo.css` {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 278208011  
https://github.com/simonw/datasette/issues/160#issuecomment-348719752 https://api.github.com/repos/simonw/datasette/issues/160 348719752 MDEyOklzc3VlQ29tbWVudDM0ODcxOTc1Mg== 9599 2017-12-02T21:00:21Z 2017-12-02T21:00:21Z OWNER Not sure which I like better out of `-d/--docroot` or `-s/--static` or `-m/--mount` for this. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 278208011  
https://github.com/simonw/datasette/issues/160#issuecomment-348719827 https://api.github.com/repos/simonw/datasette/issues/160 348719827 MDEyOklzc3VlQ29tbWVudDM0ODcxOTgyNw== 9599 2017-12-02T21:01:36Z 2017-12-02T21:01:36Z OWNER `-m` is already taken for `--metadata`. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 278208011  
https://github.com/simonw/datasette/issues/160#issuecomment-348793054 https://api.github.com/repos/simonw/datasette/issues/160 348793054 MDEyOklzc3VlQ29tbWVudDM0ODc5MzA1NA== 9599 2017-12-03T16:35:22Z 2017-12-03T16:35:22Z OWNER You can now tell Datasette to serve static files from a specific location at a specific mountpoint. For example: datasette serve mydb.db --static extra-css:/tmp/static/css Now if you visit this URL: http://localhost:8001/extra-css/blah.css The following file will be served: /tmp/static/css/blah.css {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 278208011  
https://github.com/simonw/datasette/issues/160#issuecomment-348793156 https://api.github.com/repos/simonw/datasette/issues/160 348793156 MDEyOklzc3VlQ29tbWVudDM0ODc5MzE1Ng== 9599 2017-12-03T16:35:53Z 2017-12-03T16:35:53Z OWNER Still TODO: teach `datasette publish` and friends about this. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 278208011  
https://github.com/simonw/datasette/issues/161#issuecomment-348860191 https://api.github.com/repos/simonw/datasette/issues/161 348860191 MDEyOklzc3VlQ29tbWVudDM0ODg2MDE5MQ== 9599 2017-12-04T04:52:14Z 2017-12-04T04:52:14Z OWNER Seems like a reasonable thing for us to support. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 278814220  
https://github.com/simonw/datasette/issues/20#issuecomment-348860623 https://api.github.com/repos/simonw/datasette/issues/20 348860623 MDEyOklzc3VlQ29tbWVudDM0ODg2MDYyMw== 9599 2017-12-04T04:56:21Z 2017-12-04T04:56:21Z OWNER While I'm doing this, I could add per-database and per-table metadata too ala #68 {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 267759136  
https://github.com/simonw/datasette/issues/20#issuecomment-349027974 https://api.github.com/repos/simonw/datasette/issues/20 349027974 MDEyOklzc3VlQ29tbWVudDM0OTAyNzk3NA== 9599 2017-12-04T17:01:19Z 2017-12-04T17:01:19Z OWNER This is also a good opportunity to re-factor out a separate query.html template - right now the database.html template is doing two jobs. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 267759136  
https://github.com/simonw/datasette/issues/135#issuecomment-349047335 https://api.github.com/repos/simonw/datasette/issues/135 349047335 MDEyOklzc3VlQ29tbWVudDM0OTA0NzMzNQ== 9599 2017-12-04T17:57:08Z 2017-12-04T17:57:08Z OWNER Turns out there's a bug in this: https://timezones-now-hrjgkinozh.now.sh/timezones-0d61a90/ElementaryGeometries should not be showing the search box. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275179724  
https://github.com/simonw/datasette/issues/20#issuecomment-349359498 https://api.github.com/repos/simonw/datasette/issues/20 349359498 MDEyOklzc3VlQ29tbWVudDM0OTM1OTQ5OA== 9599 2017-12-05T16:30:06Z 2017-12-05T16:30:06Z OWNER Named canned queries can now be defined in metadata.json like this: { "databases": { "timezones": { "queries": { "timezone_for_point": "select tzid from timezones ..." } } } } These will be shown in a new "Queries" section beneath "Views" on the database page. <img width="528" alt="timezones" src="https://user-images.githubusercontent.com/9599/33618097-762ae188-d996-11e7-8f85-29f998ef7a18.png"> {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 267759136  
https://github.com/simonw/datasette/issues/20#issuecomment-349383276 https://api.github.com/repos/simonw/datasette/issues/20 349383276 MDEyOklzc3VlQ29tbWVudDM0OTM4MzI3Ng== 9599 2017-12-05T17:45:20Z 2017-12-05T17:45:20Z OWNER http://datasette.readthedocs.io/en/latest/sql_queries.html {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 267759136  
https://github.com/simonw/datasette/issues/20#issuecomment-349406761 https://api.github.com/repos/simonw/datasette/issues/20 349406761 MDEyOklzc3VlQ29tbWVudDM0OTQwNjc2MQ== 9599 2017-12-05T19:03:06Z 2017-12-05T19:03:06Z OWNER Demo: https://timezones-api.now.sh/timezones-3cb9f64/by_point {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 267759136  
https://github.com/simonw/datasette/issues/122#issuecomment-349408214 https://api.github.com/repos/simonw/datasette/issues/122 349408214 MDEyOklzc3VlQ29tbWVudDM0OTQwODIxNA== 9599 2017-12-05T19:08:04Z 2017-12-05T19:08:04Z OWNER I think `.json` should continue to return rows as list-of-lists - it's a nice default because it produces a smaller overall JSON file. Encouraging people to specify an alternative shape to get the current `.jsono` format feels appropriate. {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275092453  
https://github.com/simonw/datasette/issues/135#issuecomment-349860851 https://api.github.com/repos/simonw/datasette/issues/135 349860851 MDEyOklzc3VlQ29tbWVudDM0OTg2MDg1MQ== 9599 2017-12-07T04:37:59Z 2017-12-07T04:37:59Z OWNER I'm testing this like so: datasette ~/Dropbox/Development/timezones-api/timezones.db --reload --load-extension /usr/local/lib/mod_spatialite.dylib {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275179724  
https://github.com/simonw/datasette/issues/135#issuecomment-349861461 https://api.github.com/repos/simonw/datasette/issues/135 349861461 MDEyOklzc3VlQ29tbWVudDM0OTg2MTQ2MQ== 9599 2017-12-07T04:43:12Z 2017-12-07T04:43:12Z OWNER This query looks like it does the right thing: select * from sqlite_master where rootpage = 0 and ( sql like '%VIRTUAL TABLE%USING FTS%content="ElementaryGeometries"%' or ( tbl_name = "ElementaryGeometries" and sql like '%VIRTUAL TABLE%USING FTS%' ) ) Against a table that should not be shown as FTS: https://timezones-now-hrjgkinozh.now.sh/timezones-0d61a90?sql=++++++++select+*+from+sqlite_master%0D%0A++++++++++++where+rootpage+%3D+0%0D%0A++++++++++++and+%28%0D%0A++++++++++++++++sql+like+%27%25VIRTUAL+TABLE%25USING+FTS%25content%3D%22ElementaryGeometries%22%25%27%0D%0A++++++++++++++++or+%28%0D%0A++++++++++++++++++tbl_name+%3D+%22ElementaryGeometries%22%0D%0A++++++++++++++++++and+sql+like+%27%25VIRTUAL+TABLE%25USING+FTS%25%27%0D%0A++++++++++++++++%29%0D%0A++++++++++++%29+ Against a table that SHOULD match: https://sf-trees.now.sh/sf-trees-ebc2ad9?sql=++++++++select+*+from+sqlite_master%0D%0A++++++++++++where+rootpage+%3D+0%0D%0A++++++++++++and+%28%0D%0A++++++++++++++++sql+like+%27%25VIRTUAL+TABLE%25USING+FTS%25content%3D%22Street_Tree_List_fts%22%25%27%0D%0A++++++++++++++++or+%28%0D%0A++++++++++++++++++tbl_name+%3D+%22Street_Tree_List_fts%22%0D%0A++++++++++++++++++and+sql+like+%27%25VIRTUAL+TABLE%25USING+FTS%25%27%0D%0A++++++++++++++++%29%0D%0A++++++++++++%29+ {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 275179724  
Powered by Datasette · Queries took 13.748ms · About: simonw/datasette-graphql