From 026394a314955de99e6a65075cb11c087298794e Mon Sep 17 00:00:00 2001 From: "s.budaev" Date: Wed, 5 Oct 2016 04:27:08 +0400 Subject: [PATCH] Added option to disable prepared statements (postgresql only) --- ejabberd.yml.example | 4 ++++ src/ejabberd_sql.erl | 11 ++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/ejabberd.yml.example b/ejabberd.yml.example index 72439e5e1..626de9681 100644 --- a/ejabberd.yml.example +++ b/ejabberd.yml.example @@ -355,6 +355,10 @@ auth_method: internal ## faster but inexact replacement for "select count(*) from users" ## ## pgsql_users_number_estimate: true +## +## If you need to disable prepared statements (option affects only PostgreSQL): +## +## sql_prepared_statements: false ## ## SQLite: diff --git a/src/ejabberd_sql.erl b/src/ejabberd_sql.erl index b19f16414..4f50cfa01 100644 --- a/src/ejabberd_sql.erl +++ b/src/ejabberd_sql.erl @@ -522,7 +522,14 @@ sql_query_internal(#sql_query{} = Query) -> mssql -> mssql_sql_query(Query); pgsql -> + PreparedStatements = ejabberd_config:get_option( + {sql_prepared_statements, ?MYNAME}, + fun(A) when is_boolean(A) -> A end, + true), Key = {?PREPARE_KEY, Query#sql_query.hash}, + if not PreparedStatements -> put(Key, ignore); + true -> ok + end, case get(Key) of undefined -> case pgsql_prepare(Query, State) of @@ -1061,7 +1068,9 @@ opt_type(sql_type) -> (odbc) -> odbc end; opt_type(sql_username) -> fun iolist_to_binary/1; +opt_type(sql_prepared_statements) -> + fun(A) when is_boolean(A) -> A end; opt_type(_) -> [max_fsm_queue, sql_database, sql_keepalive_interval, sql_password, sql_port, sql_server, sql_type, - sql_username]. + sql_username, sql_prepared_statements].