mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-04-21 19:45:56 +03:00
* Fixes of bugs from ASAN warnings, part one * MQC as static library, with nifty counter for global map and mutex * Switch clang to 16 * link messageqcpp to execplan
90 lines
1.8 KiB
C++
90 lines
1.8 KiB
C++
/* Copyright (C) 2020 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 "branchpred.h"
|
|
|
|
namespace utils
|
|
{
|
|
constexpr uint8_t MAXLEGACYWIDTH = 8ULL;
|
|
constexpr uint8_t MAXCOLUMNWIDTH = 16ULL;
|
|
|
|
struct AlignedDeleter
|
|
{
|
|
void operator()(uint8_t* ptr)
|
|
{
|
|
operator delete[](ptr, std::align_val_t(utils::MAXCOLUMNWIDTH));
|
|
};
|
|
};
|
|
|
|
inline bool isWide(uint8_t width)
|
|
{
|
|
return width > MAXLEGACYWIDTH;
|
|
}
|
|
|
|
inline bool isNarrow(uint8_t width)
|
|
{
|
|
return width <= MAXLEGACYWIDTH;
|
|
}
|
|
|
|
/** @brief Map a DECIMAL precision to data width in bytes */
|
|
inline uint8_t widthByPrecision(unsigned p)
|
|
{
|
|
if (LIKELY(p > 18 && p < 39))
|
|
return 16;
|
|
|
|
switch (p)
|
|
{
|
|
case 1:
|
|
case 2: return 1;
|
|
|
|
case 3:
|
|
case 4: return 2;
|
|
|
|
case 5:
|
|
case 6:
|
|
case 7:
|
|
case 8:
|
|
case 9: return 4;
|
|
|
|
case 10:
|
|
case 11:
|
|
case 12:
|
|
case 13:
|
|
case 14:
|
|
case 15:
|
|
case 16:
|
|
case 17:
|
|
case 18: return 8;
|
|
|
|
default: return 16;
|
|
}
|
|
}
|
|
|
|
inline uint8_t precisionByWidth(unsigned w)
|
|
{
|
|
switch (w)
|
|
{
|
|
case 16: return 38;
|
|
// In case we will support decimals that spans 32 bytes.
|
|
default: return 65;
|
|
}
|
|
}
|
|
|
|
} // namespace utils
|