Skip to content

Commit

Permalink
Add more where operators (<, <=, >, >=)
Browse files Browse the repository at this point in the history
  • Loading branch information
02JanDal committed Oct 28, 2013
1 parent 75680d5 commit ea0496b
Showing 1 changed file with 96 additions and 3 deletions.
99 changes: 96 additions & 3 deletions SqlSelect.h
Original file line number Diff line number Diff line change
Expand Up @@ -278,16 +278,13 @@ operator==( const ColumnT &, const typename ColumnT::type& value )
newCond.value = QVariant::fromValue( value );
return newCond;
}


template <typename ColumnT1, typename ColumnT2>
typename boost::enable_if<boost::mpl::and_<typename ColumnT1::is_column, typename ColumnT2::is_column>, ConditionColumnLeaf<ColumnT1, SqlCondition::Equals, ColumnT2> >::type
operator==( const ColumnT1&, const ColumnT2& )
{
BOOST_MPL_ASSERT(( boost::is_same<typename ColumnT1::type, typename ColumnT2::type> )); // only compare columns of the same type
return ConditionColumnLeaf<ColumnT1, SqlCondition::Equals, ColumnT2>();
}

template <typename ColumnT1>
typename boost::enable_if<typename ColumnT1::is_column, ConditionPlaceholderLeaf<ColumnT1, SqlCondition::Equals> >::type
operator==( const ColumnT1& , const placeholder &p )
Expand All @@ -297,6 +294,102 @@ operator==( const ColumnT1& , const placeholder &p )
return c;
}

template <typename ColumnT>
typename boost::enable_if<typename ColumnT::is_column, ConditionValueLeaf<ColumnT, SqlCondition::Less, typename ColumnT::type> >::type
operator<( const ColumnT &, const typename ColumnT::type& value )
{
ConditionValueLeaf<ColumnT, SqlCondition::Less, typename ColumnT::type> newCond;
newCond.value = QVariant::fromValue( value );
return newCond;
}
template <typename ColumnT1, typename ColumnT2>
typename boost::enable_if<boost::mpl::and_<typename ColumnT1::is_column, typename ColumnT2::is_column>, ConditionColumnLeaf<ColumnT1, SqlCondition::Less, ColumnT2> >::type
operator<( const ColumnT1&, const ColumnT2& )
{
BOOST_MPL_ASSERT(( boost::is_same<typename ColumnT1::type, typename ColumnT2::type> )); // only compare columns of the same type
return ConditionColumnLeaf<ColumnT1, SqlCondition::Less, ColumnT2>();
}
template <typename ColumnT1>
typename boost::enable_if<typename ColumnT1::is_column, ConditionPlaceholderLeaf<ColumnT1, SqlCondition::Less> >::type
operator<( const ColumnT1& , const placeholder &p )
{
ConditionPlaceholderLeaf<ColumnT1, SqlCondition::Less> c;
c.placeholder = p.m_name;
return c;
}

template <typename ColumnT>
typename boost::enable_if<typename ColumnT::is_column, ConditionValueLeaf<ColumnT, SqlCondition::LessOrEqual, typename ColumnT::type> >::type
operator<=( const ColumnT &, const typename ColumnT::type& value )
{
ConditionValueLeaf<ColumnT, SqlCondition::LessOrEqual, typename ColumnT::type> newCond;
newCond.value = QVariant::fromValue( value );
return newCond;
}
template <typename ColumnT1, typename ColumnT2>
typename boost::enable_if<boost::mpl::and_<typename ColumnT1::is_column, typename ColumnT2::is_column>, ConditionColumnLeaf<ColumnT1, SqlCondition::LessOrEqual, ColumnT2> >::type
operator<=( const ColumnT1&, const ColumnT2& )
{
BOOST_MPL_ASSERT(( boost::is_same<typename ColumnT1::type, typename ColumnT2::type> )); // only compare columns of the same type
return ConditionColumnLeaf<ColumnT1, SqlCondition::LessOrEqual, ColumnT2>();
}
template <typename ColumnT1>
typename boost::enable_if<typename ColumnT1::is_column, ConditionPlaceholderLeaf<ColumnT1, SqlCondition::LessOrEqual> >::type
operator<=( const ColumnT1& , const placeholder &p )
{
ConditionPlaceholderLeaf<ColumnT1, SqlCondition::LessOrEqual> c;
c.placeholder = p.m_name;
return c;
}

template <typename ColumnT>
typename boost::enable_if<typename ColumnT::is_column, ConditionValueLeaf<ColumnT, SqlCondition::Greater, typename ColumnT::type> >::type
operator>( const ColumnT &, const typename ColumnT::type& value )
{
ConditionValueLeaf<ColumnT, SqlCondition::Greater, typename ColumnT::type> newCond;
newCond.value = QVariant::fromValue( value );
return newCond;
}
template <typename ColumnT1, typename ColumnT2>
typename boost::enable_if<boost::mpl::and_<typename ColumnT1::is_column, typename ColumnT2::is_column>, ConditionColumnLeaf<ColumnT1, SqlCondition::Greater, ColumnT2> >::type
operator>( const ColumnT1&, const ColumnT2& )
{
BOOST_MPL_ASSERT(( boost::is_same<typename ColumnT1::type, typename ColumnT2::type> )); // only compare columns of the same type
return ConditionColumnLeaf<ColumnT1, SqlCondition::Greater, ColumnT2>();
}
template <typename ColumnT1>
typename boost::enable_if<typename ColumnT1::is_column, ConditionPlaceholderLeaf<ColumnT1, SqlCondition::Greater> >::type
operator>( const ColumnT1& , const placeholder &p )
{
ConditionPlaceholderLeaf<ColumnT1, SqlCondition::Greater> c;
c.placeholder = p.m_name;
return c;
}

template <typename ColumnT>
typename boost::enable_if<typename ColumnT::is_column, ConditionValueLeaf<ColumnT, SqlCondition::GreaterOrEqual, typename ColumnT::type> >::type
operator>=( const ColumnT &, const typename ColumnT::type& value )
{
ConditionValueLeaf<ColumnT, SqlCondition::GreaterOrEqual, typename ColumnT::type> newCond;
newCond.value = QVariant::fromValue( value );
return newCond;
}
template <typename ColumnT1, typename ColumnT2>
typename boost::enable_if<boost::mpl::and_<typename ColumnT1::is_column, typename ColumnT2::is_column>, ConditionColumnLeaf<ColumnT1, SqlCondition::GreaterOrEqual, ColumnT2> >::type
operator>=( const ColumnT1&, const ColumnT2& )
{
BOOST_MPL_ASSERT(( boost::is_same<typename ColumnT1::type, typename ColumnT2::type> )); // only compare columns of the same type
return ConditionColumnLeaf<ColumnT1, SqlCondition::GreaterOrEqual, ColumnT2>();
}
template <typename ColumnT1>
typename boost::enable_if<typename ColumnT1::is_column, ConditionPlaceholderLeaf<ColumnT1, SqlCondition::GreaterOrEqual> >::type
operator>=( const ColumnT1& , const placeholder &p )
{
ConditionPlaceholderLeaf<ColumnT1, SqlCondition::GreaterOrEqual> c;
c.placeholder = p.m_name;
return c;
}

/**
* Create column IS NOT NULL condition.
* @tparam ColumnT The column type.
Expand Down

0 comments on commit ea0496b

Please sign in to comment.