diff --git a/.travis.yml b/.travis.yml
index e686029b4..7c026ad13 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -21,7 +21,7 @@ before_install:
# http://tech.groups.yahoo.com/group/firebird-support/message/120883
#- sudo dpkg-reconfigure -f noninteractive firebird2.5-super
- sudo sed /ENABLE_FIREBIRD_SERVER=/s/no/yes/ -i /etc/default/firebird2.5
- - cat /etc/default/firebird2.5
+ - cat /etc/default/firebird2.5 | grep ENABLE_FIREBIRD_SERVER
- sudo service firebird2.5-super start
before_script:
@@ -32,12 +32,12 @@ before_script:
- isql-fb -z -q -i /dev/null # --version
- echo 'CREATE DATABASE "LOCALHOST:/tmp/soci_test.fdb" PAGE_SIZE = 16384;' > /tmp/create_soci_test.sql
- isql-fb -u SYSDBA -p masterkey -i /tmp/create_soci_test.sql -q
- - ls -l /tmp/
+ - cat /tmp/create_soci_test.sql
script:
- mkdir -p src/_build
- cd src/_build
- - cmake -DSOCI_TESTS=ON -DSOCI_EMPTY_TEST_CONNSTR:STRING="dummy connection" -DSOCI_FIREBIRD_TEST_CONNSTR:STRING="service=LOCALHOST:/tmp/soci_test.fdb user=SYSDBA password=masterkey -DSOCI_MYSQL_TEST_CONNSTR:STRING="db=soci_test" -DSOCI_POSTGRESQL_TEST_CONNSTR:STRING="dbname=soci_test user=postgres" -DSOCI_SQLITE3_TEST_CONNSTR:STRING="soci_test.db" -DSOCI_ODBC_TEST_POSTGRESQL_CONNSTR="FILEDSN=${PWD}/../backends/odbc/test/test-postgresql.dsn;" -DSOCI_ODBC_TEST_MYSQL_CONNSTR="FILEDSN=${PWD}/../backends/odbc/test/test-mysql.dsn;" ..
+ - cmake -DSOCI_TESTS=ON -DSOCI_EMPTY_TEST_CONNSTR:STRING="dummy connection" -DSOCI_FIREBIRD_TEST_CONNSTR:STRING="service=LOCALHOST:/tmp/soci_test.fdb user=SYSDBA password=masterkey" -DSOCI_MYSQL_TEST_CONNSTR:STRING="db=soci_test" -DSOCI_POSTGRESQL_TEST_CONNSTR:STRING="dbname=soci_test user=postgres" -DSOCI_SQLITE3_TEST_CONNSTR:STRING="soci_test.db" -DSOCI_ODBC_TEST_POSTGRESQL_CONNSTR="FILEDSN=${PWD}/../backends/odbc/test/test-postgresql.dsn;" -DSOCI_ODBC_TEST_MYSQL_CONNSTR="FILEDSN=${PWD}/../backends/odbc/test/test-mysql.dsn;" ..
- cmake --build .
- ctest -V --output-on-failure .
diff --git a/README.md b/README.md
index b72a9d501..7ffbe8d0d 100644
--- a/README.md
+++ b/README.md
@@ -40,6 +40,7 @@ Requirements
Core:
* C++ compiler
+* Boost C++ Libraries (optional, headers only)
Backend specific:
* Firebird client library X.Y
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 8f3ce3de5..ef0507747 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -67,25 +67,7 @@ include(SociDependencies)
# Installation
#################################################################################
-if(EXISTS /etc/os-release)
- file(READ /etc/os-release OS_RELEASE)
- string(REGEX MATCH "ID(_LIKE)?=debian" DEBIAN ${OS_RELEASE})
- string(REGEX MATCH "ID(_LIKE)?=fedora" FEDORA ${OS_RELEASE})
- string(REGEX MATCH "ID(_LIKE)?=ubuntu" UBUNTU ${OS_RELEASE})
-elseif(EXISTS /etc/lsb-release)
- file(READ /etc/lsb-release OS_RELEASE)
- string(REGEX MATCH "DISTRIB_ID=[Uu]buntu" UBUNTU ${OS_RELEASE})
- string(REGEX MATCH "DISTRIB_ID=[Db]ebian" DEBIAN ${OS_RELEASE})
-endif()
-
-if(UBUNTU)
- set(SOCI_LIBDIR "lib")
-elseif(DEBIAN)
- execute_process(COMMAND uname -m
- OUTPUT_VARIABLE SOCI_ARCH
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- set(SOCI_LIBDIR "lib/${SOCI_ARCH}-linux-gnu")
-elseif(APPLE OR CMAKE_SIZEOF_VOID_P EQUAL 4)
+if(APPLE OR CMAKE_SIZEOF_VOID_P EQUAL 4)
set(SOCI_LIBDIR "lib")
else()
set(SOCI_LIBDIR "lib64")
diff --git a/src/backends/firebird/common.cpp b/src/backends/firebird/common.cpp
index 63c7345c3..0f3047995 100644
--- a/src/backends/firebird/common.cpp
+++ b/src/backends/firebird/common.cpp
@@ -190,7 +190,20 @@ std::string getTextParam(XSQLVAR const *var)
{
size = var->sqllen;
}
- else throw soci_error("Unexpected string type");
+ else if ((var->sqltype & ~1) == SQL_SHORT)
+ {
+ return format_decimal(var->sqldata, var->sqlscale);
+ }
+ else if ((var->sqltype & ~1) == SQL_LONG)
+ {
+ return format_decimal(var->sqldata, var->sqlscale);
+ }
+ else if ((var->sqltype & ~1) == SQL_INT64)
+ {
+ return format_decimal(var->sqldata, var->sqlscale);
+ }
+ else
+ throw soci_error("Unexpected string type");
return std::string(var->sqldata + offset, size);
}
diff --git a/src/backends/firebird/common.h b/src/backends/firebird/common.h
index e600b7651..41e30758c 100644
--- a/src/backends/firebird/common.h
+++ b/src/backends/firebird/common.h
@@ -14,6 +14,7 @@
#include
#include
#include
+#include
#include
#include
@@ -151,6 +152,27 @@ void parse_decimal(void * val, XSQLVAR * var, const char * s)
to_isc(val, var, scale);
}
+template
+std::string format_decimal(const void *sqldata, int sqlscale)
+{
+ IntType x = *reinterpret_cast(sqldata);
+ std::stringstream out;
+ out << x;
+ std::string r = out.str();
+ if (sqlscale < 0)
+ {
+ if (r.size() - (x < 0) <= -sqlscale)
+ {
+ r = std::string(size_t(x < 0), '-') +
+ std::string(-sqlscale - (r.size() - (x < 0)) + 1, '0') +
+ r.substr(size_t(x < 0), std::string::npos);
+ }
+ return r.substr(0, r.size() + sqlscale) + '.' +
+ r.substr(r.size() + sqlscale, std::string::npos);
+ }
+ return r + std::string(sqlscale, '0');
+}
+
template
T1 from_isc(XSQLVAR * var)
{
diff --git a/src/backends/firebird/session.cpp b/src/backends/firebird/session.cpp
index 25d675619..d8d163a37 100644
--- a/src/backends/firebird/session.cpp
+++ b/src/backends/firebird/session.cpp
@@ -9,6 +9,7 @@
#include "soci-firebird.h"
#include "error-firebird.h"
#include "session.h"
+#include
#include
The development of SOCI happens on GitHub. All repositories live
-under the SOCI
-organization where the upstream Git repository is available:
+under the SOCI
+organization where all Git repositories are available.
+
+The main Git repository with SOCI source code can be cloned with:
$ git clone git://github.com/SOCI/soci.git