#ifndef SQLPP_EXPRESSIONS_CASE_EXPRESSION_HPP
#define SQLPP_EXPRESSIONS_CASE_EXPRESSION_HPP
#include <sqlpp/config.hpp>
#include <sqlpp/expressions/expression.hpp>
#include <sqlpp/expressions/boolean_expression.hpp>
namespace sqlpp{
namespace expressions{
class simple_case_expression :
public expression,
public boost::enable_shared_from_this< simple_case_expression >
{
public:
typedef std::pair< expression_shared_ptr, expression_shared_ptr > when_result_pair_type;
typedef std::vector< when_result_pair_type > when_result_container_type;
explicit simple_case_expression(
expression_shared_ptr input_expression_
);
boost::shared_ptr< simple_case_expression > when(
expression_shared_ptr when_expression_,
expression_shared_ptr result_expression_
);
boost::shared_ptr< simple_case_expression > else_( expression_shared_ptr else_expression_);
virtual std::ostream& get_expression( std::ostream& out_, adaptors::database_adaptor_shared_ptr adaptor_ ) const;
private:
expression_shared_ptr m_input_expression;
expression_shared_ptr m_else_expression;
when_result_container_type m_when_results;
};
typedef boost::shared_ptr< simple_case_expression > simple_case_expression_shared_ptr;
simple_case_expression_shared_ptr case_(
expression_shared_ptr input_expression_
);
class searched_case_expression :
public expression,
public boost::enable_shared_from_this< searched_case_expression >
{
public:
typedef std::pair< boolean_expression_shared_ptr, expression_shared_ptr > when_result_pair_type;
typedef std::vector< when_result_pair_type > when_result_container_type;
explicit searched_case_expression();
boost::shared_ptr< searched_case_expression > when(
boolean_expression_shared_ptr when_expression_,
expression_shared_ptr result_expression_
);
boost::shared_ptr< searched_case_expression > else_( expression_shared_ptr else_expression_);
virtual std::ostream& get_expression( std::ostream& out_, adaptors::database_adaptor_shared_ptr adaptor_) const;
private:
expression_shared_ptr m_else_expression;
when_result_container_type m_when_results;
};
typedef boost::shared_ptr< searched_case_expression > searched_case_expression_shared_ptr;
searched_case_expression_shared_ptr case_();
}; // expressions
};//sqlpp
#endif