blob: 02cb0a54cb35e4d77ed5cd7df4d2e0f6ac8dd028 [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_ODBC_SQL_SQL_SET_STREAMING_COMMAND
#define _IGNITE_ODBC_SQL_SQL_SET_STREAMING_COMMAND
#include <stdint.h>
#include <string>
#include <ignite/odbc/sql/sql_command.h>
namespace ignite
{
namespace odbc
{
class SqlToken;
/**
* SQL set streaming command.
*/
class SqlSetStreamingCommand : public SqlCommand
{
/** Default batch size for driver. */
enum { DEFAULT_STREAM_BATCH_SIZE = 2048 };
public:
/**
* Default constructor.
*/
SqlSetStreamingCommand();
/**
* Destructor.
*/
virtual ~SqlSetStreamingCommand();
/**
* Parse from lexer.
*
* @param lexer Lexer.
*/
virtual void Parse(SqlLexer& lexer);
/**
* Check if the streaming enabled.
*
* @return @c true if enabled.
*/
bool IsEnabled() const
{
return enabled;
}
/**
* Check if the overwrite is allowed.
*
* @return @c true if allowed.
*/
bool IsAllowOverwrite() const
{
return allowOverwrite;
}
/**
* Get batch size.
*
* @return Batch size.
*/
int32_t GetBatchSize() const
{
return batchSize;
}
/**
* Get parallel operations per node.
*
* @return Parallel operations per node.
*/
int32_t GetParallelOperationsPerNode() const
{
return parallelOpsPerNode;
}
/**
* Get buffer size per node.
*
* @return Buffer size per node.
*/
int32_t GetBufferSizePerNode() const
{
return bufferSizePerNode;
}
/**
* Get flush frequency.
*
* @return Flush frequency.
*/
int64_t GetFlushFrequency() const
{
return flushFrequency;
}
/**
* Check if the streaming is ordered.
*
* @return @c true if ordered.
*/
bool IsOrdered() const
{
return ordered;
}
private:
/**
* Check that the streaming mode is enabled.
*/
void CheckEnabled(const SqlToken& token) const;
/**
* Throw exception, showing that token is unexpected.
*
* @param token Token.
* @param expected Expected details.
*/
static void ThrowUnexpectedTokenError(const SqlToken& token, const std::string& expected);
/**
* Throw exception, showing that token is unexpected.
*
* @param expected Expected details.
*/
static void ThrowUnexpectedEndOfStatement(const std::string& expected);
/**
* Get int or throw parsing exception.
*
* @param lexer Lexer to use.
* @return Integer number.
*/
static int32_t ExpectInt(SqlLexer& lexer);
/**
* Get positive int or throw parsing exception.
*
* @param lexer Lexer to use.
* @param description Param description to use in exception on error.
* @return Integer number.
*/
static int32_t ExpectPositiveInteger(SqlLexer& lexer, const std::string& description);
/**
* Get bool or throw parsing exception.
*
* @param lexer Lexer to use.
* @return Boolean value.
*/
static bool ExpectBool(SqlLexer& lexer);
/** Whether streaming must be turned on or off by this command. */
bool enabled;
/** Whether existing values should be overwritten on keys duplication. */
bool allowOverwrite;
/** Batch size for driver. */
int32_t batchSize;
/** Per node number of parallel operations. */
int32_t parallelOpsPerNode;
/** Per node buffer size. */
int32_t bufferSizePerNode;
/** Streamer flush timeout. */
int64_t flushFrequency;
/** Ordered streamer. */
bool ordered;
};
}
}
#endif //_IGNITE_ODBC_SQL_SQL_SET_STREAMING_COMMAND