blob: 2af86a0ca3fac45ffea36b62e7bad365d5b88d13 [file] [log] [blame]
/* ----------------------------------------------------------------------- *//**
*
* @file dbal.hpp
*
* @brief Header file for database abstraction layer
* @author Florian Schoppmann
*
*//* ----------------------------------------------------------------------- */
#ifndef MADLIB_DBAL_HPP
#define MADLIB_DBAL_HPP
// STL dependencies
#include <locale>
#include <vector>
// Other dependencies
// Array
#include <boost/multi_array.hpp>
// Matrix, Vector
#include <armadillo>
#if !defined(ARMA_USE_LAPACK) || !defined(ARMA_USE_BLAS)
#error Armadillo has been configured without LAPACK and/or BLAS. Cannot continue.
#endif
// All sources need to (implicitly or explicitly) include madlib.hpp, so we also
// include it here
#include <madlib.hpp>
#include <utils/memory.hpp>
#include <utils/shapeToExtents.hpp>
// All data types for which ConcreteType<T> classes should be created and
// for which conversion functions have to be supplied
#define EXPAND_FOR_PRIMITIVE_TYPES \
EXPAND_TYPE(double) \
EXPAND_TYPE(float) \
EXPAND_TYPE(int64_t) \
EXPAND_TYPE(int32_t) \
EXPAND_TYPE(int16_t) \
EXPAND_TYPE(int8_t) \
EXPAND_TYPE(bool)
#define EXPAND_FOR_ALL_TYPES \
EXPAND_FOR_PRIMITIVE_TYPES \
EXPAND_TYPE(Array<double>) \
EXPAND_TYPE(Array_const<double>) \
EXPAND_TYPE(DoubleCol) \
EXPAND_TYPE(DoubleCol_const) \
EXPAND_TYPE(DoubleMat) \
EXPAND_TYPE(DoubleRow) \
EXPAND_TYPE(DoubleRow_const) \
EXPAND_TYPE(AnyTypeVector)
namespace madlib {
/**
* @brief Database-abstraction-layer classes (independent of a particular DBMS)
*/
namespace dbal {
// Forward declarations
// ====================
// Abstract Base Classes
class AbstractAllocator;
class AbstractHandle;
class AbstractDBInterface;
class AbstractType;
class AbstractTypeConverter;
typedef shared_ptr<AbstractAllocator> AllocatorSPtr;
typedef shared_ptr<AbstractHandle> MemHandleSPtr;
typedef shared_ptr<const AbstractType> AbstractTypeSPtr;
// Type Classes
template <typename T, std::size_t NumDims = 1> class Array;
template <typename T, std::size_t NumDims = 1> class Array_const;
template <template <class> class T, typename eT> class Vector;
template <template <class> class T, typename eT> class Vector_const;
template <typename eT> class Matrix;
typedef Matrix<double> DoubleMat;
typedef Vector<arma::Col, double> DoubleCol;
typedef Vector_const<arma::Col, double> DoubleCol_const;
typedef Vector<arma::Row, double> DoubleRow;
typedef Vector_const<arma::Row, double> DoubleRow_const;
// Implementation Classes
class AnyType;
struct Null { };
template <typename T> class ConcreteType;
typedef std::vector<AnyType> AnyTypeVector;
typedef ConcreteType<AnyTypeVector> ConcreteRecord;
// Includes
// ========
// Abstract Base Clases (Headers only)
#include <dbal/AbstractAllocator.hpp>
#include <dbal/AbstractHandle.hpp>
#include <dbal/AbstractOutputStreamBuffer.hpp>
#include <dbal/AbstractDBInterface.hpp>
#include <dbal/AbstractType_proto.hpp>
#include <dbal/AbstractTypeConverter.hpp>
// Type Classes
// Array depends on Array_const, so including Array_const first
#include <dbal/Array.hpp>
#include <dbal/Array_const.hpp>
#include <dbal/Matrix.hpp>
#include <dbal/Vector.hpp>
#include <dbal/Vector_const.hpp>
} // namespace dbal
} // namespace madlib
// Integration with Armadillo
// ==========================
namespace arma {
#include <dbal/ArmadilloIntegration.hpp>
}
// DBAL Implementation Includes
// ============================
namespace madlib {
namespace dbal {
// Simple Helper Classes
#include <dbal/TransparentHandle.hpp>
// Implementation Classes (Headers)
#include <dbal/AnyType_proto.hpp>
#include <dbal/ConcreteType_proto.hpp>
// Implementation Classes
#include <dbal/AbstractType_impl.hpp>
#include <dbal/AnyType_impl.hpp>
#include <dbal/ConcreteType_impl.hpp>
} // namespace dbal
} // namespace madlib
/**
* @namespace madlib::dbconnector
*
* @brief Connector classes for specific DBMSs
*/
#endif