SET search_path TO xml; -- Write functions using the descendant axe... create table a (i int, data doc, targ_path xml.path, new_node node, add_mode add_mode); insert into a values (1, '', '/root//x/b', '', 'r'), (2, '', '/root//x/b', '', 'b'), (3, '', '/root//x/b', '', 'a'), (4, '', '/root//x//b', '', 'r'), (5, '', '/root//x//b', '', 'a'), (6, '', '//x//b', '', 'r'), (7, '', '//x//b', '', 'a'), (8, '', '/root//x/b', '', 'i'); -- Specifically, addition must not take place multiple times for the same node. insert into a values (9, '', '/root//x//b', '', 'b'), (8, '', '/root//x//b', '', 'i'), (10, '', '//x//b', '', 'b'), (11, '', '//x//b', '', 'i'), (12, '', '/root//x//b', '', 'i'); select node_debug_print(data), targ_path, add_mode, new_node, node_debug_print(xml.add(data, targ_path, new_node, add_mode)) from a order by a.i; node_debug_print | targ_path | add_mode | new_node | node_debug_print -------------------------------------------+-------------+----------+----------+------------------------------------------- root (abs: 84 , rel: 0 , size: 94) +| /root//x/b | r | | root (abs: 48 , rel: 0 , size: 58) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 40 , rel: 8 , size: 48) + b (abs: 36 , rel: 40 , size: 44) +| | | | new (abs: 0 , rel: 40 , size: 8) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | a (abs: 32 , rel: 8 , size: 32) + x (abs: 28 , rel: 8 , size: 25) +| | | | b (abs: 18 , rel: 14 , size: 17) + b (abs: 20 , rel: 8 , size: 17) +| | | | test3 (abs: 8 , rel: 10 , size: 10) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | d (abs: 26 , rel: 6 , size: 6) + a (abs: 68 , rel: 8 , size: 32) +| | | | b (abs: 54 , rel: 14 , size: 17) +| | | | test3 (abs: 44 , rel: 10 , size: 10) +| | | | d (abs: 62 , rel: 6 , size: 6) +| | | | | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x/b | b | | root (abs: 92 , rel: 0 , size: 102) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 84 , rel: 8 , size: 92) + c (abs: 36 , rel: 40 , size: 44) +| | | | c (abs: 44 , rel: 40 , size: 52) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 44 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 36 , rel: 8 , size: 34) + b (abs: 20 , rel: 8 , size: 17) +| | | | new (abs: 10 , rel: 26 , size: 8) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 28 , rel: 8 , size: 17) + a (abs: 68 , rel: 8 , size: 32) +| | | | test2 (abs: 18 , rel: 10 , size: 10)+ b (abs: 54 , rel: 14 , size: 17) +| | | | a (abs: 76 , rel: 8 , size: 32) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | b (abs: 62 , rel: 14 , size: 17) + d (abs: 62 , rel: 6 , size: 6) +| | | | test3 (abs: 52 , rel: 10 , size: 10) + | | | | d (abs: 70 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x/b | a | | root (abs: 102 , rel: 0 , size: 112) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 92 , rel: 10 , size: 101) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 44 , rel: 48 , size: 52) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 44 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 36 , rel: 8 , size: 34) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 20 , rel: 16 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | new (abs: 28 , rel: 8 , size: 8) + b (abs: 54 , rel: 14 , size: 17) +| | | | new (abs: 52 , rel: 40 , size: 8) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | a (abs: 84 , rel: 8 , size: 32) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 70 , rel: 14 , size: 17) + | | | | test3 (abs: 60 , rel: 10 , size: 10) + | | | | d (abs: 78 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x//b | r | | root (abs: 38 , rel: 0 , size: 48) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 30 , rel: 8 , size: 38) + b (abs: 36 , rel: 40 , size: 44) +| | | | new (abs: 0 , rel: 30 , size: 8) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | a (abs: 22 , rel: 8 , size: 22) + x (abs: 28 , rel: 8 , size: 25) +| | | | new (abs: 8 , rel: 14 , size: 8) + b (abs: 20 , rel: 8 , size: 17) +| | | | d (abs: 16 , rel: 6 , size: 6) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | a (abs: 68 , rel: 8 , size: 32) +| | | | b (abs: 54 , rel: 14 , size: 17) +| | | | test3 (abs: 44 , rel: 10 , size: 10) +| | | | d (abs: 62 , rel: 6 , size: 6) +| | | | | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x//b | a | | root (abs: 112 , rel: 0 , size: 122) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 102 , rel: 10 , size: 111) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 44 , rel: 58 , size: 52) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 44 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 36 , rel: 8 , size: 34) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 20 , rel: 16 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | new (abs: 28 , rel: 8 , size: 8) + b (abs: 54 , rel: 14 , size: 17) +| | | | new (abs: 52 , rel: 50 , size: 8) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | a (abs: 92 , rel: 10 , size: 41) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 70 , rel: 22 , size: 17) + | | | | test3 (abs: 60 , rel: 10 , size: 10) + | | | | new (abs: 78 , rel: 14 , size: 8) + | | | | d (abs: 86 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| //x//b | r | | root (abs: 38 , rel: 0 , size: 48) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 30 , rel: 8 , size: 38) + b (abs: 36 , rel: 40 , size: 44) +| | | | new (abs: 0 , rel: 30 , size: 8) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | a (abs: 22 , rel: 8 , size: 22) + x (abs: 28 , rel: 8 , size: 25) +| | | | new (abs: 8 , rel: 14 , size: 8) + b (abs: 20 , rel: 8 , size: 17) +| | | | d (abs: 16 , rel: 6 , size: 6) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | a (abs: 68 , rel: 8 , size: 32) +| | | | b (abs: 54 , rel: 14 , size: 17) +| | | | test3 (abs: 44 , rel: 10 , size: 10) +| | | | d (abs: 62 , rel: 6 , size: 6) +| | | | | | | | root (abs: 84 , rel: 0 , size: 94) +| //x//b | a | | root (abs: 112 , rel: 0 , size: 122) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 102 , rel: 10 , size: 111) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 44 , rel: 58 , size: 52) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 44 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 36 , rel: 8 , size: 34) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 20 , rel: 16 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | new (abs: 28 , rel: 8 , size: 8) + b (abs: 54 , rel: 14 , size: 17) +| | | | new (abs: 52 , rel: 50 , size: 8) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | a (abs: 92 , rel: 10 , size: 41) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 70 , rel: 22 , size: 17) + | | | | test3 (abs: 60 , rel: 10 , size: 10) + | | | | new (abs: 78 , rel: 14 , size: 8) + | | | | d (abs: 86 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x/b | i | | root (abs: 92 , rel: 0 , size: 102) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 84 , rel: 8 , size: 92) + c (abs: 36 , rel: 40 , size: 44) +| | | | c (abs: 44 , rel: 40 , size: 52) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 44 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 36 , rel: 8 , size: 33) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 28 , rel: 8 , size: 26) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 18 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | new (abs: 20 , rel: 8 , size: 8) + b (abs: 54 , rel: 14 , size: 17) +| | | | a (abs: 76 , rel: 8 , size: 32) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | b (abs: 62 , rel: 14 , size: 17) + d (abs: 62 , rel: 6 , size: 6) +| | | | test3 (abs: 52 , rel: 10 , size: 10) + | | | | d (abs: 70 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x//b | i | | root (abs: 110 , rel: 0 , size: 120) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 102 , rel: 8 , size: 110) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 52 , rel: 50 , size: 61) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 52 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 36 , rel: 16 , size: 33) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 28 , rel: 8 , size: 26) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 18 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | new (abs: 20 , rel: 8 , size: 8) + b (abs: 54 , rel: 14 , size: 17) +| | | | new (abs: 44 , rel: 8 , size: 8) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | a (abs: 94 , rel: 8 , size: 40) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 80 , rel: 14 , size: 26) + | | | | test3 (abs: 62 , rel: 18 , size: 10) + | | | | new (abs: 72 , rel: 8 , size: 8) + | | | | d (abs: 88 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x//b | b | | root (abs: 102 , rel: 0 , size: 112) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 94 , rel: 8 , size: 102) + c (abs: 36 , rel: 40 , size: 44) +| | | | c (abs: 44 , rel: 50 , size: 52) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 44 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 36 , rel: 8 , size: 34) + b (abs: 20 , rel: 8 , size: 17) +| | | | new (abs: 10 , rel: 26 , size: 8) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 28 , rel: 8 , size: 17) + a (abs: 68 , rel: 8 , size: 32) +| | | | test2 (abs: 18 , rel: 10 , size: 10)+ b (abs: 54 , rel: 14 , size: 17) +| | | | a (abs: 84 , rel: 10 , size: 41) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | new (abs: 52 , rel: 32 , size: 8) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 70 , rel: 14 , size: 17) + | | | | test3 (abs: 60 , rel: 10 , size: 10) + | | | | d (abs: 78 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| //x//b | b | | root (abs: 102 , rel: 0 , size: 112) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 94 , rel: 8 , size: 102) + c (abs: 36 , rel: 40 , size: 44) +| | | | c (abs: 44 , rel: 50 , size: 52) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 44 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 36 , rel: 8 , size: 34) + b (abs: 20 , rel: 8 , size: 17) +| | | | new (abs: 10 , rel: 26 , size: 8) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 28 , rel: 8 , size: 17) + a (abs: 68 , rel: 8 , size: 32) +| | | | test2 (abs: 18 , rel: 10 , size: 10)+ b (abs: 54 , rel: 14 , size: 17) +| | | | a (abs: 84 , rel: 10 , size: 41) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | new (abs: 52 , rel: 32 , size: 8) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 70 , rel: 14 , size: 17) + | | | | test3 (abs: 60 , rel: 10 , size: 10) + | | | | d (abs: 78 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| //x//b | i | | root (abs: 110 , rel: 0 , size: 120) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 102 , rel: 8 , size: 110) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 52 , rel: 50 , size: 61) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 52 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 36 , rel: 16 , size: 33) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 28 , rel: 8 , size: 26) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 18 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | new (abs: 20 , rel: 8 , size: 8) + b (abs: 54 , rel: 14 , size: 17) +| | | | new (abs: 44 , rel: 8 , size: 8) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | a (abs: 94 , rel: 8 , size: 40) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 80 , rel: 14 , size: 26) + | | | | test3 (abs: 62 , rel: 18 , size: 10) + | | | | new (abs: 72 , rel: 8 , size: 8) + | | | | d (abs: 88 , rel: 6 , size: 6) + | | | | root (abs: 66 , rel: 0 , size: 76) +| /root//x//b | i | | root (abs: 94 , rel: 0 , size: 104) + x (abs: 54 , rel: 12 , size: 65) +| | | | x (abs: 82 , rel: 12 , size: 93) + a (abs: 0 , rel: 54 , size: 6) +| | | | a (abs: 0 , rel: 82 , size: 6) + b (abs: 6 , rel: 48 , size: 6) +| | | | b (abs: 12 , rel: 70 , size: 13) + b (abs: 18 , rel: 36 , size: 13) +| | | | n (abs: 6 , rel: 6 , size: 6) + c (abs: 12 , rel: 6 , size: 6) +| | | | b (abs: 32 , rel: 50 , size: 20) + x (abs: 40 , rel: 14 , size: 22) +| | | | c (abs: 20 , rel: 12 , size: 6) + b (abs: 32 , rel: 8 , size: 14) +| | | | n (abs: 26 , rel: 6 , size: 6) + @i (abs: 25 , rel: 7 , size: 6) +| | | | x (abs: 60 , rel: 22 , size: 27) + b (abs: 48 , rel: 6 , size: 6) +| | | | b (abs: 52 , rel: 8 , size: 20) + | | | | @i (abs: 40 , rel: 12 , size: 6) + | | | | n (abs: 46 , rel: 6 , size: 6) + | | | | b (abs: 74 , rel: 8 , size: 13) + | | | | n (abs: 68 , rel: 6 , size: 6) + | | | | (13 rows) -- Add a node that matches the xpath. update a set new_node=''; select node_debug_print(data), targ_path, add_mode, new_node, node_debug_print(xml.add(data, targ_path, new_node, add_mode)) from a order by a.i; node_debug_print | targ_path | add_mode | new_node | node_debug_print -------------------------------------------+-------------+----------+----------+------------------------------------------- root (abs: 84 , rel: 0 , size: 94) +| /root//x/b | r | | root (abs: 46 , rel: 0 , size: 56) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 38 , rel: 8 , size: 46) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 0 , rel: 38 , size: 6) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | a (abs: 30 , rel: 8 , size: 32) + x (abs: 28 , rel: 8 , size: 25) +| | | | b (abs: 16 , rel: 14 , size: 17) + b (abs: 20 , rel: 8 , size: 17) +| | | | test3 (abs: 6 , rel: 10 , size: 10) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | d (abs: 24 , rel: 6 , size: 6) + a (abs: 68 , rel: 8 , size: 32) +| | | | b (abs: 54 , rel: 14 , size: 17) +| | | | test3 (abs: 44 , rel: 10 , size: 10) +| | | | d (abs: 62 , rel: 6 , size: 6) +| | | | | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x/b | b | | root (abs: 90 , rel: 0 , size: 100) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 82 , rel: 8 , size: 90) + c (abs: 36 , rel: 40 , size: 44) +| | | | c (abs: 42 , rel: 40 , size: 50) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 42 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 34 , rel: 8 , size: 32) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 10 , rel: 24 , size: 6) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 26 , rel: 8 , size: 17) + a (abs: 68 , rel: 8 , size: 32) +| | | | test2 (abs: 16 , rel: 10 , size: 10)+ b (abs: 54 , rel: 14 , size: 17) +| | | | a (abs: 74 , rel: 8 , size: 32) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | b (abs: 60 , rel: 14 , size: 17) + d (abs: 62 , rel: 6 , size: 6) +| | | | test3 (abs: 50 , rel: 10 , size: 10) + | | | | d (abs: 68 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x/b | a | | root (abs: 98 , rel: 0 , size: 108) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 88 , rel: 10 , size: 97) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 42 , rel: 46 , size: 50) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 42 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 34 , rel: 8 , size: 32) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 20 , rel: 14 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | b (abs: 28 , rel: 6 , size: 6) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 50 , rel: 38 , size: 6) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | a (abs: 80 , rel: 8 , size: 32) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 66 , rel: 14 , size: 17) + | | | | test3 (abs: 56 , rel: 10 , size: 10) + | | | | d (abs: 74 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x//b | r | | root (abs: 34 , rel: 0 , size: 44) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 26 , rel: 8 , size: 34) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 0 , rel: 26 , size: 6) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | a (abs: 18 , rel: 8 , size: 20) + x (abs: 28 , rel: 8 , size: 25) +| | | | b (abs: 6 , rel: 12 , size: 6) + b (abs: 20 , rel: 8 , size: 17) +| | | | d (abs: 12 , rel: 6 , size: 6) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | a (abs: 68 , rel: 8 , size: 32) +| | | | b (abs: 54 , rel: 14 , size: 17) +| | | | test3 (abs: 44 , rel: 10 , size: 10) +| | | | d (abs: 62 , rel: 6 , size: 6) +| | | | | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x//b | a | | root (abs: 106 , rel: 0 , size: 116) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 96 , rel: 10 , size: 105) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 42 , rel: 54 , size: 50) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 42 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 34 , rel: 8 , size: 32) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 20 , rel: 14 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | b (abs: 28 , rel: 6 , size: 6) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 50 , rel: 46 , size: 6) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | a (abs: 86 , rel: 10 , size: 39) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 66 , rel: 20 , size: 17) + | | | | test3 (abs: 56 , rel: 10 , size: 10) + | | | | b (abs: 74 , rel: 12 , size: 6) + | | | | d (abs: 80 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| //x//b | r | | root (abs: 34 , rel: 0 , size: 44) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 26 , rel: 8 , size: 34) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 0 , rel: 26 , size: 6) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | a (abs: 18 , rel: 8 , size: 20) + x (abs: 28 , rel: 8 , size: 25) +| | | | b (abs: 6 , rel: 12 , size: 6) + b (abs: 20 , rel: 8 , size: 17) +| | | | d (abs: 12 , rel: 6 , size: 6) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | a (abs: 68 , rel: 8 , size: 32) +| | | | b (abs: 54 , rel: 14 , size: 17) +| | | | test3 (abs: 44 , rel: 10 , size: 10) +| | | | d (abs: 62 , rel: 6 , size: 6) +| | | | | | | | root (abs: 84 , rel: 0 , size: 94) +| //x//b | a | | root (abs: 106 , rel: 0 , size: 116) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 96 , rel: 10 , size: 105) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 42 , rel: 54 , size: 50) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 42 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 34 , rel: 8 , size: 32) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 20 , rel: 14 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | b (abs: 28 , rel: 6 , size: 6) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 50 , rel: 46 , size: 6) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | a (abs: 86 , rel: 10 , size: 39) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 66 , rel: 20 , size: 17) + | | | | test3 (abs: 56 , rel: 10 , size: 10) + | | | | b (abs: 74 , rel: 12 , size: 6) + | | | | d (abs: 80 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x/b | i | | root (abs: 90 , rel: 0 , size: 100) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 82 , rel: 8 , size: 90) + c (abs: 36 , rel: 40 , size: 44) +| | | | c (abs: 42 , rel: 40 , size: 50) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 42 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 34 , rel: 8 , size: 31) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 26 , rel: 8 , size: 24) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 16 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | b (abs: 20 , rel: 6 , size: 6) + b (abs: 54 , rel: 14 , size: 17) +| | | | a (abs: 74 , rel: 8 , size: 32) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | b (abs: 60 , rel: 14 , size: 17) + d (abs: 62 , rel: 6 , size: 6) +| | | | test3 (abs: 50 , rel: 10 , size: 10) + | | | | d (abs: 68 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x//b | i | | root (abs: 104 , rel: 0 , size: 114) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 96 , rel: 8 , size: 104) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 48 , rel: 48 , size: 57) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 48 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 34 , rel: 14 , size: 31) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 26 , rel: 8 , size: 24) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 16 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | b (abs: 20 , rel: 6 , size: 6) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 42 , rel: 6 , size: 6) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | a (abs: 88 , rel: 8 , size: 38) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 74 , rel: 14 , size: 24) + | | | | test3 (abs: 58 , rel: 16 , size: 10) + | | | | b (abs: 68 , rel: 6 , size: 6) + | | | | d (abs: 82 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x//b | b | | root (abs: 98 , rel: 0 , size: 108) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 90 , rel: 8 , size: 98) + c (abs: 36 , rel: 40 , size: 44) +| | | | c (abs: 42 , rel: 48 , size: 50) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 42 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 34 , rel: 8 , size: 32) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 10 , rel: 24 , size: 6) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 26 , rel: 8 , size: 17) + a (abs: 68 , rel: 8 , size: 32) +| | | | test2 (abs: 16 , rel: 10 , size: 10)+ b (abs: 54 , rel: 14 , size: 17) +| | | | a (abs: 80 , rel: 10 , size: 39) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | b (abs: 50 , rel: 30 , size: 6) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 66 , rel: 14 , size: 17) + | | | | test3 (abs: 56 , rel: 10 , size: 10) + | | | | d (abs: 74 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| //x//b | b | | root (abs: 98 , rel: 0 , size: 108) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 90 , rel: 8 , size: 98) + c (abs: 36 , rel: 40 , size: 44) +| | | | c (abs: 42 , rel: 48 , size: 50) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 42 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 34 , rel: 8 , size: 32) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 10 , rel: 24 , size: 6) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 26 , rel: 8 , size: 17) + a (abs: 68 , rel: 8 , size: 32) +| | | | test2 (abs: 16 , rel: 10 , size: 10)+ b (abs: 54 , rel: 14 , size: 17) +| | | | a (abs: 80 , rel: 10 , size: 39) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | b (abs: 50 , rel: 30 , size: 6) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 66 , rel: 14 , size: 17) + | | | | test3 (abs: 56 , rel: 10 , size: 10) + | | | | d (abs: 74 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| //x//b | i | | root (abs: 104 , rel: 0 , size: 114) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 96 , rel: 8 , size: 104) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 48 , rel: 48 , size: 57) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 48 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 34 , rel: 14 , size: 31) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 26 , rel: 8 , size: 24) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 16 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | b (abs: 20 , rel: 6 , size: 6) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 42 , rel: 6 , size: 6) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | a (abs: 88 , rel: 8 , size: 38) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 74 , rel: 14 , size: 24) + | | | | test3 (abs: 58 , rel: 16 , size: 10) + | | | | b (abs: 68 , rel: 6 , size: 6) + | | | | d (abs: 82 , rel: 6 , size: 6) + | | | | root (abs: 66 , rel: 0 , size: 76) +| /root//x//b | i | | root (abs: 94 , rel: 0 , size: 104) + x (abs: 54 , rel: 12 , size: 65) +| | | | x (abs: 82 , rel: 12 , size: 93) + a (abs: 0 , rel: 54 , size: 6) +| | | | a (abs: 0 , rel: 82 , size: 6) + b (abs: 6 , rel: 48 , size: 6) +| | | | b (abs: 12 , rel: 70 , size: 13) + b (abs: 18 , rel: 36 , size: 13) +| | | | b (abs: 6 , rel: 6 , size: 6) + c (abs: 12 , rel: 6 , size: 6) +| | | | b (abs: 32 , rel: 50 , size: 20) + x (abs: 40 , rel: 14 , size: 22) +| | | | c (abs: 20 , rel: 12 , size: 6) + b (abs: 32 , rel: 8 , size: 14) +| | | | b (abs: 26 , rel: 6 , size: 6) + @i (abs: 25 , rel: 7 , size: 6) +| | | | x (abs: 60 , rel: 22 , size: 27) + b (abs: 48 , rel: 6 , size: 6) +| | | | b (abs: 52 , rel: 8 , size: 20) + | | | | @i (abs: 40 , rel: 12 , size: 6) + | | | | b (abs: 46 , rel: 6 , size: 6) + | | | | b (abs: 74 , rel: 8 , size: 13) + | | | | b (abs: 68 , rel: 6 , size: 6) + | | | | (13 rows) -- Add a subtree that contains matching nodes (i.e. infinite recursion could take place). update a set new_node=''; select node_debug_print(data), targ_path, add_mode, new_node, node_debug_print(xml.add(data, targ_path, new_node, add_mode)) from a order by a.i; node_debug_print | targ_path | add_mode | new_node | node_debug_print -------------------------------------------+-------------+----------+--------------------+------------------------------------------- root (abs: 84 , rel: 0 , size: 94) +| /root//x/b | r | | root (abs: 62 , rel: 0 , size: 72) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 54 , rel: 8 , size: 62) + b (abs: 36 , rel: 40 , size: 44) +| | | | x (abs: 14 , rel: 40 , size: 21) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | b (abs: 6 , rel: 8 , size: 13) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 0 , rel: 6 , size: 6) + b (abs: 20 , rel: 8 , size: 17) +| | | | a (abs: 46 , rel: 8 , size: 32) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 32 , rel: 14 , size: 17) + a (abs: 68 , rel: 8 , size: 32) +| | | | test3 (abs: 22 , rel: 10 , size: 10) + b (abs: 54 , rel: 14 , size: 17) +| | | | d (abs: 40 , rel: 6 , size: 6) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | d (abs: 62 , rel: 6 , size: 6) +| | | | | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x/b | b | | root (abs: 106 , rel: 0 , size: 116) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 98 , rel: 8 , size: 106) + c (abs: 36 , rel: 40 , size: 44) +| | | | c (abs: 58 , rel: 40 , size: 66) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 58 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 50 , rel: 8 , size: 48) + b (abs: 20 , rel: 8 , size: 17) +| | | | x (abs: 24 , rel: 26 , size: 21) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 16 , rel: 8 , size: 13) + a (abs: 68 , rel: 8 , size: 32) +| | | | x (abs: 10 , rel: 6 , size: 6) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 42 , rel: 8 , size: 17) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | test2 (abs: 32 , rel: 10 , size: 10)+ d (abs: 62 , rel: 6 , size: 6) +| | | | a (abs: 90 , rel: 8 , size: 32) + | | | | b (abs: 76 , rel: 14 , size: 17) + | | | | test3 (abs: 66 , rel: 10 , size: 10) + | | | | d (abs: 84 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x/b | a | | root (abs: 130 , rel: 0 , size: 140) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 120 , rel: 10 , size: 129) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 58 , rel: 62 , size: 66) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 58 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 50 , rel: 8 , size: 48) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 20 , rel: 30 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | x (abs: 42 , rel: 8 , size: 21) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 34 , rel: 8 , size: 13) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | x (abs: 28 , rel: 6 , size: 6) + d (abs: 62 , rel: 6 , size: 6) +| | | | x (abs: 80 , rel: 40 , size: 21) + | | | | b (abs: 72 , rel: 8 , size: 13) + | | | | x (abs: 66 , rel: 6 , size: 6) + | | | | a (abs: 112 , rel: 8 , size: 32) + | | | | b (abs: 98 , rel: 14 , size: 17) + | | | | test3 (abs: 88 , rel: 10 , size: 10) + | | | | d (abs: 106 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x//b | r | | root (abs: 66 , rel: 0 , size: 76) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 58 , rel: 8 , size: 66) + b (abs: 36 , rel: 40 , size: 44) +| | | | x (abs: 14 , rel: 44 , size: 21) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | b (abs: 6 , rel: 8 , size: 13) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 0 , rel: 6 , size: 6) + b (abs: 20 , rel: 8 , size: 17) +| | | | a (abs: 50 , rel: 8 , size: 36) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | x (abs: 36 , rel: 14 , size: 21) + a (abs: 68 , rel: 8 , size: 32) +| | | | b (abs: 28 , rel: 8 , size: 13) + b (abs: 54 , rel: 14 , size: 17) +| | | | x (abs: 22 , rel: 6 , size: 6) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | d (abs: 44 , rel: 6 , size: 6) + d (abs: 62 , rel: 6 , size: 6) +| | | | | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x//b | a | | root (abs: 154 , rel: 0 , size: 164) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 144 , rel: 10 , size: 153) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 58 , rel: 86 , size: 66) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 58 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 50 , rel: 8 , size: 48) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 20 , rel: 30 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | x (abs: 42 , rel: 8 , size: 21) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 34 , rel: 8 , size: 13) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | x (abs: 28 , rel: 6 , size: 6) + d (abs: 62 , rel: 6 , size: 6) +| | | | x (abs: 80 , rel: 64 , size: 21) + | | | | b (abs: 72 , rel: 8 , size: 13) + | | | | x (abs: 66 , rel: 6 , size: 6) + | | | | a (abs: 134 , rel: 10 , size: 55) + | | | | b (abs: 98 , rel: 36 , size: 17) + | | | | test3 (abs: 88 , rel: 10 , size: 10) + | | | | x (abs: 120 , rel: 14 , size: 21) + | | | | b (abs: 112 , rel: 8 , size: 13) + | | | | x (abs: 106 , rel: 6 , size: 6) + | | | | d (abs: 128 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| //x//b | r | | root (abs: 66 , rel: 0 , size: 76) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 58 , rel: 8 , size: 66) + b (abs: 36 , rel: 40 , size: 44) +| | | | x (abs: 14 , rel: 44 , size: 21) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | b (abs: 6 , rel: 8 , size: 13) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 0 , rel: 6 , size: 6) + b (abs: 20 , rel: 8 , size: 17) +| | | | a (abs: 50 , rel: 8 , size: 36) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | x (abs: 36 , rel: 14 , size: 21) + a (abs: 68 , rel: 8 , size: 32) +| | | | b (abs: 28 , rel: 8 , size: 13) + b (abs: 54 , rel: 14 , size: 17) +| | | | x (abs: 22 , rel: 6 , size: 6) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | d (abs: 44 , rel: 6 , size: 6) + d (abs: 62 , rel: 6 , size: 6) +| | | | | | | | root (abs: 84 , rel: 0 , size: 94) +| //x//b | a | | root (abs: 154 , rel: 0 , size: 164) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 144 , rel: 10 , size: 153) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 58 , rel: 86 , size: 66) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 58 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 50 , rel: 8 , size: 48) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 20 , rel: 30 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | x (abs: 42 , rel: 8 , size: 21) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 34 , rel: 8 , size: 13) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | x (abs: 28 , rel: 6 , size: 6) + d (abs: 62 , rel: 6 , size: 6) +| | | | x (abs: 80 , rel: 64 , size: 21) + | | | | b (abs: 72 , rel: 8 , size: 13) + | | | | x (abs: 66 , rel: 6 , size: 6) + | | | | a (abs: 134 , rel: 10 , size: 55) + | | | | b (abs: 98 , rel: 36 , size: 17) + | | | | test3 (abs: 88 , rel: 10 , size: 10) + | | | | x (abs: 120 , rel: 14 , size: 21) + | | | | b (abs: 112 , rel: 8 , size: 13) + | | | | x (abs: 106 , rel: 6 , size: 6) + | | | | d (abs: 128 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x/b | i | | root (abs: 106 , rel: 0 , size: 116) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 98 , rel: 8 , size: 106) + c (abs: 36 , rel: 40 , size: 44) +| | | | c (abs: 58 , rel: 40 , size: 66) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 58 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 50 , rel: 8 , size: 47) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 42 , rel: 8 , size: 40) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 32 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | x (abs: 34 , rel: 8 , size: 21) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 26 , rel: 8 , size: 13) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | x (abs: 20 , rel: 6 , size: 6) + d (abs: 62 , rel: 6 , size: 6) +| | | | a (abs: 90 , rel: 8 , size: 32) + | | | | b (abs: 76 , rel: 14 , size: 17) + | | | | test3 (abs: 66 , rel: 10 , size: 10) + | | | | d (abs: 84 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x//b | i | | root (abs: 152 , rel: 0 , size: 162) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 144 , rel: 8 , size: 152) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 80 , rel: 64 , size: 89) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 80 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 50 , rel: 30 , size: 47) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 42 , rel: 8 , size: 40) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 32 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | x (abs: 34 , rel: 8 , size: 21) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 26 , rel: 8 , size: 13) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | x (abs: 20 , rel: 6 , size: 6) + d (abs: 62 , rel: 6 , size: 6) +| | | | x (abs: 72 , rel: 8 , size: 21) + | | | | b (abs: 64 , rel: 8 , size: 13) + | | | | x (abs: 58 , rel: 6 , size: 6) + | | | | a (abs: 136 , rel: 8 , size: 54) + | | | | b (abs: 122 , rel: 14 , size: 40) + | | | | test3 (abs: 90 , rel: 32 , size: 10) + | | | | x (abs: 114 , rel: 8 , size: 21) + | | | | b (abs: 106 , rel: 8 , size: 13) + | | | | x (abs: 100 , rel: 6 , size: 6) + | | | | d (abs: 130 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x//b | b | | root (abs: 130 , rel: 0 , size: 140) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 122 , rel: 8 , size: 130) + c (abs: 36 , rel: 40 , size: 44) +| | | | c (abs: 58 , rel: 64 , size: 66) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 58 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 50 , rel: 8 , size: 48) + b (abs: 20 , rel: 8 , size: 17) +| | | | x (abs: 24 , rel: 26 , size: 21) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 16 , rel: 8 , size: 13) + a (abs: 68 , rel: 8 , size: 32) +| | | | x (abs: 10 , rel: 6 , size: 6) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 42 , rel: 8 , size: 17) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | test2 (abs: 32 , rel: 10 , size: 10)+ d (abs: 62 , rel: 6 , size: 6) +| | | | a (abs: 112 , rel: 10 , size: 55) + | | | | x (abs: 80 , rel: 32 , size: 21) + | | | | b (abs: 72 , rel: 8 , size: 13) + | | | | x (abs: 66 , rel: 6 , size: 6) + | | | | b (abs: 98 , rel: 14 , size: 17) + | | | | test3 (abs: 88 , rel: 10 , size: 10) + | | | | d (abs: 106 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| //x//b | b | | root (abs: 130 , rel: 0 , size: 140) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 122 , rel: 8 , size: 130) + c (abs: 36 , rel: 40 , size: 44) +| | | | c (abs: 58 , rel: 64 , size: 66) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 58 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 50 , rel: 8 , size: 48) + b (abs: 20 , rel: 8 , size: 17) +| | | | x (abs: 24 , rel: 26 , size: 21) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 16 , rel: 8 , size: 13) + a (abs: 68 , rel: 8 , size: 32) +| | | | x (abs: 10 , rel: 6 , size: 6) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 42 , rel: 8 , size: 17) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | test2 (abs: 32 , rel: 10 , size: 10)+ d (abs: 62 , rel: 6 , size: 6) +| | | | a (abs: 112 , rel: 10 , size: 55) + | | | | x (abs: 80 , rel: 32 , size: 21) + | | | | b (abs: 72 , rel: 8 , size: 13) + | | | | x (abs: 66 , rel: 6 , size: 6) + | | | | b (abs: 98 , rel: 14 , size: 17) + | | | | test3 (abs: 88 , rel: 10 , size: 10) + | | | | d (abs: 106 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| //x//b | i | | root (abs: 152 , rel: 0 , size: 162) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 144 , rel: 8 , size: 152) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 80 , rel: 64 , size: 89) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 80 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 50 , rel: 30 , size: 47) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 42 , rel: 8 , size: 40) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 32 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | x (abs: 34 , rel: 8 , size: 21) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 26 , rel: 8 , size: 13) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | x (abs: 20 , rel: 6 , size: 6) + d (abs: 62 , rel: 6 , size: 6) +| | | | x (abs: 72 , rel: 8 , size: 21) + | | | | b (abs: 64 , rel: 8 , size: 13) + | | | | x (abs: 58 , rel: 6 , size: 6) + | | | | a (abs: 136 , rel: 8 , size: 54) + | | | | b (abs: 122 , rel: 14 , size: 40) + | | | | test3 (abs: 90 , rel: 32 , size: 10) + | | | | x (abs: 114 , rel: 8 , size: 21) + | | | | b (abs: 106 , rel: 8 , size: 13) + | | | | x (abs: 100 , rel: 6 , size: 6) + | | | | d (abs: 130 , rel: 6 , size: 6) + | | | | root (abs: 66 , rel: 0 , size: 76) +| /root//x//b | i | | root (abs: 158 , rel: 0 , size: 168) + x (abs: 54 , rel: 12 , size: 65) +| | | | x (abs: 146 , rel: 12 , size: 157) + a (abs: 0 , rel: 54 , size: 6) +| | | | a (abs: 0 , rel: 146 , size: 6) + b (abs: 6 , rel: 48 , size: 6) +| | | | b (abs: 28 , rel: 118 , size: 29) + b (abs: 18 , rel: 36 , size: 13) +| | | | x (abs: 20 , rel: 8 , size: 21) + c (abs: 12 , rel: 6 , size: 6) +| | | | b (abs: 12 , rel: 8 , size: 13) + x (abs: 40 , rel: 14 , size: 22) +| | | | x (abs: 6 , rel: 6 , size: 6) + b (abs: 32 , rel: 8 , size: 14) +| | | | b (abs: 64 , rel: 82 , size: 36) + @i (abs: 25 , rel: 7 , size: 6) +| | | | c (abs: 36 , rel: 28 , size: 6) + b (abs: 48 , rel: 6 , size: 6) +| | | | x (abs: 56 , rel: 8 , size: 21) + | | | | b (abs: 48 , rel: 8 , size: 13) + | | | | x (abs: 42 , rel: 6 , size: 6) + | | | | x (abs: 108 , rel: 38 , size: 43) + | | | | b (abs: 100 , rel: 8 , size: 36) + | | | | @i (abs: 72 , rel: 28 , size: 6) + | | | | x (abs: 92 , rel: 8 , size: 21) + | | | | b (abs: 84 , rel: 8 , size: 13) + | | | | x (abs: 78 , rel: 6 , size: 6) + | | | | b (abs: 138 , rel: 8 , size: 29) + | | | | x (abs: 130 , rel: 8 , size: 21) + | | | | b (abs: 122 , rel: 8 , size: 13) + | | | | x (abs: 116 , rel: 6 , size: 6) + | | | | (13 rows) -- Similar to the previous one, just a document fragment is added instead of a single (though compound) node. update a set new_node=''; select node_debug_print(data), targ_path, add_mode, new_node, node_debug_print(xml.add(data, targ_path, new_node, add_mode)) from a order by a.i; node_debug_print | targ_path | add_mode | new_node | node_debug_print -------------------------------------------+-------------+----------+--------------------------------------+------------------------------------------- root (abs: 84 , rel: 0 , size: 94) +| /root//x/b | r | | root (abs: 86 , rel: 0 , size: 96) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 76 , rel: 10 , size: 85) + b (abs: 36 , rel: 40 , size: 44) +| | | | x (abs: 14 , rel: 62 , size: 21) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | b (abs: 6 , rel: 8 , size: 13) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 0 , rel: 6 , size: 6) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 36 , rel: 40 , size: 21) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | x (abs: 28 , rel: 8 , size: 13) + a (abs: 68 , rel: 8 , size: 32) +| | | | b (abs: 22 , rel: 6 , size: 6) + b (abs: 54 , rel: 14 , size: 17) +| | | | a (abs: 68 , rel: 8 , size: 32) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | b (abs: 54 , rel: 14 , size: 17) + d (abs: 62 , rel: 6 , size: 6) +| | | | test3 (abs: 44 , rel: 10 , size: 10) + | | | | d (abs: 62 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x/b | b | | root (abs: 130 , rel: 0 , size: 140) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 122 , rel: 8 , size: 130) + c (abs: 36 , rel: 40 , size: 44) +| | | | c (abs: 82 , rel: 40 , size: 90) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 82 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 72 , rel: 10 , size: 71) + b (abs: 20 , rel: 8 , size: 17) +| | | | x (abs: 24 , rel: 48 , size: 21) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 16 , rel: 8 , size: 13) + a (abs: 68 , rel: 8 , size: 32) +| | | | x (abs: 10 , rel: 6 , size: 6) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 46 , rel: 26 , size: 21) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | x (abs: 38 , rel: 8 , size: 13) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 32 , rel: 6 , size: 6) + | | | | b (abs: 64 , rel: 8 , size: 17) + | | | | test2 (abs: 54 , rel: 10 , size: 10)+ | | | | a (abs: 114 , rel: 8 , size: 32) + | | | | b (abs: 100 , rel: 14 , size: 17) + | | | | test3 (abs: 90 , rel: 10 , size: 10) + | | | | d (abs: 108 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x/b | a | | root (abs: 176 , rel: 0 , size: 186) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 166 , rel: 10 , size: 176) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 82 , rel: 84 , size: 90) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 82 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 72 , rel: 10 , size: 71) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 20 , rel: 52 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | x (abs: 42 , rel: 30 , size: 21) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 34 , rel: 8 , size: 13) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | x (abs: 28 , rel: 6 , size: 6) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 64 , rel: 8 , size: 21) + | | | | x (abs: 56 , rel: 8 , size: 13) + | | | | b (abs: 50 , rel: 6 , size: 6) + | | | | x (abs: 104 , rel: 62 , size: 21) + | | | | b (abs: 96 , rel: 8 , size: 13) + | | | | x (abs: 90 , rel: 6 , size: 6) + | | | | b (abs: 126 , rel: 40 , size: 21) + | | | | x (abs: 118 , rel: 8 , size: 13) + | | | | b (abs: 112 , rel: 6 , size: 6) + | | | | a (abs: 158 , rel: 8 , size: 32) + | | | | b (abs: 144 , rel: 14 , size: 17) + | | | | test3 (abs: 134 , rel: 10 , size: 10)+ | | | | d (abs: 152 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x//b | r | | root (abs: 114 , rel: 0 , size: 124) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 104 , rel: 10 , size: 113) + b (abs: 36 , rel: 40 , size: 44) +| | | | x (abs: 14 , rel: 90 , size: 21) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | b (abs: 6 , rel: 8 , size: 13) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 0 , rel: 6 , size: 6) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 36 , rel: 68 , size: 21) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | x (abs: 28 , rel: 8 , size: 13) + a (abs: 68 , rel: 8 , size: 32) +| | | | b (abs: 22 , rel: 6 , size: 6) + b (abs: 54 , rel: 14 , size: 17) +| | | | a (abs: 94 , rel: 10 , size: 59) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | x (abs: 58 , rel: 36 , size: 21) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 50 , rel: 8 , size: 13) + | | | | x (abs: 44 , rel: 6 , size: 6) + | | | | b (abs: 80 , rel: 14 , size: 21) + | | | | x (abs: 72 , rel: 8 , size: 13) + | | | | b (abs: 66 , rel: 6 , size: 6) + | | | | d (abs: 88 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x//b | a | | root (abs: 222 , rel: 0 , size: 232) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 212 , rel: 10 , size: 222) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 82 , rel: 130 , size: 90) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 82 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 72 , rel: 10 , size: 71) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 20 , rel: 52 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | x (abs: 42 , rel: 30 , size: 21) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 34 , rel: 8 , size: 13) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | x (abs: 28 , rel: 6 , size: 6) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 64 , rel: 8 , size: 21) + | | | | x (abs: 56 , rel: 8 , size: 13) + | | | | b (abs: 50 , rel: 6 , size: 6) + | | | | x (abs: 104 , rel: 108 , size: 21) + | | | | b (abs: 96 , rel: 8 , size: 13) + | | | | x (abs: 90 , rel: 6 , size: 6) + | | | | b (abs: 126 , rel: 86 , size: 21) + | | | | x (abs: 118 , rel: 8 , size: 13) + | | | | b (abs: 112 , rel: 6 , size: 6) + | | | | a (abs: 202 , rel: 10 , size: 78) + | | | | b (abs: 144 , rel: 58 , size: 17) + | | | | test3 (abs: 134 , rel: 10 , size: 10)+ | | | | x (abs: 166 , rel: 36 , size: 21) + | | | | b (abs: 158 , rel: 8 , size: 13) + | | | | x (abs: 152 , rel: 6 , size: 6) + | | | | b (abs: 188 , rel: 14 , size: 21) + | | | | x (abs: 180 , rel: 8 , size: 13) + | | | | b (abs: 174 , rel: 6 , size: 6) + | | | | d (abs: 196 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| //x//b | r | | root (abs: 114 , rel: 0 , size: 124) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 104 , rel: 10 , size: 113) + b (abs: 36 , rel: 40 , size: 44) +| | | | x (abs: 14 , rel: 90 , size: 21) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | b (abs: 6 , rel: 8 , size: 13) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 0 , rel: 6 , size: 6) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 36 , rel: 68 , size: 21) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | x (abs: 28 , rel: 8 , size: 13) + a (abs: 68 , rel: 8 , size: 32) +| | | | b (abs: 22 , rel: 6 , size: 6) + b (abs: 54 , rel: 14 , size: 17) +| | | | a (abs: 94 , rel: 10 , size: 59) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | x (abs: 58 , rel: 36 , size: 21) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 50 , rel: 8 , size: 13) + | | | | x (abs: 44 , rel: 6 , size: 6) + | | | | b (abs: 80 , rel: 14 , size: 21) + | | | | x (abs: 72 , rel: 8 , size: 13) + | | | | b (abs: 66 , rel: 6 , size: 6) + | | | | d (abs: 88 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| //x//b | a | | root (abs: 222 , rel: 0 , size: 232) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 212 , rel: 10 , size: 222) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 82 , rel: 130 , size: 90) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 82 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 72 , rel: 10 , size: 71) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 20 , rel: 52 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | x (abs: 42 , rel: 30 , size: 21) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 34 , rel: 8 , size: 13) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | x (abs: 28 , rel: 6 , size: 6) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 64 , rel: 8 , size: 21) + | | | | x (abs: 56 , rel: 8 , size: 13) + | | | | b (abs: 50 , rel: 6 , size: 6) + | | | | x (abs: 104 , rel: 108 , size: 21) + | | | | b (abs: 96 , rel: 8 , size: 13) + | | | | x (abs: 90 , rel: 6 , size: 6) + | | | | b (abs: 126 , rel: 86 , size: 21) + | | | | x (abs: 118 , rel: 8 , size: 13) + | | | | b (abs: 112 , rel: 6 , size: 6) + | | | | a (abs: 202 , rel: 10 , size: 78) + | | | | b (abs: 144 , rel: 58 , size: 17) + | | | | test3 (abs: 134 , rel: 10 , size: 10)+ | | | | x (abs: 166 , rel: 36 , size: 21) + | | | | b (abs: 158 , rel: 8 , size: 13) + | | | | x (abs: 152 , rel: 6 , size: 6) + | | | | b (abs: 188 , rel: 14 , size: 21) + | | | | x (abs: 180 , rel: 8 , size: 13) + | | | | b (abs: 174 , rel: 6 , size: 6) + | | | | d (abs: 196 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x/b | i | | root (abs: 130 , rel: 0 , size: 140) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 122 , rel: 8 , size: 130) + c (abs: 36 , rel: 40 , size: 44) +| | | | c (abs: 82 , rel: 40 , size: 90) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 82 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 74 , rel: 8 , size: 71) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 64 , rel: 10 , size: 63) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 54 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | x (abs: 34 , rel: 30 , size: 21) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 26 , rel: 8 , size: 13) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | x (abs: 20 , rel: 6 , size: 6) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 56 , rel: 8 , size: 21) + | | | | x (abs: 48 , rel: 8 , size: 13) + | | | | b (abs: 42 , rel: 6 , size: 6) + | | | | a (abs: 114 , rel: 8 , size: 32) + | | | | b (abs: 100 , rel: 14 , size: 17) + | | | | test3 (abs: 90 , rel: 10 , size: 10) + | | | | d (abs: 108 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x//b | i | | root (abs: 222 , rel: 0 , size: 232) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 214 , rel: 8 , size: 222) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 126 , rel: 88 , size: 136) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 126 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 74 , rel: 52 , size: 71) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 64 , rel: 10 , size: 63) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 54 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | x (abs: 34 , rel: 30 , size: 21) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 26 , rel: 8 , size: 13) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | x (abs: 20 , rel: 6 , size: 6) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 56 , rel: 8 , size: 21) + | | | | x (abs: 48 , rel: 8 , size: 13) + | | | | b (abs: 42 , rel: 6 , size: 6) + | | | | x (abs: 96 , rel: 30 , size: 21) + | | | | b (abs: 88 , rel: 8 , size: 13) + | | | | x (abs: 82 , rel: 6 , size: 6) + | | | | b (abs: 118 , rel: 8 , size: 21) + | | | | x (abs: 110 , rel: 8 , size: 13) + | | | | b (abs: 104 , rel: 6 , size: 6) + | | | | a (abs: 206 , rel: 8 , size: 78) + | | | | b (abs: 190 , rel: 16 , size: 63) + | | | | test3 (abs: 136 , rel: 54 , size: 10)+ | | | | x (abs: 160 , rel: 30 , size: 21) + | | | | b (abs: 152 , rel: 8 , size: 13) + | | | | x (abs: 146 , rel: 6 , size: 6) + | | | | b (abs: 182 , rel: 8 , size: 21) + | | | | x (abs: 174 , rel: 8 , size: 13) + | | | | b (abs: 168 , rel: 6 , size: 6) + | | | | d (abs: 200 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x//b | b | | root (abs: 176 , rel: 0 , size: 186) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 168 , rel: 8 , size: 176) + c (abs: 36 , rel: 40 , size: 44) +| | | | c (abs: 82 , rel: 86 , size: 90) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 82 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 72 , rel: 10 , size: 71) + b (abs: 20 , rel: 8 , size: 17) +| | | | x (abs: 24 , rel: 48 , size: 21) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 16 , rel: 8 , size: 13) + a (abs: 68 , rel: 8 , size: 32) +| | | | x (abs: 10 , rel: 6 , size: 6) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 46 , rel: 26 , size: 21) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | x (abs: 38 , rel: 8 , size: 13) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 32 , rel: 6 , size: 6) + | | | | b (abs: 64 , rel: 8 , size: 17) + | | | | test2 (abs: 54 , rel: 10 , size: 10)+ | | | | a (abs: 158 , rel: 10 , size: 78) + | | | | x (abs: 104 , rel: 54 , size: 21) + | | | | b (abs: 96 , rel: 8 , size: 13) + | | | | x (abs: 90 , rel: 6 , size: 6) + | | | | b (abs: 126 , rel: 32 , size: 21) + | | | | x (abs: 118 , rel: 8 , size: 13) + | | | | b (abs: 112 , rel: 6 , size: 6) + | | | | b (abs: 144 , rel: 14 , size: 17) + | | | | test3 (abs: 134 , rel: 10 , size: 10)+ | | | | d (abs: 152 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| //x//b | b | | root (abs: 176 , rel: 0 , size: 186) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 168 , rel: 8 , size: 176) + c (abs: 36 , rel: 40 , size: 44) +| | | | c (abs: 82 , rel: 86 , size: 90) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 82 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 72 , rel: 10 , size: 71) + b (abs: 20 , rel: 8 , size: 17) +| | | | x (abs: 24 , rel: 48 , size: 21) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 16 , rel: 8 , size: 13) + a (abs: 68 , rel: 8 , size: 32) +| | | | x (abs: 10 , rel: 6 , size: 6) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 46 , rel: 26 , size: 21) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | x (abs: 38 , rel: 8 , size: 13) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 32 , rel: 6 , size: 6) + | | | | b (abs: 64 , rel: 8 , size: 17) + | | | | test2 (abs: 54 , rel: 10 , size: 10)+ | | | | a (abs: 158 , rel: 10 , size: 78) + | | | | x (abs: 104 , rel: 54 , size: 21) + | | | | b (abs: 96 , rel: 8 , size: 13) + | | | | x (abs: 90 , rel: 6 , size: 6) + | | | | b (abs: 126 , rel: 32 , size: 21) + | | | | x (abs: 118 , rel: 8 , size: 13) + | | | | b (abs: 112 , rel: 6 , size: 6) + | | | | b (abs: 144 , rel: 14 , size: 17) + | | | | test3 (abs: 134 , rel: 10 , size: 10)+ | | | | d (abs: 152 , rel: 6 , size: 6) + | | | | root (abs: 84 , rel: 0 , size: 94) +| //x//b | i | | root (abs: 222 , rel: 0 , size: 232) + x (abs: 76 , rel: 8 , size: 84) +| | | | x (abs: 214 , rel: 8 , size: 222) + b (abs: 36 , rel: 40 , size: 44) +| | | | b (abs: 126 , rel: 88 , size: 136) + test1 (abs: 0 , rel: 36 , size: 10) +| | | | test1 (abs: 0 , rel: 126 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | | | x (abs: 74 , rel: 52 , size: 71) + b (abs: 20 , rel: 8 , size: 17) +| | | | b (abs: 64 , rel: 10 , size: 63) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 54 , size: 10)+ a (abs: 68 , rel: 8 , size: 32) +| | | | x (abs: 34 , rel: 30 , size: 21) + b (abs: 54 , rel: 14 , size: 17) +| | | | b (abs: 26 , rel: 8 , size: 13) + test3 (abs: 44 , rel: 10 , size: 10) +| | | | x (abs: 20 , rel: 6 , size: 6) + d (abs: 62 , rel: 6 , size: 6) +| | | | b (abs: 56 , rel: 8 , size: 21) + | | | | x (abs: 48 , rel: 8 , size: 13) + | | | | b (abs: 42 , rel: 6 , size: 6) + | | | | x (abs: 96 , rel: 30 , size: 21) + | | | | b (abs: 88 , rel: 8 , size: 13) + | | | | x (abs: 82 , rel: 6 , size: 6) + | | | | b (abs: 118 , rel: 8 , size: 21) + | | | | x (abs: 110 , rel: 8 , size: 13) + | | | | b (abs: 104 , rel: 6 , size: 6) + | | | | a (abs: 206 , rel: 8 , size: 78) + | | | | b (abs: 190 , rel: 16 , size: 63) + | | | | test3 (abs: 136 , rel: 54 , size: 10)+ | | | | x (abs: 160 , rel: 30 , size: 21) + | | | | b (abs: 152 , rel: 8 , size: 13) + | | | | x (abs: 146 , rel: 6 , size: 6) + | | | | b (abs: 182 , rel: 8 , size: 21) + | | | | x (abs: 174 , rel: 8 , size: 13) + | | | | b (abs: 168 , rel: 6 , size: 6) + | | | | d (abs: 200 , rel: 6 , size: 6) + | | | | root (abs: 66 , rel: 0 , size: 76) +| /root//x//b | i | | root (abs: 250 , rel: 0 , size: 260) + x (abs: 54 , rel: 12 , size: 65) +| | | | x (abs: 238 , rel: 12 , size: 249) + a (abs: 0 , rel: 54 , size: 6) +| | | | a (abs: 0 , rel: 238 , size: 6) + b (abs: 6 , rel: 48 , size: 6) +| | | | b (abs: 50 , rel: 188 , size: 52) + b (abs: 18 , rel: 36 , size: 13) +| | | | x (abs: 20 , rel: 30 , size: 21) + c (abs: 12 , rel: 6 , size: 6) +| | | | b (abs: 12 , rel: 8 , size: 13) + x (abs: 40 , rel: 14 , size: 22) +| | | | x (abs: 6 , rel: 6 , size: 6) + b (abs: 32 , rel: 8 , size: 14) +| | | | b (abs: 42 , rel: 8 , size: 21) + @i (abs: 25 , rel: 7 , size: 6) +| | | | x (abs: 34 , rel: 8 , size: 13) + b (abs: 48 , rel: 6 , size: 6) +| | | | b (abs: 28 , rel: 6 , size: 6) + | | | | b (abs: 108 , rel: 130 , size: 59) + | | | | c (abs: 58 , rel: 50 , size: 6) + | | | | x (abs: 78 , rel: 30 , size: 21) + | | | | b (abs: 70 , rel: 8 , size: 13) + | | | | x (abs: 64 , rel: 6 , size: 6) + | | | | b (abs: 100 , rel: 8 , size: 21) + | | | | x (abs: 92 , rel: 8 , size: 13) + | | | | b (abs: 86 , rel: 6 , size: 6) + | | | | x (abs: 178 , rel: 60 , size: 68) + | | | | b (abs: 168 , rel: 10 , size: 60) + | | | | @i (abs: 117 , rel: 51 , size: 6) + | | | | x (abs: 138 , rel: 30 , size: 21) + | | | | b (abs: 130 , rel: 8 , size: 13) + | | | | x (abs: 124 , rel: 6 , size: 6) + | | | | b (abs: 160 , rel: 8 , size: 21) + | | | | x (abs: 152 , rel: 8 , size: 13) + | | | | b (abs: 146 , rel: 6 , size: 6) + | | | | b (abs: 230 , rel: 8 , size: 52) + | | | | x (abs: 200 , rel: 30 , size: 21) + | | | | b (abs: 192 , rel: 8 , size: 13) + | | | | x (abs: 186 , rel: 6 , size: 6) + | | | | b (abs: 222 , rel: 8 , size: 21) + | | | | x (abs: 214 , rel: 8 , size: 13) + | | | | b (abs: 208 , rel: 6 , size: 6) + | | | | (13 rows) -- And finally test node removal drop table a; create table a (i int, data doc, targ_path xml.path); insert into a values (1, '', '/root/x/b'), (2, '', '/root//x/b'), (3, '', '/root//x/b'), (4, '', '/root//x//b'), (5, '', '/root//x//b'), (6, '', '/root//x//b'), (7, '', '/root//x//b'), (8, '', '/root//x//b'), (9, '', '/a/b//@id'), (10, '', '//@id'), (11, '', '//@*'); select node_debug_print(data), targ_path, node_debug_print(xml.remove(data, targ_path)) from a order by a.i; node_debug_print | targ_path | node_debug_print -------------------------------------------+-------------+------------------------------------------ root (abs: 84 , rel: 0 , size: 94) +| /root/x/b | root (abs: 40 , rel: 0 , size: 50) + x (abs: 76 , rel: 8 , size: 84) +| | x (abs: 32 , rel: 8 , size: 39) + b (abs: 36 , rel: 40 , size: 44) +| | a (abs: 24 , rel: 8 , size: 32) + test1 (abs: 0 , rel: 36 , size: 10) +| | b (abs: 10 , rel: 14 , size: 17) + x (abs: 28 , rel: 8 , size: 25) +| | test3 (abs: 0 , rel: 10 , size: 10) + b (abs: 20 , rel: 8 , size: 17) +| | d (abs: 18 , rel: 6 , size: 6) + test2 (abs: 10 , rel: 10 , size: 10)+| | a (abs: 68 , rel: 8 , size: 32) +| | b (abs: 54 , rel: 14 , size: 17) +| | test3 (abs: 44 , rel: 10 , size: 10) +| | d (abs: 62 , rel: 6 , size: 6) +| | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x/b | root (abs: 40 , rel: 0 , size: 50) + x (abs: 76 , rel: 8 , size: 84) +| | x (abs: 32 , rel: 8 , size: 39) + b (abs: 36 , rel: 40 , size: 44) +| | a (abs: 24 , rel: 8 , size: 32) + test1 (abs: 0 , rel: 36 , size: 10) +| | b (abs: 10 , rel: 14 , size: 17) + x (abs: 28 , rel: 8 , size: 25) +| | test3 (abs: 0 , rel: 10 , size: 10) + b (abs: 20 , rel: 8 , size: 17) +| | d (abs: 18 , rel: 6 , size: 6) + test2 (abs: 10 , rel: 10 , size: 10)+| | a (abs: 68 , rel: 8 , size: 32) +| | b (abs: 54 , rel: 14 , size: 17) +| | test3 (abs: 44 , rel: 10 , size: 10) +| | d (abs: 62 , rel: 6 , size: 6) +| | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x/b | root (abs: 64 , rel: 0 , size: 74) + x (abs: 76 , rel: 8 , size: 84) +| | x (abs: 56 , rel: 8 , size: 64) + c (abs: 36 , rel: 40 , size: 44) +| | c (abs: 16 , rel: 40 , size: 24) + test1 (abs: 0 , rel: 36 , size: 10) +| | test1 (abs: 0 , rel: 16 , size: 10) + x (abs: 28 , rel: 8 , size: 25) +| | x (abs: 10 , rel: 6 , size: 6) + b (abs: 20 , rel: 8 , size: 17) +| | a (abs: 48 , rel: 8 , size: 32) + test2 (abs: 10 , rel: 10 , size: 10)+| | b (abs: 34 , rel: 14 , size: 17) + a (abs: 68 , rel: 8 , size: 32) +| | test3 (abs: 24 , rel: 10 , size: 10)+ b (abs: 54 , rel: 14 , size: 17) +| | d (abs: 42 , rel: 6 , size: 6) + test3 (abs: 44 , rel: 10 , size: 10) +| | d (abs: 62 , rel: 6 , size: 6) +| | | | root (abs: 84 , rel: 0 , size: 94) +| /root//x//b | root (abs: 40 , rel: 0 , size: 50) + x (abs: 74 , rel: 10 , size: 83) +| | x (abs: 32 , rel: 8 , size: 40) + c (abs: 28 , rel: 46 , size: 36) +| | c (abs: 10 , rel: 22 , size: 17) + test1 (abs: 0 , rel: 28 , size: 10) +| | test1 (abs: 0 , rel: 10 , size: 10) + b (abs: 20 , rel: 8 , size: 17) +| | a (abs: 24 , rel: 8 , size: 13) + test2 (abs: 10 , rel: 10 , size: 10) +| | d (abs: 18 , rel: 6 , size: 6) + a (abs: 60 , rel: 14 , size: 32) +| | b (abs: 46 , rel: 14 , size: 17) +| | test3 (abs: 36 , rel: 10 , size: 10) +| | d (abs: 54 , rel: 6 , size: 6) +| | b (abs: 68 , rel: 6 , size: 6) +| | | | root (abs: 90 , rel: 0 , size: 100) +| /root//x//b | root (abs: 40 , rel: 0 , size: 50) + x (abs: 80 , rel: 10 , size: 90) +| | x (abs: 32 , rel: 8 , size: 40) + c (abs: 28 , rel: 52 , size: 36) +| | c (abs: 10 , rel: 22 , size: 17) + test1 (abs: 0 , rel: 28 , size: 10) +| | test1 (abs: 0 , rel: 10 , size: 10) + b (abs: 20 , rel: 8 , size: 17) +| | a (abs: 24 , rel: 8 , size: 13) + test2 (abs: 10 , rel: 10 , size: 10) +| | d (abs: 18 , rel: 6 , size: 6) + a (abs: 60 , rel: 20 , size: 32) +| | b (abs: 46 , rel: 14 , size: 17) +| | test3 (abs: 36 , rel: 10 , size: 10) +| | d (abs: 54 , rel: 6 , size: 6) +| | b (abs: 68 , rel: 12 , size: 6) +| | b (abs: 74 , rel: 6 , size: 6) +| | | | root (abs: 98 , rel: 0 , size: 108) +| /root//x//b | root (abs: 40 , rel: 0 , size: 50) + x (abs: 88 , rel: 10 , size: 98) +| | x (abs: 32 , rel: 8 , size: 40) + c (abs: 28 , rel: 60 , size: 36) +| | c (abs: 10 , rel: 22 , size: 17) + test1 (abs: 0 , rel: 28 , size: 10) +| | test1 (abs: 0 , rel: 10 , size: 10) + b (abs: 20 , rel: 8 , size: 17) +| | a (abs: 24 , rel: 8 , size: 13) + test2 (abs: 10 , rel: 10 , size: 10) +| | d (abs: 18 , rel: 6 , size: 6) + a (abs: 60 , rel: 28 , size: 32) +| | b (abs: 46 , rel: 14 , size: 17) +| | test3 (abs: 36 , rel: 10 , size: 10) +| | d (abs: 54 , rel: 6 , size: 6) +| | b (abs: 74 , rel: 14 , size: 13) +| | @i (abs: 68 , rel: 6 , size: 6) +| | b (abs: 82 , rel: 6 , size: 6) +| | | | root (abs: 106 , rel: 0 , size: 116) +| /root//x//b | root (abs: 40 , rel: 0 , size: 50) + x (abs: 96 , rel: 10 , size: 106) +| | x (abs: 32 , rel: 8 , size: 40) + c (abs: 28 , rel: 68 , size: 36) +| | c (abs: 10 , rel: 22 , size: 17) + test1 (abs: 0 , rel: 28 , size: 10) +| | test1 (abs: 0 , rel: 10 , size: 10) + b (abs: 20 , rel: 8 , size: 17) +| | a (abs: 24 , rel: 8 , size: 13) + test2 (abs: 10 , rel: 10 , size: 10) +| | d (abs: 18 , rel: 6 , size: 6) + a (abs: 60 , rel: 36 , size: 32) +| | b (abs: 46 , rel: 14 , size: 17) +| | test3 (abs: 36 , rel: 10 , size: 10) +| | d (abs: 54 , rel: 6 , size: 6) +| | b (abs: 74 , rel: 22 , size: 13) +| | @i (abs: 68 , rel: 6 , size: 6) +| | b (abs: 88 , rel: 8 , size: 14) +| | @i (abs: 81 , rel: 7 , size: 6) +| | | | root (abs: 106 , rel: 0 , size: 116) +| /root//x//b | root (abs: 40 , rel: 0 , size: 50) + x (abs: 96 , rel: 10 , size: 106) +| | x (abs: 32 , rel: 8 , size: 40) + c (abs: 28 , rel: 68 , size: 36) +| | c (abs: 10 , rel: 22 , size: 17) + test1 (abs: 0 , rel: 28 , size: 10) +| | test1 (abs: 0 , rel: 10 , size: 10) + b (abs: 20 , rel: 8 , size: 17) +| | a (abs: 24 , rel: 8 , size: 13) + test2 (abs: 10 , rel: 10 , size: 10) +| | d (abs: 18 , rel: 6 , size: 6) + a (abs: 60 , rel: 36 , size: 32) +| | b (abs: 46 , rel: 14 , size: 17) +| | test3 (abs: 36 , rel: 10 , size: 10) +| | d (abs: 54 , rel: 6 , size: 6) +| | b (abs: 74 , rel: 22 , size: 13) +| | c (abs: 68 , rel: 6 , size: 6) +| | b (abs: 88 , rel: 8 , size: 13) +| | c (abs: 82 , rel: 6 , size: 6) +| | | | a (abs: 44 , rel: 0 , size: 52) +| /a/b//@id | a (abs: 28 , rel: 0 , size: 36) + b (abs: 14 , rel: 30 , size: 22) +| | b (abs: 6 , rel: 22 , size: 13) + @d (abs: 0 , rel: 14 , size: 6) +| | @d (abs: 0 , rel: 6 , size: 6) + @id (abs: 6 , rel: 8 , size: 7) +| | b (abs: 20 , rel: 8 , size: 14) + b (abs: 36 , rel: 8 , size: 22) +| | @d (abs: 13 , rel: 7 , size: 6) + @d (abs: 22 , rel: 14 , size: 6) +| | @id (abs: 28 , rel: 8 , size: 7) +| | | | a (abs: 44 , rel: 0 , size: 52) +| //@id | a (abs: 28 , rel: 0 , size: 36) + b (abs: 14 , rel: 30 , size: 22) +| | b (abs: 6 , rel: 22 , size: 13) + @d (abs: 0 , rel: 14 , size: 6) +| | @d (abs: 0 , rel: 6 , size: 6) + @id (abs: 6 , rel: 8 , size: 7) +| | b (abs: 20 , rel: 8 , size: 14) + b (abs: 36 , rel: 8 , size: 22) +| | @d (abs: 13 , rel: 7 , size: 6) + @d (abs: 22 , rel: 14 , size: 6) +| | @id (abs: 28 , rel: 8 , size: 7) +| | | | a (abs: 44 , rel: 0 , size: 52) +| //@* | a (abs: 12 , rel: 0 , size: 20) + b (abs: 14 , rel: 30 , size: 22) +| | b (abs: 0 , rel: 12 , size: 6) + @d (abs: 0 , rel: 14 , size: 6) +| | b (abs: 6 , rel: 6 , size: 6) + @id (abs: 6 , rel: 8 , size: 7) +| | b (abs: 36 , rel: 8 , size: 22) +| | @d (abs: 22 , rel: 14 , size: 6) +| | @id (abs: 28 , rel: 8 , size: 7) +| | | | (11 rows) drop table a; select xml.remove('', '/a/b/c'); remove ----------------- (1 row) select xml.add( '', '/a', '', 'b' ); add ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- (1 row)