Fixed build with clang [#CONV-2807].

This commit is contained in:
Alexey Milovidov 2013-01-06 19:06:21 +00:00
parent 037941ff83
commit 6a4b0139e8
3 changed files with 16 additions and 7 deletions

View File

@ -254,12 +254,12 @@ public:
ColumnPtr & getDataPtr() { return data; }
const ColumnPtr & getDataPtr() const { return data; }
Offsets_t & __attribute__((__flatten__, __always_inline__)) getOffsets()
Offsets_t & __attribute__((__always_inline__)) getOffsets()
{
return static_cast<ColumnOffsets_t &>(*offsets.get()).getData();
}
const Offsets_t & __attribute__((__flatten__, __always_inline__)) getOffsets() const
const Offsets_t & __attribute__((__always_inline__)) getOffsets() const
{
return static_cast<const ColumnOffsets_t &>(*offsets.get()).getData();
}
@ -271,8 +271,8 @@ protected:
ColumnPtr data;
ColumnPtr offsets; /// Смещения могут быть разделяемыми для нескольких столбцов - для реализации вложенных структур данных.
size_t __attribute__((__flatten__, __always_inline__)) offsetAt(size_t i) const { return i == 0 ? 0 : getOffsets()[i - 1]; }
size_t __attribute__((__flatten__, __always_inline__)) sizeAt(size_t i) const { return i == 0 ? getOffsets()[0] : (getOffsets()[i] - getOffsets()[i - 1]); }
size_t __attribute__((__always_inline__)) offsetAt(size_t i) const { return i == 0 ? 0 : getOffsets()[i - 1]; }
size_t __attribute__((__always_inline__)) sizeAt(size_t i) const { return i == 0 ? getOffsets()[0] : (getOffsets()[i] - getOffsets()[i - 1]); }
};

View File

@ -175,7 +175,6 @@ private:
/// Распарсенный запрос. Оттуда берутся некоторые настройки (формат).
ASTPtr parsed_query;
bool expect_result; /// Запрос предполагает получение результата.
Stopwatch watch;

View File

@ -21,6 +21,13 @@ class ResultBase;
*/
class Row
{
private:
/** @brief Pointer to bool data member, for use by safe bool conversion operator.
* @see http://www.artima.com/cppsource/safebool.html
* Взято из mysql++.
*/
typedef MYSQL_ROW Row::*private_bool_type;
public:
/** Для возможности отложенной инициализации. */
Row() : row(NULL), res(NULL)
@ -71,12 +78,15 @@ public:
*/
bool empty() const { return row == NULL; }
/** Преобразование в bool.
* (Точнее - в тип, который преобразуется в bool, и с которым больше почти ничего нельзя сделать.)
*/
operator private_bool_type() const { return row == NULL ? NULL : &Row::row; }
private:
MYSQL_ROW row;
ResultBase * res;
MYSQL_LENGTHS lengths;
};
}