{"changelog~3Acontrol-http-caching-with-ttl": {"id": "changelog:control-http-caching-with-ttl", "page": "changelog", "ref": "control-http-caching-with-ttl", "title": "Control HTTP caching with ?_ttl=", "content": "You can now customize the HTTP max-age header that is sent on a per-URL basis, using the new  ?_ttl=  query string parameter. \n                 You can set this to any value in seconds, or you can set it to 0 to disable HTTP caching entirely. \n                 Consider for example this query which returns a randomly selected member of the Avengers: \n                 select * from [avengers/avengers] order by random() limit 1 \n                 If you hit the following page repeatedly you will get the same result, due to HTTP caching: \n                 /fivethirtyeight?sql=select+*+from+%5Bavengers%2Favengers%5D+order+by+random%28%29+limit+1 \n                 By adding  ?_ttl=0  to the zero you can ensure the page will not be cached and get back a different super hero every time: \n                 /fivethirtyeight?sql=select+*+from+%5Bavengers%2Favengers%5D+order+by+random%28%29+limit+1&_ttl=0", "breadcrumbs": "[\"Changelog\", \"0.23 (2018-06-18)\"]", "references": "[{\"href\": \"https://fivethirtyeight.datasettes.com/fivethirtyeight?sql=select+*+from+%5Bavengers%2Favengers%5D+order+by+random%28%29+limit+1\", \"label\": \"/fivethirtyeight?sql=select+*+from+%5Bavengers%2Favengers%5D+order+by+random%28%29+limit+1\"}, {\"href\": \"https://fivethirtyeight.datasettes.com/fivethirtyeight?sql=select+*+from+%5Bavengers%2Favengers%5D+order+by+random%28%29+limit+1&_ttl=0\", \"label\": \"/fivethirtyeight?sql=select+*+from+%5Bavengers%2Favengers%5D+order+by+random%28%29+limit+1&_ttl=0\"}]"}, "changelog~3Acsv-export": {"id": "changelog:csv-export", "page": "changelog", "ref": "csv-export", "title": "CSV export", "content": "Any Datasette table, view or custom SQL query can now be exported as CSV. \n                 \n                 Check out the  CSV export documentation  for more details, or\n                    try the feature out on\n                     https://fivethirtyeight.datasettes.com/fivethirtyeight/bechdel%2Fmovies \n                 If your table has more than  max_returned_rows  (default 1,000)\n                    Datasette provides the option to  stream all rows . This option takes advantage\n                    of async Python and Datasette's efficient  pagination  to\n                    iterate through the entire matching result set and stream it back as a\n                    downloadable CSV file.", "breadcrumbs": "[\"Changelog\", \"0.23 (2018-06-18)\"]", "references": "[{\"href\": \"https://fivethirtyeight.datasettes.com/fivethirtyeight/bechdel%2Fmovies\", \"label\": \"https://fivethirtyeight.datasettes.com/fivethirtyeight/bechdel%2Fmovies\"}]"}, "changelog~3Aforeign-key-expansions": {"id": "changelog:foreign-key-expansions", "page": "changelog", "ref": "foreign-key-expansions", "title": "Foreign key expansions", "content": "When Datasette detects a foreign key reference it attempts to resolve a label\n                    for that reference (automatically or using the  Specifying the label column for a table  metadata\n                    option) so it can display a link to the associated row. \n                 This expansion is now also available for JSON and CSV representations of the\n                    table, using the new  _labels=on  query string option. See\n                     Expanding foreign key references  for more details.", "breadcrumbs": "[\"Changelog\", \"0.23 (2018-06-18)\"]", "references": "[]"}, "changelog~3Aimproved-support-for-spatialite": {"id": "changelog:improved-support-for-spatialite", "page": "changelog", "ref": "improved-support-for-spatialite", "title": "Improved support for SpatiaLite", "content": "The  SpatiaLite module \n                    for SQLite adds robust geospatial features to the database. \n                 Getting SpatiaLite working can be tricky, especially if you want to use the most\n                    recent alpha version (with support for K-nearest neighbor). \n                 Datasette now includes  extensive documentation on SpatiaLite , and thanks to  Ravi Kotecha  our GitHub\n                    repo includes a  Dockerfile  that can build\n                    the latest SpatiaLite and configure it for use with Datasette. \n                 The  datasette publish  and  datasette package  commands now accept a new\n                     --spatialite  argument which causes them to install and configure SpatiaLite\n                    as part of the container they deploy.", "breadcrumbs": "[\"Changelog\", \"0.23 (2018-06-18)\"]", "references": "[{\"href\": \"https://www.gaia-gis.it/fossil/libspatialite/index\", \"label\": \"SpatiaLite module\"}, {\"href\": \"https://github.com/r4vi\", \"label\": \"Ravi Kotecha\"}, {\"href\": \"https://github.com/simonw/datasette/blob/master/Dockerfile\", \"label\": \"Dockerfile\"}]"}, "changelog~3Alatest-datasette-io": {"id": "changelog:latest-datasette-io", "page": "changelog", "ref": "latest-datasette-io", "title": "latest.datasette.io", "content": "Every commit to Datasette master is now automatically deployed by Travis CI to\n                     https://latest.datasette.io/  - ensuring there is always a live demo of the\n                    latest version of the software. \n                 The demo uses  the fixtures  from our\n                    unit tests, ensuring it demonstrates the same range of functionality that is\n                    covered by the tests. \n                 You can see how the deployment mechanism works in our  .travis.yml  file.", "breadcrumbs": "[\"Changelog\", \"0.23 (2018-06-18)\"]", "references": "[{\"href\": \"https://latest.datasette.io/\", \"label\": \"https://latest.datasette.io/\"}, {\"href\": \"https://github.com/simonw/datasette/blob/master/tests/fixtures.py\", \"label\": \"the fixtures\"}, {\"href\": \"https://github.com/simonw/datasette/blob/master/.travis.yml\", \"label\": \".travis.yml\"}]"}, "changelog~3Amiscellaneous": {"id": "changelog:miscellaneous", "page": "changelog", "ref": "miscellaneous", "title": "Miscellaneous", "content": "Got JSON data in one of your columns? Use the new  ?_json=COLNAME  argument\n                            to tell Datasette to return that JSON value directly rather than encoding it\n                            as a string. \n                     \n                     \n                         If you just want an array of the first value of each row, use the new\n                             ?_shape=arrayfirst  option -  example .", "breadcrumbs": "[\"Changelog\", \"0.23 (2018-06-18)\"]", "references": "[{\"href\": \"https://latest.datasette.io/fixtures.json?sql=select+neighborhood+from+facetable+order+by+pk+limit+101&_shape=arrayfirst\", \"label\": \"example\"}]"}, "changelog~3Anew-configuration-settings": {"id": "changelog:new-configuration-settings", "page": "changelog", "ref": "new-configuration-settings", "title": "New configuration settings", "content": "Datasette's  Settings  now also supports boolean settings. A number of new\n                    configuration options have been added: \n                 \n                     \n                         num_sql_threads  - the number of threads used to execute SQLite queries. Defaults to 3. \n                     \n                     \n                         allow_facet  - enable or disable custom  Facets  using the  _facet=  parameter. Defaults to on. \n                     \n                     \n                         suggest_facets  - should Datasette suggest facets? Defaults to on. \n                     \n                     \n                         allow_download  - should users be allowed to download the entire SQLite database? Defaults to on. \n                     \n                     \n                         allow_sql  - should users be allowed to execute custom SQL queries? Defaults to on. \n                     \n                     \n                         default_cache_ttl  - Default HTTP caching max-age header in seconds. Defaults to 365 days - caching can be disabled entirely by settings this to 0. \n                     \n                     \n                         cache_size_kb  - Set the amount of memory SQLite uses for its  per-connection cache , in KB. \n                     \n                     \n                         allow_csv_stream  - allow users to stream entire result sets as a single CSV file. Defaults to on. \n                     \n                     \n                         max_csv_mb  - maximum size of a returned CSV file in MB. Defaults to 100MB, set to 0 to disable this limit.", "breadcrumbs": "[\"Changelog\", \"0.23 (2018-06-18)\"]", "references": "[{\"href\": \"https://www.sqlite.org/pragma.html#pragma_cache_size\", \"label\": \"per-connection cache\"}]"}}