html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,issue,performed_via_github_app https://github.com/simonw/datasette/issues/651#issuecomment-568268746,https://api.github.com/repos/simonw/datasette/issues/651,568268746,MDEyOklzc3VlQ29tbWVudDU2ODI2ODc0Ng==,9599,2019-12-22T14:37:37Z,2019-12-22T14:37:37Z,OWNER,"I've not yet been able to figure out what the escaping rule are for FTS5 queries. If we figure out how those work maybe we can bundle them as a custom function? select ... where docs_fts match fts_escape(:search) ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",539590148, https://github.com/simonw/datasette/issues/651#issuecomment-568269476,https://api.github.com/repos/simonw/datasette/issues/651,568269476,MDEyOklzc3VlQ29tbWVudDU2ODI2OTQ3Ng==,9599,2019-12-22T14:46:37Z,2019-12-22T14:47:03Z,OWNER,"https://stackoverflow.com/a/43756146 says that an escaping mechanism that works is this one: select * from blah where term match '""bacon"" ""and"" ""eggs""' So split on whitespace and then encapsulate each search term in double quotes.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",539590148, https://github.com/simonw/datasette/issues/651#issuecomment-579675357,https://api.github.com/repos/simonw/datasette/issues/651,579675357,MDEyOklzc3VlQ29tbWVudDU3OTY3NTM1Nw==,2181410,2020-01-29T09:45:00Z,2021-07-14T19:26:06Z,NONE,"Hi Simon Thank you for adding the escape_function, but it does not work on my datasette-installation (0.33). I've added the following file to my datasette-dir: `/plugins/sql_functions.py`: ```python from datasette import hookimpl def escape_fts_query(query): bits = query.split() return ' '.join('""{}""'.format(bit.replace('""', '')) for bit in bits) @hookimpl def prepare_connection(conn): conn.create_function(""escape_fts_query"", 1, escape_fts_query)` ``` It has no effect on the standard queries to the tables though, as they still produce errors when including any characters like '-', '/', '+' or '?' Does the function only work when using costum queries, where I can include the escape_fts-function explicitly in the sql-query? PS. I'm calling datasette with --plugins=plugins, and my other plugins work just fine. PPS. The fts5 virtual table is created with 'sqlite3' like so: `CREATE VIRTUAL TABLE ""cases_fts"" USING FTS5( title, subtitle, resume, suggestion, presentation, detail = full, content_rowid = 'id', content = 'cases', tokenize='unicode61', 'remove_diacritics 2', 'tokenchars ""-_""' );` Thanks!","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",539590148,