From 9ed37a87c196a6199e7cb4bef32c8a58c5606127 Mon Sep 17 00:00:00 2001 From: niekt0 Date: Thu, 3 Mar 2011 01:17:55 +0100 Subject: [PATCH] added script for fixing vectors --- wwwroot/backend/mysql/sys.sql | 33 +++++++++++++++++++++++++++++++++ wwwroot/backend/mysql/test.sql | 25 ++++++++++++++++++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 wwwroot/backend/mysql/sys.sql diff --git a/wwwroot/backend/mysql/sys.sql b/wwwroot/backend/mysql/sys.sql new file mode 100644 index 0000000..7cdb1e0 --- /dev/null +++ b/wwwroot/backend/mysql/sys.sql @@ -0,0 +1,33 @@ +drop procedure if exists fix_all_vectors; +drop function if exists get_fix_vector; +delimiter // +/* compute correct vector for node */ +create function get_fix_vector (node INT) returns varchar(80) +BEGIN + declare np,mynode,safe int; + declare vector varchar(80); + + set safe=100; /* loop detection, max tree depth*/ + set mynode=node; + set vector=''; + REPEAT + select node_parent into np from nodes where node_id = mynode; + select concat(lpad(mynode,8,'00000000'),vector) into vector; + set mynode=np; + set safe=safe - 1; + UNTIL np = NULL or np = 0 or safe = 0 or np = node + END REPEAT; + + if safe = 0 then + return 'loooped'; + end if; + return vector; + +END// + +/* fix vector for all the nodes*/ +create procedure fix_all_vectors () +begin + update nodes set node_vector=get_fix_vector(node_id); +end// +delimiter ; diff --git a/wwwroot/backend/mysql/test.sql b/wwwroot/backend/mysql/test.sql index 893b92d..338db8b 100644 --- a/wwwroot/backend/mysql/test.sql +++ b/wwwroot/backend/mysql/test.sql @@ -3,7 +3,7 @@ drop function if exists k_get_node_weigth; delimiter // create function k_get_node_weigth (node INT, user INT) returns DOUBLE BEGIN - declare vector,node2,len,n_owner,offset int; + declare vector,node2,len,n_owner,offset int; /* vector type*/ declare final,n_weight,o_weight,s_weight double; select node_vector into vector from nodes where node_id = node; @@ -41,5 +41,28 @@ begin and node_created>now()-interval 20 day; -- select * from tmp_table order by k_weight desc; +end// + +create function get_fix_vector (node INT) returns varchar(80) +BEGIN + declare np,mynode int; + + set mynode=node; + REPEAT + select node_parent into np from nodes where node_id = mynode; + /* XXX padding */ + vector=concat(node_parent,vector); + set mynode=node_parent; + UNTIL node_parent != NULL and node_parent > 0 + END REPEAT; + + return vector; + +END// + +create procedure fix_all_vectors () +begin + end// delimiter ; + -- 2.30.2