List:MySQL++« Previous MessageNext Message »
From:Warren Young Date:February 8 2008 2:02am
Subject:RFC: What to do about the integer type mess?
View as plain text  
Your humble maintainer has been slacking.  Only yesterday did I begin 
trying to convert my company's code to MySQL++ v3.  Not exactly eating 
my own dogfood...

This has resulted in several minor changes to the svn version in the 
past few days, but only one thing has stood out as really problematic so 
far: integer types aren't being treated very flexibly or portably. 
There are two problems, really:

1. MySQL++ doesn't support long int in queries or SSQLS any more.  If 
you try, you get an assertion (RC3) or an unconditional exception (next 
release).  If this was the only problem, the fix would be obvious and I 
wouldn't be bothering the list about it.  But, it feeds right into...

2. The typedefs in lib/sql_types.h currently assume a standard 32-bit 
x86 type system.  MySQL defines exactly how many bytes INT is, but C++ 
doesn't provide the same rigid definition for int, the current type we 
use for mysqlpp::sql_int.  It all works out the same on a 32-bit PC, but 
64-bit systems will usually make this 64-bit.  Or if they don't, then 
long int certainly is 64-bit.

C99 nailed this problem with stdint.h.  It wouldn't be the first time we 
used a C99 feature in MySQL++ even though C++ doesn't officially support 
stdint.h yet.  So far, though, all use of C99 features has been 
optional.  To make use of stdint.h optional, we'd basically have to 
reinvent it, not something I'm happy doing since it would be different 
for every platform.  A perfectly good, widespread solution exists, so 
I'd like to use it.

It's something we need to take care of before v3 is released.  So, what 
do you all think?  Would the attached patch be a problem?

The patch still doesn't let you use long on a 32-bit machine, as it's 
probably not used in your system's stdint.h.  You probably shouldn't be 
using this data type for portability reasons anyway, as it will change 
on you.  That said, once we figure out the integer sizing problem, a way 
to use long portably might present itself.  For instance, the 
mysql_type_info::types[] table could use sql_int for long on 32-bit 
systems, and sql_bigint on 64-bit ones.

Attachment: [text/x-patch] mysqlpp-stdint.patch
Thread
RFC: What to do about the integer type mess?Warren Young8 Feb
  • Re: RFC: What to do about the integer type mess?Chris Morgan8 Feb
    • Re: RFC: What to do about the integer type mess?Warren Young8 Feb
  • Re: RFC: What to do about the integer type mess?Andrew Sayers8 Feb
  • Re: RFC: What to do about the integer type mess?Jonathan Wakely8 Feb
  • Re: RFC: What to do about the integer type mess?Warren Young12 Feb
    • Re: RFC: What to do about the integer type mess?Warren Young12 Feb