/home/martin/workspace/OpenStreetNav/src/psql/psql.h
Go to the documentation of this file.
00001 #ifndef PSQL_H_
00002 #define PSQL_H_
00003 
00004 #include "Database.h"
00005 #include "PgSqlException.h"
00006 #include "Statement.h"
00007 #include "RetTypes.h"
00008 #include "BindTypes.h"
00009 #include "Cursor.h"
00010 #include <type_traits>
00011 #include <tuple>
00012 
00013 namespace psql
00014 {
00015 
00021 void execute_sql(Database& db, std::string const& sql);
00022 template<typename... Types>
00023 std::vector<std::tuple<Types...> > query_sql(Database& db, std::string const& sql)
00024 {
00025     Statement<BindTypes<>, RetTypes<Types...> > st(sql, db);
00026     st.execute();
00027     std::vector<std::tuple<Types...> > ret;
00028     for (int i = 0; i < st.row_count(); ++i)
00029     {
00030         ret.push_back(st.get_row(i));
00031     }
00032     return ret;
00033 }
00034 
00041 template<typename... BTypes, typename... RTypes>
00042 std::vector<std::tuple<RTypes...> > exec_statement(psql::Statement<psql::BindTypes<BTypes...>, psql::RetTypes<RTypes...> >& st, BTypes... bvs)
00043 {
00044     std::vector<std::tuple<RTypes...> > ret;
00045     st.execute(bvs...);
00046     ret.reserve(st.row_count());
00047     for (int i = 0; i < st.row_count(); ++i)
00048     {
00049         ret.push_back(st.get_row(i));
00050     }
00051     return ret;
00052 }
00053 
00060 template < unsigned int Col = 0, typename... BTypes, typename... RTypes >
00061 auto exec_statement_col(psql::Statement<psql::BindTypes<BTypes...>, psql::RetTypes<RTypes...> >& st, BTypes... bvs)
00062 -> std::vector<typename std::remove_const<typename std::remove_reference<decltype(std::get<Col>(st.get_row(0)))>::type>::type>
00063 {
00064     std::vector<typename std::remove_const<typename std::remove_reference<decltype(std::get<Col>(st.get_row(0)))>::type>::type> ret;
00065     st.execute(bvs...);
00066     ret.reserve(st.row_count());
00067     for (int i = 0; i < st.row_count(); ++i)
00068     {
00069         ret.push_back(std::get<Col>(st.get_row(i)));
00070     }
00071     return ret;
00072 }
00073 
00074 }
00075 
00076 #endif
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines