From 38f71761308da491de747ccf0ed2f9387ee25f8d Mon Sep 17 00:00:00 2001
From: olszewst <tomasz.olszewski@sabre.com>
Date: Wed, 10 Apr 2013 16:12:32 +0200
Subject: [PATCH] Correct binding to NUMBER in Oracle backend.

On platforms where std::numeric_limits<int>::digits10 == 9,
NUMBER(9,0) can be represented losslessly using C++ type int.
Oracle data type NUMBER(precision,scale) is bound to C++ int
if scale is 0 and precision < std::numeric_limits<int>::digits10.
This comparison prevents conversion of NUMBER(9,0) to int, thus it is corrected
using weaker form: precision <= std::numeric_limits<int>::digits10.

Fixes #126
Close #128

(Original commit message amended by Mateusz Loskot)
---
 doc/backends/oracle.html          | 2 +-
 src/backends/oracle/statement.cpp | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/doc/backends/oracle.html b/doc/backends/oracle.html
index 44b1e09a..48bd41c7 100644
--- a/doc/backends/oracle.html
+++ b/doc/backends/oracle.html
@@ -121,7 +121,7 @@ sql &lt;&lt; "select count(*) from user_tables", into(count);
       <td><code>double</code></td>
     </tr>
     <tr>
-      <td>number<br /><i>(where scale = 0 and precision &lt; std::numeric_limits&lt;int&gt;::digits10)</i></td>
+      <td>number<br /><i>(where scale = 0 and precision &le; std::numeric_limits&lt;int&gt;::digits10)</i></td>
       <td><code>dt_integer</code></td>
       <td><code>int</code></td>
     </tr>
diff --git a/src/backends/oracle/statement.cpp b/src/backends/oracle/statement.cpp
index 7cd296dc..0b3d7093 100644
--- a/src/backends/oracle/statement.cpp
+++ b/src/backends/oracle/statement.cpp
@@ -283,7 +283,7 @@ void oracle_statement_backend::describe_column(int colNum, data_type &type,
             else
                 type = dt_double;
         }
-        else if (precision < std::numeric_limits<int>::digits10)
+        else if (precision <= std::numeric_limits<int>::digits10)
         {
             type = dt_integer;
         }
-- 
GitLab