2013-11-20 02:21:58 +08:00
/*
* Copyright ( c ) 2013 , Roland Bock
* All rights reserved .
*
* Redistribution and use in source and binary forms , with or without modification ,
* are permitted provided that the following conditions are met :
*
* Redistributions of source code must retain the above copyright notice , this
* list of conditions and the following disclaimer .
*
* Redistributions in binary form must reproduce the above copyright notice , this
* list of conditions and the following disclaimer in the documentation and / or
* other materials provided with the distribution .
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS " AS IS " AND
* ANY EXPRESS OR IMPLIED WARRANTIES , INCLUDING , BUT NOT LIMITED TO , THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED . IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT , INDIRECT , INCIDENTAL , SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES
* ( INCLUDING , BUT NOT LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ;
* LOSS OF USE , DATA , OR PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT LIABILITY , OR TORT
* ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
*/
# ifndef SQLPP_PARAMETER_H
# define SQLPP_PARAMETER_H
# include <ostream>
# include <sqlpp11/select_fwd.h>
# include <sqlpp11/type_traits.h>
namespace sqlpp
{
2014-01-02 20:11:19 +08:00
template < typename ValueType , typename NameType , typename TrivialValueIsNull >
2013-11-20 02:21:58 +08:00
struct parameter_t
{
2013-11-22 16:42:28 +08:00
using _value_type = ValueType ;
2013-12-27 02:05:05 +08:00
using _is_parameter = std : : true_type ;
2013-11-22 16:42:28 +08:00
using _is_expression_t = std : : true_type ;
2014-01-02 20:11:19 +08:00
using _instance_t = typename NameType : : _name_t : : template _member_t < typename ValueType : : _parameter_t > ;
using _trivial_value_is_null = TrivialValueIsNull ;
static_assert ( std : : is_same < _trivial_value_is_null , std : : true_type > : : value or std : : is_same < _trivial_value_is_null , std : : false_type > : : value , " Invalid template parameter TrivialValueIsNull " ) ;
2013-11-20 02:21:58 +08:00
template < typename Db >
void serialize ( std : : ostream & os , Db & db ) const
{
2013-12-29 05:52:54 +08:00
static_assert ( Db : : _supports_prepared , " prepared statements not supported by current database " ) ;
static_assert ( Db : : _use_questionmark_parameter or Db : : _use_positional_dollar_parameter , " no known way to serialize parameter placeholders for current database " ) ;
if ( Db : : _use_questionmark_parameter )
os < < ' ? ' ;
else if ( Db : : _use_positional_dollar_parameter )
os < < ' $ ' < < index + 1 ;
2013-11-20 02:21:58 +08:00
}
2013-12-29 05:52:54 +08:00
constexpr bool _is_trivial ( ) const
{
return false ;
}
size_t index ;
2013-11-20 02:21:58 +08:00
} ;
2013-11-22 16:42:28 +08:00
2014-01-02 20:11:19 +08:00
template < typename NamedExpr , typename TrivialValueIsNull = trivial_value_is_null_t < typename std : : decay < NamedExpr > : : type > >
2013-11-22 16:42:28 +08:00
auto parameter ( NamedExpr & & namedExpr )
2013-12-27 02:05:05 +08:00
- > parameter_t < typename std : : decay < NamedExpr > : : type : : _value_type , typename std : : decay < NamedExpr > : : type , TrivialValueIsNull >
2013-11-22 16:42:28 +08:00
{
return { } ;
}
2013-12-27 02:05:05 +08:00
2013-11-20 02:21:58 +08:00
}
# endif