use RawFilePath for opening sqlite databases

Fix a crash opening sqlite databases when run in a non-unicode locale,
with a remote that uses a non-unicode filepath. In that situation
converting to Text fails.

The fix needs git-annex to be built with persistent-sqlite 2.13.3.
Building against older versions still works, but that version is used when
building with stack.

Database.RawFilePath is a lot of code copied from persistent-sqlite and
lightly modified, since only 1 function in persistent-sqlite was made to
support RawFilePath. This is a bit of a pain, and I hope that
persistent-sqlite will eventually switch to using OsPath, allowing this
module to be removed from git-annex.

Sponsored-by: k0ld on Patreon
This commit is contained in:
Joey Hess 2023-12-26 18:31:52 -04:00
parent 6d789c9c81
commit 8a3beabf35
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
8 changed files with 138 additions and 8 deletions

View file

@ -193,11 +193,13 @@ runSqliteRobustly tablename db a = do
| otherwise -> rethrow $ errmsg "after successful open" ex
opensettle retries ic = do
conn <- Sqlite.open tdb
#if MIN_VERSION_persistent_sqlite(2,13,3)
conn <- Sqlite.open' db
#else
conn <- Sqlite.open (T.pack (fromRawFilePath db))
#endif
settle conn retries ic
tdb = T.pack (fromRawFilePath db)
settle conn retries ic = do
r <- try $ do
stmt <- Sqlite.prepare conn nullselect