aboutsummaryrefslogtreecommitdiff
path: root/src/nodetree_tree_sql.erl
diff options
context:
space:
mode:
authorChristophe Romain <christophe.romain@process-one.net>2016-07-05 15:43:59 +0200
committerChristophe Romain <christophe.romain@process-one.net>2016-07-05 15:43:59 +0200
commite300f8095deec16db79bdbd2f491cc6a432d9f47 (patch)
treeca034bc190cab43bbae8a1b7244ef072a7b529e0 /src/nodetree_tree_sql.erl
parentmod_configure: Fix editing of access rules (diff)
Fix use of like parameter in sql pubsub's requests
Diffstat (limited to 'src/nodetree_tree_sql.erl')
-rw-r--r--src/nodetree_tree_sql.erl36
1 files changed, 22 insertions, 14 deletions
diff --git a/src/nodetree_tree_sql.erl b/src/nodetree_tree_sql.erl
index 1ad4046cd..fb5141bf3 100644
--- a/src/nodetree_tree_sql.erl
+++ b/src/nodetree_tree_sql.erl
@@ -191,18 +191,25 @@ get_subnodes_tree(Host, Node, _From) ->
get_subnodes_tree(Host, Node).
get_subnodes_tree(Host, Node) ->
- H = node_flat_sql:encode_host(Host),
- N = <<(ejabberd_sql:escape_like_arg_circumflex(Node))/binary, "%">>,
- case catch
- ejabberd_sql:sql_query_t(
- ?SQL("select @(node)s, @(parent)s, @(type)s, @(nodeid)d from "
- "pubsub_node where host=%(H)s"
- " and node like %(N)s escape '^'"))
- of
- {selected, RItems} ->
- [raw_to_node(Host, Item) || Item <- RItems];
- _ ->
- []
+ case get_node(Host, Node) of
+ {error, _} ->
+ [];
+ Rec ->
+ H = node_flat_sql:encode_host(Host),
+ N = <<(ejabberd_sql:escape_like_arg_circumflex(Node))/binary, "/%">>,
+ Sub = case catch
+ ejabberd_sql:sql_query_t(
+ ?SQL("select @(node)s, @(parent)s, @(type)s, @(nodeid)d from "
+ "pubsub_node where host=%(H)s"
+ " and node like %(N)s escape '^'"
+ " and type='hometree'"))
+ of
+ {selected, RItems} ->
+ [raw_to_node(Host, Item) || Item <- RItems];
+ _ ->
+ []
+ end,
+ [Rec|Sub]
end.
create_node(Host, Node, Type, Owner, Options, Parents) ->
@@ -252,11 +259,12 @@ create_node(Host, Node, Type, Owner, Options, Parents) ->
delete_node(Host, Node) ->
H = node_flat_sql:encode_host(Host),
- N = <<(ejabberd_sql:escape_like_arg_circumflex(Node))/binary, "%">>,
+ N = <<(ejabberd_sql:escape_like_arg_circumflex(Node))/binary, "/%">>,
Removed = get_subnodes_tree(Host, Node),
catch ejabberd_sql:sql_query_t(
?SQL("delete from pubsub_node where host=%(H)s"
- " and node like %(N)s escape '^'")),
+ " and (node=%(Node)s"
+ " or (type = 'hometree' and node like %(N)s escape '^'))")),
Removed.
%% helpers