Solved issue where I couldn't retirever a user record from the database. Didn't correctly set the MYSql type to string.
This commit is contained in:
+29
-108
@@ -2,6 +2,7 @@
|
||||
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <tuple>
|
||||
#include <cstring>
|
||||
|
||||
namespace database {
|
||||
@@ -28,7 +29,7 @@ model::User UserRepository::retrieveUserRecord(model::User& user,
|
||||
case type::UserFilter::username:
|
||||
qry << "Username = ?";
|
||||
|
||||
params[0].buffer_type = MYSQL_TYPE_LONG;
|
||||
params[0].buffer_type = MYSQL_TYPE_STRING;
|
||||
params[0].buffer = (char*)user.username.c_str();
|
||||
params[0].length = &userLength;
|
||||
params[0].is_null = 0;
|
||||
@@ -113,7 +114,8 @@ std::shared_ptr<MYSQL_BIND> UserRepository::insertUserValues(const model::User&
|
||||
return values;
|
||||
}
|
||||
|
||||
std::shared_ptr<MYSQL_BIND> UserRepository::valueBind(model::User& user, std::shared_ptr<UserVals> userVal)
|
||||
std::shared_ptr<MYSQL_BIND> UserRepository::valueBind(model::User& user,
|
||||
std::tuple<char*, char*, char*, char*, char*, char*>& us)
|
||||
{
|
||||
std::shared_ptr<MYSQL_BIND> values((MYSQL_BIND*) std::calloc(7, sizeof(MYSQL_BIND)));
|
||||
constexpr auto strLen = 1024;
|
||||
@@ -122,97 +124,27 @@ std::shared_ptr<MYSQL_BIND> UserRepository::valueBind(model::User& user, std::sh
|
||||
values.get()[0].buffer = (char*)&user.id;
|
||||
|
||||
values.get()[1].buffer_type = MYSQL_TYPE_STRING;
|
||||
values.get()[1].buffer = (char*)userVal->firstname;
|
||||
values.get()[1].buffer = (char*)std::get<0>(us);
|
||||
values.get()[1].buffer_length = strLen;
|
||||
|
||||
values.get()[2].buffer_type = MYSQL_TYPE_STRING;
|
||||
values.get()[2].buffer = (char*)userVal->lastname;
|
||||
values.get()[2].buffer = (char*)std::get<1>(us);
|
||||
values.get()[2].buffer_length = strLen;
|
||||
|
||||
values.get()[3].buffer_type = MYSQL_TYPE_STRING;
|
||||
values.get()[3].buffer = (char*)userVal->phone;
|
||||
values.get()[3].buffer = (char*)std::get<2>(us);
|
||||
values.get()[3].buffer_length = strLen;
|
||||
|
||||
values.get()[4].buffer_type = MYSQL_TYPE_STRING;
|
||||
values.get()[4].buffer = (char*)userVal->email;
|
||||
values.get()[4].buffer = (char*)std::get<3>(us);
|
||||
values.get()[4].buffer_length = strLen;
|
||||
|
||||
values.get()[5].buffer_type = MYSQL_TYPE_STRING;
|
||||
values.get()[5].buffer = (char*)userVal->username;
|
||||
values.get()[5].buffer = (char*)std::get<4>(us);
|
||||
values.get()[5].buffer_length = strLen;
|
||||
|
||||
values.get()[6].buffer_type = MYSQL_TYPE_STRING;
|
||||
values.get()[6].buffer = (char*)userVal->password;
|
||||
values.get()[6].buffer_length = strLen;
|
||||
|
||||
return values;
|
||||
}
|
||||
|
||||
std::shared_ptr<MYSQL_BIND> UserRepository::valueBind(model::User& user, UserVals& userVal)
|
||||
{
|
||||
std::shared_ptr<MYSQL_BIND> values((MYSQL_BIND*) std::calloc(7, sizeof(MYSQL_BIND)));
|
||||
constexpr auto strLen = 1024;
|
||||
|
||||
values.get()[0].buffer_type = MYSQL_TYPE_LONG;
|
||||
values.get()[0].buffer = (char*)&user.id;
|
||||
|
||||
values.get()[1].buffer_type = MYSQL_TYPE_STRING;
|
||||
values.get()[1].buffer = (char*)userVal.firstname;
|
||||
values.get()[1].buffer_length = strLen;
|
||||
|
||||
values.get()[2].buffer_type = MYSQL_TYPE_STRING;
|
||||
values.get()[2].buffer = (char*)userVal.lastname;
|
||||
values.get()[2].buffer_length = strLen;
|
||||
|
||||
values.get()[3].buffer_type = MYSQL_TYPE_STRING;
|
||||
values.get()[3].buffer = (char*)userVal.phone;
|
||||
values.get()[3].buffer_length = strLen;
|
||||
|
||||
values.get()[4].buffer_type = MYSQL_TYPE_STRING;
|
||||
values.get()[4].buffer = (char*)userVal.email;
|
||||
values.get()[4].buffer_length = strLen;
|
||||
|
||||
values.get()[5].buffer_type = MYSQL_TYPE_STRING;
|
||||
values.get()[5].buffer = (char*)userVal.username;
|
||||
values.get()[5].buffer_length = strLen;
|
||||
|
||||
values.get()[6].buffer_type = MYSQL_TYPE_STRING;
|
||||
values.get()[6].buffer = (char*)userVal.password;
|
||||
values.get()[6].buffer_length = strLen;
|
||||
|
||||
return values;
|
||||
}
|
||||
|
||||
std::shared_ptr<MYSQL_BIND> UserRepository::valueBind(model::User& user)
|
||||
{
|
||||
std::shared_ptr<MYSQL_BIND> values((MYSQL_BIND*) std::calloc(7, sizeof(MYSQL_BIND)));
|
||||
constexpr auto strLen = 1024;
|
||||
|
||||
values.get()[0].buffer_type = MYSQL_TYPE_LONG;
|
||||
values.get()[0].buffer = (char*)&user.id;
|
||||
|
||||
values.get()[1].buffer_type = MYSQL_TYPE_STRING;
|
||||
values.get()[1].buffer = (char*)user.firstname.data();
|
||||
values.get()[1].buffer_length = strLen;
|
||||
|
||||
values.get()[2].buffer_type = MYSQL_TYPE_STRING;
|
||||
values.get()[2].buffer = (char*)user.lastname.data();
|
||||
values.get()[2].buffer_length = strLen;
|
||||
|
||||
values.get()[3].buffer_type = MYSQL_TYPE_STRING;
|
||||
values.get()[3].buffer = (char*)user.phone.data();
|
||||
values.get()[3].buffer_length = strLen;
|
||||
|
||||
values.get()[4].buffer_type = MYSQL_TYPE_STRING;
|
||||
values.get()[4].buffer = (char*)user.email.data();
|
||||
values.get()[4].buffer_length = strLen;
|
||||
|
||||
values.get()[5].buffer_type = MYSQL_TYPE_STRING;
|
||||
values.get()[5].buffer = (char*)user.username.data();
|
||||
values.get()[5].buffer_length = strLen;
|
||||
|
||||
values.get()[6].buffer_type = MYSQL_TYPE_STRING;
|
||||
values.get()[6].buffer = (char*)user.password.data();
|
||||
values.get()[6].buffer = (char*)std::get<5>(us);
|
||||
values.get()[6].buffer_length = strLen;
|
||||
|
||||
return values;
|
||||
@@ -231,46 +163,35 @@ std::shared_ptr<UserRepository::UserLengths> UserRepository::fetchUserLengths(co
|
||||
return userLen;
|
||||
}
|
||||
|
||||
std::shared_ptr<UserRepository::UserVals> UserRepository::fetchUserVals()
|
||||
{
|
||||
constexpr auto strLen = 1024;
|
||||
auto userVal = std::make_shared<UserVals>();
|
||||
/**
|
||||
userVal->firstname = std::make_shared<char*>(new char[strLen]);
|
||||
userVal->lastname = std::make_shared<char*>(new char[strLen]);
|
||||
userVal->email = std::make_shared<char*>(new char[strLen]);
|
||||
userVal->phone = std::make_shared<char*>(new char[strLen]);
|
||||
userVal->username = std::make_shared<char*>(new char[strLen]);
|
||||
userVal->password = std::make_shared<char*>(new char[strLen]);
|
||||
*/
|
||||
|
||||
return userVal;
|
||||
std::tuple<char*, char*, char*, char*, char*, char*> UserRepository::fetchUV()
|
||||
{
|
||||
char firstname[1024];
|
||||
char lastname[1024];
|
||||
char phone[1024];
|
||||
char email[1024];
|
||||
char username[1024];
|
||||
char password[1024];
|
||||
|
||||
return std::make_tuple(firstname, lastname, phone, email, username, password);
|
||||
}
|
||||
|
||||
|
||||
model::User UserRepository::parseRecord(MYSQL_STMT *stmt)
|
||||
{
|
||||
// TODO : parse user record
|
||||
model::User user;
|
||||
auto userVal = fetchUserVals();
|
||||
UserVals uv;
|
||||
//auto bindedValues = valueBind(user, userVal);
|
||||
auto bindedValues = valueBind(user, uv);
|
||||
//auto bindedValues = valueBind(user);
|
||||
auto usv = fetchUV();
|
||||
|
||||
auto bindedValues = valueBind(user, usv);
|
||||
auto status = mysql_stmt_bind_result(stmt, bindedValues.get());
|
||||
status = mysql_stmt_fetch(stmt);
|
||||
|
||||
std::cout << user.id << std::endl;
|
||||
//std::cout << "binded firstname: " << userVal->firstname << std::endl;
|
||||
//std::cout << "binded lastname: " << uv.lastname << std::endl;
|
||||
//user.firstname = userVal->firstname;
|
||||
/**
|
||||
user.lastname = *userVal->lastname.get();
|
||||
user.email = *userVal->email.get();
|
||||
user.phone = *userVal->phone.get();
|
||||
user.username = *userVal->username.get();
|
||||
user.password = *userVal->password.get();
|
||||
*/
|
||||
user.firstname = std::get<0>(usv);
|
||||
user.lastname = std::get<1>(usv);
|
||||
user.email = std::get<2>(usv);
|
||||
user.phone = std::get<3>(usv);
|
||||
user.username = std::get<4>(usv);
|
||||
user.password = std::get<5>(usv);
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user