typedef struct XY XY;
struct XY {
  int x;
  int y;
};

XY *pXY;


/* When retrieving values, don't do this: */
pXY = (XY *)sqlite3_column_blob(...);

/* Instead do this: */
pXY = (XY *)malloc(sizeof(XY));
memcpy(pXY, sqlite3_column_bloc(...), sizeof(XY));





--- Nathan Kurz <[EMAIL PROTECTED]> wrote:

> 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
> 
> 
> 


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

Reply via email to