Re: [web-devel] [Yesod] How to write a field as binary data column.

[Please reply to the list as well :-)]
2010/12/27 いとうかつとし
Umm, This(B.concate . L.toChunks) don't work. an inserted data is incomplete, which is dropped from invisible characters. In my case , the image file with binary data as "GIF89a^\NUL\NUL\213\&3\NUL...", only "GIF89a^"(7bytes) can be stored. I think I have to escape a binary data. If ByteString field type means binary, I expect the yesod framework to escape automatically. How about?
That's strange and sounds like a bug. I'm using the same (B.concat . L.toChunks) trick and it works very well for me. Are you using up-to-date versions of all libraries? Cheers! -- Felipe.

2010/12/27 Felipe Almeida Lessa
[Please reply to the list as well :-)]
2010/12/27 いとうかつとし
: Umm, This(B.concate . L.toChunks) don't work. an inserted data is incomplete, which is dropped from invisible characters. In my case , the image file with binary data as "GIF89a^\NUL\NUL\213\&3\NUL...", only "GIF89a^"(7bytes) can be stored. I think I have to escape a binary data. If ByteString field type means binary, I expect the yesod framework to escape automatically. How about?
That's strange and sounds like a bug. I'm using the same (B.concat . L.toChunks) trick and it works very well for me. Are you using up-to-date versions of all libraries?
This most certainly *would* be a bug. What backend are you running this against? Can you create a reproducible test case? And you didn't ask it directly, but as for the question of why we don't have direct support for lazy bytestrings: it's because the database backends don't support it. There is no way with either the PostgreSQL or Sqlite databases- nor Redis, MySQL or MongoDB- to lazily send a stream of bytes into the datastore. Giving such a programming interface would just be a lie: in actuality, Persistent would need to concatenate all of the lazy chunks into a single strict bytestring. If you are dealing with relatively small files (relative with regards to your system available memory), then what you are doing should work fine. If you are dealing with relatively large files, you should consider storing the files in the filesystem, and just putting a file path in the database. Michael PS: I actually think some of those databases *do* support streaming BLOBs, but neither persistent nor the underlying libraries have support for this currently. It could be a nice feature, but since storing in the filesystem is usually the recommended approach anyway, adding this is not at the top of my priority list.
Cheers!
-- Felipe.
_______________________________________________ web-devel mailing list web-devel@haskell.org http://www.haskell.org/mailman/listinfo/web-devel
participants (2)
-
Felipe Almeida Lessa
-
Michael Snoyman