Add some test cases for the sqlite datetime type (#1430)

This commit is contained in:
An Tao 2022-11-06 17:49:59 +08:00 committed by GitHub
parent 6208332de3
commit 990be54ea0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 634 additions and 250 deletions

View File

@ -1477,6 +1477,7 @@ DROGON_TEST(SQLite3Test)
" avatar_id varchar(32),"
" salt character varchar(20),"
" admin boolean DEFAULT false,"
" create_time datetime,"
" CONSTRAINT user_id_org UNIQUE(user_id, org_name)"
")" >>
[TEST_CTX](const Result &r) { SUCCESS(); } >>
@ -1486,29 +1487,49 @@ DROGON_TEST(SQLite3Test)
};
/// Test1:DbClient streaming-type interface
/// 1.1 insert,non-blocking
*clientPtr << "insert into users (user_id,user_name,password,org_name) "
"values(?,?,?,?)"
*clientPtr << "insert into users "
"(user_id,user_name,password,org_name,create_time) "
"values(?,?,?,?,?)"
<< "pg"
<< "postgresql"
<< "123"
<< "default" >>
<< "default" << trantor::Date::now() >>
[TEST_CTX](const Result &r) { MANDATE(r.insertId() == 1ULL); } >>
[TEST_CTX](const DrogonDbException &e) {
FAULT("sqlite3 - DbClient streaming-type interface(0) what():",
e.base().what());
};
/// 1.2 insert,blocking
*clientPtr << "insert into users (user_id,user_name,password,org_name) "
"values(?,?,?,?)"
*clientPtr << "insert into users "
"(user_id,user_name,password,org_name,create_time) "
"values(?,?,?,?,?)"
<< "pg1"
<< "postgresql1"
<< "123"
<< "default" << Mode::Blocking >>
<< "default" << trantor::Date::now() << Mode::Blocking >>
[TEST_CTX](const Result &r) { MANDATE(r.insertId() == 2ULL); } >>
[TEST_CTX](const DrogonDbException &e) {
FAULT("sqlite3 - DbClient streaming-type interface(1) what():",
e.base().what());
};
*clientPtr << "select * from users where user_id=?;"
<< "pg1" << Mode::Blocking >>
[TEST_CTX](const Result &r) {
MANDATE(r.size() == 1);
MANDATE(r[0]["user_id"].as<std::string>() == "pg1");
using namespace drogon_model::sqlite3;
Users user(r[0]);
MANDATE(user.getValueOfUserId() == "pg1");
// LOG_INFO << "user:" << user.toJson().toStyledString();
MANDATE(trantor::Date::now().secondsSinceEpoch() -
user.getValueOfCreateTime().secondsSinceEpoch() <=
1);
} >>
[TEST_CTX](const DrogonDbException &e) {
FAULT("sqlite3 - DbClient streaming-type interface(2) what():",
e.base().what());
};
/// 1.3 query,no-blocking
*clientPtr << "select * from users where 1 = 1" << Mode::NonBlocking >>
[TEST_CTX](const Result &r) { MANDATE(r.size() == 2UL); } >>
@ -1596,8 +1617,8 @@ DROGON_TEST(SQLite3Test)
/// 2.1 insert
clientPtr->execSqlAsync(
"insert into users "
"(user_id,user_name,password,org_name) "
"values(?,?,?,?)",
"(user_id,user_name,password,org_name,create_time) "
"values(?,?,?,?,?)",
[TEST_CTX](const Result &r) { MANDATE(r.insertId() == 1ULL); },
[TEST_CTX](const DrogonDbException &e) {
FAULT("sqlite3 - DbClient asynchronous interface(0) what():",
@ -1606,12 +1627,13 @@ DROGON_TEST(SQLite3Test)
"pg",
"postgresql",
"123",
"default");
"default",
trantor::Date::now());
/// 2.2 insert
clientPtr->execSqlAsync(
"insert into users "
"(user_id,user_name,password,org_name) "
"values(?,?,?,?)",
"(user_id,user_name,password,org_name,create_time) "
"values(?,?,?,?,?)",
[TEST_CTX](const Result &r) { MANDATE(r.affectedRows() == 1UL); },
[TEST_CTX](const DrogonDbException &e) {
FAULT("sqlite3 - DbClient asynchronous interface(1) what():",
@ -1620,7 +1642,8 @@ DROGON_TEST(SQLite3Test)
"pg1",
"postgresql1",
"123",
"default");
"default",
trantor::Date::now());
/// 2.3 query
clientPtr->execSqlAsync(
"select * from users where 1 = 1",
@ -1692,12 +1715,14 @@ DROGON_TEST(SQLite3Test)
try
{
auto r = clientPtr->execSqlSync(
"insert into users (user_id,user_name,password,org_name) "
"values(?,?,?,?)",
"insert into users "
"(user_id,user_name,password,org_name,create_time) "
"values(?,?,?,?,?)",
"pg",
"postgresql",
"123",
"default");
"default",
trantor::Date::now());
MANDATE(r.insertId() == 1ULL);
}
catch (const DrogonDbException &e)
@ -1712,12 +1737,14 @@ DROGON_TEST(SQLite3Test)
drogon::string_view sv1("postgresql1");
drogon::string_view sv2("123");
auto r = clientPtr->execSqlSync(
"insert into users (user_id,user_name,password,org_name) "
"values(?,?,?,?)",
"insert into users "
"(user_id,user_name,password,org_name,create_time) "
"values(?,?,?,?,?)",
sv,
(const drogon::string_view &)sv1,
std::move(sv2),
drogon::string_view("default"));
drogon::string_view("default"),
trantor::Date::now());
MANDATE(r.affectedRows() == 1UL);
}
catch (const DrogonDbException &e)
@ -1789,12 +1816,13 @@ DROGON_TEST(SQLite3Test)
/// Test future interface
/// 4.1 insert
auto f = clientPtr->execSqlAsyncFuture(
"insert into users (user_id,user_name,password,org_name) "
"values(?,?,?,?) ",
"insert into users (user_id,user_name,password,org_name,create_time) "
"values(?,?,?,?,?) ",
"pg",
"postgresql",
"123",
"default");
"default",
trantor::Date::now());
try
{
auto r = f.get();
@ -1807,12 +1835,13 @@ DROGON_TEST(SQLite3Test)
}
/// 4.2 insert
f = clientPtr->execSqlAsyncFuture(
"insert into users (user_id,user_name,password,org_name) "
"values(?,?,?,?)",
"insert into users (user_id,user_name,password,org_name,create_time) "
"values(?,?,?,?,?)",
"pg1",
"postgresql1",
"123",
"default");
"default",
trantor::Date::now());
try
{
auto r = f.get();
@ -1910,12 +1939,14 @@ DROGON_TEST(SQLite3Test)
try
{
auto r = clientPtr->execSqlSync(
"insert into users (user_id,user_name,password,org_name) "
"values(?,?,?,?)",
"insert into users "
"(user_id,user_name,password,org_name,create_time) "
"values(?,?,?,?,?)",
"pg",
"postgresql",
"123",
"default");
"default",
trantor::Date::now());
MANDATE(r.insertId() == 1ULL);
}
catch (const DrogonDbException &e)
@ -1978,6 +2009,7 @@ DROGON_TEST(SQLite3Test)
user.setUserName("postgres");
user.setPassword("123");
user.setOrgName("default");
user.setCreateTime(trantor::Date::now());
mapper.insert(
user,
[TEST_CTX](Users ret) { MANDATE(ret.getPrimaryKey() == 1UL); },

View File

@ -10,6 +10,7 @@
#include <string>
using namespace drogon;
using namespace drogon::orm;
using namespace drogon_model::sqlite3;
const std::string Users::Cols::_id = "id";
@ -21,6 +22,7 @@ const std::string Users::Cols::_signature = "signature";
const std::string Users::Cols::_avatar_id = "avatar_id";
const std::string Users::Cols::_salt = "salt";
const std::string Users::Cols::_admin = "admin";
const std::string Users::Cols::_create_time = "create_time";
const std::string Users::primaryKeyName = "id";
const bool Users::hasPrimaryKey = true;
const std::string Users::tableName = "users";
@ -33,8 +35,9 @@ const std::vector<typename Users::MetaData> Users::metaData_ = {
{"org_name", "std::string", "varchar(20)", 0, 0, 0, 0},
{"signature", "std::string", "varchar(50)", 0, 0, 0, 0},
{"avatar_id", "std::string", "varchar(32)", 0, 0, 0, 0},
{"salt", "std::string", "character", 0, 0, 0, 0},
{"admin", "std::string", "boolean", 0, 0, 0, 0}};
{"salt", "std::string", "character varchar(20)", 0, 0, 0, 0},
{"admin", "std::string", "boolean", 0, 0, 0, 0},
{"create_time", "::trantor::Date", "datetime", 0, 0, 0, 0}};
const std::string &Users::getColumnName(size_t index) noexcept(false)
{
assert(index < metaData_.size());
@ -87,11 +90,34 @@ Users::Users(const Row &r, const ssize_t indexOffset) noexcept
admin_ =
std::make_shared<std::string>(r["admin"].as<std::string>());
}
if (!r["create_time"].isNull())
{
auto timeStr = r["create_time"].as<std::string>();
struct tm stm;
memset(&stm, 0, sizeof(stm));
auto p = strptime(timeStr.c_str(), "%Y-%m-%d %H:%M:%S", &stm);
time_t t = mktime(&stm);
size_t decimalNum = 0;
if (p)
{
if (*p == '.')
{
std::string decimals(p + 1, &timeStr[timeStr.length()]);
while (decimals.length() < 6)
{
decimals += "0";
}
decimalNum = (size_t)atol(decimals.c_str());
}
createTime_ =
std::make_shared<::trantor::Date>(t * 1000000 + decimalNum);
}
}
}
else
{
size_t offset = (size_t)indexOffset;
if (offset + 9 > r.size())
if (offset + 10 > r.size())
{
LOG_FATAL << "Invalid SQL result for this model";
return;
@ -147,6 +173,30 @@ Users::Users(const Row &r, const ssize_t indexOffset) noexcept
{
admin_ = std::make_shared<std::string>(r[index].as<std::string>());
}
index = offset + 9;
if (!r[index].isNull())
{
auto timeStr = r[index].as<std::string>();
struct tm stm;
memset(&stm, 0, sizeof(stm));
auto p = strptime(timeStr.c_str(), "%Y-%m-%d %H:%M:%S", &stm);
time_t t = mktime(&stm);
size_t decimalNum = 0;
if (p)
{
if (*p == '.')
{
std::string decimals(p + 1, &timeStr[timeStr.length()]);
while (decimals.length() < 6)
{
decimals += "0";
}
decimalNum = (size_t)atol(decimals.c_str());
}
createTime_ =
std::make_shared<::trantor::Date>(t * 1000000 + decimalNum);
}
}
}
}
@ -154,7 +204,7 @@ Users::Users(
const Json::Value &pJson,
const std::vector<std::string> &pMasqueradingVector) noexcept(false)
{
if (pMasqueradingVector.size() != 9)
if (pMasqueradingVector.size() != 10)
{
LOG_ERROR << "Bad masquerading vector";
return;
@ -249,6 +299,34 @@ Users::Users(
pJson[pMasqueradingVector[8]].asString());
}
}
if (!pMasqueradingVector[9].empty() &&
pJson.isMember(pMasqueradingVector[9]))
{
dirtyFlag_[9] = true;
if (!pJson[pMasqueradingVector[9]].isNull())
{
auto timeStr = pJson[pMasqueradingVector[9]].asString();
struct tm stm;
memset(&stm, 0, sizeof(stm));
auto p = strptime(timeStr.c_str(), "%Y-%m-%d %H:%M:%S", &stm);
time_t t = mktime(&stm);
size_t decimalNum = 0;
if (p)
{
if (*p == '.')
{
std::string decimals(p + 1, &timeStr[timeStr.length()]);
while (decimals.length() < 6)
{
decimals += "0";
}
decimalNum = (size_t)atol(decimals.c_str());
}
createTime_ =
std::make_shared<::trantor::Date>(t * 1000000 + decimalNum);
}
}
}
}
Users::Users(const Json::Value &pJson) noexcept(false)
@ -331,13 +409,40 @@ Users::Users(const Json::Value &pJson) noexcept(false)
admin_ = std::make_shared<std::string>(pJson["admin"].asString());
}
}
if (pJson.isMember("create_time"))
{
dirtyFlag_[9] = true;
if (!pJson["create_time"].isNull())
{
auto timeStr = pJson["create_time"].asString();
struct tm stm;
memset(&stm, 0, sizeof(stm));
auto p = strptime(timeStr.c_str(), "%Y-%m-%d %H:%M:%S", &stm);
time_t t = mktime(&stm);
size_t decimalNum = 0;
if (p)
{
if (*p == '.')
{
std::string decimals(p + 1, &timeStr[timeStr.length()]);
while (decimals.length() < 6)
{
decimals += "0";
}
decimalNum = (size_t)atol(decimals.c_str());
}
createTime_ =
std::make_shared<::trantor::Date>(t * 1000000 + decimalNum);
}
}
}
}
void Users::updateByMasqueradedJson(
const Json::Value &pJson,
const std::vector<std::string> &pMasqueradingVector) noexcept(false)
{
if (pMasqueradingVector.size() != 9)
if (pMasqueradingVector.size() != 10)
{
LOG_ERROR << "Bad masquerading vector";
return;
@ -431,6 +536,34 @@ void Users::updateByMasqueradedJson(
pJson[pMasqueradingVector[8]].asString());
}
}
if (!pMasqueradingVector[9].empty() &&
pJson.isMember(pMasqueradingVector[9]))
{
dirtyFlag_[9] = true;
if (!pJson[pMasqueradingVector[9]].isNull())
{
auto timeStr = pJson[pMasqueradingVector[9]].asString();
struct tm stm;
memset(&stm, 0, sizeof(stm));
auto p = strptime(timeStr.c_str(), "%Y-%m-%d %H:%M:%S", &stm);
time_t t = mktime(&stm);
size_t decimalNum = 0;
if (p)
{
if (*p == '.')
{
std::string decimals(p + 1, &timeStr[timeStr.length()]);
while (decimals.length() < 6)
{
decimals += "0";
}
decimalNum = (size_t)atol(decimals.c_str());
}
createTime_ =
std::make_shared<::trantor::Date>(t * 1000000 + decimalNum);
}
}
}
}
void Users::updateByJson(const Json::Value &pJson) noexcept(false)
@ -512,6 +645,33 @@ void Users::updateByJson(const Json::Value &pJson) noexcept(false)
admin_ = std::make_shared<std::string>(pJson["admin"].asString());
}
}
if (pJson.isMember("create_time"))
{
dirtyFlag_[9] = true;
if (!pJson["create_time"].isNull())
{
auto timeStr = pJson["create_time"].asString();
struct tm stm;
memset(&stm, 0, sizeof(stm));
auto p = strptime(timeStr.c_str(), "%Y-%m-%d %H:%M:%S", &stm);
time_t t = mktime(&stm);
size_t decimalNum = 0;
if (p)
{
if (*p == '.')
{
std::string decimals(p + 1, &timeStr[timeStr.length()]);
while (decimals.length() < 6)
{
decimals += "0";
}
decimalNum = (size_t)atol(decimals.c_str());
}
createTime_ =
std::make_shared<::trantor::Date>(t * 1000000 + decimalNum);
}
}
}
}
const uint64_t &Users::getValueOfId() const noexcept
@ -525,6 +685,16 @@ const std::shared_ptr<uint64_t> &Users::getId() const noexcept
{
return id_;
}
void Users::setId(const uint64_t &pId) noexcept
{
id_ = std::make_shared<uint64_t>(pId);
dirtyFlag_[0] = true;
}
void Users::setIdToNull() noexcept
{
id_.reset();
dirtyFlag_[0] = true;
}
const typename Users::PrimaryKeyType &Users::getPrimaryKey() const
{
assert(id_);
@ -552,7 +722,6 @@ void Users::setUserId(std::string &&pUserId) noexcept
userId_ = std::make_shared<std::string>(std::move(pUserId));
dirtyFlag_[1] = true;
}
void Users::setUserIdToNull() noexcept
{
userId_.reset();
@ -580,7 +749,6 @@ void Users::setUserName(std::string &&pUserName) noexcept
userName_ = std::make_shared<std::string>(std::move(pUserName));
dirtyFlag_[2] = true;
}
void Users::setUserNameToNull() noexcept
{
userName_.reset();
@ -608,7 +776,6 @@ void Users::setPassword(std::string &&pPassword) noexcept
password_ = std::make_shared<std::string>(std::move(pPassword));
dirtyFlag_[3] = true;
}
void Users::setPasswordToNull() noexcept
{
password_.reset();
@ -636,7 +803,6 @@ void Users::setOrgName(std::string &&pOrgName) noexcept
orgName_ = std::make_shared<std::string>(std::move(pOrgName));
dirtyFlag_[4] = true;
}
void Users::setOrgNameToNull() noexcept
{
orgName_.reset();
@ -664,7 +830,6 @@ void Users::setSignature(std::string &&pSignature) noexcept
signature_ = std::make_shared<std::string>(std::move(pSignature));
dirtyFlag_[5] = true;
}
void Users::setSignatureToNull() noexcept
{
signature_.reset();
@ -692,7 +857,6 @@ void Users::setAvatarId(std::string &&pAvatarId) noexcept
avatarId_ = std::make_shared<std::string>(std::move(pAvatarId));
dirtyFlag_[6] = true;
}
void Users::setAvatarIdToNull() noexcept
{
avatarId_.reset();
@ -720,7 +884,6 @@ void Users::setSalt(std::string &&pSalt) noexcept
salt_ = std::make_shared<std::string>(std::move(pSalt));
dirtyFlag_[7] = true;
}
void Users::setSaltToNull() noexcept
{
salt_.reset();
@ -748,13 +911,34 @@ void Users::setAdmin(std::string &&pAdmin) noexcept
admin_ = std::make_shared<std::string>(std::move(pAdmin));
dirtyFlag_[8] = true;
}
void Users::setAdminToNull() noexcept
{
admin_.reset();
dirtyFlag_[8] = true;
}
const ::trantor::Date &Users::getValueOfCreateTime() const noexcept
{
const static ::trantor::Date defaultValue = ::trantor::Date();
if (createTime_)
return *createTime_;
return defaultValue;
}
const std::shared_ptr<::trantor::Date> &Users::getCreateTime() const noexcept
{
return createTime_;
}
void Users::setCreateTime(const ::trantor::Date &pCreateTime) noexcept
{
createTime_ = std::make_shared<::trantor::Date>(pCreateTime);
dirtyFlag_[9] = true;
}
void Users::setCreateTimeToNull() noexcept
{
createTime_.reset();
dirtyFlag_[9] = true;
}
void Users::updateId(const uint64_t id)
{
id_ = std::make_shared<uint64_t>(id);
@ -769,7 +953,8 @@ const std::vector<std::string> &Users::insertColumns() noexcept
"signature",
"avatar_id",
"salt",
"admin"};
"admin",
"create_time"};
return inCols;
}
@ -863,17 +1048,57 @@ void Users::outputArgs(drogon::orm::internal::SqlBinder &binder) const
binder << nullptr;
}
}
if (dirtyFlag_[9])
{
if (getCreateTime())
{
binder << getValueOfCreateTime();
}
else
{
binder << nullptr;
}
}
}
const std::vector<std::string> Users::updateColumns() const
{
std::vector<std::string> ret;
for (size_t i = 0; i < sizeof(dirtyFlag_); i++)
if (dirtyFlag_[1])
{
if (dirtyFlag_[i])
{
ret.push_back(getColumnName(i));
}
ret.push_back(getColumnName(1));
}
if (dirtyFlag_[2])
{
ret.push_back(getColumnName(2));
}
if (dirtyFlag_[3])
{
ret.push_back(getColumnName(3));
}
if (dirtyFlag_[4])
{
ret.push_back(getColumnName(4));
}
if (dirtyFlag_[5])
{
ret.push_back(getColumnName(5));
}
if (dirtyFlag_[6])
{
ret.push_back(getColumnName(6));
}
if (dirtyFlag_[7])
{
ret.push_back(getColumnName(7));
}
if (dirtyFlag_[8])
{
ret.push_back(getColumnName(8));
}
if (dirtyFlag_[9])
{
ret.push_back(getColumnName(9));
}
return ret;
}
@ -968,6 +1193,17 @@ void Users::updateArgs(drogon::orm::internal::SqlBinder &binder) const
binder << nullptr;
}
}
if (dirtyFlag_[9])
{
if (getCreateTime())
{
binder << getValueOfCreateTime();
}
else
{
binder << nullptr;
}
}
}
Json::Value Users::toJson() const
{
@ -1044,6 +1280,14 @@ Json::Value Users::toJson() const
{
ret["admin"] = Json::Value();
}
if (getCreateTime())
{
ret["create_time"] = getCreateTime()->toDbStringLocal();
}
else
{
ret["create_time"] = Json::Value();
}
return ret;
}
@ -1051,7 +1295,7 @@ Json::Value Users::toMasqueradedJson(
const std::vector<std::string> &pMasqueradingVector) const
{
Json::Value ret;
if (pMasqueradingVector.size() == 9)
if (pMasqueradingVector.size() == 10)
{
if (!pMasqueradingVector[0].empty())
{
@ -1152,6 +1396,18 @@ Json::Value Users::toMasqueradedJson(
ret[pMasqueradingVector[8]] = Json::Value();
}
}
if (!pMasqueradingVector[9].empty())
{
if (getCreateTime())
{
ret[pMasqueradingVector[9]] =
getCreateTime()->toDbStringLocal();
}
else
{
ret[pMasqueradingVector[9]] = Json::Value();
}
}
return ret;
}
LOG_ERROR << "Masquerade failed";
@ -1227,6 +1483,14 @@ Json::Value Users::toMasqueradedJson(
{
ret["admin"] = Json::Value();
}
if (getCreateTime())
{
ret["create_time"] = getCreateTime()->toDbStringLocal();
}
else
{
ret["create_time"] = Json::Value();
}
return ret;
}
@ -1277,6 +1541,12 @@ bool Users::validateJsonForCreation(const Json::Value &pJson, std::string &err)
if (!validJsonOfField(8, "admin", pJson["admin"], err, true))
return false;
}
if (pJson.isMember("create_time"))
{
if (!validJsonOfField(
9, "create_time", pJson["create_time"], err, true))
return false;
}
return true;
}
bool Users::validateMasqueradedJsonForCreation(
@ -1284,118 +1554,138 @@ bool Users::validateMasqueradedJsonForCreation(
const std::vector<std::string> &pMasqueradingVector,
std::string &err)
{
if (pMasqueradingVector.size() != 9)
if (pMasqueradingVector.size() != 10)
{
err = "Bad masquerading vector";
return false;
}
if (!pMasqueradingVector[0].empty())
try
{
if (pJson.isMember(pMasqueradingVector[0]))
if (!pMasqueradingVector[0].empty())
{
if (!validJsonOfField(0,
pMasqueradingVector[0],
pJson[pMasqueradingVector[0]],
err,
true))
return false;
if (pJson.isMember(pMasqueradingVector[0]))
{
if (!validJsonOfField(0,
pMasqueradingVector[0],
pJson[pMasqueradingVector[0]],
err,
true))
return false;
}
}
if (!pMasqueradingVector[1].empty())
{
if (pJson.isMember(pMasqueradingVector[1]))
{
if (!validJsonOfField(1,
pMasqueradingVector[1],
pJson[pMasqueradingVector[1]],
err,
true))
return false;
}
}
if (!pMasqueradingVector[2].empty())
{
if (pJson.isMember(pMasqueradingVector[2]))
{
if (!validJsonOfField(2,
pMasqueradingVector[2],
pJson[pMasqueradingVector[2]],
err,
true))
return false;
}
}
if (!pMasqueradingVector[3].empty())
{
if (pJson.isMember(pMasqueradingVector[3]))
{
if (!validJsonOfField(3,
pMasqueradingVector[3],
pJson[pMasqueradingVector[3]],
err,
true))
return false;
}
}
if (!pMasqueradingVector[4].empty())
{
if (pJson.isMember(pMasqueradingVector[4]))
{
if (!validJsonOfField(4,
pMasqueradingVector[4],
pJson[pMasqueradingVector[4]],
err,
true))
return false;
}
}
if (!pMasqueradingVector[5].empty())
{
if (pJson.isMember(pMasqueradingVector[5]))
{
if (!validJsonOfField(5,
pMasqueradingVector[5],
pJson[pMasqueradingVector[5]],
err,
true))
return false;
}
}
if (!pMasqueradingVector[6].empty())
{
if (pJson.isMember(pMasqueradingVector[6]))
{
if (!validJsonOfField(6,
pMasqueradingVector[6],
pJson[pMasqueradingVector[6]],
err,
true))
return false;
}
}
if (!pMasqueradingVector[7].empty())
{
if (pJson.isMember(pMasqueradingVector[7]))
{
if (!validJsonOfField(7,
pMasqueradingVector[7],
pJson[pMasqueradingVector[7]],
err,
true))
return false;
}
}
if (!pMasqueradingVector[8].empty())
{
if (pJson.isMember(pMasqueradingVector[8]))
{
if (!validJsonOfField(8,
pMasqueradingVector[8],
pJson[pMasqueradingVector[8]],
err,
true))
return false;
}
}
if (!pMasqueradingVector[9].empty())
{
if (pJson.isMember(pMasqueradingVector[9]))
{
if (!validJsonOfField(9,
pMasqueradingVector[9],
pJson[pMasqueradingVector[9]],
err,
true))
return false;
}
}
}
if (!pMasqueradingVector[1].empty())
catch (const Json::LogicError &e)
{
if (pJson.isMember(pMasqueradingVector[1]))
{
if (!validJsonOfField(1,
pMasqueradingVector[1],
pJson[pMasqueradingVector[1]],
err,
true))
return false;
}
}
if (!pMasqueradingVector[2].empty())
{
if (pJson.isMember(pMasqueradingVector[2]))
{
if (!validJsonOfField(2,
pMasqueradingVector[2],
pJson[pMasqueradingVector[2]],
err,
true))
return false;
}
}
if (!pMasqueradingVector[3].empty())
{
if (pJson.isMember(pMasqueradingVector[3]))
{
if (!validJsonOfField(3,
pMasqueradingVector[3],
pJson[pMasqueradingVector[3]],
err,
true))
return false;
}
}
if (!pMasqueradingVector[4].empty())
{
if (pJson.isMember(pMasqueradingVector[4]))
{
if (!validJsonOfField(4,
pMasqueradingVector[4],
pJson[pMasqueradingVector[4]],
err,
true))
return false;
}
}
if (!pMasqueradingVector[5].empty())
{
if (pJson.isMember(pMasqueradingVector[5]))
{
if (!validJsonOfField(5,
pMasqueradingVector[5],
pJson[pMasqueradingVector[5]],
err,
true))
return false;
}
}
if (!pMasqueradingVector[6].empty())
{
if (pJson.isMember(pMasqueradingVector[6]))
{
if (!validJsonOfField(6,
pMasqueradingVector[6],
pJson[pMasqueradingVector[6]],
err,
true))
return false;
}
}
if (!pMasqueradingVector[7].empty())
{
if (pJson.isMember(pMasqueradingVector[7]))
{
if (!validJsonOfField(7,
pMasqueradingVector[7],
pJson[pMasqueradingVector[7]],
err,
true))
return false;
}
}
if (!pMasqueradingVector[8].empty())
{
if (pJson.isMember(pMasqueradingVector[8]))
{
if (!validJsonOfField(8,
pMasqueradingVector[8],
pJson[pMasqueradingVector[8]],
err,
true))
return false;
}
err = e.what();
return false;
}
return true;
}
@ -1453,6 +1743,12 @@ bool Users::validateJsonForUpdate(const Json::Value &pJson, std::string &err)
if (!validJsonOfField(8, "admin", pJson["admin"], err, false))
return false;
}
if (pJson.isMember("create_time"))
{
if (!validJsonOfField(
9, "create_time", pJson["create_time"], err, false))
return false;
}
return true;
}
bool Users::validateMasqueradedJsonForUpdate(
@ -1460,108 +1756,126 @@ bool Users::validateMasqueradedJsonForUpdate(
const std::vector<std::string> &pMasqueradingVector,
std::string &err)
{
if (pMasqueradingVector.size() != 9)
if (pMasqueradingVector.size() != 10)
{
err = "Bad masquerading vector";
return false;
}
if (!pMasqueradingVector[0].empty() &&
pJson.isMember(pMasqueradingVector[0]))
try
{
if (!validJsonOfField(0,
pMasqueradingVector[0],
pJson[pMasqueradingVector[0]],
err,
false))
if (!pMasqueradingVector[0].empty() &&
pJson.isMember(pMasqueradingVector[0]))
{
if (!validJsonOfField(0,
pMasqueradingVector[0],
pJson[pMasqueradingVector[0]],
err,
false))
return false;
}
else
{
err =
"The value of primary key must be set in the json object for "
"update";
return false;
}
if (!pMasqueradingVector[1].empty() &&
pJson.isMember(pMasqueradingVector[1]))
{
if (!validJsonOfField(1,
pMasqueradingVector[1],
pJson[pMasqueradingVector[1]],
err,
false))
return false;
}
if (!pMasqueradingVector[2].empty() &&
pJson.isMember(pMasqueradingVector[2]))
{
if (!validJsonOfField(2,
pMasqueradingVector[2],
pJson[pMasqueradingVector[2]],
err,
false))
return false;
}
if (!pMasqueradingVector[3].empty() &&
pJson.isMember(pMasqueradingVector[3]))
{
if (!validJsonOfField(3,
pMasqueradingVector[3],
pJson[pMasqueradingVector[3]],
err,
false))
return false;
}
if (!pMasqueradingVector[4].empty() &&
pJson.isMember(pMasqueradingVector[4]))
{
if (!validJsonOfField(4,
pMasqueradingVector[4],
pJson[pMasqueradingVector[4]],
err,
false))
return false;
}
if (!pMasqueradingVector[5].empty() &&
pJson.isMember(pMasqueradingVector[5]))
{
if (!validJsonOfField(5,
pMasqueradingVector[5],
pJson[pMasqueradingVector[5]],
err,
false))
return false;
}
if (!pMasqueradingVector[6].empty() &&
pJson.isMember(pMasqueradingVector[6]))
{
if (!validJsonOfField(6,
pMasqueradingVector[6],
pJson[pMasqueradingVector[6]],
err,
false))
return false;
}
if (!pMasqueradingVector[7].empty() &&
pJson.isMember(pMasqueradingVector[7]))
{
if (!validJsonOfField(7,
pMasqueradingVector[7],
pJson[pMasqueradingVector[7]],
err,
false))
return false;
}
if (!pMasqueradingVector[8].empty() &&
pJson.isMember(pMasqueradingVector[8]))
{
if (!validJsonOfField(8,
pMasqueradingVector[8],
pJson[pMasqueradingVector[8]],
err,
false))
return false;
}
if (!pMasqueradingVector[9].empty() &&
pJson.isMember(pMasqueradingVector[9]))
{
if (!validJsonOfField(9,
pMasqueradingVector[9],
pJson[pMasqueradingVector[9]],
err,
false))
return false;
}
}
else
catch (const Json::LogicError &e)
{
err =
"The value of primary key must be set in the json object for "
"update";
err = e.what();
return false;
}
if (!pMasqueradingVector[1].empty() &&
pJson.isMember(pMasqueradingVector[1]))
{
if (!validJsonOfField(1,
pMasqueradingVector[1],
pJson[pMasqueradingVector[1]],
err,
false))
return false;
}
if (!pMasqueradingVector[2].empty() &&
pJson.isMember(pMasqueradingVector[2]))
{
if (!validJsonOfField(2,
pMasqueradingVector[2],
pJson[pMasqueradingVector[2]],
err,
false))
return false;
}
if (!pMasqueradingVector[3].empty() &&
pJson.isMember(pMasqueradingVector[3]))
{
if (!validJsonOfField(3,
pMasqueradingVector[3],
pJson[pMasqueradingVector[3]],
err,
false))
return false;
}
if (!pMasqueradingVector[4].empty() &&
pJson.isMember(pMasqueradingVector[4]))
{
if (!validJsonOfField(4,
pMasqueradingVector[4],
pJson[pMasqueradingVector[4]],
err,
false))
return false;
}
if (!pMasqueradingVector[5].empty() &&
pJson.isMember(pMasqueradingVector[5]))
{
if (!validJsonOfField(5,
pMasqueradingVector[5],
pJson[pMasqueradingVector[5]],
err,
false))
return false;
}
if (!pMasqueradingVector[6].empty() &&
pJson.isMember(pMasqueradingVector[6]))
{
if (!validJsonOfField(6,
pMasqueradingVector[6],
pJson[pMasqueradingVector[6]],
err,
false))
return false;
}
if (!pMasqueradingVector[7].empty() &&
pJson.isMember(pMasqueradingVector[7]))
{
if (!validJsonOfField(7,
pMasqueradingVector[7],
pJson[pMasqueradingVector[7]],
err,
false))
return false;
}
if (!pMasqueradingVector[8].empty() &&
pJson.isMember(pMasqueradingVector[8]))
{
if (!validJsonOfField(8,
pMasqueradingVector[8],
pJson[pMasqueradingVector[8]],
err,
false))
return false;
}
return true;
}
bool Users::validJsonOfField(size_t index,
@ -1676,11 +1990,20 @@ bool Users::validJsonOfField(size_t index,
return false;
}
break;
case 9:
if (pJson.isNull())
{
return true;
}
if (!pJson.isString())
{
err = "Type error in the " + fieldName + " field";
return false;
}
break;
default:
err = "Internal error in the server";
return false;
break;
}
return true;
}

View File

@ -24,7 +24,6 @@
#include <stdint.h>
#include <iostream>
using namespace drogon::orm;
namespace drogon
{
namespace orm
@ -51,6 +50,7 @@ class Users
static const std::string _avatar_id;
static const std::string _salt;
static const std::string _admin;
static const std::string _create_time;
};
const static int primaryKeyNumber;
@ -68,7 +68,8 @@ class Users
* @note If the SQL is not a style of 'select * from table_name ...' (select
* all columns by an asterisk), please set the offset to -1.
*/
explicit Users(const Row &r, const ssize_t indexOffset = 0) noexcept;
explicit Users(const drogon::orm::Row &r,
const ssize_t indexOffset = 0) noexcept;
/**
* @brief constructor
@ -115,6 +116,9 @@ class Users
/// Return a shared_ptr object pointing to the column const value, or an
/// empty shared_ptr object if the column is null
const std::shared_ptr<uint64_t> &getId() const noexcept;
/// Set the value of the column id
void setId(const uint64_t &pId) noexcept;
void setIdToNull() noexcept;
/** For column user_id */
/// Get the value of the column user_id, returns the default value if the
@ -212,9 +216,20 @@ class Users
void setAdmin(std::string &&pAdmin) noexcept;
void setAdminToNull() noexcept;
/** For column create_time */
/// Get the value of the column create_time, returns the default value if
/// the column is null
const ::trantor::Date &getValueOfCreateTime() const noexcept;
/// Return a shared_ptr object pointing to the column const value, or an
/// empty shared_ptr object if the column is null
const std::shared_ptr<::trantor::Date> &getCreateTime() const noexcept;
/// Set the value of the column create_time
void setCreateTime(const ::trantor::Date &pCreateTime) noexcept;
void setCreateTimeToNull() noexcept;
static size_t getColumnNumber() noexcept
{
return 9;
return 10;
}
static const std::string &getColumnName(size_t index) noexcept(false);
@ -223,9 +238,9 @@ class Users
const std::vector<std::string> &pMasqueradingVector) const;
/// Relationship interfaces
private:
friend Mapper<Users>;
friend drogon::orm::Mapper<Users>;
#ifdef __cpp_impl_coroutine
friend CoroMapper<Users>;
friend drogon::orm::CoroMapper<Users>;
#endif
static const std::vector<std::string> &insertColumns() noexcept;
void outputArgs(drogon::orm::internal::SqlBinder &binder) const;
@ -242,6 +257,7 @@ class Users
std::shared_ptr<std::string> avatarId_;
std::shared_ptr<std::string> salt_;
std::shared_ptr<std::string> admin_;
std::shared_ptr<::trantor::Date> createTime_;
struct MetaData
{
const std::string colName_;
@ -253,7 +269,7 @@ class Users
const bool notNull_;
};
static const std::vector<MetaData> metaData_;
bool dirtyFlag_[9] = {false};
bool dirtyFlag_[10] = {false};
public:
static const std::string &sqlForFindingByPrimaryKey()
@ -314,6 +330,15 @@ class Users
sql += "admin,";
++parametersCount;
}
if (!dirtyFlag_[8])
{
needSelection = true;
}
if (dirtyFlag_[9])
{
sql += "create_time,";
++parametersCount;
}
if (parametersCount > 0)
{
sql[sql.length() - 1] = ')';
@ -354,6 +379,10 @@ class Users
{
sql.append("?,");
}
if (dirtyFlag_[9])
{
sql.append("?,");
}
if (parametersCount > 0)
{
sql.resize(sql.length() - 1);