You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-29 08:21:15 +03:00
Merge branch 'develop' into MCOL-4841
# Conflicts: # exemgr/main.cpp # oam/etc/Columnstore.xml.singleserver # primitives/primproc/primproc.cpp
This commit is contained in:
@ -103,4 +103,3 @@ string ErrorCodes::errorString(uint16_t code) const
|
||||
return (fPreamble + msg);
|
||||
}
|
||||
} // namespace logging
|
||||
// vim:ts=4 sw=4:
|
||||
|
@ -305,5 +305,3 @@ class ProtocolError : public std::logic_error
|
||||
} while (0)
|
||||
|
||||
} // namespace logging
|
||||
|
||||
// vim:ts=4 sw=4:
|
||||
|
92
utils/loggingcpp/format.h
Normal file
92
utils/loggingcpp/format.h
Normal file
@ -0,0 +1,92 @@
|
||||
/*
|
||||
Copyright (c) 2021 MariaDB Corporation
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; version 2 of
|
||||
the License.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <boost/any.hpp>
|
||||
#include <cstdint>
|
||||
#include <regex>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
|
||||
namespace logging
|
||||
{
|
||||
template <class T, class Iter>
|
||||
void formatOne(std::string& errMsg, Iter iter, uint32_t position)
|
||||
{
|
||||
T arg = boost::any_cast<T>(*iter);
|
||||
std::string token = std::string("%") + std::to_string(position) + std::string("%");
|
||||
size_t index = 0;
|
||||
|
||||
while (true)
|
||||
{
|
||||
index = errMsg.find(token, index);
|
||||
if (index == std::string::npos)
|
||||
break;
|
||||
|
||||
if constexpr (std::is_same_v<T, std::string>)
|
||||
{
|
||||
errMsg.replace(index, token.length(), arg);
|
||||
}
|
||||
else
|
||||
{
|
||||
errMsg.replace(index, token.length(), std::to_string(arg));
|
||||
}
|
||||
|
||||
index += token.length();
|
||||
}
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void formatMany(std::string& errMsg, const T& args)
|
||||
{
|
||||
auto iter = args.begin();
|
||||
auto end = args.end();
|
||||
uint32_t position = 1;
|
||||
|
||||
while (iter != end)
|
||||
{
|
||||
if (iter->type() == typeid(long))
|
||||
{
|
||||
formatOne<long>(errMsg, iter, position);
|
||||
}
|
||||
else if (iter->type() == typeid(uint64_t))
|
||||
{
|
||||
formatOne<uint64_t>(errMsg, iter, position);
|
||||
}
|
||||
else if (iter->type() == typeid(double))
|
||||
{
|
||||
formatOne<double>(errMsg, iter, position);
|
||||
}
|
||||
else if (iter->type() == typeid(std::string))
|
||||
{
|
||||
formatOne<std::string>(errMsg, iter, position);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw std::logic_error("logggin::format: unexpected type in argslist");
|
||||
}
|
||||
++iter;
|
||||
++position;
|
||||
}
|
||||
static std::regex restToken("%[0-9]%");
|
||||
errMsg = std::regex_replace(errMsg, restToken, "");
|
||||
}
|
||||
|
||||
} // namespace logging
|
@ -29,7 +29,6 @@
|
||||
#include <fstream>
|
||||
using namespace std;
|
||||
|
||||
#include <boost/format.hpp>
|
||||
#include <boost/tokenizer.hpp>
|
||||
#include <boost/thread.hpp>
|
||||
using namespace boost;
|
||||
@ -43,6 +42,8 @@ using namespace config;
|
||||
|
||||
#include "installdir.h"
|
||||
|
||||
#include "format.h"
|
||||
|
||||
namespace logging
|
||||
{
|
||||
IDBErrorInfo* IDBErrorInfo::fInstance = 0;
|
||||
@ -156,43 +157,7 @@ string IDBErrorInfo::logError(const logging::LOG_TYPE logLevel, const logging::L
|
||||
|
||||
void IDBErrorInfo::format(string& errMsg, const Message::Args& args)
|
||||
{
|
||||
Message::Args::AnyVec::const_iterator iter = args.args().begin();
|
||||
Message::Args::AnyVec::const_iterator end = args.args().end();
|
||||
|
||||
boost::format fmt(errMsg);
|
||||
fmt.exceptions(boost::io::no_error_bits);
|
||||
|
||||
while (iter != end)
|
||||
{
|
||||
if (iter->type() == typeid(long))
|
||||
{
|
||||
long l = any_cast<long>(*iter);
|
||||
fmt % l;
|
||||
}
|
||||
else if (iter->type() == typeid(uint64_t))
|
||||
{
|
||||
uint64_t u64 = any_cast<uint64_t>(*iter);
|
||||
fmt % u64;
|
||||
}
|
||||
else if (iter->type() == typeid(double))
|
||||
{
|
||||
double d = any_cast<double>(*iter);
|
||||
fmt % d;
|
||||
}
|
||||
else if (iter->type() == typeid(string))
|
||||
{
|
||||
string s = any_cast<string>(*iter);
|
||||
fmt % s;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw logic_error("IDBErrorInfo::format: unexpected type in argslist");
|
||||
}
|
||||
|
||||
++iter;
|
||||
}
|
||||
|
||||
errMsg = fmt.str();
|
||||
formatMany(errMsg, args.args());
|
||||
}
|
||||
|
||||
/* static */
|
||||
|
@ -29,7 +29,7 @@
|
||||
#include <fstream>
|
||||
using namespace std;
|
||||
|
||||
#include <boost/format.hpp>
|
||||
|
||||
#include <boost/tokenizer.hpp>
|
||||
#include <boost/thread.hpp>
|
||||
using namespace boost;
|
||||
@ -41,6 +41,7 @@ using namespace config;
|
||||
|
||||
#include "installdir.h"
|
||||
|
||||
#include "format.h"
|
||||
namespace
|
||||
{
|
||||
boost::mutex mx;
|
||||
@ -143,43 +144,7 @@ void Message::Args::reset()
|
||||
|
||||
void Message::format(const Args& args)
|
||||
{
|
||||
Args::AnyVec::const_iterator iter = args.args().begin();
|
||||
Args::AnyVec::const_iterator end = args.args().end();
|
||||
|
||||
boost::format fmt(fMsg);
|
||||
fmt.exceptions(boost::io::no_error_bits);
|
||||
|
||||
while (iter != end)
|
||||
{
|
||||
if (iter->type() == typeid(long))
|
||||
{
|
||||
long l = any_cast<long>(*iter);
|
||||
fmt % l;
|
||||
}
|
||||
else if (iter->type() == typeid(uint64_t))
|
||||
{
|
||||
uint64_t u64 = any_cast<uint64_t>(*iter);
|
||||
fmt % u64;
|
||||
}
|
||||
else if (iter->type() == typeid(double))
|
||||
{
|
||||
double d = any_cast<double>(*iter);
|
||||
fmt % d;
|
||||
}
|
||||
else if (iter->type() == typeid(string))
|
||||
{
|
||||
string s = any_cast<string>(*iter);
|
||||
fmt % s;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw logic_error("Message::format: unexpected type in argslist");
|
||||
}
|
||||
|
||||
++iter;
|
||||
}
|
||||
|
||||
fMsg = fmt.str();
|
||||
formatMany(fMsg, args.args());
|
||||
}
|
||||
|
||||
/* static */
|
||||
|
Reference in New Issue
Block a user