2008/2/7 Warren Young <mysqlpp@stripped>:
> 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.
I'd vote for using the C99 defines. Most people are likely using
systems that support C99.
You mention not being able to use 'long int', does this preclude using
'long long'? It seems likely that people will want to insert long long
values even on 32bit machines.