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