BUG #15080: ecpg on windows doesn't define HAVE_LONG_LONG_INT

The Post Office <noreply@postgresql.org>

From: PG Bug reporting form <noreply@postgresql.org>
To: pgsql-bugs@lists.postgresql.org
Cc: jallen@americansavingslife.com
Date: 2018-02-23T03:14:49Z
Lists: pgsql-bugs
The following bug has been logged on the website:

Bug reference:      15080
Logged by:          jonathan allen
Email address:      jallen@americansavingslife.com
PostgreSQL version: 10.2
Operating system:   Windows 10 x64
Description:        

I'm trying to access a bigint column on windows using ecpg and I get the
following error:

SQL error: unsupported type "long long" on line x

I found ecpg_get_data() is the call generating the error, and there's a
block of code being skipped because HAVE_LONG_LONG_INT is not defined.  

I found the following code in pg_config.h and tried adding the 3rd line
(#define HAVE_LONG_LONG_INT 1)...

/* Define to 1 if `long long int' works and is 64 bits. */
#if (_MSC_VER > 1200)
#define HAVE_LONG_LONG_INT_64 1
#define HAVE_LONG_LONG_INT 1
#endif

Then I tried recompiling postgres from source and copying over the new bin,
lib, include and shared directories...but no luck, my program is still
throwing the same error.  I asked on the #postgresql irc channel and
RhodiumToad and xocolatl said that if I reported this as a bug paquier would
see this and he'd be the person to ask about it.  

I'd really like to be able to get a fix going that I can compile and use
myself until a new public release is available - this bug has brought our
postgres migration to a standstill, it's a real show stopper. :(

Thank you for looking into this and hopefully pointing me in the right
direction. :)

-Jonathan

Commits

  1. Remove configure's check for nonstandard "long long" printf modifiers.

  2. printf("%lf") is not portable, so omit the "l".

  3. Support platforms where strtoll/strtoull are spelled __strtoll/__strtoull.

  4. Arrange to supply declarations for strtoll/strtoull if needed.

  5. Hot-fix ecpg regression test for missing ecpg_config.h inclusion.

  6. Add some test coverage for ecpg's "long long" support.

  7. Recognize that MSVC can support strtoll() and strtoull().

  8. Fix up ecpg's configuration so it handles "long long int" in MSVC builds.