{"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/19#issuecomment-624406285", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/19", "id": 624406285, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDQwNjI4NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T02:10:03Z", "updated_at": "2020-05-06T02:10:03Z", "author_association": "MEMBER", "body": "Most annoying part of this is the difficulty of actually showing a photo.\r\n\r\nMaybe I need to run a local proxy that I can link to? A custom Datasette plugin perhaps?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 613002220, "label": "apple-photos command should work even if upload has not run"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/20#issuecomment-624408220", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/20", "id": 624408220, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDQwODIyMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T02:18:47Z", "updated_at": "2020-05-06T02:18:47Z", "author_association": "MEMBER", "body": "The `apple_photos` table has an indexed `uuid` column and a `path` column which stores the full path to that photo file on disk.\r\n\r\nI can write a custom Datasette plugin which takes the `uuid` from the URL, looks up the path, then serves up a thumbnail of the jpeg or heic image file.\r\n\r\nI'll prototype this is a one-off plugin first, then package it on PyPI for other people to install.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 613006393, "label": "Ability to serve thumbnailed Apple Photo from its place on disk"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/20#issuecomment-624408370", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/20", "id": 624408370, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDQwODM3MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T02:19:27Z", "updated_at": "2020-05-06T02:19:27Z", "author_association": "MEMBER", "body": "The plugin can be generalized: it can be configured to know how to take the URL path, look it up in ANY table (via a custom SQL query) to get a path on disk and then serve that.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 613006393, "label": "Ability to serve thumbnailed Apple Photo from its place on disk"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/20#issuecomment-624408738", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/20", "id": 624408738, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDQwODczOA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T02:21:05Z", "updated_at": "2020-05-06T02:21:32Z", "author_association": "MEMBER", "body": "Here's rendering code from my hacked-together not-yet-released S3 image proxy:\r\n```python\r\nfrom starlette.responses import Response\r\nfrom PIL import Image, ExifTags\r\nimport pyheif\r\n\r\nfor ORIENTATION_TAG in ExifTags.TAGS.keys():\r\n if ExifTags.TAGS[ORIENTATION_TAG] == \"Orientation\":\r\n break\r\n ...\r\n # Load it into Pillow\r\n if ext == \"heic\":\r\n heic = pyheif.read_heif(image_response.content)\r\n image = Image.frombytes(mode=heic.mode, size=heic.size, data=heic.data)\r\n else:\r\n image = Image.open(io.BytesIO(image_response.content))\r\n\r\n # Does EXIF tell us to rotate it?\r\n try:\r\n exif = dict(image._getexif().items())\r\n if exif[ORIENTATION_TAG] == 3:\r\n image = image.rotate(180, expand=True)\r\n elif exif[ORIENTATION_TAG] == 6:\r\n image = image.rotate(270, expand=True)\r\n elif exif[ORIENTATION_TAG] == 8:\r\n image = image.rotate(90, expand=True)\r\n except (AttributeError, KeyError, IndexError):\r\n pass\r\n\r\n # Resize based on ?w= and ?h=, if set\r\n width, height = image.size\r\n w = request.query_params.get(\"w\")\r\n h = request.query_params.get(\"h\")\r\n if w is not None or h is not None:\r\n if h is None:\r\n # Set h based on w\r\n w = int(w)\r\n h = int((float(height) / width) * w)\r\n elif w is None:\r\n h = int(h)\r\n # Set w based on h\r\n w = int((float(width) / height) * h)\r\n w = int(w)\r\n h = int(h)\r\n image.thumbnail((w, h))\r\n\r\n # ?bw= converts to black and white\r\n if request.query_params.get(\"bw\"):\r\n image = image.convert(\"L\")\r\n\r\n # ?q= sets the quality - defaults to 75\r\n quality = 75\r\n q = request.query_params.get(\"q\")\r\n if q and q.isdigit() and 1 <= int(q) <= 100:\r\n quality = int(q)\r\n\r\n # Output as JPEG or PNG\r\n output_image = io.BytesIO()\r\n image_type = \"JPEG\"\r\n kwargs = {\"quality\": quality}\r\n if image.format == \"PNG\":\r\n image_type = \"PNG\"\r\n kwargs = {}\r\n\r\n image.save(output_image, image_type, **kwargs)\r\n return Response(\r\n output_image.getvalue(),\r\n media_type=\"image/jpeg\",\r\n headers={\"cache-control\": \"s-maxage={}, public\".format(365 * 24 * 60 * 60)},\r\n )\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 613006393, "label": "Ability to serve thumbnailed Apple Photo from its place on disk"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/760#issuecomment-624729459", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/760", "id": 624729459, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDcyOTQ1OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T15:47:44Z", "updated_at": "2020-05-06T15:47:44Z", "author_association": "OWNER", "body": "`select * from pragma_table_info(tablename);` is currently disallowed for user-provided queries via a regex restriction - but could help here too.\r\n\r\nhttps://github.com/simonw/datasette/blob/d349d57cdf3d577afb62bdf784af342a4d5be660/datasette/utils/__init__.py#L174", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 613422636, "label": "Way of seeing full schema for a database"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/761#issuecomment-624766424", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/761", "id": 624766424, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDc2NjQyNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T16:54:38Z", "updated_at": "2020-05-06T17:01:02Z", "author_association": "OWNER", "body": "I could allow-list some other useful `pragma_x` tables too.\r\n\r\nSQLite calls these \"pragma functions\" - documented here: https://www.sqlite.org/pragma.html#pragfunc\r\n\r\nThey sound safe:\r\n\r\n> Table-valued functions exist only for PRAGMAs that return results and that have no side-effects. ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 613467382, "label": "Allow-list pragma_table_info(tablename) and similar"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/761#issuecomment-624767466", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/761", "id": 624767466, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDc2NzQ2Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T16:56:40Z", "updated_at": "2020-05-06T16:57:03Z", "author_association": "OWNER", "body": "The rationale for blocking `pragma` entirely from statements is that it can be used to change the state of the SQLite database, e.g. from https://www.sqlite.org/pragma.html :\r\n\r\n```\r\nPRAGMA schema.application_id;\r\nPRAGMA schema.application_id = integer ;\r\n```\r\nThat second line is unsafe. I don't think it's possible to use the `pragma_table_x` variants to make writes in this way.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 613467382, "label": "Allow-list pragma_table_info(tablename) and similar"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/761#issuecomment-624768744", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/761", "id": 624768744, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDc2ODc0NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T16:59:01Z", "updated_at": "2020-05-06T16:59:01Z", "author_association": "OWNER", "body": "Maybe use a negative lookahead assertion? https://docs.python.org/3/library/re.html#index-20\r\n\r\n> `(?!...)`\r\n> \r\n> Matches if `...` doesn\u2019t match next. This is a negative lookahead assertion. For example, `Isaac (?!Asimov)` will match 'Isaac ' only if it\u2019s not followed by 'Asimov'.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 613467382, "label": "Allow-list pragma_table_info(tablename) and similar"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/761#issuecomment-624774928", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/761", "id": 624774928, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDc3NDkyOA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T17:11:15Z", "updated_at": "2020-05-06T17:11:15Z", "author_association": "OWNER", "body": "For the moment I'll allow-list the following:\r\n* `pragma_database_list`\r\n* `pragma_foreign_key_list`\r\n* `pragma_function_list`\r\n* `pragma_index_info`\r\n* `pragma_index_list`\r\n* `pragma_index_xinfo`\r\n* `pragma_page_count`\r\n* `pragma_max_page_count`\r\n* `pragma_page_size`\r\n* `pragma_schema_version`\r\n* `pragma_table_info`\r\n* `pragma_table_xinfo`\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 613467382, "label": "Allow-list pragma_table_info(tablename) and similar"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/761#issuecomment-624782775", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/761", "id": 624782775, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDc4Mjc3NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T17:26:05Z", "updated_at": "2020-05-06T17:26:05Z", "author_association": "OWNER", "body": "Some demos:\r\n* https://latest.datasette.io/fixtures?sql=select+*+from+pragma_database_list%28%29\r\n* https://latest.datasette.io/fixtures?sql=select+*+from+pragma_foreign_key_list%28%27complex_foreign_keys%27%29\r\n* https://latest.datasette.io/fixtures?sql=select+*+from+pragma_function_list%28%29\r\n* https://latest.datasette.io/fixtures?sql=select+*+from+pragma_index_info%28%27idx_compound_three_primary_keys_content%27%29\r\n* https://latest.datasette.io/fixtures?sql=select+*+from+pragma_index_list%28%27compound_three_primary_keys%27%29\r\n* https://latest.datasette.io/fixtures?sql=select+*+from+pragma_index_xinfo%28%27idx_compound_three_primary_keys_content%27%29\r\n* https://latest.datasette.io/fixtures?sql=select+*+from+pragma_page_count%28%29\r\n* https://latest.datasette.io/fixtures?sql=select+*+from+pragma_max_page_count%28%29\r\n* https://latest.datasette.io/fixtures?sql=select+*+from+pragma_page_size%28%29\r\n* https://latest.datasette.io/fixtures?sql=select+*+from+pragma_schema_version%28%29\r\n* https://latest.datasette.io/fixtures?sql=select+*+from+pragma_table_info%28%27complex_foreign_keys%27%29\r\n* https://latest.datasette.io/fixtures?sql=select+*+from+pragma_table_xinfo%28%27complex_foreign_keys%27%29", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 613467382, "label": "Allow-list pragma_table_info(tablename) and similar"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/761#issuecomment-624783996", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/761", "id": 624783996, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDc4Mzk5Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T17:28:20Z", "updated_at": "2020-05-06T17:28:20Z", "author_association": "OWNER", "body": "Interestingly https://latest.datasette.io/fixtures?sql=select+*+from+pragma_function_list() doesn't work, when it DOES work on my laptop. \r\n\r\n`latest.datasette.io` currently runs SQLite `3.27.2` while my laptop runs `3.31.1`\r\n\r\nhttps://www.sqlite.org/changes.html#version_3_30_0 says that as-of 3.30.0:\r\n> The PRAGMA function_list, PRAGMA module_list, and PRAGMA pragma_list commands are now enabled in all builds by default. Disable them using -DSQLITE_OMIT_INTROSPECTION_PRAGMAS. ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 613467382, "label": "Allow-list pragma_table_info(tablename) and similar"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/760#issuecomment-624787678", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/760", "id": 624787678, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDc4NzY3OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T17:35:05Z", "updated_at": "2020-05-06T17:35:05Z", "author_association": "OWNER", "body": "Potential recipe in https://github.com/simonw/til/blob/master/sqlite/list-all-columns-in-a-database.md", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 613422636, "label": "Way of seeing full schema for a database"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/761#issuecomment-624790887", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/761", "id": 624790887, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDc5MDg4Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T17:41:21Z", "updated_at": "2020-05-06T17:41:21Z", "author_association": "OWNER", "body": "More demos here: https://github.com/simonw/til/blob/master/sqlite/list-all-columns-in-a-database.md", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 613467382, "label": "Allow-list pragma_table_info(tablename) and similar"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/759#issuecomment-624795695", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/759", "id": 624795695, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDc5NTY5NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T17:50:57Z", "updated_at": "2020-05-06T17:52:07Z", "author_association": "OWNER", "body": "This was a deliberate change from #651.\r\n\r\nThe `_search_colname=` alternative argument for doing this still works - compare these two:\r\n\r\n* https://latest.datasette.io/fixtures/searchable?_search=dog\r\n* https://latest.datasette.io/fixtures/searchable?_search_tex1=dog\r\n\r\nIf you want to use advanced search syntax on those pages you can do so using the `&_searchmode=raw` option - I added better documentation for this the other day: https://datasette.readthedocs.io/en/latest/full_text_search.html#advanced-sqlite-search-queries\r\n\r\nExample: https://latest.datasette.io/fixtures/searchable?_search=text1:dog&_searchmode=raw", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 612673948, "label": "fts search on a column doesn't work anymore due to escape_fts"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/758#issuecomment-624796685", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/758", "id": 624796685, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDc5NjY4NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T17:52:54Z", "updated_at": "2020-05-06T17:52:54Z", "author_association": "OWNER", "body": "Thanks for the suggestion! I'll add this.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 612382643, "label": "Question: Access to immutable database-path"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/758#issuecomment-624797119", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/758", "id": 624797119, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDc5NzExOQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T17:53:46Z", "updated_at": "2020-05-06T17:53:46Z", "author_association": "OWNER", "body": "It's interesting to hear from someone who's using this feature - I'm considering moving it out into a plugin #647.", "reactions": "{\"total_count\": 1, \"+1\": 1, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 612382643, "label": "Question: Access to immutable database-path"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/757#issuecomment-624798182", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/757", "id": 624798182, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDc5ODE4Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T17:55:50Z", "updated_at": "2020-05-06T17:55:50Z", "author_association": "OWNER", "body": "I'll definitely get that out this week!\r\n\r\nFor the moment a trick I often use is to put a URL to the most recent commit in my `requirements.txt` - e.g. https://github.com/simonw/datasette/archive/0784f2ef9d3ff6dd9df05f54cb51de29a6d11764.zip\r\n\r\nThis should be safe because nothing lands on Datasette master without the full unit test suite passing. But you're right, there's a bunch of stuff now that needs to go out in a release: https://github.com/simonw/datasette/compare/0.40...0784f2ef9d3ff6dd9df05f54cb51de29a6d11764", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 612378203, "label": "Question: Any fixed date for the release with the uft8-encoding fix?"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/757#issuecomment-624798540", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/757", "id": 624798540, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDc5ODU0MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T17:56:34Z", "updated_at": "2020-05-06T17:56:34Z", "author_association": "OWNER", "body": "Actually I'm going to put that release out today. I was hoping to finish #698 first but that shouldn't delay those other features any longer.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 612378203, "label": "Question: Any fixed date for the release with the uft8-encoding fix?"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/757#issuecomment-624821090", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/757", "id": 624821090, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDgyMTA5MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T18:41:29Z", "updated_at": "2020-05-06T18:41:29Z", "author_association": "OWNER", "body": "OK, I just released 0.41 with that and a bunch of other stuff: https://datasette.readthedocs.io/en/latest/changelog.html#v0-41", "reactions": "{\"total_count\": 1, \"+1\": 1, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 612378203, "label": "Question: Any fixed date for the release with the uft8-encoding fix?"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/759#issuecomment-624860451", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/759", "id": 624860451, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDg2MDQ1MQ==", "user": {"value": 133845, "label": "Krazybug"}, "created_at": "2020-05-06T20:03:01Z", "updated_at": "2020-05-06T20:04:42Z", "author_association": "NONE", "body": "Thank you. Now it's ok with the url\r\n\r\nhttp://localhost:8001/index/summary?_search=language%3Aeng&_sort=title&_searchmode=raw\r\n\r\nBut I'm not able to manage it in the metadata file. Here is mine (note that the sort column is taken into account)\r\nHere it is:\r\n\r\n```\r\n{\r\n \"databases\": {\r\n \"index\": {\r\n \"tables\": {\r\n \"summary\": {\r\n \"sort\": \"title\",\r\n \"searchmode\": \"raw\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n```\r\nAny idea ?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 612673948, "label": "fts search on a column doesn't work anymore due to escape_fts"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/760#issuecomment-624949809", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/760", "id": 624949809, "node_id": "MDEyOklzc3VlQ29tbWVudDYyNDk0OTgwOQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-06T23:49:06Z", "updated_at": "2020-05-06T23:49:06Z", "author_association": "OWNER", "body": "```sql\r\nselect\r\n sqlite_master.name as table_name,\r\n table_info.*\r\nfrom\r\n sqlite_master\r\n join pragma_table_info(sqlite_master.name) as table_info\r\norder by\r\n sqlite_master.name,\r\n table_info.cid\r\n```\r\nhttps://latest.datasette.io/fixtures?sql=select%0D%0A++sqlite_master.name+as+table_name%2C%0D%0A++table_info.*%0D%0Afrom%0D%0A++sqlite_master%0D%0A++join+pragma_table_info%28sqlite_master.name%29+as+table_info%0D%0Aorder+by%0D%0A++sqlite_master.name%2C%0D%0A++table_info.cid", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 613422636, "label": "Way of seeing full schema for a database"}, "performed_via_github_app": null}