On Wed, Dec 07, 2005 at 08:34:46PM -0800, Dan Kennedy wrote:
> > To make it work in more than a superficial manner, you probably will
> > need a good understanding of how structures are internally represented
> > in C++ or C.  You pass sqlite a pointer to the struct and tell it how
> > long it is (using sizeof()).  When you get the blob back, you then
> > treat the data as an instance of your structure by casting it.
> 
> I'm not sure this is always the best way to go. Any databases produced like 
> this will not be portable between architectures. In theory, they may not
> be portable between compilers, but in practice you're probably Ok there.

A good caveat.  If any of the members of your structure are more than
one byte long (ie, an int) this approach will fail terribly if you
create the database on a little-endian machine (Intel/PC) and then try
to use it on a little-endian one (Motorola/Mac).  But I decided to
take the question as 'How do I', rather than 'Should I'.

> Also, SQLite makes no guarantees as to the alignment of returned blobs. 
> This could cause a random crash somewhere down the line. You could get
> around this by making a copy of the blob to memory obtained from malloc().

Can you offer more information about this?  In what I'm working on, I
am storing arrays of complex structures as blobs and then reconstituting
them.  I was concerned about alignment at one point, but it seems to
be working without problems.  Are there 'gotchas' that are likely to
'get me' in the future?  This is server-side, and only for temporary
data, so I'm not concerned about the endian-ness, only the alignment.

Thanks!

--nate


Reply via email to