#include <sqlpp/queries/stored_procedure.hpp>
#include <sqlpp/database.hpp>
#include <sqlpp/data_types.hpp>
namespace sqlpp{
namespace queries{
stored_procedure::stored_procedure(
select_query_base_shared_ptr body_,
string_const_reference name_
)
: properties::name_property(name_), m_body(body_)
{};
std::ostream& stored_procedure::get_sql( std::ostream& out_ )
{
using std::endl;
if (!m_body)
throw exceptions::sqlpp_exception("stored procedure pointer is null");
variable_container_type vars = get_variables();
database_shared_ptr db = m_body->get_checked_database();
adaptors::database_adaptor_shared_ptr adaptor = db->get_adaptor();
if (!adaptor->support_stored_procedure())
throw exceptions::sqlpp_exception("this database does not support stored procedures");
out_<<"CREATE PROCEDURE "<<get_name()<<endl;
variable_container_type::iterator it, it_end = vars.end();
for (
it = vars.begin();
it != it_end;
++it
)
{
(*it)->get_declaration( out_, adaptor );
out_<<","<<endl;
}
out_<<"AS"<<endl
<<m_body->get_sql()
<<adaptor->end_statement();
return out_;
};
stored_procedure::variable_container_type stored_procedure::get_variables()
{
return variable_container_type();
};
stored_procedure_shared_ptr store(
select_query_base_shared_ptr body_,
string_const_reference name_
)
{
return stored_procedure_shared_ptr(
new stored_procedure(
body_,
name_
)
);
};
};
};