http://www.perlmonks.org?node_id=1007776


in reply to Overflow of $DBI::rows

Sounds unlikely. I have absolutely no experience with Teradata and little with ODBC but I dare say if the variable overflows at 2^31 it's very likely to be an C-level integer. Moving to a 64bit-machine is not an option for you? Perhaps with this amount of data you'd benefit from it anyway. Other than that it's probably difficult to fix on 32bit platforms as larger values could be returned to Perl but would necessarily become inaccurate, which is probably worse than not being able to use them at all.

Replies are listed 'Best First'.
Re^2: Overflow of $DBI::rows
by DanEllison (Scribe) on Dec 07, 2012 at 16:30 UTC
    We are in fact running 64bit Perl on a 64bit machine.
      Windows? When I run Makefile.PL for DBD-ODBC-1.41 on Linux, I get the following:
      unixODBC 2.3.1 DRIVERS............: /etc/unixODBC/odbcinst.ini SYSTEM DATA SOURCES: /etc/unixODBC/odbc.ini FILE DATA SOURCES..: /etc/unixODBC/ODBCDataSources USER DATA SOURCES..: /home/mb/.odbc.ini SQLULEN Size.......: 8 SQLLEN Size........: 8 SQLSETPOSIROW Size.: 8
      All 64bit sizes.
      dbdimp.h has this definition:
      SQLLEN RowCount; /* Rows affected by insert, update, delete * (unreliable for SELECT) */
      This member looks like it was the culprit here and somehow ended up as 32bit. The build output of DBD-ODBC should have some clues.
        We are in fact using DataDirect's 64bit ODBC. So it appears it may be correct. It may very well be a Teradata issue which wouldn't surprise me.