From 68a69a51f02272761c36e7476f86ffde0473aa59 Mon Sep 17 00:00:00 2001 From: Tatsuo Ishii Date: Wed, 7 Jul 2021 13:03:59 +0900 Subject: [PATCH] Fix query cache to not cache SQLValueFunctions (CURRENT_TIME, CURRENT_USER etc.). Checking SQLValueFunctions was missed whether to be cached or not and they were regarded as non function objects. As a result they were cached. Also add more test cases. --- src/test/regression/tests/006.memqcache/test.sh | 4 ++++ src/utils/pool_select_walker.c | 11 ++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/test/regression/tests/006.memqcache/test.sh b/src/test/regression/tests/006.memqcache/test.sh index 165d3a7d7..a5e77c588 100755 --- a/src/test/regression/tests/006.memqcache/test.sh +++ b/src/test/regression/tests/006.memqcache/test.sh @@ -61,6 +61,8 @@ SELECT * FROM with_modify; SELECT * FROM explain_analyze; EXPLAIN ANALYZE INSERT INTO explain_analyze VALUES(1); SELECT * FROM explain_analyze; +SELECT CURRENT_TIMESTAMP; +SELECT CURRENT_USER; EOF success=true @@ -70,6 +72,8 @@ EOF grep "fetched from cache" log/pgpool.log | grep white_v > /dev/null || success=false grep "fetched from cache" log/pgpool.log | grep with_modify > /dev/null && success=false grep "fetched from cache" log/pgpool.log | grep explain_analyze > /dev/null && success=false + grep "fetched from cache" log/pgpool.log | grep CURRENT_TIMESTAMP > /dev/null && success=false + grep "fetched from cache" log/pgpool.log | grep CURRENT_USER > /dev/null && success=false if [ $success = false ];then ./shutdownall exit 1 diff --git a/src/utils/pool_select_walker.c b/src/utils/pool_select_walker.c index 29fd05a93..af903176a 100644 --- a/src/utils/pool_select_walker.c +++ b/src/utils/pool_select_walker.c @@ -3,7 +3,7 @@ * pgpool: a language independent connection pool server for PostgreSQL * written by Tatsuo Ishii * - * Copyright (c) 2003-2019 PgPool Global Development Group + * Copyright (c) 2003-2021 PgPool Global Development Group * * Permission to use, copy, modify, and distribute this software and * its documentation for any purpose and without fee is hereby @@ -1026,6 +1026,15 @@ static bool non_immutable_function_call_walker(Node *node, void *context) return false; } } + else if (IsA(node, SQLValueFunction)) + { + /* + * SQLValueFunctions (CURRENT_TIME, CURRENT_USER etc.) are regarded as + * non immutable functions. + */ + ctx->has_non_immutable_function_call = true; + return false; + } return raw_expression_tree_walker(node, non_immutable_function_call_walker, context); } -- 2.39.5