You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/11/21 12:10:08 UTC
[14/47] ignite git commit: IGNITE-6836: Implemented query timeout.
This closes #3015
IGNITE-6836: Implemented query timeout.
This closes #3015
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/8c278ca9
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/8c278ca9
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/8c278ca9
Branch: refs/heads/ignite-zk
Commit: 8c278ca9b67cd17dfd882e0eb65e19745798876d
Parents: 4589ff2
Author: Igor Sapego <is...@gridgain.com>
Authored: Wed Nov 15 13:41:31 2017 +0300
Committer: Igor Sapego <is...@gridgain.com>
Committed: Wed Nov 15 13:41:31 2017 +0300
----------------------------------------------------------------------
.../processors/odbc/odbc/OdbcMessageParser.java | 14 ++++++-
.../odbc/odbc/OdbcQueryExecuteBatchRequest.java | 16 +++++++-
.../odbc/odbc/OdbcQueryExecuteRequest.java | 16 +++++++-
.../odbc/odbc/OdbcRequestHandler.java | 9 ++--
.../cpp/odbc-test/src/attributes_test.cpp | 22 ++++++++++
.../platforms/cpp/odbc-test/src/parser_test.cpp | 2 +-
.../cpp/odbc/include/ignite/odbc/message.h | 33 ++++++++++-----
.../cpp/odbc/include/ignite/odbc/parser.h | 2 +-
.../include/ignite/odbc/query/batch_query.h | 8 +++-
.../odbc/include/ignite/odbc/query/data_query.h | 8 +++-
.../cpp/odbc/include/ignite/odbc/statement.h | 4 ++
modules/platforms/cpp/odbc/src/message.cpp | 34 ++++++++++------
.../cpp/odbc/src/query/batch_query.cpp | 9 ++--
.../platforms/cpp/odbc/src/query/data_query.cpp | 9 ++--
modules/platforms/cpp/odbc/src/statement.cpp | 43 ++++++++++++++++++--
15 files changed, 180 insertions(+), 49 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/8c278ca9/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcMessageParser.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcMessageParser.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcMessageParser.java
index fb17d2a..c2137bd 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcMessageParser.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcMessageParser.java
@@ -96,7 +96,12 @@ public class OdbcMessageParser implements ClientListenerMessageParser {
Object[] params = readParameterRow(reader, paramNum);
- res = new OdbcQueryExecuteRequest(schema, sql, params);
+ int timeout = 0;
+
+ if (ver.compareTo(OdbcConnectionContext.VER_2_3_2) >= 0)
+ timeout = reader.readInt();
+
+ res = new OdbcQueryExecuteRequest(schema, sql, params, timeout);
break;
}
@@ -113,7 +118,12 @@ public class OdbcMessageParser implements ClientListenerMessageParser {
for (int i = 0; i < rowNum; ++i)
params[i] = readParameterRow(reader, paramRowLen);
- res = new OdbcQueryExecuteBatchRequest(schema, sql, last, params);
+ int timeout = 0;
+
+ if (ver.compareTo(OdbcConnectionContext.VER_2_3_2) >= 0)
+ timeout = reader.readInt();
+
+ res = new OdbcQueryExecuteBatchRequest(schema, sql, last, params, timeout);
break;
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/8c278ca9/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcQueryExecuteBatchRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcQueryExecuteBatchRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcQueryExecuteBatchRequest.java
index 50d16e5..0e4effd 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcQueryExecuteBatchRequest.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcQueryExecuteBatchRequest.java
@@ -41,13 +41,19 @@ public class OdbcQueryExecuteBatchRequest extends OdbcRequest {
@GridToStringExclude
private final Object[][] args;
+ /** Query timeout in seconds. */
+ @GridToStringInclude
+ private final int timeout;
+
/**
* @param schema Schema.
* @param sqlQry SQL query.
* @param last Last page flag.
* @param args Arguments list.
+ * @param timeout Timeout in seconds.
*/
- public OdbcQueryExecuteBatchRequest(@Nullable String schema, String sqlQry, boolean last, Object[][] args) {
+ public OdbcQueryExecuteBatchRequest(@Nullable String schema, String sqlQry, boolean last, Object[][] args,
+ int timeout) {
super(QRY_EXEC_BATCH);
assert sqlQry != null : "SQL query should not be null";
@@ -57,6 +63,7 @@ public class OdbcQueryExecuteBatchRequest extends OdbcRequest {
this.sqlQry = sqlQry;
this.last = last;
this.args = args;
+ this.timeout = timeout;
}
/**
@@ -88,6 +95,13 @@ public class OdbcQueryExecuteBatchRequest extends OdbcRequest {
return last;
}
+ /**
+ * @return Timeout in seconds.
+ */
+ public int timeout() {
+ return timeout;
+ }
+
/** {@inheritDoc} */
@Override public String toString() {
return S.toString(OdbcQueryExecuteBatchRequest.class, this, "args", args, true);
http://git-wip-us.apache.org/repos/asf/ignite/blob/8c278ca9/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcQueryExecuteRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcQueryExecuteRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcQueryExecuteRequest.java
index 26d3328..1fde908 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcQueryExecuteRequest.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcQueryExecuteRequest.java
@@ -37,12 +37,17 @@ public class OdbcQueryExecuteRequest extends OdbcRequest {
@GridToStringExclude
private final Object[] args;
+ /** Query timeout in seconds. */
+ @GridToStringInclude
+ private final int timeout;
+
/**
* @param schema Schema.
* @param sqlQry SQL query.
* @param args Arguments list.
+ * @param timeout Timeout in seconds.
*/
- public OdbcQueryExecuteRequest(@Nullable String schema, String sqlQry, Object[] args) {
+ public OdbcQueryExecuteRequest(@Nullable String schema, String sqlQry, Object[] args, int timeout) {
super(QRY_EXEC);
assert sqlQry != null : "SQL query should not be null";
@@ -50,6 +55,7 @@ public class OdbcQueryExecuteRequest extends OdbcRequest {
this.schema = schema;
this.sqlQry = sqlQry;
this.args = args;
+ this.timeout = timeout;
}
/**
@@ -73,8 +79,16 @@ public class OdbcQueryExecuteRequest extends OdbcRequest {
return schema;
}
+ /**
+ * @return Timeout in seconds.
+ */
+ public int timeout() {
+ return timeout;
+ }
+
/** {@inheritDoc} */
@Override public String toString() {
return S.toString(OdbcQueryExecuteRequest.class, this, "args", args, true);
}
+
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/8c278ca9/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcRequestHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcRequestHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcRequestHandler.java
index 7f6b48d..3bc5a23 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcRequestHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/odbc/OdbcRequestHandler.java
@@ -25,6 +25,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.ignite.IgniteException;
import org.apache.ignite.IgniteLogger;
@@ -203,7 +204,7 @@ public class OdbcRequestHandler implements ClientListenerRequestHandler {
* @param args Arguments.
* @return Query instance.
*/
- private SqlFieldsQueryEx makeQuery(String schema, String sql, Object[] args) {
+ private SqlFieldsQueryEx makeQuery(String schema, String sql, Object[] args, int timeout) {
SqlFieldsQueryEx qry = new SqlFieldsQueryEx(sql, null);
qry.setArgs(args);
@@ -216,6 +217,8 @@ public class OdbcRequestHandler implements ClientListenerRequestHandler {
qry.setSchema(schema);
qry.setSkipReducerOnUpdate(skipReducerOnUpdate);
+ qry.setTimeout(timeout, TimeUnit.SECONDS);
+
return qry;
}
@@ -243,7 +246,7 @@ public class OdbcRequestHandler implements ClientListenerRequestHandler {
log.debug("ODBC query parsed [reqId=" + req.requestId() + ", original=" + req.sqlQuery() +
", parsed=" + sql + ']');
- SqlFieldsQuery qry = makeQuery(req.schema(), sql, req.arguments());
+ SqlFieldsQuery qry = makeQuery(req.schema(), sql, req.arguments(), req.timeout());
List<FieldsQueryCursor<List<?>>> cursors = ctx.query().querySqlFieldsNoCache(qry, true, false);
@@ -285,7 +288,7 @@ public class OdbcRequestHandler implements ClientListenerRequestHandler {
log.debug("ODBC query parsed [reqId=" + req.requestId() + ", original=" + req.sqlQuery() +
", parsed=" + sql + ']');
- SqlFieldsQuery qry = makeQuery(req.schema(), sql, req.arguments());
+ SqlFieldsQuery qry = makeQuery(req.schema(), sql, req.arguments(), req.timeout());
Object[][] paramSet = req.arguments();
http://git-wip-us.apache.org/repos/asf/ignite/blob/8c278ca9/modules/platforms/cpp/odbc-test/src/attributes_test.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc-test/src/attributes_test.cpp b/modules/platforms/cpp/odbc-test/src/attributes_test.cpp
index f8cb5ac..b87f4b9 100644
--- a/modules/platforms/cpp/odbc-test/src/attributes_test.cpp
+++ b/modules/platforms/cpp/odbc-test/src/attributes_test.cpp
@@ -205,4 +205,26 @@ BOOST_AUTO_TEST_CASE(ConnectionAttributeConnectionDeadSet)
CheckSQLConnectionDiagnosticError("HY092");
}
+BOOST_AUTO_TEST_CASE(StatementAttributeQueryTimeout)
+{
+ Connect("DRIVER={Apache Ignite};address=127.0.0.1:11110;schema=cache");
+
+ SQLULEN timeout = -1;
+ SQLRETURN ret = SQLGetStmtAttr(stmt, SQL_ATTR_QUERY_TIMEOUT, &timeout, 0, 0);
+
+ ODBC_FAIL_ON_ERROR(ret, SQL_HANDLE_STMT, stmt);
+ BOOST_REQUIRE_EQUAL(timeout, 0);
+
+ ret = SQLSetStmtAttr(stmt, SQL_ATTR_QUERY_TIMEOUT, reinterpret_cast<SQLPOINTER>(7), 0);
+
+ ODBC_FAIL_ON_ERROR(ret, SQL_HANDLE_STMT, stmt);
+
+ timeout = -1;
+
+ ret = SQLGetStmtAttr(stmt, SQL_ATTR_QUERY_TIMEOUT, &timeout, 0, 0);
+
+ ODBC_FAIL_ON_ERROR(ret, SQL_HANDLE_STMT, stmt);
+ BOOST_REQUIRE_EQUAL(timeout, 7);
+}
+
BOOST_AUTO_TEST_SUITE_END()
http://git-wip-us.apache.org/repos/asf/ignite/blob/8c278ca9/modules/platforms/cpp/odbc-test/src/parser_test.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc-test/src/parser_test.cpp b/modules/platforms/cpp/odbc-test/src/parser_test.cpp
index 51539ae..af11369 100644
--- a/modules/platforms/cpp/odbc-test/src/parser_test.cpp
+++ b/modules/platforms/cpp/odbc-test/src/parser_test.cpp
@@ -42,7 +42,7 @@ struct TestMessage
// No-op.
}
- void Write(ignite::impl::binary::BinaryWriterImpl& writer) const
+ void Write(ignite::impl::binary::BinaryWriterImpl& writer, const ProtocolVersion&) const
{
writer.WriteInt32(a);
writer.WriteString(b.data(), static_cast<int32_t>(b.size()));
http://git-wip-us.apache.org/repos/asf/ignite/blob/8c278ca9/modules/platforms/cpp/odbc/include/ignite/odbc/message.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/message.h b/modules/platforms/cpp/odbc/include/ignite/odbc/message.h
index 8d6c906..51c0b41 100644
--- a/modules/platforms/cpp/odbc/include/ignite/odbc/message.h
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/message.h
@@ -95,7 +95,7 @@ namespace ignite
* Write request using provided writer.
* @param writer Writer.
*/
- void Write(impl::binary::BinaryWriterImpl& writer) const;
+ void Write(impl::binary::BinaryWriterImpl& writer, const ProtocolVersion&) const;
private:
/** Protocol version. */
@@ -132,8 +132,10 @@ namespace ignite
* @param schema Schema.
* @param sql SQL query.
* @param params Query arguments.
+ * @param timeout Timeout.
*/
- QueryExecuteRequest(const std::string& schema, const std::string& sql, const app::ParameterSet& params);
+ QueryExecuteRequest(const std::string& schema, const std::string& sql, const app::ParameterSet& params,
+ int32_t timeout);
/**
* Destructor.
@@ -143,8 +145,9 @@ namespace ignite
/**
* Write request using provided writer.
* @param writer Writer.
+ * @param ver Version.
*/
- void Write(impl::binary::BinaryWriterImpl& writer) const;
+ void Write(impl::binary::BinaryWriterImpl& writer, const ProtocolVersion& ver) const;
private:
/** Schema name. */
@@ -155,6 +158,9 @@ namespace ignite
/** Parameters bindings. */
const app::ParameterSet& params;
+
+ /** Timeout. */
+ int32_t timeout;
};
/**
@@ -171,9 +177,10 @@ namespace ignite
* @param params Query arguments.
* @param begin Beginng of the interval.
* @param end End of the interval.
+ * @param timeout Timeout.
*/
QueryExecuteBatchtRequest(const std::string& schema, const std::string& sql,
- const app::ParameterSet& params, SqlUlen begin, SqlUlen end, bool last);
+ const app::ParameterSet& params, SqlUlen begin, SqlUlen end, bool last, int32_t timeout);
/**
* Destructor.
@@ -183,8 +190,9 @@ namespace ignite
/**
* Write request using provided writer.
* @param writer Writer.
+ * @param ver Version.
*/
- void Write(impl::binary::BinaryWriterImpl& writer) const;
+ void Write(impl::binary::BinaryWriterImpl& writer, const ProtocolVersion& ver) const;
private:
/** Schema name. */
@@ -204,6 +212,9 @@ namespace ignite
/** Last page flag. */
bool last;
+
+ /** Timeout. */
+ int32_t timeout;
};
/**
@@ -228,7 +239,7 @@ namespace ignite
* Write request using provided writer.
* @param writer Writer.
*/
- void Write(impl::binary::BinaryWriterImpl& writer) const;
+ void Write(impl::binary::BinaryWriterImpl& writer, const ProtocolVersion&) const;
private:
/** Query ID. */
@@ -258,7 +269,7 @@ namespace ignite
* Write request using provided writer.
* @param writer Writer.
*/
- void Write(impl::binary::BinaryWriterImpl& writer) const;
+ void Write(impl::binary::BinaryWriterImpl& writer, const ProtocolVersion&) const;
private:
/** Query ID. */
@@ -292,7 +303,7 @@ namespace ignite
* Write request using provided writer.
* @param writer Writer.
*/
- void Write(impl::binary::BinaryWriterImpl& writer) const;
+ void Write(impl::binary::BinaryWriterImpl& writer, const ProtocolVersion&) const;
private:
/** Schema search pattern. */
@@ -331,7 +342,7 @@ namespace ignite
* Write request using provided writer.
* @param writer Writer.
*/
- void Write(impl::binary::BinaryWriterImpl& writer) const;
+ void Write(impl::binary::BinaryWriterImpl& writer, const ProtocolVersion&) const;
private:
/** Column search pattern. */
@@ -378,7 +389,7 @@ namespace ignite
* Write request using provided writer.
* @param writer Writer.
*/
- void Write(impl::binary::BinaryWriterImpl& writer) const;
+ void Write(impl::binary::BinaryWriterImpl& writer, const ProtocolVersion&) const;
private:
/** Schema. */
@@ -419,7 +430,7 @@ namespace ignite
* Write request using provided writer.
* @param writer Writer.
*/
- void Write(impl::binary::BinaryWriterImpl& writer) const;
+ void Write(impl::binary::BinaryWriterImpl& writer, const ProtocolVersion&) const;
private:
/** Query ID. */
http://git-wip-us.apache.org/repos/asf/ignite/blob/8c278ca9/modules/platforms/cpp/odbc/include/ignite/odbc/parser.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/parser.h b/modules/platforms/cpp/odbc/include/ignite/odbc/parser.h
index bfea67c..5ffb44c 100644
--- a/modules/platforms/cpp/odbc/include/ignite/odbc/parser.h
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/parser.h
@@ -79,7 +79,7 @@ namespace ignite
BinaryWriterImpl writer(&outStream, 0);
- msg.Write(writer);
+ msg.Write(writer, protocolVer);
buf.resize(outStream.Position());
http://git-wip-us.apache.org/repos/asf/ignite/blob/8c278ca9/modules/platforms/cpp/odbc/include/ignite/odbc/query/batch_query.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/query/batch_query.h b/modules/platforms/cpp/odbc/include/ignite/odbc/query/batch_query.h
index 1e6c869..af319ab 100644
--- a/modules/platforms/cpp/odbc/include/ignite/odbc/query/batch_query.h
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/query/batch_query.h
@@ -44,9 +44,10 @@ namespace ignite
* @param connection Associated connection.
* @param sql SQL query string.
* @param params SQL params.
+ * @param timeout Timeout in seconds.
*/
- BatchQuery(diagnostic::Diagnosable& diag, Connection& connection,
- const std::string& sql, const app::ParameterSet& params);
+ BatchQuery(diagnostic::Diagnosable& diag, Connection& connection, const std::string& sql,
+ const app::ParameterSet& params, int32_t& timeout);
/**
* Destructor.
@@ -156,6 +157,9 @@ namespace ignite
/** Query executed. */
bool executed;
+
+ /** Timeout. */
+ int32_t& timeout;
};
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/8c278ca9/modules/platforms/cpp/odbc/include/ignite/odbc/query/data_query.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/query/data_query.h b/modules/platforms/cpp/odbc/include/ignite/odbc/query/data_query.h
index c476000..af39bdb 100644
--- a/modules/platforms/cpp/odbc/include/ignite/odbc/query/data_query.h
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/query/data_query.h
@@ -44,9 +44,10 @@ namespace ignite
* @param connection Associated connection.
* @param sql SQL query string.
* @param params SQL params.
+ * @param timeout Timeout.
*/
- DataQuery(diagnostic::Diagnosable& diag, Connection& connection,
- const std::string& sql, const app::ParameterSet& params);
+ DataQuery(diagnostic::Diagnosable& diag, Connection& connection, const std::string& sql,
+ const app::ParameterSet& params, int32_t& timeout);
/**
* Destructor.
@@ -184,6 +185,9 @@ namespace ignite
/** Cached next result page. */
std::auto_ptr<ResultPage> cachedNextPage;
+
+ /** Timeout. */
+ int32_t& timeout;
};
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/8c278ca9/modules/platforms/cpp/odbc/include/ignite/odbc/statement.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/statement.h b/modules/platforms/cpp/odbc/include/ignite/odbc/statement.h
index 6d4b3ab..4cc30c3 100644
--- a/modules/platforms/cpp/odbc/include/ignite/odbc/statement.h
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/statement.h
@@ -666,7 +666,11 @@ namespace ignite
/** Offset added to pointers to change binding of column data. */
int* columnBindOffset;
+ /** Parameters. */
app::ParameterSet parameters;
+
+ /** Query timeout in seconds. */
+ int32_t timeout;
};
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/8c278ca9/modules/platforms/cpp/odbc/src/message.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/src/message.cpp b/modules/platforms/cpp/odbc/src/message.cpp
index 32a5d91..57b7210 100644
--- a/modules/platforms/cpp/odbc/src/message.cpp
+++ b/modules/platforms/cpp/odbc/src/message.cpp
@@ -63,7 +63,7 @@ namespace ignite
// No-op.
}
- void HandshakeRequest::Write(impl::binary::BinaryWriterImpl& writer) const
+ void HandshakeRequest::Write(impl::binary::BinaryWriterImpl& writer, const ProtocolVersion&) const
{
writer.WriteInt8(RequestType::HANDSHAKE);
@@ -86,10 +86,11 @@ namespace ignite
}
QueryExecuteRequest::QueryExecuteRequest(const std::string& schema, const std::string& sql,
- const app::ParameterSet& params):
+ const app::ParameterSet& params, int32_t timeout):
schema(schema),
sql(sql),
- params(params)
+ params(params),
+ timeout(timeout)
{
// No-op.
}
@@ -99,7 +100,7 @@ namespace ignite
// No-op.
}
- void QueryExecuteRequest::Write(impl::binary::BinaryWriterImpl& writer) const
+ void QueryExecuteRequest::Write(impl::binary::BinaryWriterImpl& writer, const ProtocolVersion& ver) const
{
writer.WriteInt8(RequestType::EXECUTE_SQL_QUERY);
@@ -111,16 +112,20 @@ namespace ignite
writer.WriteObject<std::string>(sql);
params.Write(writer);
+
+ if (ver >= ProtocolVersion::VERSION_2_3_2)
+ writer.WriteInt32(timeout);
}
QueryExecuteBatchtRequest::QueryExecuteBatchtRequest(const std::string& schema, const std::string& sql,
- const app::ParameterSet& params, SqlUlen begin, SqlUlen end, bool last):
+ const app::ParameterSet& params, SqlUlen begin, SqlUlen end, bool last, int32_t timeout):
schema(schema),
sql(sql),
params(params),
begin(begin),
end(end),
- last(last)
+ last(last),
+ timeout(timeout)
{
// No-op.
}
@@ -130,7 +135,7 @@ namespace ignite
// No-op.
}
- void QueryExecuteBatchtRequest::Write(impl::binary::BinaryWriterImpl& writer) const
+ void QueryExecuteBatchtRequest::Write(impl::binary::BinaryWriterImpl& writer, const ProtocolVersion& ver) const
{
writer.WriteInt8(RequestType::EXECUTE_SQL_QUERY_BATCH);
@@ -142,6 +147,9 @@ namespace ignite
writer.WriteObject<std::string>(sql);
params.Write(writer, begin, end, last);
+
+ if (ver >= ProtocolVersion::VERSION_2_3_2)
+ writer.WriteInt32(timeout);
}
QueryCloseRequest::QueryCloseRequest(int64_t queryId): queryId(queryId)
@@ -154,7 +162,7 @@ namespace ignite
// No-op.
}
- void QueryCloseRequest::Write(impl::binary::BinaryWriterImpl& writer) const
+ void QueryCloseRequest::Write(impl::binary::BinaryWriterImpl& writer, const ProtocolVersion&) const
{
writer.WriteInt8(RequestType::CLOSE_SQL_QUERY);
writer.WriteInt64(queryId);
@@ -172,7 +180,7 @@ namespace ignite
// No-op.
}
- void QueryFetchRequest::Write(impl::binary::BinaryWriterImpl& writer) const
+ void QueryFetchRequest::Write(impl::binary::BinaryWriterImpl& writer, const ProtocolVersion&) const
{
writer.WriteInt8(RequestType::FETCH_SQL_QUERY);
@@ -194,7 +202,7 @@ namespace ignite
// No-op.
}
- void QueryGetColumnsMetaRequest::Write(impl::binary::BinaryWriterImpl& writer) const
+ void QueryGetColumnsMetaRequest::Write(impl::binary::BinaryWriterImpl& writer, const ProtocolVersion&) const
{
writer.WriteInt8(RequestType::GET_COLUMNS_METADATA);
@@ -218,7 +226,7 @@ namespace ignite
// No-op.
}
- void QueryGetTablesMetaRequest::Write(impl::binary::BinaryWriterImpl& writer) const
+ void QueryGetTablesMetaRequest::Write(impl::binary::BinaryWriterImpl& writer, const ProtocolVersion&) const
{
writer.WriteInt8(RequestType::GET_TABLES_METADATA);
@@ -228,7 +236,7 @@ namespace ignite
writer.WriteObject<std::string>(tableTypes);
}
- void QueryGetParamsMetaRequest::Write(impl::binary::BinaryWriterImpl& writer) const
+ void QueryGetParamsMetaRequest::Write(impl::binary::BinaryWriterImpl& writer, const ProtocolVersion&) const
{
writer.WriteInt8(RequestType::GET_PARAMS_METADATA);
@@ -236,7 +244,7 @@ namespace ignite
writer.WriteObject<std::string>(sqlQuery);
}
- void QueryMoreResultsRequest::Write(impl::binary::BinaryWriterImpl& writer) const
+ void QueryMoreResultsRequest::Write(impl::binary::BinaryWriterImpl& writer, const ProtocolVersion&) const
{
writer.WriteInt8(RequestType::QUERY_MORE_RESULTS);
http://git-wip-us.apache.org/repos/asf/ignite/blob/8c278ca9/modules/platforms/cpp/odbc/src/query/batch_query.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/src/query/batch_query.cpp b/modules/platforms/cpp/odbc/src/query/batch_query.cpp
index 29d11ca..07d42d4 100644
--- a/modules/platforms/cpp/odbc/src/query/batch_query.cpp
+++ b/modules/platforms/cpp/odbc/src/query/batch_query.cpp
@@ -27,8 +27,8 @@ namespace ignite
{
namespace query
{
- BatchQuery::BatchQuery(diagnostic::Diagnosable& diag, Connection& connection,
- const std::string& sql, const app::ParameterSet& params) :
+ BatchQuery::BatchQuery(diagnostic::Diagnosable& diag, Connection& connection, const std::string& sql,
+ const app::ParameterSet& params, int32_t& timeout) :
Query(diag, QueryType::BATCH),
connection(connection),
sql(sql),
@@ -36,7 +36,8 @@ namespace ignite
resultMeta(),
rowsAffected(),
rowsAffectedIdx(0),
- executed(false)
+ executed(false),
+ timeout(timeout)
{
// No-op.
}
@@ -147,7 +148,7 @@ namespace ignite
{
const std::string& schema = connection.GetSchema();
- QueryExecuteBatchtRequest req(schema, sql, params, begin, end, last);
+ QueryExecuteBatchtRequest req(schema, sql, params, begin, end, last, timeout);
QueryExecuteBatchResponse rsp;
try
http://git-wip-us.apache.org/repos/asf/ignite/blob/8c278ca9/modules/platforms/cpp/odbc/src/query/data_query.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/src/query/data_query.cpp b/modules/platforms/cpp/odbc/src/query/data_query.cpp
index 012b026..0539af5 100644
--- a/modules/platforms/cpp/odbc/src/query/data_query.cpp
+++ b/modules/platforms/cpp/odbc/src/query/data_query.cpp
@@ -28,8 +28,8 @@ namespace ignite
{
namespace query
{
- DataQuery::DataQuery(diagnostic::Diagnosable& diag, Connection& connection,
- const std::string& sql, const app::ParameterSet& params) :
+ DataQuery::DataQuery(diagnostic::Diagnosable& diag, Connection& connection, const std::string& sql,
+ const app::ParameterSet& params, int32_t& timeout) :
Query(diag, QueryType::DATA),
connection(connection),
sql(sql),
@@ -38,7 +38,8 @@ namespace ignite
cursor(),
rowsAffected(),
rowsAffectedIdx(0),
- cachedNextPage()
+ cachedNextPage(),
+ timeout(timeout)
{
// No-op.
}
@@ -216,7 +217,7 @@ namespace ignite
{
const std::string& schema = connection.GetSchema();
- QueryExecuteRequest req(schema, sql, params);
+ QueryExecuteRequest req(schema, sql, params, timeout);
QueryExecuteResponse rsp;
try
http://git-wip-us.apache.org/repos/asf/ignite/blob/8c278ca9/modules/platforms/cpp/odbc/src/statement.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/src/statement.cpp b/modules/platforms/cpp/odbc/src/statement.cpp
index b167d44..898d44d 100644
--- a/modules/platforms/cpp/odbc/src/statement.cpp
+++ b/modules/platforms/cpp/odbc/src/statement.cpp
@@ -15,6 +15,8 @@
* limitations under the License.
*/
+#include <limits>
+
#include "ignite/odbc/system/odbc_constants.h"
#include "ignite/odbc/query/batch_query.h"
#include "ignite/odbc/query/data_query.h"
@@ -42,7 +44,8 @@ namespace ignite
rowsFetched(0),
rowStatuses(0),
columnBindOffset(0),
- parameters()
+ parameters(),
+ timeout(0)
{
// No-op.
}
@@ -282,6 +285,29 @@ namespace ignite
break;
}
+ case SQL_ATTR_QUERY_TIMEOUT:
+ {
+ SqlUlen uTimeout = reinterpret_cast<SqlUlen>(value);
+
+ if (uTimeout > INT32_MAX)
+ {
+ timeout = INT32_MAX;
+
+ std::stringstream ss;
+
+ ss << "Value is too big: " << uTimeout << ", changing to " << timeout << ".";
+ std::string msg = ss.str();
+
+ AddStatusRecord(SqlState::S01S02_OPTION_VALUE_CHANGED, msg);
+
+ return SqlResult::AI_SUCCESS_WITH_INFO;
+ }
+
+ timeout = static_cast<int32_t>(uTimeout);
+
+ break;
+ }
+
default:
{
AddStatusRecord(SqlState::SHYC00_OPTIONAL_FEATURE_NOT_IMPLEMENTED,
@@ -409,6 +435,15 @@ namespace ignite
break;
}
+ case SQL_ATTR_QUERY_TIMEOUT:
+ {
+ SqlUlen *uTimeout = reinterpret_cast<SqlUlen*>(buf);
+
+ *uTimeout = static_cast<SqlUlen>(timeout);
+
+ break;
+ }
+
default:
{
AddStatusRecord(SqlState::SHYC00_OPTIONAL_FEATURE_NOT_IMPLEMENTED,
@@ -496,7 +531,7 @@ namespace ignite
// Resetting parameters types as we are changing the query.
parameters.Prepare();
- currentQuery.reset(new query::DataQuery(*this, connection, query, parameters));
+ currentQuery.reset(new query::DataQuery(*this, connection, query, parameters, timeout));
return SqlResult::AI_SUCCESS;
}
@@ -534,13 +569,13 @@ namespace ignite
{
query::DataQuery& qry = static_cast<query::DataQuery&>(*currentQuery);
- currentQuery.reset(new query::BatchQuery(*this, connection, qry.GetSql(), parameters));
+ currentQuery.reset(new query::BatchQuery(*this, connection, qry.GetSql(), parameters, timeout));
}
else if (parameters.GetParamSetSize() == 1 && currentQuery->GetType() == query::QueryType::BATCH)
{
query::BatchQuery& qry = static_cast<query::BatchQuery&>(*currentQuery);
- currentQuery.reset(new query::DataQuery(*this, connection, qry.GetSql(), parameters));
+ currentQuery.reset(new query::DataQuery(*this, connection, qry.GetSql(), parameters, timeout));
}
if (parameters.IsDataAtExecNeeded())