3#include <knowCore/Timestamp.h> 
    6#include <QJsonDocument> 
   10#include "BinaryInterfaceTimeStamp_p.h" 
   12#include <knowCore/Array.h> 
   13#include <knowCore/BigNumber.h> 
   14#include <knowCore/Vector.h> 
   16namespace kDB::Repository::DatabaseInterface::PostgreSQL::BinaryInterface
 
   18  template<
typename _T_>
 
   21  template<
typename _T_>
 
   22  inline _T_ read(
const char* data, 
int _size)
 
   28  inline qint64 read<qint64>(
const char* data, 
int _size)
 
   30    clog_assert(_size == 
sizeof(qint64));
 
   31    qint32 h32 = *(qint32*)data;
 
   32    qint32 l32 = *(qint32*)(data + 4);
 
   42  inline quint64 read<quint64>(
const char* data, 
int _size)
 
   44    clog_assert(_size == 
sizeof(quint64));
 
   45    return read<qint64>(data, _size);
 
   48  inline qint32 read<qint32>(
const char* data, 
int _size)
 
   50    clog_assert(_size == 
sizeof(qint32));
 
   51    return ntohl(*(qint32*)data);
 
   54  inline quint32 read<quint32>(
const char* data, 
int _size)
 
   56    clog_assert(_size == 
sizeof(quint32));
 
   57    return read<qint32>(data, _size);
 
   60  inline qint16 read<qint16>(
const char* data, 
int _size)
 
   62    clog_assert(_size == 
sizeof(qint16));
 
   63    return ntohs(*(qint16*)data);
 
   66  inline quint16 read<quint16>(
const char* data, 
int _size)
 
   68    clog_assert(_size == 
sizeof(quint16));
 
   69    return read<qint16>(data, _size);
 
   72  inline char read<char>(
const char* data, 
int _size)
 
   74    clog_assert(_size == 
sizeof(
char));
 
   78  inline bool read<bool>(
const char* data, 
int _size)
 
   80    clog_assert(_size == 1);
 
   84  inline float read<float>(
const char* data, 
int _size)
 
   86    clog_assert(_size == 
sizeof(
float));
 
   92    swap.i = read<qint32>(data, _size);
 
   96  inline double read<double>(
const char* data, 
int _size)
 
   98    clog_assert(_size == 
sizeof(
double));
 
  104    swap.i = read<qint64>(data, _size);
 
  111    clog_assert(_size == 
sizeof(qint64));
 
  112    qint64 timestamp = read<qint64>(data, _size);
 
  115    if(BinaryInterface::timestamp2tm(timestamp, &tt, &fsec, NULL) == 0)
 
  117      return knowCore::Timestamp::from(
 
  118        QDateTime(QDate(tt.tm_year, tt.tm_mon, tt.tm_mday),
 
  119                  QTime(tt.tm_hour, tt.tm_min, tt.tm_sec, fsec / 1000)));
 
  128  inline QString read<QString>(
const char* data, 
int _size)
 
  130    return QString::fromUtf8(data, _size);
 
  139  inline QByteArray read<QByteArray>(
const char* data, 
int _size)
 
  141    return QByteArray(data, _size);
 
  148    quint16 ndigits = BinaryInterface::read<quint16>(data, 2);
 
  150    quint16 weight = BinaryInterface::read<quint16>(data, 2);
 
  152    quint16 sign = BinaryInterface::read<quint16>(data, 2);
 
  154    knowCore::BigNumber::Sign sign_bn;
 
  158      sign_bn = knowCore::BigNumber::Sign::Negative;
 
  161      sign_bn = knowCore::BigNumber::Sign::Positive;
 
  164      sign_bn = knowCore::BigNumber::Sign::NegativeInfinite;
 
  167      sign_bn = knowCore::BigNumber::Sign::PositiveInfinite;
 
  170      sign_bn = knowCore::BigNumber::Sign::NaN;
 
  173    qint16 dscale = BinaryInterface::read<quint16>(data, 2);
 
  176    digits.reserve(ndigits);
 
  177    for(
int i = 0; i < ndigits; ++i)
 
  179      digits.append(BinaryInterface::read<quint16>(data, 2));
 
  185  template<
typename _T_>
 
  192      qint32 ndim = read<qint32>(data, 4);
 
  198      qint32 has_null = read<qint32>(data, 4);
 
  200      Oid type = read<Oid>(data, 4);
 
  209      for(
int i = 0; i < ndim; ++i)
 
  211        qint32 dim = read<qint32>(data, 4);
 
  213        qint32 lbound = read<qint32>(data, 4);
 
  216        dimensions.append(dim);
 
  222      r_data.reserve(total_dim);
 
  224      for(
int i = 0; i < total_dim; ++i)
 
  226        std::size_t s = read<qint32>(data, 4);
 
  229        r_data.append(read<_T_>(data, s));
 
 
  235  template<
typename _T_>
 
  238    static QList<_T_> do_read(
const char* _data, 
int _size)
 
  240      return read<knowCore::Array<_T_>>(_data, _size).toList().expect_success();
 
 
  245  inline QJsonArray read<QJsonArray>(
const char* _data, 
int _size)
 
  249    qFatal(
"should not called");
 
  252  inline QJsonObject read<QJsonObject>(
const char* _data, 
int _size)
 
  256    qFatal(
"should not called");
 
  259  inline QJsonValue read<QJsonValue>(
const char* _data, 
int _size)
 
  261    QByteArray doc_data(_data, _size);
 
  262    QJsonDocument doc = QJsonDocument::fromJson(doc_data);
 
  263    if(doc.isEmpty() or doc.isNull())
 
  267        return QJsonValue(QString::fromUtf8(doc_data));
 
  274    else if(doc.isArray())
 
  278    else if(doc.isObject())
 
  286    template<
int _N_, 
typename... T>
 
  289      static void do_read(std::tuple<T...>* data, 
const char* ptr)
 
  292        quint32 s = read<quint32>(ptr, 4);
 
  294        std::get<
sizeof...(T) - _N_>(*data)
 
  295          = read<std::remove_reference_t<
decltype(std::get<
sizeof...(T) - _N_>(*data))>>(ptr, s);
 
 
  299    template<
typename... T>
 
  302      static void do_read(std::tuple<T...>* data, 
const char* ptr)
 
 
  309  template<
typename... T>
 
  314    void read(
const char* ptr)
 
  316      quint32 f = BinaryInterface::read<quint32>(ptr, 4);
 
  317      clog_assert(f == 
sizeof...(T));
 
  322    std::tuple<T...> data;
 
 
  325  template<
typename... T>
 
  328    static std::tuple<T...> do_read(
const char* data, 
int )
 
 
Class that can contains large numeric value.
Definition BigNumber.h:51
 
Definition Timestamp.h:39
 
Definition BinaryInterface_read_p.h:288
 
Definition BinaryInterface_read_p.h:19
 
Definition BinaryInterface_read_p.h:311