1241a428 |
1 | drop procedure if exists k_neurons; |
2 | drop function if exists k_get_node_weigth; |
3 | |
4 | delimiter // |
5 | |
6 | create function k_get_node_weigth (node INT, user INT) returns DOUBLE |
7 | BEGIN |
8 | declare vector,node2,len,n_owner,offset int; |
9 | declare final,n_weight,o_weight,s_weight double; |
10 | |
11 | select node_vector into vector from nodes where node_id = node; |
12 | |
13 | set final = 1; |
14 | /* select k from nodes into final where node_id = node;*/ |
15 | |
16 | set len = length(vector); |
17 | set offset = 1; |
18 | WHILE offset < len DO |
19 | |
20 | /* XXX node length is hardcoded */ |
21 | set node2 = substring(node2,offset,8); |
22 | set offset = offset + 8; |
23 | /* weigths from user to: |
24 | - all nodes from node to root node |
25 | - all node owners from node to root node |
26 | - all nodes between themselves (safe?) |
27 | */ |
28 | select node_weight,node_creator into n_weight,n_owner from nodes where node_id=node2; |
29 | select synapse_weight into s_weight from neurons where src=user and dst=node2; |
30 | select synapse_weight into o_weight from neurons where src=user and dst=n_owner; |
31 | |
32 | if o_weight = NULL then set o_weight=1; end if; |
33 | if s_weight = NULL then set s_weight=1; end if; |
34 | if n_weight = NULL then set n_weight=1; end if; |
35 | |
36 | set final = final * s_weight * o_weight * n_weight; |
37 | END WHILE; |
38 | |
39 | RETURN final; |
40 | END// |
41 | |
42 | create procedure k_neurons () |
43 | begin |
44 | select k,node_id,node_name from nodes where k>0 |
45 | and node_created>now()-interval 20 day order by k_get_node_weigth(node_id,904) desc; |
46 | end// |
47 | |
48 | delimiter ; |