aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ejabberd.yml.example4
-rw-r--r--src/ejabberd_sql.erl11
2 files changed, 14 insertions, 1 deletions
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].