diff options
Diffstat (limited to 'src/nodetree_tree_sql.erl')
-rw-r--r-- | src/nodetree_tree_sql.erl | 76 |
1 files changed, 35 insertions, 41 deletions
diff --git a/src/nodetree_tree_sql.erl b/src/nodetree_tree_sql.erl index 73ab74e8a..b310dd2d1 100644 --- a/src/nodetree_tree_sql.erl +++ b/src/nodetree_tree_sql.erl @@ -72,23 +72,20 @@ set_node(Record) when is_record(Record, pubsub_node) -> {result, OldNidx} -> catch ejabberd_sql:sql_query_t( - ?SQL("delete from pubsub_node_option where " - "nodeid=%(OldNidx)d")), + ?SQL("delete from pubsub_node_option " + "where nodeid=%(OldNidx)d")), catch ejabberd_sql:sql_query_t( - ?SQL("update pubsub_node set" - " host=%(H)s," - " node=%(Node)s," - " parent=%(Parent)s," - " type=%(Type)s " - "where nodeid=%(OldNidx)d")), + ?SQL("update pubsub_node set" + " host=%(H)s, node=%(Node)s," + " parent=%(Parent)s, plugin=%(Type)s " + "where nodeid=%(OldNidx)d")), OldNidx; _ -> catch ejabberd_sql:sql_query_t( - ?SQL("insert into pubsub_node(host, node, " - "parent, type) values(" - "%(H)s, %(Node)s, %(Parent)s, %(Type)s)")), + ?SQL("insert into pubsub_node(host, node, parent, plugin) " + "values(%(H)s, %(Node)s, %(Parent)s, %(Type)s)")), case nodeidx(Host, Node) of {result, NewNidx} -> NewNidx; _ -> none % this should not happen @@ -104,9 +101,8 @@ set_node(Record) when is_record(Record, pubsub_node) -> SValue = misc:term_to_expr(Value), catch ejabberd_sql:sql_query_t( - ?SQL("insert into pubsub_node_option(nodeid, " - "name, val) values (" - "%(Nidx)d, %(SKey)s, %(SValue)s)")) + ?SQL("insert into pubsub_node_option(nodeid, name, val) " + "values (%(Nidx)d, %(SKey)s, %(SValue)s)")) end, Record#pubsub_node.options), {result, Nidx} @@ -119,8 +115,8 @@ get_node(Host, Node) -> H = node_flat_sql:encode_host(Host), 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=%(Node)s")) + ?SQL("select @(node)s, @(parent)s, @(plugin)s, @(nodeid)d from pubsub_node " + "where host=%(H)s and node=%(Node)s")) of {selected, [RItem]} -> raw_to_node(Host, RItem); @@ -133,8 +129,8 @@ get_node(Host, Node) -> get_node(Nidx) -> case catch ejabberd_sql:sql_query_t( - ?SQL("select @(host)s, @(node)s, @(parent)s, @(type)s from " - "pubsub_node where nodeid=%(Nidx)d")) + ?SQL("select @(host)s, @(node)s, @(parent)s, @(plugin)s from pubsub_node " + "where nodeid=%(Nidx)d")) of {selected, [{Host, Node, Parent, Type}]} -> raw_to_node(Host, {Node, Parent, Type, Nidx}); @@ -151,8 +147,8 @@ get_nodes(Host) -> H = node_flat_sql:encode_host(Host), case catch ejabberd_sql:sql_query_t( - ?SQL("select @(node)s, @(parent)s, @(type)s, @(nodeid)d from " - "pubsub_node where host=%(H)s")) + ?SQL("select @(node)s, @(parent)s, @(plugin)s, @(nodeid)d from pubsub_node " + "where host=%(H)s")) of {selected, RItems} -> [raw_to_node(Host, Item) || Item <- RItems]; @@ -189,8 +185,8 @@ get_subnodes(Host, Node) -> H = node_flat_sql:encode_host(Host), 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 parent=%(Node)s")) + ?SQL("select @(node)s, @(parent)s, @(plugin)s, @(nodeid)d from pubsub_node " + "where host=%(H)s and parent=%(Node)s")) of {selected, RItems} -> [raw_to_node(Host, Item) || Item <- RItems]; @@ -206,14 +202,14 @@ get_subnodes_tree(Host, Node) -> {error, _} -> []; Rec -> + Type = Rec#pubsub_node.type, 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'")) + ?SQL("select @(node)s, @(parent)s, @(plugin)s, @(nodeid)d from pubsub_node " + "where host=%(H)s and plugin=%(Type)s and" + " (parent=%(Node)s or parent like %(N)s escape '^')")) of {selected, RItems} -> [raw_to_node(Host, Item) || Item <- RItems]; @@ -269,14 +265,13 @@ create_node(Host, Node, Type, Owner, Options, Parents) -> end. delete_node(Host, Node) -> - H = node_flat_sql:encode_host(Host), - 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=%(Node)s" - " or (\"type\"='hometree' and node like %(N)s escape '^'))")), - Removed. + lists:map( + fun(Rec) -> + Nidx = Rec#pubsub_node.id, + catch ejabberd_sql:sql_query_t( + ?SQL("delete from pubsub_node where nodeid=%(Nidx)d")), + Rec + end, get_subnodes_tree(Host, Node)). %% helpers raw_to_node(Host, [Node, Parent, Type, Nidx]) -> @@ -284,8 +279,8 @@ raw_to_node(Host, [Node, Parent, Type, Nidx]) -> raw_to_node(Host, {Node, Parent, Type, Nidx}) -> Options = case catch ejabberd_sql:sql_query_t( - ?SQL("select @(name)s, @(val)s from pubsub_node_option " - "where nodeid=%(Nidx)d")) + ?SQL("select @(name)s, @(val)s from pubsub_node_option " + "where nodeid=%(Nidx)d")) of {selected, ROptions} -> DbOpts = lists:map(fun ({Key, Value}) -> @@ -308,16 +303,15 @@ raw_to_node(Host, {Node, Parent, Type, Nidx}) -> <<>> -> []; _ -> [Parent] end, - #pubsub_node{nodeid = {Host, Node}, - parents = Parents, - id = Nidx, type = Type, options = Options}. + #pubsub_node{nodeid = {Host, Node}, id = Nidx, + parents = Parents, type = Type, options = Options}. nodeidx(Host, Node) -> H = node_flat_sql:encode_host(Host), case catch ejabberd_sql:sql_query_t( - ?SQL("select @(nodeid)d from pubsub_node where " - "host=%(H)s and node=%(Node)s")) + ?SQL("select @(nodeid)d from pubsub_node " + "where host=%(H)s and node=%(Node)s")) of {selected, [{Nidx}]} -> {result, Nidx}; |