diff options
| -rw-r--r-- | ports/nanodbc/0001_cmake.patch | 23 | ||||
| -rw-r--r-- | ports/nanodbc/0002_msvc14_codecvt.patch | 34 | ||||
| -rw-r--r-- | ports/nanodbc/0003_export_def.patch | 509 | ||||
| -rw-r--r-- | ports/nanodbc/CONTROL | 3 | ||||
| -rw-r--r-- | ports/nanodbc/portfile.cmake | 33 |
5 files changed, 602 insertions, 0 deletions
diff --git a/ports/nanodbc/0001_cmake.patch b/ports/nanodbc/0001_cmake.patch new file mode 100644 index 000000000..36d57be0e --- /dev/null +++ b/ports/nanodbc/0001_cmake.patch @@ -0,0 +1,23 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 9f4aa71..94edd95 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -201,9 +201,16 @@ endif() + if(NANODBC_INSTALL) + install(FILES src/nanodbc.h DESTINATION include) + if(NANODBC_STATIC) +- install(TARGETS nanodbc ARCHIVE DESTINATION lib) ++ install( ++ TARGETS nanodbc ++ ARCHIVE DESTINATION lib ++ LIBRARY DESTINATION lib) + else() +- install(TARGETS nanodbc LIBRARY DESTINATION lib) ++ install( ++ TARGETS nanodbc ++ ARCHIVE DESTINATION lib ++ LIBRARY DESTINATION lib ++ RUNTIME DESTINATION bin) + endif() + message(STATUS "Target install: Turned on") + else() diff --git a/ports/nanodbc/0002_msvc14_codecvt.patch b/ports/nanodbc/0002_msvc14_codecvt.patch new file mode 100644 index 000000000..ae499bcf9 --- /dev/null +++ b/ports/nanodbc/0002_msvc14_codecvt.patch @@ -0,0 +1,34 @@ +diff --git a/src/nanodbc.cpp b/src/nanodbc.cpp +index 8e02d4a..2e42b91 100644 +--- a/src/nanodbc.cpp ++++ b/src/nanodbc.cpp +@@ -209,10 +209,11 @@ namespace + out = utf_to_utf<char>(in.c_str(), in.c_str() + in.size()); + #else + #if defined(_MSC_VER) && (_MSC_VER == 1900) +- // Workaround for confirmed bug in VS2015. +- // See: https://social.msdn.microsoft.com/Forums/en-US/8f40dcd8-c67f-4eba-9134-a19b9178e481/vs-2015-rc-linker-stdcodecvt-error +- auto p = reinterpret_cast<wide_char_t const*>(in.data()); +- out = std::wstring_convert<NANODBC_CODECVT_TYPE<wide_char_t>, wide_char_t>().to_bytes(p, p + in.size()); ++ // Workaround for confirmed bug in VS2015. See: ++ // https://connect.microsoft.com/VisualStudio/Feedback/Details/1403302 ++ // https://social.msdn.microsoft.com/Forums/en-US/8f40dcd8-c67f-4eba-9134-a19b9178e481/vs-2015-rc-linker-stdcodecvt-error ++ auto p = reinterpret_cast<unsigned short const*>(in.data()); ++ out = std::wstring_convert<NANODBC_CODECVT_TYPE<unsigned short>, unsigned short>().to_bytes(p, p + in.size()); + #else + out = std::wstring_convert<NANODBC_CODECVT_TYPE<wide_char_t>, wide_char_t>().to_bytes(in); + #endif +@@ -226,9 +227,10 @@ namespace + using boost::locale::conv::utf_to_utf; + out = utf_to_utf<wide_char_t>(in.c_str(), in.c_str() + in.size()); + #elif defined(_MSC_VER) && (_MSC_VER == 1900) +- // Workaround for confirmed bug in VS2015. +- // See: https://social.msdn.microsoft.com/Forums/en-US/8f40dcd8-c67f-4eba-9134-a19b9178e481/vs-2015-rc-linker-stdcodecvt-error +- auto s = std::wstring_convert<NANODBC_CODECVT_TYPE<wide_char_t>, wide_char_t>().from_bytes(in); ++ // Workaround for confirmed bug in VS2015. See: ++ // https://connect.microsoft.com/VisualStudio/Feedback/Details/1403302 ++ // https://social.msdn.microsoft.com/Forums/en-US/8f40dcd8-c67f-4eba-9134-a19b9178e481/vs-2015-rc-linker-stdcodecvt-error ++ auto s = std::wstring_convert<NANODBC_CODECVT_TYPE<unsigned short>, unsigned short>().from_bytes(in); + auto p = reinterpret_cast<wide_char_t const*>(s.data()); + out.assign(p, p + s.size()); + #else diff --git a/ports/nanodbc/0003_export_def.patch b/ports/nanodbc/0003_export_def.patch new file mode 100644 index 000000000..0d1ae5a5f --- /dev/null +++ b/ports/nanodbc/0003_export_def.patch @@ -0,0 +1,509 @@ +diff --git a/src/nanodbc.cpp b/src/nanodbc.cpp +index 8e02d4a..0483660 100644 +--- a/src/nanodbc.cpp ++++ b/src/nanodbc.cpp +@@ -3253,10 +3253,10 @@ unsigned long statement::parameter_size(short param) const + + // We need to instantiate each form of bind() for each of our supported data types. + #define NANODBC_INSTANTIATE_BINDS(type) \ +- template void statement::bind(short, const type*, param_direction); /* 1-ary */ \ +- template void statement::bind(short, const type*, std::size_t, param_direction); /* n-ary */ \ +- template void statement::bind(short, const type*, std::size_t, const type*, param_direction); /* n-ary, sentry */ \ +- template void statement::bind(short, const type*, std::size_t, const bool*, param_direction) /* n-ary, flags */ \ ++ template NANODBC_API void statement::bind(short, const type*, param_direction); /* 1-ary */ \ ++ template NANODBC_API void statement::bind(short, const type*, std::size_t, param_direction); /* n-ary */ \ ++ template NANODBC_API void statement::bind(short, const type*, std::size_t, const type*, param_direction); /* n-ary, sentry */ \ ++ template NANODBC_API void statement::bind(short, const type*, std::size_t, const bool*, param_direction) /* n-ary, flags */ \ + /**/ + + // The following are the only supported instantiations of statement::bind(). +@@ -3875,112 +3875,112 @@ result::operator bool() const + } + + // The following are the only supported instantiations of result::get_ref(). +-template void result::get_ref(short, string_type::value_type&) const; +-template void result::get_ref(short, short&) const; +-template void result::get_ref(short, unsigned short&) const; +-template void result::get_ref(short, int32_t&) const; +-template void result::get_ref(short, uint32_t&) const; +-template void result::get_ref(short, int64_t&) const; +-template void result::get_ref(short, uint64_t&) const; +-template void result::get_ref(short, float&) const; +-template void result::get_ref(short, double&) const; +-template void result::get_ref(short, string_type&) const; +-template void result::get_ref(short, date&) const; +-template void result::get_ref(short, timestamp&) const; +- +-template void result::get_ref(const string_type&, string_type::value_type&) const; +-template void result::get_ref(const string_type&, short&) const; +-template void result::get_ref(const string_type&, unsigned short&) const; +-template void result::get_ref(const string_type&, int32_t&) const; +-template void result::get_ref(const string_type&, uint32_t&) const; +-template void result::get_ref(const string_type&, int64_t&) const; +-template void result::get_ref(const string_type&, uint64_t&) const; +-template void result::get_ref(const string_type&, float&) const; +-template void result::get_ref(const string_type&, double&) const; +-template void result::get_ref(const string_type&, string_type&) const; +-template void result::get_ref(const string_type&, date&) const; +-template void result::get_ref(const string_type&, timestamp&) const; ++template NANODBC_API void result::get_ref(short, string_type::value_type&) const; ++template NANODBC_API void result::get_ref(short, short&) const; ++template NANODBC_API void result::get_ref(short, unsigned short&) const; ++template NANODBC_API void result::get_ref(short, int32_t&) const; ++template NANODBC_API void result::get_ref(short, uint32_t&) const; ++template NANODBC_API void result::get_ref(short, int64_t&) const; ++template NANODBC_API void result::get_ref(short, uint64_t&) const; ++template NANODBC_API void result::get_ref(short, float&) const; ++template NANODBC_API void result::get_ref(short, double&) const; ++template NANODBC_API void result::get_ref(short, string_type&) const; ++template NANODBC_API void result::get_ref(short, date&) const; ++template NANODBC_API void result::get_ref(short, timestamp&) const; ++ ++template NANODBC_API void result::get_ref(const string_type&, string_type::value_type&) const; ++template NANODBC_API void result::get_ref(const string_type&, short&) const; ++template NANODBC_API void result::get_ref(const string_type&, unsigned short&) const; ++template NANODBC_API void result::get_ref(const string_type&, int32_t&) const; ++template NANODBC_API void result::get_ref(const string_type&, uint32_t&) const; ++template NANODBC_API void result::get_ref(const string_type&, int64_t&) const; ++template NANODBC_API void result::get_ref(const string_type&, uint64_t&) const; ++template NANODBC_API void result::get_ref(const string_type&, float&) const; ++template NANODBC_API void result::get_ref(const string_type&, double&) const; ++template NANODBC_API void result::get_ref(const string_type&, string_type&) const; ++template NANODBC_API void result::get_ref(const string_type&, date&) const; ++template NANODBC_API void result::get_ref(const string_type&, timestamp&) const; + + // The following are the only supported instantiations of result::get_ref() with fallback. +-template void result::get_ref(short, const string_type::value_type&, string_type::value_type&) const; +-template void result::get_ref(short, const short&, short&) const; +-template void result::get_ref(short, const unsigned short&, unsigned short&) const; +-template void result::get_ref(short, const int32_t&, int32_t&) const; +-template void result::get_ref(short, const uint32_t&, uint32_t&) const; +-template void result::get_ref(short, const int64_t&, int64_t&) const; +-template void result::get_ref(short, const uint64_t&, uint64_t&) const; +-template void result::get_ref(short, const float&, float&) const; +-template void result::get_ref(short, const double&, double&) const; +-template void result::get_ref(short, const string_type&, string_type&) const; +-template void result::get_ref(short, const date&, date&) const; +-template void result::get_ref(short, const timestamp&, timestamp&) const; +- +-template void result::get_ref(const string_type&, const string_type::value_type&, string_type::value_type&) const; +-template void result::get_ref(const string_type&, const short&, short&) const; +-template void result::get_ref(const string_type&, const unsigned short&, unsigned short&) const; +-template void result::get_ref(const string_type&, const int32_t&, int32_t&) const; +-template void result::get_ref(const string_type&, const uint32_t&, uint32_t&) const; +-template void result::get_ref(const string_type&, const int64_t&, int64_t&) const; +-template void result::get_ref(const string_type&, const uint64_t&, uint64_t&) const; +-template void result::get_ref(const string_type&, const float&, float&) const; +-template void result::get_ref(const string_type&, const double&, double&) const; +-template void result::get_ref(const string_type&, const string_type&, string_type&) const; +-template void result::get_ref(const string_type&, const date&, date&) const; +-template void result::get_ref(const string_type&, const timestamp&, timestamp&) const; ++template NANODBC_API void result::get_ref(short, const string_type::value_type&, string_type::value_type&) const; ++template NANODBC_API void result::get_ref(short, const short&, short&) const; ++template NANODBC_API void result::get_ref(short, const unsigned short&, unsigned short&) const; ++template NANODBC_API void result::get_ref(short, const int32_t&, int32_t&) const; ++template NANODBC_API void result::get_ref(short, const uint32_t&, uint32_t&) const; ++template NANODBC_API void result::get_ref(short, const int64_t&, int64_t&) const; ++template NANODBC_API void result::get_ref(short, const uint64_t&, uint64_t&) const; ++template NANODBC_API void result::get_ref(short, const float&, float&) const; ++template NANODBC_API void result::get_ref(short, const double&, double&) const; ++template NANODBC_API void result::get_ref(short, const string_type&, string_type&) const; ++template NANODBC_API void result::get_ref(short, const date&, date&) const; ++template NANODBC_API void result::get_ref(short, const timestamp&, timestamp&) const; ++ ++template NANODBC_API void result::get_ref(const string_type&, const string_type::value_type&, string_type::value_type&) const; ++template NANODBC_API void result::get_ref(const string_type&, const short&, short&) const; ++template NANODBC_API void result::get_ref(const string_type&, const unsigned short&, unsigned short&) const; ++template NANODBC_API void result::get_ref(const string_type&, const int32_t&, int32_t&) const; ++template NANODBC_API void result::get_ref(const string_type&, const uint32_t&, uint32_t&) const; ++template NANODBC_API void result::get_ref(const string_type&, const int64_t&, int64_t&) const; ++template NANODBC_API void result::get_ref(const string_type&, const uint64_t&, uint64_t&) const; ++template NANODBC_API void result::get_ref(const string_type&, const float&, float&) const; ++template NANODBC_API void result::get_ref(const string_type&, const double&, double&) const; ++template NANODBC_API void result::get_ref(const string_type&, const string_type&, string_type&) const; ++template NANODBC_API void result::get_ref(const string_type&, const date&, date&) const; ++template NANODBC_API void result::get_ref(const string_type&, const timestamp&, timestamp&) const; + + // The following are the only supported instantiations of result::get(). +-template string_type::value_type result::get(short) const; +-template short result::get(short) const; +-template unsigned short result::get(short) const; +-template int32_t result::get(short) const; +-template uint32_t result::get(short) const; +-template int64_t result::get(short) const; +-template uint64_t result::get(short) const; +-template float result::get(short) const; +-template double result::get(short) const; +-template string_type result::get(short) const; +-template date result::get(short) const; +-template timestamp result::get(short) const; +- +-template string_type::value_type result::get(const string_type&) const; +-template short result::get(const string_type&) const; +-template unsigned short result::get(const string_type&) const; +-template int32_t result::get(const string_type&) const; +-template uint32_t result::get(const string_type&) const; +-template int64_t result::get(const string_type&) const; +-template uint64_t result::get(const string_type&) const; +-template float result::get(const string_type&) const; +-template double result::get(const string_type&) const; +-template string_type result::get(const string_type&) const; +-template date result::get(const string_type&) const; +-template timestamp result::get(const string_type&) const; ++template NANODBC_API string_type::value_type result::get(short) const; ++template NANODBC_API short result::get(short) const; ++template NANODBC_API unsigned short result::get(short) const; ++template NANODBC_API int32_t result::get(short) const; ++template NANODBC_API uint32_t result::get(short) const; ++template NANODBC_API int64_t result::get(short) const; ++template NANODBC_API uint64_t result::get(short) const; ++template NANODBC_API float result::get(short) const; ++template NANODBC_API double result::get(short) const; ++template NANODBC_API string_type result::get(short) const; ++template NANODBC_API date result::get(short) const; ++template NANODBC_API timestamp result::get(short) const; ++ ++template NANODBC_API string_type::value_type result::get(const string_type&) const; ++template NANODBC_API short result::get(const string_type&) const; ++template NANODBC_API unsigned short result::get(const string_type&) const; ++template NANODBC_API int32_t result::get(const string_type&) const; ++template NANODBC_API uint32_t result::get(const string_type&) const; ++template NANODBC_API int64_t result::get(const string_type&) const; ++template NANODBC_API uint64_t result::get(const string_type&) const; ++template NANODBC_API float result::get(const string_type&) const; ++template NANODBC_API double result::get(const string_type&) const; ++template NANODBC_API string_type result::get(const string_type&) const; ++template NANODBC_API date result::get(const string_type&) const; ++template NANODBC_API timestamp result::get(const string_type&) const; + + // The following are the only supported instantiations of result::get() with fallback. +-template string_type::value_type result::get(short, const string_type::value_type&) const; +-template short result::get(short, const short&) const; +-template unsigned short result::get(short, const unsigned short&) const; +-template int32_t result::get(short, const int32_t&) const; +-template uint32_t result::get(short, const uint32_t&) const; +-template int64_t result::get(short, const int64_t&) const; +-template uint64_t result::get(short, const uint64_t&) const; +-template float result::get(short, const float&) const; +-template double result::get(short, const double&) const; +-template string_type result::get(short, const string_type&) const; +-template date result::get(short, const date&) const; +-template timestamp result::get(short, const timestamp&) const; +- +-template string_type::value_type result::get(const string_type&, const string_type::value_type&) const; +-template short result::get(const string_type&, const short&) const; +-template unsigned short result::get(const string_type&, const unsigned short&) const; +-template int32_t result::get(const string_type&, const int32_t&) const; +-template uint32_t result::get(const string_type&, const uint32_t&) const; +-template int64_t result::get(const string_type&, const int64_t&) const; +-template uint64_t result::get(const string_type&, const uint64_t&) const; +-template float result::get(const string_type&, const float&) const; +-template double result::get(const string_type&, const double&) const; +-template string_type result::get(const string_type&, const string_type&) const; +-template date result::get(const string_type&, const date&) const; +-template timestamp result::get(const string_type&, const timestamp&) const; ++template NANODBC_API string_type::value_type result::get(short, const string_type::value_type&) const; ++template NANODBC_API short result::get(short, const short&) const; ++template NANODBC_API unsigned short result::get(short, const unsigned short&) const; ++template NANODBC_API int32_t result::get(short, const int32_t&) const; ++template NANODBC_API uint32_t result::get(short, const uint32_t&) const; ++template NANODBC_API int64_t result::get(short, const int64_t&) const; ++template NANODBC_API uint64_t result::get(short, const uint64_t&) const; ++template NANODBC_API float result::get(short, const float&) const; ++template NANODBC_API double result::get(short, const double&) const; ++template NANODBC_API string_type result::get(short, const string_type&) const; ++template NANODBC_API date result::get(short, const date&) const; ++template NANODBC_API timestamp result::get(short, const timestamp&) const; ++ ++template NANODBC_API string_type::value_type result::get(const string_type&, const string_type::value_type&) const; ++template NANODBC_API short result::get(const string_type&, const short&) const; ++template NANODBC_API unsigned short result::get(const string_type&, const unsigned short&) const; ++template NANODBC_API int32_t result::get(const string_type&, const int32_t&) const; ++template NANODBC_API uint32_t result::get(const string_type&, const uint32_t&) const; ++template NANODBC_API int64_t result::get(const string_type&, const int64_t&) const; ++template NANODBC_API uint64_t result::get(const string_type&, const uint64_t&) const; ++template NANODBC_API float result::get(const string_type&, const float&) const; ++template NANODBC_API double result::get(const string_type&, const double&) const; ++template NANODBC_API string_type result::get(const string_type&, const string_type&) const; ++template NANODBC_API date result::get(const string_type&, const date&) const; ++template NANODBC_API timestamp result::get(const string_type&, const timestamp&) const; + + } // namespace nanodbc + +diff --git a/src/nanodbc.h b/src/nanodbc.h +index f4e7b3d..cbb6fed 100644 +--- a/src/nanodbc.h ++++ b/src/nanodbc.h +@@ -164,6 +164,16 @@ namespace nanodbc + #define NANODBC_NOEXCEPT noexcept + #endif + ++#pragma warning(disable: 4275) ++#pragma warning(disable: 4251) ++#ifdef nanodbc_EXPORTS ++ /* We are building this library */ ++ #define NANODBC_API __declspec(dllexport) ++#else ++ /* We are using this library */ ++ #define NANODBC_API __declspec(dllimport) ++#endif ++ + // 8888888888 888 888 888 888 d8b + // 888 888 888 888 888 Y8P + // 888 888 888 888 888 +@@ -188,16 +198,17 @@ namespace nanodbc + + //! \brief Type incompatible. + //! \see exceptions +-class type_incompatible_error : public std::runtime_error ++class NANODBC_API type_incompatible_error : public std::runtime_error + { + public: + type_incompatible_error(); + const char* what() const NANODBC_NOEXCEPT; + }; + ++ + //! \brief Accessed null data. + //! \see exceptions +-class null_access_error : public std::runtime_error ++class NANODBC_API null_access_error : public std::runtime_error + { + public: + null_access_error(); +@@ -206,7 +217,7 @@ public: + + //! \brief Index out of range. + //! \see exceptions +-class index_range_error : public std::runtime_error ++class NANODBC_API index_range_error : public std::runtime_error + { + public: + index_range_error(); +@@ -215,7 +226,7 @@ public: + + //! \brief Programming logic error. + //! \see exceptions +-class programming_error : public std::runtime_error ++class NANODBC_API programming_error : public std::runtime_error + { + public: + explicit programming_error(const std::string& info); +@@ -224,7 +235,7 @@ public: + + //! \brief General database error. + //! \see exceptions +-class database_error : public std::runtime_error ++class NANODBC_API database_error : public std::runtime_error + { + public: + //! \brief Creates a runtime_error with a message describing the last ODBC error generated for the given handle and handle_type. +@@ -298,7 +309,7 @@ struct timestamp + //! \brief A resource for managing transaction commits and rollbacks. + //! + //! \attention You will want to use transactions if you are doing batch operations because it will prevent auto commits from occurring after each individual operation is executed. +-class transaction ++class NANODBC_API transaction + { + public: + //! \brief Begin a transaction on the given connection object. +@@ -361,7 +372,7 @@ private: + // MARK: Statement - + + //! \brief Represents a statement on the database. +-class statement ++class NANODBC_API statement + { + public: + //! \brief Provides support for retrieving output/return parameters. +@@ -559,7 +570,7 @@ public: + //! \param direction ODBC parameter direction. + //! \throws database_error + template<class T> +- void bind(short param, const T* value, param_direction direction = PARAM_IN); ++ void bind(short param, const T* value, param_direction direction = PARAM_IN); + + //! \addtogroup bind_multi Binding multiple non-string values + //! \brief Binds the given values to the given parameter placeholder number in the prepared statement. +@@ -582,17 +593,17 @@ public: + //! \brief Binds multiple values. + //! \see bind_multi + template<class T> +- void bind(short param, const T* values, std::size_t elements, param_direction direction = PARAM_IN); ++ void bind(short param, const T* values, std::size_t elements, param_direction direction = PARAM_IN); + + //! \brief Binds multiple values. + //! \see bind_multi + template<class T> +- void bind(short param, const T* values, std::size_t elements, const T* null_sentry, param_direction direction = PARAM_IN); ++ void bind(short param, const T* values, std::size_t elements, const T* null_sentry, param_direction direction = PARAM_IN); + + //! \brief Binds multiple values. + //! \see bind_multi + template<class T> +- void bind(short param, const T* values, std::size_t elements, const bool* nulls, param_direction direction = PARAM_IN); ++ void bind(short param, const T* values, std::size_t elements, const bool* nulls, param_direction direction = PARAM_IN); + + //! @} + +@@ -734,7 +745,7 @@ private: + // MARK: Connection - + + //! \brief Manages and encapsulates ODBC resources such as the connection and environment handles. +-class connection ++class NANODBC_API connection + { + public: + //! \brief Create new connection object, initially not connected. +@@ -903,7 +914,7 @@ class catalog; + //! + //! \see statement::execute(), statement::execute_direct() + //! \note result objects may be copied, however all copies will refer to the same underlying ODBC result set. +-class result ++class NANODBC_API result + { + public: + //! Empty result set. +@@ -986,7 +997,7 @@ public: + //! \param result The column's value will be written to this parameter. + //! \throws database_error, index_range_error, type_incompatible_error, null_access_error + template<class T> +- void get_ref(short column, T& result) const; ++ void get_ref(short column, T& result) const; + + //! \brief Gets data from the given column of the current rowset. + //! If the data is null, fallback is returned instead. +@@ -997,7 +1008,7 @@ public: + //! \param result The column's value will be written to this parameter. + //! \throws database_error, index_range_error, type_incompatible_error + template<class T> +- void get_ref(short column, const T& fallback, T& result) const; ++ void get_ref(short column, const T& fallback, T& result) const; + + //! \brief Gets data from the given column by name of the current rowset. + //! +@@ -1005,7 +1016,7 @@ public: + //! \param result The column's value will be written to this parameter. + //! \throws database_error, index_range_error, type_incompatible_error, null_access_error + template<class T> +- void get_ref(const string_type& column_name, T& result) const; ++ void get_ref(const string_type& column_name, T& result) const; + + //! \brief Gets data from the given column by name of the current rowset. + //! If the data is null, fallback is returned instead. +@@ -1015,7 +1026,7 @@ public: + //! \param result The column's value will be written to this parameter. + //! \throws database_error, index_range_error, type_incompatible_error + template<class T> +- void get_ref(const string_type& column_name, const T& fallback, T& result) const; ++ void get_ref(const string_type& column_name, const T& fallback, T& result) const; + + //! \brief Gets data from the given column of the current rowset. + //! +@@ -1023,7 +1034,7 @@ public: + //! \param column position. + //! \throws database_error, index_range_error, type_incompatible_error, null_access_error + template<class T> +- T get(short column) const; ++ T get(short column) const; + + //! \brief Gets data from the given column of the current rowset. + //! If the data is null, fallback is returned instead. +@@ -1033,14 +1044,14 @@ public: + //! \param fallback if value is null, return fallback instead. + //! \throws database_error, index_range_error, type_incompatible_error + template<class T> +- T get(short column, const T& fallback) const; ++ T get(short column, const T& fallback) const; + + //! \brief Gets data from the given column by name of the current rowset. + //! + //! \param column_name column's name. + //! \throws database_error, index_range_error, type_incompatible_error, null_access_error + template<class T> +- T get(const string_type& column_name) const; ++ T get(const string_type& column_name) const; + + //! \brief Gets data from the given column by name of the current rowset. + //! If the data is null, fallback is returned instead. +@@ -1049,7 +1060,7 @@ public: + //! \param fallback if value is null, return fallback instead. + //! \throws database_error, index_range_error, type_incompatible_error + template<class T> +- T get(const string_type& column_name, const T& fallback) const; ++ T get(const string_type& column_name, const T& fallback) const; + + //! \brief Returns true if and only if the given column of the current rowset is null. + //! +@@ -1139,7 +1150,7 @@ private: + // "Y88P" + // MARK: Catalog - + +-class catalog ++class NANODBC_API catalog + { + public: + +@@ -1319,7 +1330,7 @@ private: + //! \return A result set object. + //! \attention You will want to use transactions if you are doing batch operations because it will prevent auto commits from occurring after each individual operation is executed. + //! \see open(), prepare(), execute(), result, transaction +-result execute( ++result NANODBC_API execute( + connection& conn + , const string_type& query + , long batch_operations = 1 +@@ -1333,7 +1344,7 @@ result execute( + //! \return A result set object. + //! \attention You will want to use transactions if you are doing batch operations because it will prevent auto commits from occurring after each individual operation is executed. + //! \see open(), prepare(), execute(), result, transaction +-void just_execute( ++void NANODBC_API just_execute( + connection& conn + , const string_type& query + , long batch_operations = 1 +@@ -1346,7 +1357,7 @@ void just_execute( + //! \return A result set object. + //! \attention You will want to use transactions if you are doing batch operations because it will prevent auto commits from occurring after each individual operation is executed. + //! \see open(), prepare(), execute(), result +-result execute(statement& stmt, long batch_operations = 1); ++result NANODBC_API execute(statement& stmt, long batch_operations = 1); + + //! \brief Execute the previously prepared query now and without creating result object. + //! \param stmt The prepared statement that will be executed. +@@ -1355,7 +1366,7 @@ result execute(statement& stmt, long batch_operations = 1); + //! \return A result set object. + //! \attention You will want to use transactions if you are doing batch operations because it will prevent auto commits from occurring after each individual operation is executed. + //! \see open(), prepare(), execute(), result +-void just_execute(statement& stmt, long batch_operations = 1); ++void NANODBC_API just_execute(statement& stmt, long batch_operations = 1); + + //! \brief Execute the previously prepared query now. + //! Executes within the context of a transaction object and commits the transaction directly after execution. +@@ -1364,7 +1375,7 @@ void just_execute(statement& stmt, long batch_operations = 1); + //! \throws database_error + //! \return A result set object. + //! \see open(), prepare(), execute(), result, transaction +-result transact(statement& stmt, long batch_operations); ++result NANODBC_API transact(statement& stmt, long batch_operations); + + //! \brief Execute the previously prepared query now and without creating result object. + //! Executes within the context of a transaction object and commits the transaction directly after execution. +@@ -1373,7 +1384,7 @@ result transact(statement& stmt, long batch_operations); + //! \throws database_error + //! \return A result set object. + //! \see open(), prepare(), execute(), result, transaction +-void just_transact(statement& stmt, long batch_operations); ++void NANODBC_API just_transact(statement& stmt, long batch_operations); + + //! \brief Prepares the given statement to execute on it associated connection. + //! If the statement is not open throws programming_error. +@@ -1382,7 +1393,7 @@ void just_transact(statement& stmt, long batch_operations); + //! \param timeout The number in seconds before query timeout. Default is 0 indicating no timeout. + //! \see open() + //! \throws database_error, programming_error +-void prepare(statement& stmt, const string_type& query, long timeout = 0); ++void NANODBC_API prepare(statement& stmt, const string_type& query, long timeout = 0); + + //! @} + diff --git a/ports/nanodbc/CONTROL b/ports/nanodbc/CONTROL new file mode 100644 index 000000000..2611bac80 --- /dev/null +++ b/ports/nanodbc/CONTROL @@ -0,0 +1,3 @@ +Source: nanodbc +Version: 2.12.4 +Description: A small C++ wrapper for the native C ODBC API.
\ No newline at end of file diff --git a/ports/nanodbc/portfile.cmake b/ports/nanodbc/portfile.cmake new file mode 100644 index 000000000..978175822 --- /dev/null +++ b/ports/nanodbc/portfile.cmake @@ -0,0 +1,33 @@ +include(${CMAKE_TRIPLET_FILE}) +include(vcpkg_common_functions) +set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/nanodbc-2.12.4) + +vcpkg_download_distfile(ARCHIVE + URLS "https://github.com/lexicalunit/nanodbc/archive/v2.12.4.tar.gz" + FILENAME "nanodbc-2.12.4.tar.gz" + SHA512 b9a924516b2a777e5f1497774997672320548722ed53413b0a7ad5d503e2f8ca1099f5059a912b7aae410928f4c4edcdfd02e4cfbf415976cd222697b354b4e6 +) +vcpkg_extract_source_archive(${ARCHIVE}) + +vcpkg_apply_patches( + SOURCE_PATH ${SOURCE_PATH} + PATCHES + ${CMAKE_CURRENT_LIST_DIR}/0001_cmake.patch + ${CMAKE_CURRENT_LIST_DIR}/0002_msvc14_codecvt.patch + ${CMAKE_CURRENT_LIST_DIR}/0003_export_def.patch +) + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + OPTIONS + -DNANODBC_EXAMPLES=OFF + -DNANODBC_TEST=OFF + -DNANODBC_USE_UNICODE=OFF # it's the default value. +) + +vcpkg_install_cmake() + +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) + +file(COPY ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/nanodbc) +file(RENAME ${CURRENT_PACKAGES_DIR}/share/nanodbc/LICENSE ${CURRENT_PACKAGES_DIR}/share/nanodbc/copyright)
\ No newline at end of file |
