You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by jb...@apache.org on 2016/08/26 17:28:19 UTC
[2/3] incubator-impala git commit: IMPALA-1659: Netezza compatibility
functions: metadata
IMPALA-1659: Netezza compatibility functions: metadata
Added the SQL functions current_catalog(), current_user() and session_user() as
aliases to existing ones and a new SQL function current_sid().
Change-Id: I9b5d1009bbf42acc175a942d2df484e1c64822ca
Reviewed-on: http://gerrit.cloudera.org:8080/4063
Reviewed-by: Tim Armstrong <ta...@cloudera.com>
Reviewed-by: Marcel Kornacker <ma...@cloudera.com>
Tested-by: Internal Jenkins
Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/c23dc3a5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/c23dc3a5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/c23dc3a5
Branch: refs/heads/master
Commit: c23dc3a53aaacfad11e6dfd825fcfa4c1ded7568
Parents: 9f2c42d
Author: Zoltan Ivanfi <zi...@cloudera.com>
Authored: Wed Aug 17 18:16:48 2016 +0200
Committer: Internal Jenkins <cl...@gerrit.cloudera.org>
Committed: Fri Aug 26 16:29:24 2016 +0000
----------------------------------------------------------------------
be/src/exprs/expr-test.cc | 21 +++++++++++++++++++++
be/src/exprs/utility-functions-ir.cc | 4 ++++
be/src/exprs/utility-functions.h | 4 ++++
be/src/runtime/runtime-state.h | 1 +
common/function-registry/impala_functions.py | 7 ++++---
tests/custom_cluster/test_delegation.py | 8 +++++---
6 files changed, 39 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/c23dc3a5/be/src/exprs/expr-test.cc
----------------------------------------------------------------------
diff --git a/be/src/exprs/expr-test.cc b/be/src/exprs/expr-test.cc
index 744038b..c293ff4 100644
--- a/be/src/exprs/expr-test.cc
+++ b/be/src/exprs/expr-test.cc
@@ -2697,8 +2697,11 @@ TEST_F(ExprTest, StringParseUrlFunction) {
TEST_F(ExprTest, UtilityFunctions) {
TestStringValue("current_database()", "default");
+ TestStringValue("current_catalog()", "default");
TestStringValue("user()", "impala_test_user");
+ TestStringValue("current_user()", "impala_test_user");
TestStringValue("effective_user()", "impala_test_user");
+ TestStringValue("session_user()", "impala_test_user");
TestStringValue("version()", GetVersionString());
TestValue("sleep(100)", TYPE_BOOLEAN, true);
TestIsNull("sleep(NULL)", TYPE_BOOLEAN);
@@ -2773,6 +2776,24 @@ TEST_F(ExprTest, UtilityFunctions) {
TestIsNull("fnv_hash(NULL)", TYPE_BIGINT);
}
+TEST_F(ExprTest, SessionFunctions) {
+ enum Session {S1, S2};
+ enum Query {Q1, Q2};
+
+ map<Session, map<Query, string>> results;
+ for (Session session: {S1, S2}) {
+ executor_->Setup(); // Starts new session
+ results[session][Q1] = GetValue("current_session()", TYPE_STRING);
+ results[session][Q2] = GetValue("current_sid()", TYPE_STRING);
+ }
+
+ // The sessions IDs from the same session must be the same.
+ EXPECT_EQ(results[S1][Q1], results[S1][Q2]);
+ EXPECT_EQ(results[S2][Q1], results[S2][Q2]);
+ // The sessions IDs from different sessions must be different.
+ EXPECT_NE(results[S1][Q1], results[S2][Q1]);
+}
+
TEST_F(ExprTest, NonFiniteFloats) {
TestValue("is_inf(0.0)", TYPE_BOOLEAN, false);
TestValue("is_inf(-1/0)", TYPE_BOOLEAN, true);
http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/c23dc3a5/be/src/exprs/utility-functions-ir.cc
----------------------------------------------------------------------
diff --git a/be/src/exprs/utility-functions-ir.cc b/be/src/exprs/utility-functions-ir.cc
index ab22bb7..ba4a371 100644
--- a/be/src/exprs/utility-functions-ir.cc
+++ b/be/src/exprs/utility-functions-ir.cc
@@ -117,6 +117,10 @@ StringVal UtilityFunctions::CurrentDatabase(FunctionContext* ctx) {
return (database.len > 0) ? database : StringVal::null();
}
+StringVal UtilityFunctions::CurrentSession(FunctionContext* ctx) {
+ return AnyValUtil::FromString(ctx, PrintId(ctx->impl()->state()->session_id()));
+}
+
template<typename T>
StringVal UtilityFunctions::TypeOf(FunctionContext* ctx, const T& /*input_val*/) {
FunctionContext::TypeDesc type_desc = *(ctx->GetArgType(0));
http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/c23dc3a5/be/src/exprs/utility-functions.h
----------------------------------------------------------------------
diff --git a/be/src/exprs/utility-functions.h b/be/src/exprs/utility-functions.h
index 55f8dba..a8dbc7b 100644
--- a/be/src/exprs/utility-functions.h
+++ b/be/src/exprs/utility-functions.h
@@ -61,6 +61,10 @@ class UtilityFunctions {
/// database from the parent session of this query.
static StringVal CurrentDatabase(FunctionContext* ctx);
+ /// Implementation of the current_session() function. Returns the ID of the
+ /// parent session of this query.
+ static StringVal CurrentSession(FunctionContext* ctx);
+
/// Implementation of the Uuid() function.
static StringVal Uuid(FunctionContext* ctx);
static void UuidPrepare(FunctionContext* ctx,
http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/c23dc3a5/be/src/runtime/runtime-state.h
----------------------------------------------------------------------
diff --git a/be/src/runtime/runtime-state.h b/be/src/runtime/runtime-state.h
index f86fa77..b5f7882 100644
--- a/be/src/runtime/runtime-state.h
+++ b/be/src/runtime/runtime-state.h
@@ -113,6 +113,7 @@ class RuntimeState {
const std::string& effective_user() const {
return GetEffectiveUser(query_ctx().session);
}
+ const TUniqueId& session_id() const { return query_ctx().session.session_id; }
const std::string& do_as_user() const { return query_ctx().session.delegated_user; }
const std::string& connected_user() const {
return query_ctx().session.connected_user;
http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/c23dc3a5/common/function-registry/impala_functions.py
----------------------------------------------------------------------
diff --git a/common/function-registry/impala_functions.py b/common/function-registry/impala_functions.py
index 8e26f73..10aac10 100644
--- a/common/function-registry/impala_functions.py
+++ b/common/function-registry/impala_functions.py
@@ -546,9 +546,10 @@ visible_functions = [
'_ZN6impala16UtilityFunctions4UuidEPN10impala_udf15FunctionContextE',
'_ZN6impala16UtilityFunctions11UuidPrepareEPN10impala_udf15FunctionContextENS2_18FunctionStateScopeE',
'_ZN6impala16UtilityFunctions9UuidCloseEPN10impala_udf15FunctionContextENS2_18FunctionStateScopeE'],
- [['current_database'], 'STRING', [], 'impala::UtilityFunctions::CurrentDatabase'],
- [['user'], 'STRING', [], 'impala::UtilityFunctions::User'],
- [['effective_user'], 'STRING', [], 'impala::UtilityFunctions::EffectiveUser'],
+ [['current_database', 'current_catalog'], 'STRING', [], 'impala::UtilityFunctions::CurrentDatabase'],
+ [['current_session', 'current_sid'], 'STRING', [], 'impala::UtilityFunctions::CurrentSession'],
+ [['user', 'session_user'], 'STRING', [], 'impala::UtilityFunctions::User'],
+ [['effective_user', 'current_user'], 'STRING', [], 'impala::UtilityFunctions::EffectiveUser'],
[['sleep'], 'BOOLEAN', ['INT'], 'impala::UtilityFunctions::Sleep'],
[['pid'], 'INT', [], 'impala::UtilityFunctions::Pid'],
[['version'], 'STRING', [], 'impala::UtilityFunctions::Version'],
http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/c23dc3a5/tests/custom_cluster/test_delegation.py
----------------------------------------------------------------------
diff --git a/tests/custom_cluster/test_delegation.py b/tests/custom_cluster/test_delegation.py
index 1324e41..1c412d7 100644
--- a/tests/custom_cluster/test_delegation.py
+++ b/tests/custom_cluster/test_delegation.py
@@ -33,7 +33,8 @@ class TestDelegation(CustomClusterTestSuite, HS2TestSuite):
execute_statement_req = TCLIService.TExecuteStatementReq()
execute_statement_req.sessionHandle = self.session_handle
execute_statement_req.confOverlay = dict()
- execute_statement_req.statement = "SELECT effective_user(), user()";
+ execute_statement_req.statement = \
+ "SELECT effective_user(), current_user(), user(), session_user()";
execute_statement_resp = self.hs2_client.ExecuteStatement(execute_statement_req)
HS2TestSuite.check_response(execute_statement_resp)
@@ -42,8 +43,9 @@ class TestDelegation(CustomClusterTestSuite, HS2TestSuite):
fetch_results_req.maxRows = 1
fetch_results_resp = self.hs2_client.FetchResults(fetch_results_req)
HS2TestSuite.check_response(fetch_results_resp)
- assert self.column_results_to_string(
- fetch_results_resp.results.columns) == (1, "%s, %s\n" % (proxy_user, USER_NAME))
+ assert (self.column_results_to_string(fetch_results_resp.results.columns) ==
+ (1, "%s, %s, %s, %s\n" % (proxy_user, proxy_user,
+ USER_NAME, USER_NAME)))
@pytest.mark.execute_serially
@CustomClusterTestSuite.with_args(