7 messages in com.mysql.lists.plusplusRFC: What to do about the integer typ...| From | Sent On | Attachments |
|---|---|---|
| Warren Young | 07 Feb 2008 18:02 | .patch |
| Chris Morgan | 07 Feb 2008 18:14 | |
| Warren Young | 07 Feb 2008 18:28 | |
| Andrew Sayers | 08 Feb 2008 00:54 | |
| Jonathan Wakely | 08 Feb 2008 01:27 | |
| Warren Young | 11 Feb 2008 18:55 | |
| Warren Young | 11 Feb 2008 19:56 |
| Subject: | RFC: What to do about the integer type mess?![]() |
|---|---|
| From: | Warren Young (mysq...@etr-usa.com) |
| Date: | 02/07/2008 06:02:00 PM |
| List: | com.mysql.lists.plusplus |
| Attachments: |
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.





.patch