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:
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <tuple>
|
||||||
|
|
||||||
#include "database/BaseRepository.h"
|
#include "database/BaseRepository.h"
|
||||||
#include "model/Models.h"
|
#include "model/Models.h"
|
||||||
@@ -27,30 +28,12 @@ namespace database {
|
|||||||
unsigned long usernameLength;
|
unsigned long usernameLength;
|
||||||
unsigned long passwordLength;
|
unsigned long passwordLength;
|
||||||
};
|
};
|
||||||
struct UserVals
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
std::shared_ptr<char*> firstname;
|
|
||||||
std::shared_ptr<char*> lastname;
|
|
||||||
std::shared_ptr<char*> phone;
|
|
||||||
std::shared_ptr<char*> email;
|
|
||||||
std::shared_ptr<char*> username;
|
|
||||||
std::shared_ptr<char*> password;
|
|
||||||
*/
|
|
||||||
char firstname[1024];
|
|
||||||
char lastname[1024];
|
|
||||||
char phone[1024];
|
|
||||||
char email[1024];
|
|
||||||
char username[1024];
|
|
||||||
char password[1024];
|
|
||||||
};
|
|
||||||
|
|
||||||
std::shared_ptr<MYSQL_BIND> insertUserValues(const model::User&, std::shared_ptr<UserLengths>);
|
std::shared_ptr<MYSQL_BIND> insertUserValues(const model::User&, std::shared_ptr<UserLengths>);
|
||||||
std::shared_ptr<MYSQL_BIND> valueBind(model::User&, std::shared_ptr<UserVals>);
|
std::shared_ptr<MYSQL_BIND> valueBind(model::User&, std::tuple<char*, char*, char*, char*, char*, char*>&);
|
||||||
std::shared_ptr<MYSQL_BIND> valueBind(model::User&, UserVals&);
|
|
||||||
std::shared_ptr<MYSQL_BIND> valueBind(model::User&);
|
|
||||||
std::shared_ptr<UserLengths> fetchUserLengths(const model::User&);
|
std::shared_ptr<UserLengths> fetchUserLengths(const model::User&);
|
||||||
std::shared_ptr<UserVals> fetchUserVals();
|
|
||||||
|
std::tuple<char*, char*, char*, char*, char*, char*> fetchUV();
|
||||||
|
|
||||||
model::User parseRecord(MYSQL_STMT*);
|
model::User parseRecord(MYSQL_STMT*);
|
||||||
};
|
};
|
||||||
|
|||||||
+29
-108
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <tuple>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
namespace database {
|
namespace database {
|
||||||
@@ -28,7 +29,7 @@ model::User UserRepository::retrieveUserRecord(model::User& user,
|
|||||||
case type::UserFilter::username:
|
case type::UserFilter::username:
|
||||||
qry << "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].buffer = (char*)user.username.c_str();
|
||||||
params[0].length = &userLength;
|
params[0].length = &userLength;
|
||||||
params[0].is_null = 0;
|
params[0].is_null = 0;
|
||||||
@@ -113,7 +114,8 @@ std::shared_ptr<MYSQL_BIND> UserRepository::insertUserValues(const model::User&
|
|||||||
return values;
|
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)));
|
std::shared_ptr<MYSQL_BIND> values((MYSQL_BIND*) std::calloc(7, sizeof(MYSQL_BIND)));
|
||||||
constexpr auto strLen = 1024;
|
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()[0].buffer = (char*)&user.id;
|
||||||
|
|
||||||
values.get()[1].buffer_type = MYSQL_TYPE_STRING;
|
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()[1].buffer_length = strLen;
|
||||||
|
|
||||||
values.get()[2].buffer_type = MYSQL_TYPE_STRING;
|
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()[2].buffer_length = strLen;
|
||||||
|
|
||||||
values.get()[3].buffer_type = MYSQL_TYPE_STRING;
|
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()[3].buffer_length = strLen;
|
||||||
|
|
||||||
values.get()[4].buffer_type = MYSQL_TYPE_STRING;
|
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()[4].buffer_length = strLen;
|
||||||
|
|
||||||
values.get()[5].buffer_type = MYSQL_TYPE_STRING;
|
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()[5].buffer_length = strLen;
|
||||||
|
|
||||||
values.get()[6].buffer_type = MYSQL_TYPE_STRING;
|
values.get()[6].buffer_type = MYSQL_TYPE_STRING;
|
||||||
values.get()[6].buffer = (char*)userVal->password;
|
values.get()[6].buffer = (char*)std::get<5>(us);
|
||||||
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_length = strLen;
|
values.get()[6].buffer_length = strLen;
|
||||||
|
|
||||||
return values;
|
return values;
|
||||||
@@ -231,46 +163,35 @@ std::shared_ptr<UserRepository::UserLengths> UserRepository::fetchUserLengths(co
|
|||||||
return userLen;
|
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)
|
model::User UserRepository::parseRecord(MYSQL_STMT *stmt)
|
||||||
{
|
{
|
||||||
// TODO : parse user record
|
|
||||||
model::User user;
|
model::User user;
|
||||||
auto userVal = fetchUserVals();
|
auto usv = fetchUV();
|
||||||
UserVals uv;
|
|
||||||
//auto bindedValues = valueBind(user, userVal);
|
auto bindedValues = valueBind(user, usv);
|
||||||
auto bindedValues = valueBind(user, uv);
|
|
||||||
//auto bindedValues = valueBind(user);
|
|
||||||
auto status = mysql_stmt_bind_result(stmt, bindedValues.get());
|
auto status = mysql_stmt_bind_result(stmt, bindedValues.get());
|
||||||
status = mysql_stmt_fetch(stmt);
|
status = mysql_stmt_fetch(stmt);
|
||||||
|
|
||||||
std::cout << user.id << std::endl;
|
user.firstname = std::get<0>(usv);
|
||||||
//std::cout << "binded firstname: " << userVal->firstname << std::endl;
|
user.lastname = std::get<1>(usv);
|
||||||
//std::cout << "binded lastname: " << uv.lastname << std::endl;
|
user.email = std::get<2>(usv);
|
||||||
//user.firstname = userVal->firstname;
|
user.phone = std::get<3>(usv);
|
||||||
/**
|
user.username = std::get<4>(usv);
|
||||||
user.lastname = *userVal->lastname.get();
|
user.password = std::get<5>(usv);
|
||||||
user.email = *userVal->email.get();
|
|
||||||
user.phone = *userVal->phone.get();
|
|
||||||
user.username = *userVal->username.get();
|
|
||||||
user.password = *userVal->password.get();
|
|
||||||
*/
|
|
||||||
|
|
||||||
return user;
|
return user;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user