blob: a7220d83d1c62c195e69a7f44a9a4d1303318752 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _IGNITE_IMPL_THIN_MESSAGE
#define _IGNITE_IMPL_THIN_MESSAGE
#include <stdint.h>
#include <string>
#include <vector>
#include <ignite/thin/cache/query/query_sql_fields.h>
#include <ignite/thin/transactions/transaction_consts.h>
#include <ignite/impl/binary/binary_writer_impl.h>
#include <ignite/impl/binary/binary_reader_impl.h>
#include <ignite/impl/thin/writable.h>
#include <ignite/impl/thin/readable.h>
#include "impl/affinity/affinity_topology_version.h"
#include "impl/affinity/partition_awareness_group.h"
#include "impl/cache/query/cursor_page.h"
#include "impl/protocol_version.h"
namespace ignite
{
namespace impl
{
namespace thin
{
/** "Transactional" flag mask. */
#define TRANSACTIONAL_FLAG_MASK 0x02;
#define KEEP_BINARY_FLAG_MASK 0x01;
/* Forward declaration. */
class Readable;
/* Forward declaration. */
class Writable;
struct ClientType
{
enum Type
{
THIN_CLIENT = 2
};
};
struct RequestType
{
enum Type
{
/** Resource close. */
RESOURCE_CLOSE = 0,
/** Handshake. */
HANDSHAKE = 1,
/** Cache get. */
CACHE_GET = 1000,
/** Cache put. */
CACHE_PUT = 1001,
/** Cache put if absent. */
CACHE_PUT_IF_ABSENT = 1002,
/** Get all. */
CACHE_GET_ALL = 1003,
/** Put all. */
CACHE_PUT_ALL = 1004,
/** Cache get and put. */
CACHE_GET_AND_PUT = 1005,
/** Cache get and replace. */
CACHE_GET_AND_REPLACE = 1006,
/** Cache get and remove. */
CACHE_GET_AND_REMOVE = 1007,
/** Cache get and put if absent. */
CACHE_GET_AND_PUT_IF_ABSENT = 1008,
/** Cache replace. */
CACHE_REPLACE = 1009,
/** Cache replace if equals. */
CACHE_REPLACE_IF_EQUALS = 1010,
/** Cache contains key. */
CACHE_CONTAINS_KEY = 1011,
/** Cache contains keys. */
CACHE_CONTAINS_KEYS = 1012,
/** Cache clear. */
CACHE_CLEAR = 1013,
/** Cache clear key. */
CACHE_CLEAR_KEY = 1014,
/** Cache clear keys. */
CACHE_CLEAR_KEYS = 1015,
/** Cache remove key. */
CACHE_REMOVE_KEY = 1016,
/** Cache remove if equals. */
CACHE_REMOVE_IF_EQUALS = 1017,
/** Cache remove keys. */
CACHE_REMOVE_KEYS = 1018,
/** Cache remove all. */
CACHE_REMOVE_ALL = 1019,
/** Get size. */
CACHE_GET_SIZE = 1020,
/** Local peek. */
CACHE_LOCAL_PEEK = 1021,
/** Cache get names. */
CACHE_GET_NAMES = 1050,
/** Cache create with name. */
CACHE_CREATE_WITH_NAME = 1051,
/** Cache get or create with name. */
CACHE_GET_OR_CREATE_WITH_NAME = 1052,
/** Cache destroy. */
CACHE_DESTROY = 1056,
/** Cache partitions request. */
CACHE_PARTITIONS = 1101,
/** SQL fields query request. */
QUERY_SQL_FIELDS = 2004,
/** SQL fields query get next cursor page request. */
QUERY_SQL_FIELDS_CURSOR_GET_PAGE = 2005,
/** Get binary type info. */
GET_BINARY_TYPE = 3002,
/** Put binary type info. */
PUT_BINARY_TYPE = 3003,
/** Start new transaction. */
OP_TX_START = 4000,
/** Commit transaction. */
OP_TX_END = 4001
};
};
/**
* Request.
*
* @tparam OpCode Operation code.
*/
template<int32_t OpCode>
class Request
{
public:
/**
* Destructor.
*/
virtual ~Request()
{
// No-op.
}
/**
* Get operation code.
*
* @return Operation code.
*/
static int32_t GetOperationCode()
{
return OpCode;
}
/**
* Write request using provided writer.
* @param writer Writer.
* @param ver Version.
*/
virtual void Write(binary::BinaryWriterImpl&, const ProtocolVersion&) const
{
// No-op.
}
};
/**
* Cache partitions request.
*/
class CachePartitionsRequest : public Request<RequestType::CACHE_PARTITIONS>
{
public:
/**
* Constructor.
*
* @param cacheIds Cache IDs.
*/
CachePartitionsRequest(const std::vector<int32_t>& cacheIds);
/**
* Destructor.
*/
virtual ~CachePartitionsRequest()
{
// No-op.
}
/**
* Write request using provided writer.
* @param writer Writer.
*/
virtual void Write(binary::BinaryWriterImpl& writer, const ProtocolVersion&) const;
private:
/** Cache IDs. */
const std::vector<int32_t>& cacheIds;
};
/**
* Get or create cache request.
*/
class GetOrCreateCacheWithNameRequest : public Request<RequestType::CACHE_GET_OR_CREATE_WITH_NAME>
{
public:
/**
* Constructor.
*
* @param name Cache name.
*/
GetOrCreateCacheWithNameRequest(const std::string& name);
/**
* Destructor.
*/
virtual ~GetOrCreateCacheWithNameRequest()
{
// No-op.
}
/**
* Write request using provided writer.
* @param writer Writer.
* @param ver Version.
*/
virtual void Write(binary::BinaryWriterImpl& writer, const ProtocolVersion& ver) const;
private:
/** Name. */
std::string name;
};
/**
* Get or create cache request.
*/
class CreateCacheWithNameRequest : public Request<RequestType::CACHE_CREATE_WITH_NAME>
{
public:
/**
* Constructor.
*
* @param name Cache name.
*/
CreateCacheWithNameRequest(const std::string& name);
/**
* Destructor.
*/
virtual ~CreateCacheWithNameRequest()
{
// No-op.
}
/**
* Write request using provided writer.
* @param writer Writer.
* @param ver Version.
*/
virtual void Write(binary::BinaryWriterImpl& writer, const ProtocolVersion& ver) const;
private:
/** Name. */
std::string name;
};
/**
* Destroy cache request.
*/
class DestroyCacheRequest : public Request<RequestType::CACHE_DESTROY>
{
public:
/**
* Constructor.
*
* @param cacheId Cache ID.
*/
DestroyCacheRequest(int32_t cacheId) :
cacheId(cacheId)
{
// No-op.
}
/**
* Destructor.
*/
virtual ~DestroyCacheRequest()
{
// No-op.
}
/**
* Write request using provided writer.
* @param writer Writer.
* @param ver Version.
*/
virtual void Write(binary::BinaryWriterImpl& writer, const ProtocolVersion& ver) const;
private:
/** Cache ID. */
int32_t cacheId;
};
/**
* Cache request.
*
* Request to cache.
*/
template<int32_t OpCode>
class CacheRequest : public Request<OpCode>
{
public:
/**
* Constructor.
*
* @param cacheId Cache ID.
* @param binary Binary cache flag.
*/
CacheRequest(int32_t cacheId, bool binary) :
cacheId(cacheId),
binary(binary),
actTx(false),
txId(0)
{
// No-op.
}
/**
* Destructor.
*/
virtual ~CacheRequest()
{
// No-op.
}
/**
* Sets transaction active flag and appropriate txId.
* @param active Transaction activity flag.
* @param id Transaction id.
*/
void activeTx(bool active, int32_t id) {
actTx = active;
txId = id;
}
/**
* Write request using provided writer.
* @param writer Writer.
*/
virtual void Write(binary::BinaryWriterImpl& writer, const ProtocolVersion&) const
{
writer.WriteInt32(cacheId);
int8_t flags = 0;
if (binary)
flags |= KEEP_BINARY_FLAG_MASK;
if (actTx)
flags |= TRANSACTIONAL_FLAG_MASK;
writer.WriteInt8(flags);
if (actTx)
writer.WriteInt32(txId);
}
private:
/** Cache ID. */
int32_t cacheId;
/** Binary flag. */
bool binary;
bool actTx;
int32_t txId;
};
/**
* Cache get size request.
*/
class CacheGetSizeRequest : public CacheRequest<RequestType::CACHE_GET_SIZE>
{
public:
/**
* Constructor.
*
* @param cacheId Cache ID.
* @param binary Binary cache flag.
* @param peekModes Peek modes.
*/
CacheGetSizeRequest(int32_t cacheId, bool binary, int32_t peekModes);
/**
* Destructor.
*/
virtual ~CacheGetSizeRequest()
{
// No-op.
}
/**
* Write request using provided writer.
* @param writer Writer.
* @param ver Version.
*/
virtual void Write(binary::BinaryWriterImpl& writer, const ProtocolVersion& ver) const;
private:
/** Peek modes. */
int32_t peekModes;
};
/**
* Cache value request.
*
* Request to cache containing writable value.
*/
template<int32_t OpCode>
class CacheValueRequest : public CacheRequest<OpCode>
{
public:
/**
* Constructor.
*
* @param cacheId Cache ID.
* @param binary Binary cache flag.
* @param value Value.
*/
CacheValueRequest(int32_t cacheId, bool binary, const Writable& value) :
CacheRequest<OpCode>(cacheId, binary),
value(value)
{
// No-op.
}
/**
* Destructor.
*/
virtual ~CacheValueRequest()
{
// No-op.
}
/**
* Write request using provided writer.
* @param writer Writer.
* @param ver Version.
*/
virtual void Write(binary::BinaryWriterImpl& writer, const ProtocolVersion& ver) const
{
CacheRequest<OpCode>::Write(writer, ver);
value.Write(writer);
}
private:
/** Key. */
const Writable& value;
};
/**
* Cache 2 value request.
*/
template<int32_t OpCode>
class Cache2ValueRequest : public CacheRequest<OpCode>
{
public:
/**
* Constructor.
*
* @param cacheId Cache ID.
* @param binary Binary cache flag.
* @param val1 Value 1.
* @param val2 Value 2.
*/
Cache2ValueRequest(int32_t cacheId, bool binary, const Writable& val1, const Writable& val2) :
CacheRequest<OpCode>(cacheId, binary),
val1(val1),
val2(val2)
{
// No-op.
}
/**
* Destructor.
*/
virtual ~Cache2ValueRequest()
{
// No-op.
}
/**
* Write request using provided writer.
* @param writer Writer.
* @param ver Version.
*/
virtual void Write(binary::BinaryWriterImpl& writer, const ProtocolVersion& ver) const
{
CacheRequest<OpCode>::Write(writer, ver);
val1.Write(writer);
val2.Write(writer);
}
private:
/** Value 1. */
const Writable& val1;
/** Value 2. */
const Writable& val2;
};
/**
* Cache 3 value request.
*/
template<int32_t OpCode>
class Cache3ValueRequest : public CacheRequest<OpCode>
{
public:
/**
* Constructor.
*
* @param cacheId Cache ID.
* @param binary Binary cache flag.
* @param val1 Value 1.
* @param val2 Value 2.
* @param val3 Value 3.
*/
Cache3ValueRequest(int32_t cacheId, bool binary, const Writable& val1, const Writable& val2,
const Writable& val3) :
CacheRequest<OpCode>(cacheId, binary),
val1(val1),
val2(val2),
val3(val3)
{
// No-op.
}
/**
* Destructor.
*/
virtual ~Cache3ValueRequest()
{
// No-op.
}
/**
* Write request using provided writer.
* @param writer Writer.
* @param ver Version.
*/
virtual void Write(binary::BinaryWriterImpl& writer, const ProtocolVersion& ver) const
{
CacheRequest<OpCode>::Write(writer, ver);
val1.Write(writer);
val2.Write(writer);
val3.Write(writer);
}
private:
/** Value 1. */
const Writable& val1;
/** Value 2. */
const Writable& val2;
/** Value 3. */
const Writable& val3;
};
/**
* Tx start request.
*/
class TxStartRequest : public Request<RequestType::OP_TX_START>
{
public:
/**
* Constructor.
*/
TxStartRequest(
ignite::thin::transactions::TransactionConcurrency::Type conc,
ignite::thin::transactions::TransactionIsolation::Type isolationLvl,
int64_t tmOut,
ignite::common::concurrent::SharedPointer<common::FixedSizeArray<char> > lbl
) :
concurrency(conc),
isolation(isolationLvl),
timeout(tmOut),
label(lbl)
{
// No-op.
}
/**
* Destructor.
*/
virtual ~TxStartRequest()
{
// No-op.
}
/**
* Write request using provided writer.
* @param writer Writer.
* @param ver Version.
*/
virtual void Write(binary::BinaryWriterImpl& writer, const ProtocolVersion&) const {
writer.WriteInt8(concurrency);
writer.WriteInt8(isolation);
writer.WriteInt64(timeout);
label.IsValid() ? writer.WriteString(label.Get()->GetData()) : writer.WriteNull();
}
private:
/** Cncurrency. */
ignite::thin::transactions::TransactionConcurrency::Type concurrency;
/** Isolation. */
ignite::thin::transactions::TransactionIsolation::Type isolation;
/** Timeout. */
const int64_t timeout;
/** Tx label. */
ignite::common::concurrent::SharedPointer<common::FixedSizeArray<char> > label;
};
/**
* Tx end request.
*/
class TxEndRequest : public Request<RequestType::OP_TX_END>
{
public:
/**
* Constructor.
*
* @param id Transaction id.
* @param commit Need to commit flag.
*/
TxEndRequest(int32_t id, bool commit) :
txId(id),
commited(commit)
{
// No-op.
}
/**
* Destructor.
*/
virtual ~TxEndRequest()
{
// No-op.
}
/**
* Write request using provided writer.
* @param writer Writer.
* @param ver Version.
*/
virtual void Write(binary::BinaryWriterImpl& writer, const ProtocolVersion&) const {
writer.WriteInt32(txId);
writer.WriteBool(commited);
}
private:
/** Tx id. */
const int32_t txId;
/** Need to commit flag. */
const bool commited;
};
/**
* Cache get binary type request.
*/
class BinaryTypeGetRequest : public Request<RequestType::GET_BINARY_TYPE>
{
public:
/**
* Constructor.
*
* @param typeId Type ID.
*/
BinaryTypeGetRequest(int32_t typeId) :
typeId(typeId)
{
// No-op.
}
/**
* Destructor.
*/
virtual ~BinaryTypeGetRequest()
{
// No-op.
}
/**
* Write request using provided writer.
* @param writer Writer.
* @param ver Version.
*/
virtual void Write(binary::BinaryWriterImpl& writer, const ProtocolVersion& ver) const;
private:
/** Cache ID. */
int32_t typeId;
};
/**
* Cache put binary type request.
*/
class BinaryTypePutRequest : public Request<RequestType::PUT_BINARY_TYPE>
{
public:
/**
* Constructor.
*
* @param snapshot Type snapshot.
*/
BinaryTypePutRequest(const binary::Snap& snapshot) :
snapshot(snapshot)
{
// No-op.
}
/**
* Destructor.
*/
virtual ~BinaryTypePutRequest()
{
// No-op.
}
/**
* Write request using provided writer.
* @param writer Writer.
* @param ver Version.
*/
virtual void Write(binary::BinaryWriterImpl& writer, const ProtocolVersion& ver) const;
private:
/** Cache ID. */
const binary::Snap& snapshot;
};
/**
* Cache SQL fields query request.
*/
class SqlFieldsQueryRequest : public CacheRequest<RequestType::QUERY_SQL_FIELDS>
{
public:
/**
* Constructor.
*
* @param cacheId Cache ID.
* @param qry SQL query.
*/
explicit SqlFieldsQueryRequest(int32_t cacheId, const ignite::thin::cache::query::SqlFieldsQuery &qry);
/**
* Destructor.
*/
virtual ~SqlFieldsQueryRequest()
{
// No-op.
}
/**
* Write request using provided writer.
* @param writer Writer.
* @param ver Version.
*/
virtual void Write(binary::BinaryWriterImpl& writer, const ProtocolVersion& ver) const;
private:
/** Query. */
const ignite::thin::cache::query::SqlFieldsQuery &qry;
};
/**
* Cache SQL fields cursor get page request.
*/
class SqlFieldsCursorGetPageRequest : public Request<RequestType::QUERY_SQL_FIELDS_CURSOR_GET_PAGE>
{
public:
/**
* Constructor.
*
* @param cursorId Cursor ID.
*/
explicit SqlFieldsCursorGetPageRequest(int64_t cursorId) :
cursorId(cursorId)
{
// No-op.
}
/**
* Destructor.
*/
virtual ~SqlFieldsCursorGetPageRequest()
{
// No-op.
}
/**
* Write request using provided writer.
* @param writer Writer.
* @param ver Version.
*/
virtual void Write(binary::BinaryWriterImpl& writer, const ProtocolVersion& ver) const;
private:
/** Cursor ID. */
const int64_t cursorId;
};
/**
* General response.
*/
class Response
{
public:
/**
* Constructor.
*/
Response();
/**
* Destructor.
*/
virtual ~Response();
/**
* Read response using provided reader.
* @param reader Reader.
* @param ver Protocol version.
*/
void Read(binary::BinaryReaderImpl& reader, const ProtocolVersion& ver);
/**
* Get request processing status.
* @return Status.
*/
int32_t GetStatus() const
{
return status;
}
/**
* Get resulting error.
* @return Error.
*/
const std::string& GetError() const
{
return error;
}
/**
* Get affinity topology version.
*
* @return Affinity topology version, or null if it has not changed.
*/
const AffinityTopologyVersion* GetAffinityTopologyVersion() const
{
if (!IsAffinityTopologyChanged())
return 0;
return &topologyVersion;
}
/**
* Check if affinity topology failed.
*
* @return @c true affinity topology failed.
*/
bool IsAffinityTopologyChanged() const;
/**
* Check if operation failed.
*
* @return @c true if operation failed.
*/
bool IsFailure() const;
protected:
/**
* Read data if response status is ResponseStatus::SUCCESS.
*/
virtual void ReadOnSuccess(binary::BinaryReaderImpl&, const ProtocolVersion&)
{
// No-op.
}
private:
/** Flags. */
int16_t flags;
/** Affinity topology version. */
AffinityTopologyVersion topologyVersion;
/** Request processing status. */
int32_t status;
/** Error message. */
std::string error;
};
/**
* Cache node list request.
*/
class ClientCacheNodePartitionsResponse : public Response
{
public:
/**
* Constructor.
*
* @param nodeParts Node partitions.
*/
ClientCacheNodePartitionsResponse(std::vector<NodePartitions>& nodeParts);
/**
* Destructor.
*/
virtual ~ClientCacheNodePartitionsResponse();
/**
* Read data if response status is ResponseStatus::SUCCESS.
*
* @param reader Reader.
*/
virtual void ReadOnSuccess(binary::BinaryReaderImpl& reader, const ProtocolVersion&);
private:
/** Node partitions. */
std::vector<NodePartitions>& nodeParts;
};
/**
* Cache node list request.
*/
class CachePartitionsResponse : public Response
{
public:
/**
* Constructor.
*
* @param groups Partition awareness Groups.
*/
CachePartitionsResponse(std::vector<PartitionAwarenessGroup>& groups);
/**
* Destructor.
*/
virtual ~CachePartitionsResponse();
/**
* Read data if response status is ResponseStatus::SUCCESS.
*
* @param reader Reader.
*/
virtual void ReadOnSuccess(binary::BinaryReaderImpl& reader, const ProtocolVersion&);
/**
* Get version.
*
* @return Topology version.
*/
const AffinityTopologyVersion& GetVersion() const
{
return topologyVersion;
}
/**
* Get partition awareness groups.
*
* @return Partition awareness groups.
*/
const std::vector<PartitionAwarenessGroup>& GetGroups() const
{
return groups;
}
private:
/** Affinity topology version. */
AffinityTopologyVersion topologyVersion;
/** Partition awareness groups. */
std::vector<PartitionAwarenessGroup>& groups;
};
/**
* Cache value response.
*/
class CacheValueResponse : public Response
{
public:
/**
* Constructor.
*
* @param value Value.
*/
CacheValueResponse(Readable& value);
/**
* Destructor.
*/
virtual ~CacheValueResponse();
/**
* Read data if response status is ResponseStatus::SUCCESS.
*
* @param reader Reader.
*/
virtual void ReadOnSuccess(binary::BinaryReaderImpl& reader, const ProtocolVersion&);
private:
/** Value. */
Readable& value;
};
/**
* Cache put response.
*/
class BinaryTypeGetResponse : public Response
{
public:
/**
* Constructor.
*
* @param snapshot Type snapshot.
*/
BinaryTypeGetResponse(binary::SPSnap& snapshot) :
snapshot(snapshot)
{
// No-op.
}
/**
* Destructor.
*/
virtual ~BinaryTypeGetResponse()
{
// No-op.
}
/**
* Read data if response status is ResponseStatus::SUCCESS.
*
* @param reader Reader.
*/
virtual void ReadOnSuccess(binary::BinaryReaderImpl& reader, const ProtocolVersion&);
private:
/** Cache ID. */
binary::SPSnap& snapshot;
};
/**
* Get cache names response.
*/
class GetCacheNamesResponse : public Response
{
public:
/**
* Constructor.
*
* @param cacheNames Cache names.
*/
GetCacheNamesResponse(std::vector<std::string>& cacheNames) :
cacheNames(cacheNames)
{
// No-op.
}
/**
* Destructor.
*/
virtual ~GetCacheNamesResponse()
{
// No-op.
}
/**
* Read data if response status is ResponseStatus::SUCCESS.
*
* @param reader Reader.
*/
virtual void ReadOnSuccess(binary::BinaryReaderImpl& reader, const ProtocolVersion&);
private:
/** Cache ID. */
std::vector<std::string>& cacheNames;
};
/**
* Get cache names response.
*/
class BoolResponse : public Response
{
public:
/**
* Constructor.
*/
BoolResponse() :
value(false)
{
// No-op.
}
/**
* Destructor.
*/
virtual ~BoolResponse()
{
// No-op.
}
/**
* Get received value.
*
* @return Received bool value.
*/
bool GetValue() const
{
return value;
}
/**
* Read data if response status is ResponseStatus::SUCCESS.
*
* @param reader Reader.
*/
virtual void ReadOnSuccess(binary::BinaryReaderImpl& reader, const ProtocolVersion&);
private:
/** Value. */
bool value;
};
/**
* Get cache names response.
*/
class Int64Response : public Response
{
public:
/**
* Constructor.
*/
Int64Response() :
value(0)
{
// No-op.
}
/**
* Destructor.
*/
virtual ~Int64Response()
{
// No-op.
}
/**
* Get received value.
*
* @return Received bool value.
*/
int64_t GetValue() const
{
return value;
}
/**
* Read data if response status is ResponseStatus::SUCCESS.
*
* @param reader Reader.
*/
virtual void ReadOnSuccess(binary::BinaryReaderImpl& reader, const ProtocolVersion&);
private:
/** Value. */
int64_t value;
};
/**
* Get cache names response.
*/
class Int32Response : public Response
{
public:
/**
* Constructor.
*/
Int32Response() :
value(0)
{
// No-op.
}
/**
* Destructor.
*/
virtual ~Int32Response()
{
// No-op.
}
/**
* Get received value.
*
* @return Received bool value.
*/
int32_t GetValue() const
{
return value;
}
/**
* Read data if response status is ResponseStatus::SUCCESS.
*
* @param reader Reader.
*/
virtual void ReadOnSuccess(binary::BinaryReaderImpl& reader, const ProtocolVersion&);
private:
/** Value. */
int32_t value;
};
/**
* Cache SQL fields query response.
*/
class SqlFieldsQueryResponse : public Response
{
public:
/**
* Constructor.
*/
SqlFieldsQueryResponse() :
cursorId(0),
cursorPage(new cache::query::CursorPage())
{
// No-op.
}
/**
* Destructor.
*/
virtual ~SqlFieldsQueryResponse()
{
// No-op.
}
/**
* Get cursor ID.
*
* @return Cursor ID.
*/
int64_t GetCursorId() const
{
return cursorId;
}
/**
* Get columns.
*
* @return Column names.
*/
const std::vector<std::string>& GetColumns() const
{
return columns;
}
/**
* Get cursor page.
* @return Cursor page.
*/
cache::query::SP_CursorPage GetCursorPage() const
{
return cursorPage;
}
/**
* Read data if response status is ResponseStatus::SUCCESS.
*
* @param reader Reader.
*/
virtual void ReadOnSuccess(binary::BinaryReaderImpl& reader, const ProtocolVersion&);
private:
/** Cursor ID. */
int64_t cursorId;
/** Column names. */
std::vector<std::string> columns;
/** Cursor Page. */
cache::query::SP_CursorPage cursorPage;
};
/**
* Cache SQL fields cursor get page response.
*/
class SqlFieldsCursorGetPageResponse : public Response
{
public:
/**
* Constructor.
*/
SqlFieldsCursorGetPageResponse() :
cursorPage(new cache::query::CursorPage())
{
// No-op.
}
/**
* Destructor.
*/
virtual ~SqlFieldsCursorGetPageResponse()
{
// No-op.
}
/**
* Get cursor page.
* @return Cursor page.
*/
cache::query::SP_CursorPage GetCursorPage() const
{
return cursorPage;
}
/**
* Read data if response status is ResponseStatus::SUCCESS.
*
* @param reader Reader.
*/
virtual void ReadOnSuccess(binary::BinaryReaderImpl& reader, const ProtocolVersion&);
private:
/** Cursor Page. */
cache::query::SP_CursorPage cursorPage;
};
}
}
}
#endif //_IGNITE_IMPL_THIN_MESSAGE