Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to use limit() and offset() within a prepared statement? #312

Closed
MacDue opened this issue Feb 10, 2020 · 4 comments
Closed

How to use limit() and offset() within a prepared statement? #312

MacDue opened this issue Feb 10, 2020 · 4 comments

Comments

@MacDue
Copy link
Contributor

MacDue commented Feb 10, 2020

I'd like to use limits & offsets within some of my prepared statements but I can't seem to find if that's possible with this library?

conn->prepare(
      select(fields...)
     .from(example_tbl)
     .where(/*something*/)
     .order_by(/*something*/)
     .limit(parameter(sqlpp::bigint(), limit))
     .offset(parameter(sqlpp::bigint(), offset)));

I don't see any reason why this shouldn't be possible.

I noticed dynamic_limit/offset() but that seems like it would only work fully dynamic queries (which I don't need as my queries are know at compile time).

@rbock
Copy link
Owner

rbock commented Feb 10, 2020

Hi,

limit and offset take unsigned integer values. The parameter needs to be unsigned, too.

Let me know if it works with bigint_unsigned (I did a quick and dirty check which looked good).

Best,

Roland

@MacDue
Copy link
Contributor Author

MacDue commented Feb 10, 2020

Thanks for the reply, I still can't get that to compile

with bigint_unsigned I get the compile error:

/home/macdue/git/bot/./sqlpp11/include/sqlpp11/data_types/unsigned_integral/parameter_value.h: In instantiation of ‘void sqlpp::parameter_value_t<sqlpp::unsigned_integral>::_bind(Target&, size_t) const [with Target = sqlpp::postgresql::prepared_statement_t; size_t = long unsigned int]’:
/home/macdue/git/bot/./sqlpp11/include/sqlpp11/parameter_list.h:62:102:   required from ‘void sqlpp::parameter_list_t<sqlpp::detail::type_vector<T ...> >::_bind_impl(Target&, const sqlpp::detail::index_sequence<Is ...>&) const [with Target = sqlpp::postgresql::prepared_statement_t; long unsigned int ...Is = {0, 1, 2}; Parameter = {sqlpp::parameter_t<sqlpp::text, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId> >, sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::limit_t>, sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::offset_t>}]’
/home/macdue/git/bot/./sqlpp11/include/sqlpp11/parameter_list.h:54:7:   required from ‘void sqlpp::parameter_list_t<sqlpp::detail::type_vector<T ...> >::_bind(Target&) const [with Target = sqlpp::postgresql::prepared_statement_t; Parameter = {sqlpp::parameter_t<sqlpp::text, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId> >, sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::limit_t>, sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::offset_t>}]’
/home/macdue/git/bot/./sqlpp11/include/sqlpp11/prepared_select.h:56:7:   required from ‘void sqlpp::prepared_select_t<Database, Statement, Composite>::_bind_params() const [with Database = sqlpp::postgresql::connection; Statement = sqlpp::statement_t<void, sqlpp::no_with_t, sqlpp::select_t, sqlpp::no_select_flag_list_t, sqlpp::select_column_list_t<void, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Icon>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Name>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> >, sqlpp::from_t<void, DueUtil::Database::Weapons>, sqlpp::where_t<void, sqlpp::binary_expression_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId>, sqlpp::op::equal_to, sqlpp::parameter_t<sqlpp::text, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId> > > >, sqlpp::no_group_by_t, sqlpp::no_having_t, sqlpp::order_by_t<void, sqlpp::sort_order_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> > >, sqlpp::limit_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::limit_t> >, sqlpp::offset_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::offset_t> >, sqlpp::no_union_t, sqlpp::no_for_update_t>; Composite = sqlpp::statement_t<void, sqlpp::no_with_t, sqlpp::select_t, sqlpp::no_select_flag_list_t, sqlpp::select_column_list_t<void, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Icon>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Name>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> >, sqlpp::from_t<void, DueUtil::Database::Weapons>, sqlpp::where_t<void, sqlpp::binary_expression_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId>, sqlpp::op::equal_to, sqlpp::parameter_t<sqlpp::text, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId> > > >, sqlpp::no_group_by_t, sqlpp::no_having_t, sqlpp::order_by_t<void, sqlpp::sort_order_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> > >, sqlpp::limit_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::limit_t> >, sqlpp::offset_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::offset_t> >, sqlpp::no_union_t, sqlpp::no_for_update_t>]’
/home/macdue/git/bot/sqlpp11-connector-postgresql/include/sqlpp11/postgresql/connection.h:183:9:   required from ‘sqlpp::postgresql::bind_result_t sqlpp::postgresql::connection::run_prepared_select(const PreparedSelect&) [with PreparedSelect = sqlpp::prepared_select_t<sqlpp::postgresql::connection, sqlpp::statement_t<void, sqlpp::no_with_t, sqlpp::select_t, sqlpp::no_select_flag_list_t, sqlpp::select_column_list_t<void, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Icon>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Name>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> >, sqlpp::from_t<void, DueUtil::Database::Weapons>, sqlpp::where_t<void, sqlpp::binary_expression_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId>, sqlpp::op::equal_to, sqlpp::parameter_t<sqlpp::text, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId> > > >, sqlpp::no_group_by_t, sqlpp::no_having_t, sqlpp::order_by_t<void, sqlpp::sort_order_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> > >, sqlpp::limit_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::limit_t> >, sqlpp::offset_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::offset_t> >, sqlpp::no_union_t, sqlpp::no_for_update_t>, sqlpp::statement_t<void, sqlpp::no_with_t, sqlpp::select_t, sqlpp::no_select_flag_list_t, sqlpp::select_column_list_t<void, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Icon>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Name>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> >, sqlpp::from_t<void, DueUtil::Database::Weapons>, sqlpp::where_t<void, sqlpp::binary_expression_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId>, sqlpp::op::equal_to, sqlpp::parameter_t<sqlpp::text, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId> > > >, sqlpp::no_group_by_t, sqlpp::no_having_t, sqlpp::order_by_t<void, sqlpp::sort_order_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> > >, sqlpp::limit_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::limit_t> >, sqlpp::offset_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::offset_t> >, sqlpp::no_union_t, sqlpp::no_for_update_t> >]’
/home/macdue/git/bot/./sqlpp11/include/sqlpp11/prepared_select.h:51:60:   required from ‘sqlpp::result_t<decltype (db.run_prepared_select((*(const sqlpp::prepared_select_t<Database, Statement, Composite>*)this))), typename Statement::_result_row_t<Database> > sqlpp::prepared_select_t<Database, Statement, Composite>::_run(Database&) const [with Database = sqlpp::postgresql::connection; Statement = sqlpp::statement_t<void, sqlpp::no_with_t, sqlpp::select_t, sqlpp::no_select_flag_list_t, sqlpp::select_column_list_t<void, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Icon>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Name>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> >, sqlpp::from_t<void, DueUtil::Database::Weapons>, sqlpp::where_t<void, sqlpp::binary_expression_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId>, sqlpp::op::equal_to, sqlpp::parameter_t<sqlpp::text, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId> > > >, sqlpp::no_group_by_t, sqlpp::no_having_t, sqlpp::order_by_t<void, sqlpp::sort_order_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> > >, sqlpp::limit_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::limit_t> >, sqlpp::offset_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::offset_t> >, sqlpp::no_union_t, sqlpp::no_for_update_t>; Composite = sqlpp::statement_t<void, sqlpp::no_with_t, sqlpp::select_t, sqlpp::no_select_flag_list_t, sqlpp::select_column_list_t<void, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Icon>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Name>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> >, sqlpp::from_t<void, DueUtil::Database::Weapons>, sqlpp::where_t<void, sqlpp::binary_expression_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId>, sqlpp::op::equal_to, sqlpp::parameter_t<sqlpp::text, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId> > > >, sqlpp::no_group_by_t, sqlpp::no_having_t, sqlpp::order_by_t<void, sqlpp::sort_order_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> > >, sqlpp::limit_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::limit_t> >, sqlpp::offset_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::offset_t> >, sqlpp::no_union_t, sqlpp::no_for_update_t>; typename Statement::_result_row_t<Database> = sqlpp::result_row_t<sqlpp::postgresql::connection, sqlpp::field_spec_t<DueUtil::Database::Weapons_::Icon::_alias_t, sqlpp::text, false, false>, sqlpp::field_spec_t<DueUtil::Database::Weapons_::Name::_alias_t, sqlpp::text, false, false>, sqlpp::field_spec_t<DueUtil::Database::Weapons_::Price::_alias_t, sqlpp::integral, false, false> >; decltype (db.run_prepared_select((*(const sqlpp::prepared_select_t<Database, Statement, Composite>*)this))) = sqlpp::postgresql::bind_result_t]’
/home/macdue/git/bot/sqlpp11-connector-postgresql/include/sqlpp11/postgresql/connection.h:295:28:   required from ‘decltype (t._run((*(sqlpp::postgresql::connection*)this))) sqlpp::postgresql::connection::_run(const T&, sqlpp::consistent_t) [with T = sqlpp::prepared_select_t<sqlpp::postgresql::connection, sqlpp::statement_t<void, sqlpp::no_with_t, sqlpp::select_t, sqlpp::no_select_flag_list_t, sqlpp::select_column_list_t<void, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Icon>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Name>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> >, sqlpp::from_t<void, DueUtil::Database::Weapons>, sqlpp::where_t<void, sqlpp::binary_expression_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId>, sqlpp::op::equal_to, sqlpp::parameter_t<sqlpp::text, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId> > > >, sqlpp::no_group_by_t, sqlpp::no_having_t, sqlpp::order_by_t<void, sqlpp::sort_order_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> > >, sqlpp::limit_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::limit_t> >, sqlpp::offset_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::offset_t> >, sqlpp::no_union_t, sqlpp::no_for_update_t>, sqlpp::statement_t<void, sqlpp::no_with_t, sqlpp::select_t, sqlpp::no_select_flag_list_t, sqlpp::select_column_list_t<void, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Icon>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Name>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> >, sqlpp::from_t<void, DueUtil::Database::Weapons>, sqlpp::where_t<void, sqlpp::binary_expression_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId>, sqlpp::op::equal_to, sqlpp::parameter_t<sqlpp::text, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId> > > >, sqlpp::no_group_by_t, sqlpp::no_having_t, sqlpp::order_by_t<void, sqlpp::sort_order_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> > >, sqlpp::limit_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::limit_t> >, sqlpp::offset_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::offset_t> >, sqlpp::no_union_t, sqlpp::no_for_update_t> >; decltype (t._run((*(sqlpp::postgresql::connection*)this))) = sqlpp::result_t<sqlpp::postgresql::bind_result_t, sqlpp::result_row_t<sqlpp::postgresql::connection, sqlpp::field_spec_t<DueUtil::Database::Weapons_::Icon::_alias_t, sqlpp::text, false, false>, sqlpp::field_spec_t<DueUtil::Database::Weapons_::Name::_alias_t, sqlpp::text, false, false>, sqlpp::field_spec_t<DueUtil::Database::Weapons_::Price::_alias_t, sqlpp::integral, false, false> > >]’
/home/macdue/git/bot/sqlpp11-connector-postgresql/include/sqlpp11/postgresql/connection.h:304:70:   required from ‘decltype (((sqlpp::postgresql::connection*)this)->sqlpp::postgresql::connection::_run(t, sqlpp::run_check_t<sqlpp::postgresql::context_t, T>{})) sqlpp::postgresql::connection::operator()(const T&) [with T = sqlpp::prepared_select_t<sqlpp::postgresql::connection, sqlpp::statement_t<void, sqlpp::no_with_t, sqlpp::select_t, sqlpp::no_select_flag_list_t, sqlpp::select_column_list_t<void, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Icon>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Name>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> >, sqlpp::from_t<void, DueUtil::Database::Weapons>, sqlpp::where_t<void, sqlpp::binary_expression_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId>, sqlpp::op::equal_to, sqlpp::parameter_t<sqlpp::text, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId> > > >, sqlpp::no_group_by_t, sqlpp::no_having_t, sqlpp::order_by_t<void, sqlpp::sort_order_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> > >, sqlpp::limit_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::limit_t> >, sqlpp::offset_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::offset_t> >, sqlpp::no_union_t, sqlpp::no_for_update_t>, sqlpp::statement_t<void, sqlpp::no_with_t, sqlpp::select_t, sqlpp::no_select_flag_list_t, sqlpp::select_column_list_t<void, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Icon>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Name>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> >, sqlpp::from_t<void, DueUtil::Database::Weapons>, sqlpp::where_t<void, sqlpp::binary_expression_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId>, sqlpp::op::equal_to, sqlpp::parameter_t<sqlpp::text, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId> > > >, sqlpp::no_group_by_t, sqlpp::no_having_t, sqlpp::order_by_t<void, sqlpp::sort_order_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> > >, sqlpp::limit_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::limit_t> >, sqlpp::offset_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::offset_t> >, sqlpp::no_union_t, sqlpp::no_for_update_t> >; decltype (((sqlpp::postgresql::connection*)this)->sqlpp::postgresql::connection::_run(t, sqlpp::run_check_t<sqlpp::postgresql::context_t, T>{})) = sqlpp::result_t<sqlpp::postgresql::bind_result_t, sqlpp::result_row_t<sqlpp::postgresql::connection, sqlpp::field_spec_t<DueUtil::Database::Weapons_::Icon::_alias_t, sqlpp::text, false, false>, sqlpp::field_spec_t<DueUtil::Database::Weapons_::Name::_alias_t, sqlpp::text, false, false>, sqlpp::field_spec_t<DueUtil::Database::Weapons_::Price::_alias_t, sqlpp::integral, false, false> > >]’
/home/macdue/git/bot/./sqlpp11/include/sqlpp11/pool_connection.h:61:22:   required from ‘decltype ((*((sqlpp::pool_connection<Connection_config, Reconnect_policy, Connection, Connection_pool>*)this)->sqlpp::pool_connection<Connection_config, Reconnect_policy, Connection, Connection_pool>::_impl)((forward<Args>)(sqlpp::pool_connection::operator()::args)...)) sqlpp::pool_connection<Connection_config, Reconnect_policy, Connection, Connection_pool>::operator()(Args&& ...) [with Args = {sqlpp::prepared_select_t<sqlpp::postgresql::connection, sqlpp::statement_t<void, sqlpp::no_with_t, sqlpp::select_t, sqlpp::no_select_flag_list_t, sqlpp::select_column_list_t<void, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Icon>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Name>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> >, sqlpp::from_t<void, DueUtil::Database::Weapons>, sqlpp::where_t<void, sqlpp::binary_expression_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId>, sqlpp::op::equal_to, sqlpp::parameter_t<sqlpp::text, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId> > > >, sqlpp::no_group_by_t, sqlpp::no_having_t, sqlpp::order_by_t<void, sqlpp::sort_order_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> > >, sqlpp::limit_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::limit_t> >, sqlpp::offset_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::offset_t> >, sqlpp::no_union_t, sqlpp::no_for_update_t>, sqlpp::statement_t<void, sqlpp::no_with_t, sqlpp::select_t, sqlpp::no_select_flag_list_t, sqlpp::select_column_list_t<void, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Icon>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Name>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> >, sqlpp::from_t<void, DueUtil::Database::Weapons>, sqlpp::where_t<void, sqlpp::binary_expression_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId>, sqlpp::op::equal_to, sqlpp::parameter_t<sqlpp::text, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId> > > >, sqlpp::no_group_by_t, sqlpp::no_having_t, sqlpp::order_by_t<void, sqlpp::sort_order_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> > >, sqlpp::limit_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::limit_t> >, sqlpp::offset_t<sqlpp::parameter_t<sqlpp::unsigned_integral, DueUtil::Game::Weapons::offset_t> >, sqlpp::no_union_t, sqlpp::no_for_update_t> >&}; Connection_config = sqlpp::postgresql::connection_config; Reconnect_policy = sqlpp::reconnect_policy::auto_reconnect; Connection = sqlpp::postgresql::connection; Connection_pool = sqlpp::connection_pool<sqlpp::postgresql::connection_config, sqlpp::reconnect_policy::auto_reconnect, sqlpp::postgresql::connection>; decltype ((*((sqlpp::pool_connection<Connection_config, Reconnect_policy, Connection, Connection_pool>*)this)->sqlpp::pool_connection<Connection_config, Reconnect_policy, Connection, Connection_pool>::_impl)((forward<Args>)(sqlpp::pool_connection::operator()::args)...)) = sqlpp::result_t<sqlpp::postgresql::bind_result_t, sqlpp::result_row_t<sqlpp::postgresql::connection, sqlpp::field_spec_t<DueUtil::Database::Weapons_::Icon::_alias_t, sqlpp::text, false, false>, sqlpp::field_spec_t<DueUtil::Database::Weapons_::Name::_alias_t, sqlpp::text, false, false>, sqlpp::field_spec_t<DueUtil::Database::Weapons_::Price::_alias_t, sqlpp::integral, false, false> > >]’
/home/macdue/git/bot/./src/include/dueutil/game/weapons.h:145:55:   required from ‘const std::vector<decltype (make_weapon<Fields ...>(0))> DueUtil::Game::Weapons::get_weapons_for_server(DueUtil::Game::DiscordID, Fields ...) [with Fields = {DueUtil::Game::Weapons::WeaponInfo::SelectIcon, DueUtil::Game::Weapons::WeaponInfo::SelectName, DueUtil::Game::Weapons::WeaponInfo::SelectPrice}; decltype (make_weapon<Fields ...>(0)) = DueUtil::Game::Weapons::Weapon<DueUtil::Game::Weapons::WeaponInfo::Icon, DueUtil::Game::Weapons::WeaponInfo::Name, DueUtil::Game::Weapons::WeaponInfo::Price>]’
/home/macdue/git/bot/src/dueutil/botcommands/general.cpp:69:50:   required from here
/home/macdue/git/bot/./sqlpp11/include/sqlpp11/data_types/unsigned_integral/parameter_value.h:47:14: error: ‘class sqlpp::postgresql::prepared_statement_t’ has no member named ‘_bind_unsigned_integral_parameter’; did you mean ‘_bind_integral_parameter’?
   47 |       target._bind_unsigned_integral_parameter(index, &_value, _is_null);
      |       ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |       _bind_integral_parameter

And for good measure with just bigint I get:

 error: ‘sqlpp::no_limit_t::_base_t<sqlpp::detail::statement_policies_t<void, sqlpp::no_with_t, sqlpp::select_t, sqlpp::no_select_flag_list_t, sqlpp::select_column_list_t<void, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Icon>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Name>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> >, sqlpp::from_t<void, DueUtil::Database::Weapons>, sqlpp::where_t<void, sqlpp::binary_expression_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId>, sqlpp::op::equal_to, sqlpp::parameter_t<sqlpp::text, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId> > > >, sqlpp::no_group_by_t, sqlpp::no_having_t, sqlpp::order_by_t<void, sqlpp::sort_order_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> > >, sqlpp::no_limit_t, sqlpp::no_offset_t, sqlpp::no_union_t, sqlpp::no_for_update_t> >::_new_statement_t<sqlpp::assert_limit_is_unsigned_integral, sqlpp::limit_t<sqlpp::parameter_t<sqlpp::integral, DueUtil::Game::Weapons::limit_t> > >’ {aka ‘struct sqlpp::assert_limit_is_unsigned_integral’} has no member named ‘offset’
  141 |      .limit(parameter(sqlpp::bigint(), limit)).offset(parameter(sqlpp::bigint(), offset)));
In file included from /home/macdue/git/bot/./sqlpp11/include/sqlpp11/serializer.h:30,
                 from /home/macdue/git/bot/./sqlpp11/include/sqlpp11/type_traits.h:33,
                 from /home/macdue/git/bot/./sqlpp11/include/sqlpp11/data_types/blob/data_type.h:32,
                 from /home/macdue/git/bot/./sqlpp11/include/sqlpp11/data_types/blob.h:30,
                 from /home/macdue/git/bot/./sqlpp11/include/sqlpp11/data_types.h:30,
                 from /home/macdue/git/bot/sqlpp11-connector-postgresql/include/sqlpp11/postgresql/bind_result.h:33,
                 from /home/macdue/git/bot/sqlpp11-connector-postgresql/include/sqlpp11/postgresql/connection.h:32,
                 from /home/macdue/git/bot/./src/include/dueutil/dbconn.h:6,
                 from /home/macdue/git/bot/./src/include/dueutil/game/players.h:8,
                 from /home/macdue/git/bot/./src/include/dueutil/command_data.h:12,
                 from /home/macdue/git/bot/./src/include/dueutil/permissions.h:16,
                 from /home/macdue/git/bot/./src/include/dueutil/commands.h:19,
                 from /home/macdue/git/bot/src/dueutil/botcommands/general.cpp:11:
/home/macdue/git/bot/./sqlpp11/include/sqlpp11/limit.h: In instantiation of ‘sqlpp::assert_limit_is_unsigned_integral::assert_limit_is_unsigned_integral(T&& ...) [with T = {}]’:
/home/macdue/git/bot/./sqlpp11/include/sqlpp11/limit.h:268:74:   required from ‘sqlpp::no_limit_t::_base_t<Policies>::_new_statement_t<typename sqlpp::check_limit<typename sqlpp::wrap_operand<T, void>::type>::type, sqlpp::limit_t<typename sqlpp::wrap_operand<T, void>::type> > sqlpp::no_limit_t::_base_t<Policies>::limit(Arg) const [with Arg = sqlpp::parameter_t<sqlpp::integral, DueUtil::Game::Weapons::limit_t>; Policies = sqlpp::detail::statement_policies_t<void, sqlpp::no_with_t, sqlpp::select_t, sqlpp::no_select_flag_list_t, sqlpp::select_column_list_t<void, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Icon>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Name>, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> >, sqlpp::from_t<void, DueUtil::Database::Weapons>, sqlpp::where_t<void, sqlpp::binary_expression_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId>, sqlpp::op::equal_to, sqlpp::parameter_t<sqlpp::text, sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::ServerId> > > >, sqlpp::no_group_by_t, sqlpp::no_having_t, sqlpp::order_by_t<void, sqlpp::sort_order_t<sqlpp::column_t<DueUtil::Database::Weapons, DueUtil::Database::Weapons_::Price> > >, sqlpp::no_limit_t, sqlpp::no_offset_t, sqlpp::no_union_t, sqlpp::no_for_update_t>; sqlpp::no_limit_t::_base_t<Policies>::_new_statement_t<typename sqlpp::check_limit<typename sqlpp::wrap_operand<T, void>::type>::type, sqlpp::limit_t<typename sqlpp::wrap_operand<T, void>::type> > = sqlpp::assert_limit_is_unsigned_integral]’
/home/macdue/git/bot/./src/include/dueutil/game/weapons.h:141:48:   required from ‘const std::vector<decltype (make_weapon<Fields ...>(0))> DueUtil::Game::Weapons::get_weapons_for_server(DueUtil::Game::DiscordID, Fields ...) [with Fields = {DueUtil::Game::Weapons::WeaponInfo::SelectIcon, DueUtil::Game::Weapons::WeaponInfo::SelectName, DueUtil::Game::Weapons::WeaponInfo::SelectPrice}; decltype (make_weapon<Fields ...>(0)) = DueUtil::Game::Weapons::Weapon<DueUtil::Game::Weapons::WeaponInfo::Icon, DueUtil::Game::Weapons::WeaponInfo::Name, DueUtil::Game::Weapons::WeaponInfo::Price>]’
/home/macdue/git/bot/src/dueutil/botcommands/general.cpp:69:50:   required from here
/home/macdue/git/bot/./sqlpp11/include/sqlpp11/portable_static_assert.h:41:36: error: static assertion failed: argument for limit() must be an unsigned integral expressions
   41 |       static_assert(wrong_t<T...>::value, message); \
      |                                    ^~~~~
/home/macdue/git/bot/./sqlpp11/include/sqlpp11/portable_static_assert.h:41:36: note: in definition of macro ‘SQLPP_PORTABLE_STATIC_ASSERT’
   41 |       static_assert(wrong_t<T...>::value, message); \
      |                                    ^~~~~

@rbock
Copy link
Owner

rbock commented Feb 10, 2020

Ah, that is an issue in the postgresql connector library, though. I am not the maintainer of it, but it should be a fairly simple fix, see

https://github.com/matthijs/sqlpp11-connector-postgresql/blob/master/include/sqlpp11/postgresql/prepared_statement.h
(and the respective implementation in the src directory)

Best,

Roland

PS: When you used signed integer, you ran into a static assert "argument for limit() must be an unsigned integral expression".

@MacDue
Copy link
Contributor Author

MacDue commented Feb 10, 2020

Oh alright. I should be able to fix it myself easily.

Thanks

@MacDue MacDue closed this as completed Feb 10, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants