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: 81 , rel: 0 , size: 91) +| /root//x/b | r | | root (abs: 47 , rel: 0 , size: 57) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 39 , rel: 8 , size: 47) + b (abs: 34 , rel: 39 , size: 42) +| | | | new (abs: 0 , rel: 39 , size: 8) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | a (abs: 31 , rel: 8 , size: 31) + x (abs: 27 , rel: 7 , size: 24) +| | | | b (abs: 18 , rel: 13 , size: 17) + b (abs: 20 , rel: 7 , size: 17) +| | | | test3 (abs: 8 , rel: 10 , size: 10) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | d (abs: 25 , rel: 6 , size: 6) + a (abs: 65 , rel: 8 , size: 31) +| | | | b (abs: 52 , rel: 13 , size: 17) +| | | | test3 (abs: 42 , rel: 10 , size: 10) +| | | | d (abs: 59 , rel: 6 , size: 6) +| | | | | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x/b | b | | root (abs: 90 , rel: 0 , size: 100) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 82 , rel: 8 , size: 90) + c (abs: 34 , rel: 39 , size: 42) +| | | | c (abs: 43 , rel: 39 , size: 51) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 43 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 35 , rel: 8 , size: 33) + b (abs: 20 , rel: 7 , size: 17) +| | | | new (abs: 10 , rel: 25 , size: 8) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 28 , rel: 7 , size: 17) + a (abs: 65 , rel: 8 , size: 31) +| | | | test2 (abs: 18 , rel: 10 , size: 10)+ b (abs: 52 , rel: 13 , size: 17) +| | | | a (abs: 74 , rel: 8 , size: 31) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | b (abs: 61 , rel: 13 , size: 17) + d (abs: 59 , rel: 6 , size: 6) +| | | | test3 (abs: 51 , rel: 10 , size: 10) + | | | | d (abs: 68 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x/b | a | | root (abs: 99 , rel: 0 , size: 109) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 90 , rel: 9 , size: 99) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 43 , rel: 47 , size: 51) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 43 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 35 , rel: 8 , size: 33) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 20 , rel: 15 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 65 , rel: 8 , size: 31) +| | | | new (abs: 27 , rel: 8 , size: 8) + b (abs: 52 , rel: 13 , size: 17) +| | | | new (abs: 51 , rel: 39 , size: 8) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | a (abs: 82 , rel: 8 , size: 31) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 69 , rel: 13 , size: 17) + | | | | test3 (abs: 59 , rel: 10 , size: 10) + | | | | d (abs: 76 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x//b | r | | root (abs: 38 , rel: 0 , size: 48) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 30 , rel: 8 , size: 38) + b (abs: 34 , rel: 39 , size: 42) +| | | | new (abs: 0 , rel: 30 , size: 8) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | a (abs: 22 , rel: 8 , size: 22) + x (abs: 27 , rel: 7 , size: 24) +| | | | new (abs: 8 , rel: 14 , size: 8) + b (abs: 20 , rel: 7 , size: 17) +| | | | d (abs: 16 , rel: 6 , size: 6) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | a (abs: 65 , rel: 8 , size: 31) +| | | | b (abs: 52 , rel: 13 , size: 17) +| | | | test3 (abs: 42 , rel: 10 , size: 10) +| | | | d (abs: 59 , rel: 6 , size: 6) +| | | | | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x//b | a | | root (abs: 108 , rel: 0 , size: 118) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 99 , rel: 9 , size: 108) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 43 , rel: 56 , size: 51) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 43 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 35 , rel: 8 , size: 33) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 20 , rel: 15 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 65 , rel: 8 , size: 31) +| | | | new (abs: 27 , rel: 8 , size: 8) + b (abs: 52 , rel: 13 , size: 17) +| | | | new (abs: 51 , rel: 48 , size: 8) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | a (abs: 90 , rel: 9 , size: 40) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 69 , rel: 21 , size: 17) + | | | | test3 (abs: 59 , rel: 10 , size: 10) + | | | | new (abs: 76 , rel: 14 , size: 8) + | | | | d (abs: 84 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| //x//b | r | | root (abs: 38 , rel: 0 , size: 48) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 30 , rel: 8 , size: 38) + b (abs: 34 , rel: 39 , size: 42) +| | | | new (abs: 0 , rel: 30 , size: 8) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | a (abs: 22 , rel: 8 , size: 22) + x (abs: 27 , rel: 7 , size: 24) +| | | | new (abs: 8 , rel: 14 , size: 8) + b (abs: 20 , rel: 7 , size: 17) +| | | | d (abs: 16 , rel: 6 , size: 6) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | a (abs: 65 , rel: 8 , size: 31) +| | | | b (abs: 52 , rel: 13 , size: 17) +| | | | test3 (abs: 42 , rel: 10 , size: 10) +| | | | d (abs: 59 , rel: 6 , size: 6) +| | | | | | | | root (abs: 81 , rel: 0 , size: 91) +| //x//b | a | | root (abs: 108 , rel: 0 , size: 118) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 99 , rel: 9 , size: 108) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 43 , rel: 56 , size: 51) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 43 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 35 , rel: 8 , size: 33) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 20 , rel: 15 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 65 , rel: 8 , size: 31) +| | | | new (abs: 27 , rel: 8 , size: 8) + b (abs: 52 , rel: 13 , size: 17) +| | | | new (abs: 51 , rel: 48 , size: 8) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | a (abs: 90 , rel: 9 , size: 40) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 69 , rel: 21 , size: 17) + | | | | test3 (abs: 59 , rel: 10 , size: 10) + | | | | new (abs: 76 , rel: 14 , size: 8) + | | | | d (abs: 84 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x/b | i | | root (abs: 90 , rel: 0 , size: 100) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 82 , rel: 8 , size: 90) + c (abs: 34 , rel: 39 , size: 42) +| | | | c (abs: 43 , rel: 39 , size: 51) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 43 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 36 , rel: 7 , size: 33) + b (abs: 20 , rel: 7 , 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: 65 , rel: 8 , size: 31) +| | | | new (abs: 20 , rel: 8 , size: 8) + b (abs: 52 , rel: 13 , size: 17) +| | | | a (abs: 74 , rel: 8 , size: 31) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | b (abs: 61 , rel: 13 , size: 17) + d (abs: 59 , rel: 6 , size: 6) +| | | | test3 (abs: 51 , rel: 10 , size: 10) + | | | | d (abs: 68 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x//b | i | | root (abs: 108 , rel: 0 , size: 118) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 100 , rel: 8 , size: 108) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 51 , rel: 49 , size: 60) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 51 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 36 , rel: 15 , size: 33) + b (abs: 20 , rel: 7 , 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: 65 , rel: 8 , size: 31) +| | | | new (abs: 20 , rel: 8 , size: 8) + b (abs: 52 , rel: 13 , size: 17) +| | | | new (abs: 43 , rel: 8 , size: 8) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | a (abs: 92 , rel: 8 , size: 40) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 78 , rel: 14 , size: 26) + | | | | test3 (abs: 60 , rel: 18 , size: 10) + | | | | new (abs: 70 , rel: 8 , size: 8) + | | | | d (abs: 86 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x//b | b | | root (abs: 99 , rel: 0 , size: 109) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 91 , rel: 8 , size: 99) + c (abs: 34 , rel: 39 , size: 42) +| | | | c (abs: 43 , rel: 48 , size: 51) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 43 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 35 , rel: 8 , size: 33) + b (abs: 20 , rel: 7 , size: 17) +| | | | new (abs: 10 , rel: 25 , size: 8) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 28 , rel: 7 , size: 17) + a (abs: 65 , rel: 8 , size: 31) +| | | | test2 (abs: 18 , rel: 10 , size: 10)+ b (abs: 52 , rel: 13 , size: 17) +| | | | a (abs: 82 , rel: 9 , size: 40) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | new (abs: 51 , rel: 31 , size: 8) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 69 , rel: 13 , size: 17) + | | | | test3 (abs: 59 , rel: 10 , size: 10) + | | | | d (abs: 76 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| //x//b | b | | root (abs: 99 , rel: 0 , size: 109) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 91 , rel: 8 , size: 99) + c (abs: 34 , rel: 39 , size: 42) +| | | | c (abs: 43 , rel: 48 , size: 51) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 43 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 35 , rel: 8 , size: 33) + b (abs: 20 , rel: 7 , size: 17) +| | | | new (abs: 10 , rel: 25 , size: 8) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 28 , rel: 7 , size: 17) + a (abs: 65 , rel: 8 , size: 31) +| | | | test2 (abs: 18 , rel: 10 , size: 10)+ b (abs: 52 , rel: 13 , size: 17) +| | | | a (abs: 82 , rel: 9 , size: 40) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | new (abs: 51 , rel: 31 , size: 8) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 69 , rel: 13 , size: 17) + | | | | test3 (abs: 59 , rel: 10 , size: 10) + | | | | d (abs: 76 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| //x//b | i | | root (abs: 108 , rel: 0 , size: 118) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 100 , rel: 8 , size: 108) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 51 , rel: 49 , size: 60) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 51 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 36 , rel: 15 , size: 33) + b (abs: 20 , rel: 7 , 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: 65 , rel: 8 , size: 31) +| | | | new (abs: 20 , rel: 8 , size: 8) + b (abs: 52 , rel: 13 , size: 17) +| | | | new (abs: 43 , rel: 8 , size: 8) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | a (abs: 92 , rel: 8 , size: 40) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 78 , rel: 14 , size: 26) + | | | | test3 (abs: 60 , rel: 18 , size: 10) + | | | | new (abs: 70 , rel: 8 , size: 8) + | | | | d (abs: 86 , rel: 6 , size: 6) + | | | | root (abs: 62 , rel: 0 , size: 72) +| /root//x//b | i | | root (abs: 90 , rel: 0 , size: 100) + x (abs: 51 , rel: 11 , size: 62) +| | | | x (abs: 79 , rel: 11 , size: 90) + a (abs: 0 , rel: 51 , size: 6) +| | | | a (abs: 0 , rel: 79 , size: 6) + b (abs: 6 , rel: 45 , size: 6) +| | | | b (abs: 12 , rel: 67 , size: 13) + b (abs: 18 , rel: 33 , size: 13) +| | | | n (abs: 6 , rel: 6 , size: 6) + c (abs: 12 , rel: 6 , size: 6) +| | | | b (abs: 31 , rel: 48 , size: 20) + x (abs: 38 , rel: 13 , size: 20) +| | | | c (abs: 19 , rel: 12 , size: 6) + b (abs: 31 , rel: 7 , size: 13) +| | | | n (abs: 25 , rel: 6 , size: 6) + @i (abs: 25 , rel: 6 , size: 6) +| | | | x (abs: 59 , rel: 20 , size: 27) + b (abs: 45 , rel: 6 , size: 6) +| | | | b (abs: 51 , rel: 8 , size: 20) + | | | | @i (abs: 39 , rel: 12 , size: 6) + | | | | n (abs: 45 , rel: 6 , size: 6) + | | | | b (abs: 72 , rel: 7 , size: 13) + | | | | n (abs: 66 , 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: 81 , rel: 0 , size: 91) +| /root//x/b | r | | root (abs: 45 , rel: 0 , size: 55) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 37 , rel: 8 , size: 45) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 0 , rel: 37 , size: 6) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | a (abs: 29 , rel: 8 , size: 31) + x (abs: 27 , rel: 7 , size: 24) +| | | | b (abs: 16 , rel: 13 , size: 17) + b (abs: 20 , rel: 7 , size: 17) +| | | | test3 (abs: 6 , rel: 10 , size: 10) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | d (abs: 23 , rel: 6 , size: 6) + a (abs: 65 , rel: 8 , size: 31) +| | | | b (abs: 52 , rel: 13 , size: 17) +| | | | test3 (abs: 42 , rel: 10 , size: 10) +| | | | d (abs: 59 , rel: 6 , size: 6) +| | | | | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x/b | b | | root (abs: 88 , rel: 0 , size: 98) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 80 , rel: 8 , size: 88) + c (abs: 34 , rel: 39 , size: 42) +| | | | c (abs: 41 , rel: 39 , size: 49) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 41 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 33 , rel: 8 , size: 31) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 10 , rel: 23 , size: 6) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 26 , rel: 7 , size: 17) + a (abs: 65 , rel: 8 , size: 31) +| | | | test2 (abs: 16 , rel: 10 , size: 10)+ b (abs: 52 , rel: 13 , size: 17) +| | | | a (abs: 72 , rel: 8 , size: 31) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | b (abs: 59 , rel: 13 , size: 17) + d (abs: 59 , rel: 6 , size: 6) +| | | | test3 (abs: 49 , rel: 10 , size: 10) + | | | | d (abs: 66 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x/b | a | | root (abs: 95 , rel: 0 , size: 105) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 86 , rel: 9 , size: 95) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 41 , rel: 45 , size: 49) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 41 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 33 , rel: 8 , size: 31) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 20 , rel: 13 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 65 , rel: 8 , size: 31) +| | | | b (abs: 27 , rel: 6 , size: 6) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 49 , rel: 37 , size: 6) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | a (abs: 78 , rel: 8 , size: 31) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 65 , rel: 13 , size: 17) + | | | | test3 (abs: 55 , rel: 10 , size: 10) + | | | | d (abs: 72 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x//b | r | | root (abs: 34 , rel: 0 , size: 44) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 26 , rel: 8 , size: 34) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 0 , rel: 26 , size: 6) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | a (abs: 18 , rel: 8 , size: 20) + x (abs: 27 , rel: 7 , size: 24) +| | | | b (abs: 6 , rel: 12 , size: 6) + b (abs: 20 , rel: 7 , size: 17) +| | | | d (abs: 12 , rel: 6 , size: 6) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | a (abs: 65 , rel: 8 , size: 31) +| | | | b (abs: 52 , rel: 13 , size: 17) +| | | | test3 (abs: 42 , rel: 10 , size: 10) +| | | | d (abs: 59 , rel: 6 , size: 6) +| | | | | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x//b | a | | root (abs: 102 , rel: 0 , size: 112) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 93 , rel: 9 , size: 102) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 41 , rel: 52 , size: 49) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 41 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 33 , rel: 8 , size: 31) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 20 , rel: 13 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 65 , rel: 8 , size: 31) +| | | | b (abs: 27 , rel: 6 , size: 6) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 49 , rel: 44 , size: 6) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | a (abs: 84 , rel: 9 , size: 38) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 65 , rel: 19 , size: 17) + | | | | test3 (abs: 55 , rel: 10 , size: 10) + | | | | b (abs: 72 , rel: 12 , size: 6) + | | | | d (abs: 78 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| //x//b | r | | root (abs: 34 , rel: 0 , size: 44) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 26 , rel: 8 , size: 34) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 0 , rel: 26 , size: 6) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | a (abs: 18 , rel: 8 , size: 20) + x (abs: 27 , rel: 7 , size: 24) +| | | | b (abs: 6 , rel: 12 , size: 6) + b (abs: 20 , rel: 7 , size: 17) +| | | | d (abs: 12 , rel: 6 , size: 6) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | a (abs: 65 , rel: 8 , size: 31) +| | | | b (abs: 52 , rel: 13 , size: 17) +| | | | test3 (abs: 42 , rel: 10 , size: 10) +| | | | d (abs: 59 , rel: 6 , size: 6) +| | | | | | | | root (abs: 81 , rel: 0 , size: 91) +| //x//b | a | | root (abs: 102 , rel: 0 , size: 112) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 93 , rel: 9 , size: 102) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 41 , rel: 52 , size: 49) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 41 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 33 , rel: 8 , size: 31) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 20 , rel: 13 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 65 , rel: 8 , size: 31) +| | | | b (abs: 27 , rel: 6 , size: 6) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 49 , rel: 44 , size: 6) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | a (abs: 84 , rel: 9 , size: 38) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 65 , rel: 19 , size: 17) + | | | | test3 (abs: 55 , rel: 10 , size: 10) + | | | | b (abs: 72 , rel: 12 , size: 6) + | | | | d (abs: 78 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x/b | i | | root (abs: 88 , rel: 0 , size: 98) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 80 , rel: 8 , size: 88) + c (abs: 34 , rel: 39 , size: 42) +| | | | c (abs: 41 , rel: 39 , size: 49) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 41 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 34 , rel: 7 , size: 31) + b (abs: 20 , rel: 7 , 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: 65 , rel: 8 , size: 31) +| | | | b (abs: 20 , rel: 6 , size: 6) + b (abs: 52 , rel: 13 , size: 17) +| | | | a (abs: 72 , rel: 8 , size: 31) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | b (abs: 59 , rel: 13 , size: 17) + d (abs: 59 , rel: 6 , size: 6) +| | | | test3 (abs: 49 , rel: 10 , size: 10) + | | | | d (abs: 66 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x//b | i | | root (abs: 102 , rel: 0 , size: 112) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 94 , rel: 8 , size: 102) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 47 , rel: 47 , size: 56) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 47 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 34 , rel: 13 , size: 31) + b (abs: 20 , rel: 7 , 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: 65 , rel: 8 , size: 31) +| | | | b (abs: 20 , rel: 6 , size: 6) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 41 , rel: 6 , size: 6) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | a (abs: 86 , rel: 8 , size: 38) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 72 , rel: 14 , size: 24) + | | | | test3 (abs: 56 , rel: 16 , size: 10) + | | | | b (abs: 66 , rel: 6 , size: 6) + | | | | d (abs: 80 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x//b | b | | root (abs: 95 , rel: 0 , size: 105) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 87 , rel: 8 , size: 95) + c (abs: 34 , rel: 39 , size: 42) +| | | | c (abs: 41 , rel: 46 , size: 49) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 41 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 33 , rel: 8 , size: 31) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 10 , rel: 23 , size: 6) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 26 , rel: 7 , size: 17) + a (abs: 65 , rel: 8 , size: 31) +| | | | test2 (abs: 16 , rel: 10 , size: 10)+ b (abs: 52 , rel: 13 , size: 17) +| | | | a (abs: 78 , rel: 9 , size: 38) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | b (abs: 49 , rel: 29 , size: 6) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 65 , rel: 13 , size: 17) + | | | | test3 (abs: 55 , rel: 10 , size: 10) + | | | | d (abs: 72 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| //x//b | b | | root (abs: 95 , rel: 0 , size: 105) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 87 , rel: 8 , size: 95) + c (abs: 34 , rel: 39 , size: 42) +| | | | c (abs: 41 , rel: 46 , size: 49) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 41 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 33 , rel: 8 , size: 31) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 10 , rel: 23 , size: 6) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 26 , rel: 7 , size: 17) + a (abs: 65 , rel: 8 , size: 31) +| | | | test2 (abs: 16 , rel: 10 , size: 10)+ b (abs: 52 , rel: 13 , size: 17) +| | | | a (abs: 78 , rel: 9 , size: 38) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | b (abs: 49 , rel: 29 , size: 6) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 65 , rel: 13 , size: 17) + | | | | test3 (abs: 55 , rel: 10 , size: 10) + | | | | d (abs: 72 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| //x//b | i | | root (abs: 102 , rel: 0 , size: 112) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 94 , rel: 8 , size: 102) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 47 , rel: 47 , size: 56) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 47 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 34 , rel: 13 , size: 31) + b (abs: 20 , rel: 7 , 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: 65 , rel: 8 , size: 31) +| | | | b (abs: 20 , rel: 6 , size: 6) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 41 , rel: 6 , size: 6) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | a (abs: 86 , rel: 8 , size: 38) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 72 , rel: 14 , size: 24) + | | | | test3 (abs: 56 , rel: 16 , size: 10) + | | | | b (abs: 66 , rel: 6 , size: 6) + | | | | d (abs: 80 , rel: 6 , size: 6) + | | | | root (abs: 62 , rel: 0 , size: 72) +| /root//x//b | i | | root (abs: 90 , rel: 0 , size: 100) + x (abs: 51 , rel: 11 , size: 62) +| | | | x (abs: 79 , rel: 11 , size: 90) + a (abs: 0 , rel: 51 , size: 6) +| | | | a (abs: 0 , rel: 79 , size: 6) + b (abs: 6 , rel: 45 , size: 6) +| | | | b (abs: 12 , rel: 67 , size: 13) + b (abs: 18 , rel: 33 , size: 13) +| | | | b (abs: 6 , rel: 6 , size: 6) + c (abs: 12 , rel: 6 , size: 6) +| | | | b (abs: 31 , rel: 48 , size: 20) + x (abs: 38 , rel: 13 , size: 20) +| | | | c (abs: 19 , rel: 12 , size: 6) + b (abs: 31 , rel: 7 , size: 13) +| | | | b (abs: 25 , rel: 6 , size: 6) + @i (abs: 25 , rel: 6 , size: 6) +| | | | x (abs: 59 , rel: 20 , size: 27) + b (abs: 45 , rel: 6 , size: 6) +| | | | b (abs: 51 , rel: 8 , size: 20) + | | | | @i (abs: 39 , rel: 12 , size: 6) + | | | | b (abs: 45 , rel: 6 , size: 6) + | | | | b (abs: 72 , rel: 7 , size: 13) + | | | | b (abs: 66 , 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: 81 , rel: 0 , size: 91) +| /root//x/b | r | | root (abs: 59 , rel: 0 , size: 69) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 51 , rel: 8 , size: 59) + b (abs: 34 , rel: 39 , size: 42) +| | | | x (abs: 13 , rel: 38 , size: 20) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | b (abs: 6 , rel: 7 , size: 13) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 0 , rel: 6 , size: 6) + b (abs: 20 , rel: 7 , size: 17) +| | | | a (abs: 43 , rel: 8 , size: 31) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 30 , rel: 13 , size: 17) + a (abs: 65 , rel: 8 , size: 31) +| | | | test3 (abs: 20 , rel: 10 , size: 10) + b (abs: 52 , rel: 13 , size: 17) +| | | | d (abs: 37 , rel: 6 , size: 6) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | d (abs: 59 , rel: 6 , size: 6) +| | | | | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x/b | b | | root (abs: 102 , rel: 0 , size: 112) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 94 , rel: 8 , size: 102) + c (abs: 34 , rel: 39 , size: 42) +| | | | c (abs: 55 , rel: 39 , size: 63) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 55 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 47 , rel: 8 , size: 45) + b (abs: 20 , rel: 7 , size: 17) +| | | | x (abs: 23 , rel: 24 , size: 20) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 16 , rel: 7 , size: 13) + a (abs: 65 , rel: 8 , size: 31) +| | | | x (abs: 10 , rel: 6 , size: 6) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 40 , rel: 7 , size: 17) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | test2 (abs: 30 , rel: 10 , size: 10)+ d (abs: 59 , rel: 6 , size: 6) +| | | | a (abs: 86 , rel: 8 , size: 31) + | | | | b (abs: 73 , rel: 13 , size: 17) + | | | | test3 (abs: 63 , rel: 10 , size: 10) + | | | | d (abs: 80 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x/b | a | | root (abs: 123 , rel: 0 , size: 133) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 114 , rel: 9 , size: 123) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 55 , rel: 59 , size: 63) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 55 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 47 , rel: 8 , size: 45) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 20 , rel: 27 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 65 , rel: 8 , size: 31) +| | | | x (abs: 40 , rel: 7 , size: 20) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 33 , rel: 7 , size: 13) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | x (abs: 27 , rel: 6 , size: 6) + d (abs: 59 , rel: 6 , size: 6) +| | | | x (abs: 76 , rel: 38 , size: 20) + | | | | b (abs: 69 , rel: 7 , size: 13) + | | | | x (abs: 63 , rel: 6 , size: 6) + | | | | a (abs: 106 , rel: 8 , size: 31) + | | | | b (abs: 93 , rel: 13 , size: 17) + | | | | test3 (abs: 83 , rel: 10 , size: 10) + | | | | d (abs: 100 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x//b | r | | root (abs: 62 , rel: 0 , size: 72) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 54 , rel: 8 , size: 62) + b (abs: 34 , rel: 39 , size: 42) +| | | | x (abs: 13 , rel: 41 , size: 20) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | b (abs: 6 , rel: 7 , size: 13) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 0 , rel: 6 , size: 6) + b (abs: 20 , rel: 7 , size: 17) +| | | | a (abs: 46 , rel: 8 , size: 34) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | x (abs: 33 , rel: 13 , size: 20) + a (abs: 65 , rel: 8 , size: 31) +| | | | b (abs: 26 , rel: 7 , size: 13) + b (abs: 52 , rel: 13 , size: 17) +| | | | x (abs: 20 , rel: 6 , size: 6) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | d (abs: 40 , rel: 6 , size: 6) + d (abs: 59 , rel: 6 , size: 6) +| | | | | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x//b | a | | root (abs: 144 , rel: 0 , size: 154) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 135 , rel: 9 , size: 144) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 55 , rel: 80 , size: 63) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 55 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 47 , rel: 8 , size: 45) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 20 , rel: 27 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 65 , rel: 8 , size: 31) +| | | | x (abs: 40 , rel: 7 , size: 20) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 33 , rel: 7 , size: 13) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | x (abs: 27 , rel: 6 , size: 6) + d (abs: 59 , rel: 6 , size: 6) +| | | | x (abs: 76 , rel: 59 , size: 20) + | | | | b (abs: 69 , rel: 7 , size: 13) + | | | | x (abs: 63 , rel: 6 , size: 6) + | | | | a (abs: 126 , rel: 9 , size: 52) + | | | | b (abs: 93 , rel: 33 , size: 17) + | | | | test3 (abs: 83 , rel: 10 , size: 10) + | | | | x (abs: 113 , rel: 13 , size: 20) + | | | | b (abs: 106 , rel: 7 , size: 13) + | | | | x (abs: 100 , rel: 6 , size: 6) + | | | | d (abs: 120 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| //x//b | r | | root (abs: 62 , rel: 0 , size: 72) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 54 , rel: 8 , size: 62) + b (abs: 34 , rel: 39 , size: 42) +| | | | x (abs: 13 , rel: 41 , size: 20) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | b (abs: 6 , rel: 7 , size: 13) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 0 , rel: 6 , size: 6) + b (abs: 20 , rel: 7 , size: 17) +| | | | a (abs: 46 , rel: 8 , size: 34) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | x (abs: 33 , rel: 13 , size: 20) + a (abs: 65 , rel: 8 , size: 31) +| | | | b (abs: 26 , rel: 7 , size: 13) + b (abs: 52 , rel: 13 , size: 17) +| | | | x (abs: 20 , rel: 6 , size: 6) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | d (abs: 40 , rel: 6 , size: 6) + d (abs: 59 , rel: 6 , size: 6) +| | | | | | | | root (abs: 81 , rel: 0 , size: 91) +| //x//b | a | | root (abs: 144 , rel: 0 , size: 154) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 135 , rel: 9 , size: 144) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 55 , rel: 80 , size: 63) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 55 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 47 , rel: 8 , size: 45) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 20 , rel: 27 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 65 , rel: 8 , size: 31) +| | | | x (abs: 40 , rel: 7 , size: 20) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 33 , rel: 7 , size: 13) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | x (abs: 27 , rel: 6 , size: 6) + d (abs: 59 , rel: 6 , size: 6) +| | | | x (abs: 76 , rel: 59 , size: 20) + | | | | b (abs: 69 , rel: 7 , size: 13) + | | | | x (abs: 63 , rel: 6 , size: 6) + | | | | a (abs: 126 , rel: 9 , size: 52) + | | | | b (abs: 93 , rel: 33 , size: 17) + | | | | test3 (abs: 83 , rel: 10 , size: 10) + | | | | x (abs: 113 , rel: 13 , size: 20) + | | | | b (abs: 106 , rel: 7 , size: 13) + | | | | x (abs: 100 , rel: 6 , size: 6) + | | | | d (abs: 120 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x/b | i | | root (abs: 102 , rel: 0 , size: 112) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 94 , rel: 8 , size: 102) + c (abs: 34 , rel: 39 , size: 42) +| | | | c (abs: 55 , rel: 39 , size: 63) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 55 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 48 , rel: 7 , size: 45) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 40 , rel: 8 , size: 38) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 30 , size: 10)+ a (abs: 65 , rel: 8 , size: 31) +| | | | x (abs: 33 , rel: 7 , size: 20) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 26 , rel: 7 , size: 13) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | x (abs: 20 , rel: 6 , size: 6) + d (abs: 59 , rel: 6 , size: 6) +| | | | a (abs: 86 , rel: 8 , size: 31) + | | | | b (abs: 73 , rel: 13 , size: 17) + | | | | test3 (abs: 63 , rel: 10 , size: 10) + | | | | d (abs: 80 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x//b | i | | root (abs: 144 , rel: 0 , size: 154) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 136 , rel: 8 , size: 144) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 75 , rel: 61 , size: 84) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 75 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 48 , rel: 27 , size: 45) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 40 , rel: 8 , size: 38) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 30 , size: 10)+ a (abs: 65 , rel: 8 , size: 31) +| | | | x (abs: 33 , rel: 7 , size: 20) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 26 , rel: 7 , size: 13) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | x (abs: 20 , rel: 6 , size: 6) + d (abs: 59 , rel: 6 , size: 6) +| | | | x (abs: 68 , rel: 7 , size: 20) + | | | | b (abs: 61 , rel: 7 , size: 13) + | | | | x (abs: 55 , rel: 6 , size: 6) + | | | | a (abs: 128 , rel: 8 , size: 52) + | | | | b (abs: 114 , rel: 14 , size: 38) + | | | | test3 (abs: 84 , rel: 30 , size: 10) + | | | | x (abs: 107 , rel: 7 , size: 20) + | | | | b (abs: 100 , rel: 7 , size: 13) + | | | | x (abs: 94 , rel: 6 , size: 6) + | | | | d (abs: 122 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x//b | b | | root (abs: 123 , rel: 0 , size: 133) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 115 , rel: 8 , size: 123) + c (abs: 34 , rel: 39 , size: 42) +| | | | c (abs: 55 , rel: 60 , size: 63) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 55 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 47 , rel: 8 , size: 45) + b (abs: 20 , rel: 7 , size: 17) +| | | | x (abs: 23 , rel: 24 , size: 20) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 16 , rel: 7 , size: 13) + a (abs: 65 , rel: 8 , size: 31) +| | | | x (abs: 10 , rel: 6 , size: 6) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 40 , rel: 7 , size: 17) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | test2 (abs: 30 , rel: 10 , size: 10)+ d (abs: 59 , rel: 6 , size: 6) +| | | | a (abs: 106 , rel: 9 , size: 52) + | | | | x (abs: 76 , rel: 30 , size: 20) + | | | | b (abs: 69 , rel: 7 , size: 13) + | | | | x (abs: 63 , rel: 6 , size: 6) + | | | | b (abs: 93 , rel: 13 , size: 17) + | | | | test3 (abs: 83 , rel: 10 , size: 10) + | | | | d (abs: 100 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| //x//b | b | | root (abs: 123 , rel: 0 , size: 133) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 115 , rel: 8 , size: 123) + c (abs: 34 , rel: 39 , size: 42) +| | | | c (abs: 55 , rel: 60 , size: 63) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 55 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 47 , rel: 8 , size: 45) + b (abs: 20 , rel: 7 , size: 17) +| | | | x (abs: 23 , rel: 24 , size: 20) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 16 , rel: 7 , size: 13) + a (abs: 65 , rel: 8 , size: 31) +| | | | x (abs: 10 , rel: 6 , size: 6) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 40 , rel: 7 , size: 17) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | test2 (abs: 30 , rel: 10 , size: 10)+ d (abs: 59 , rel: 6 , size: 6) +| | | | a (abs: 106 , rel: 9 , size: 52) + | | | | x (abs: 76 , rel: 30 , size: 20) + | | | | b (abs: 69 , rel: 7 , size: 13) + | | | | x (abs: 63 , rel: 6 , size: 6) + | | | | b (abs: 93 , rel: 13 , size: 17) + | | | | test3 (abs: 83 , rel: 10 , size: 10) + | | | | d (abs: 100 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| //x//b | i | | root (abs: 144 , rel: 0 , size: 154) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 136 , rel: 8 , size: 144) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 75 , rel: 61 , size: 84) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 75 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 48 , rel: 27 , size: 45) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 40 , rel: 8 , size: 38) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 30 , size: 10)+ a (abs: 65 , rel: 8 , size: 31) +| | | | x (abs: 33 , rel: 7 , size: 20) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 26 , rel: 7 , size: 13) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | x (abs: 20 , rel: 6 , size: 6) + d (abs: 59 , rel: 6 , size: 6) +| | | | x (abs: 68 , rel: 7 , size: 20) + | | | | b (abs: 61 , rel: 7 , size: 13) + | | | | x (abs: 55 , rel: 6 , size: 6) + | | | | a (abs: 128 , rel: 8 , size: 52) + | | | | b (abs: 114 , rel: 14 , size: 38) + | | | | test3 (abs: 84 , rel: 30 , size: 10) + | | | | x (abs: 107 , rel: 7 , size: 20) + | | | | b (abs: 100 , rel: 7 , size: 13) + | | | | x (abs: 94 , rel: 6 , size: 6) + | | | | d (abs: 122 , rel: 6 , size: 6) + | | | | root (abs: 62 , rel: 0 , size: 72) +| /root//x//b | i | | root (abs: 146 , rel: 0 , size: 156) + x (abs: 51 , rel: 11 , size: 62) +| | | | x (abs: 135 , rel: 11 , size: 146) + a (abs: 0 , rel: 51 , size: 6) +| | | | a (abs: 0 , rel: 135 , size: 6) + b (abs: 6 , rel: 45 , size: 6) +| | | | b (abs: 26 , rel: 109 , size: 27) + b (abs: 18 , rel: 33 , size: 13) +| | | | x (abs: 19 , rel: 7 , size: 20) + c (abs: 12 , rel: 6 , size: 6) +| | | | b (abs: 12 , rel: 7 , size: 13) + x (abs: 38 , rel: 13 , size: 20) +| | | | x (abs: 6 , rel: 6 , size: 6) + b (abs: 31 , rel: 7 , size: 13) +| | | | b (abs: 59 , rel: 76 , size: 34) + @i (abs: 25 , rel: 6 , size: 6) +| | | | c (abs: 33 , rel: 26 , size: 6) + b (abs: 45 , rel: 6 , size: 6) +| | | | x (abs: 52 , rel: 7 , size: 20) + | | | | b (abs: 45 , rel: 7 , size: 13) + | | | | x (abs: 39 , rel: 6 , size: 6) + | | | | x (abs: 101 , rel: 34 , size: 41) + | | | | b (abs: 93 , rel: 8 , size: 34) + | | | | @i (abs: 67 , rel: 26 , size: 6) + | | | | x (abs: 86 , rel: 7 , size: 20) + | | | | b (abs: 79 , rel: 7 , size: 13) + | | | | x (abs: 73 , rel: 6 , size: 6) + | | | | b (abs: 128 , rel: 7 , size: 27) + | | | | x (abs: 121 , rel: 7 , size: 20) + | | | | b (abs: 114 , rel: 7 , size: 13) + | | | | x (abs: 108 , 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: 81 , rel: 0 , size: 91) +| /root//x/b | r | | root (abs: 80 , rel: 0 , size: 90) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 71 , rel: 9 , size: 80) + b (abs: 34 , rel: 39 , size: 42) +| | | | x (abs: 13 , rel: 58 , size: 20) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | b (abs: 6 , rel: 7 , size: 13) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 0 , rel: 6 , size: 6) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 33 , rel: 38 , size: 20) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | x (abs: 26 , rel: 7 , size: 13) + a (abs: 65 , rel: 8 , size: 31) +| | | | b (abs: 20 , rel: 6 , size: 6) + b (abs: 52 , rel: 13 , size: 17) +| | | | a (abs: 63 , rel: 8 , size: 31) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | b (abs: 50 , rel: 13 , size: 17) + d (abs: 59 , rel: 6 , size: 6) +| | | | test3 (abs: 40 , rel: 10 , size: 10) + | | | | d (abs: 57 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x/b | b | | root (abs: 123 , rel: 0 , size: 133) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 115 , rel: 8 , size: 123) + c (abs: 34 , rel: 39 , size: 42) +| | | | c (abs: 76 , rel: 39 , size: 84) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 76 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 67 , rel: 9 , size: 66) + b (abs: 20 , rel: 7 , size: 17) +| | | | x (abs: 23 , rel: 44 , size: 20) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 16 , rel: 7 , size: 13) + a (abs: 65 , rel: 8 , size: 31) +| | | | x (abs: 10 , rel: 6 , size: 6) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 43 , rel: 24 , size: 20) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | x (abs: 36 , rel: 7 , size: 13) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 30 , rel: 6 , size: 6) + | | | | b (abs: 60 , rel: 7 , size: 17) + | | | | test2 (abs: 50 , rel: 10 , size: 10)+ | | | | a (abs: 107 , rel: 8 , size: 31) + | | | | b (abs: 94 , rel: 13 , size: 17) + | | | | test3 (abs: 84 , rel: 10 , size: 10) + | | | | d (abs: 101 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x/b | a | | root (abs: 165 , rel: 0 , size: 175) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 155 , rel: 10 , size: 165) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 76 , rel: 79 , size: 84) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 76 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 67 , rel: 9 , size: 66) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 20 , rel: 47 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 65 , rel: 8 , size: 31) +| | | | x (abs: 40 , rel: 27 , size: 20) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 33 , rel: 7 , size: 13) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | x (abs: 27 , rel: 6 , size: 6) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 60 , rel: 7 , size: 20) + | | | | x (abs: 53 , rel: 7 , size: 13) + | | | | b (abs: 47 , rel: 6 , size: 6) + | | | | x (abs: 97 , rel: 58 , size: 20) + | | | | b (abs: 90 , rel: 7 , size: 13) + | | | | x (abs: 84 , rel: 6 , size: 6) + | | | | b (abs: 117 , rel: 38 , size: 20) + | | | | x (abs: 110 , rel: 7 , size: 13) + | | | | b (abs: 104 , rel: 6 , size: 6) + | | | | a (abs: 147 , rel: 8 , size: 31) + | | | | b (abs: 134 , rel: 13 , size: 17) + | | | | test3 (abs: 124 , rel: 10 , size: 10)+ | | | | d (abs: 141 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x//b | r | | root (abs: 104 , rel: 0 , size: 114) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 95 , rel: 9 , size: 104) + b (abs: 34 , rel: 39 , size: 42) +| | | | x (abs: 13 , rel: 82 , size: 20) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | b (abs: 6 , rel: 7 , size: 13) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 0 , rel: 6 , size: 6) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 33 , rel: 62 , size: 20) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | x (abs: 26 , rel: 7 , size: 13) + a (abs: 65 , rel: 8 , size: 31) +| | | | b (abs: 20 , rel: 6 , size: 6) + b (abs: 52 , rel: 13 , size: 17) +| | | | a (abs: 86 , rel: 9 , size: 55) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | x (abs: 53 , rel: 33 , size: 20) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 46 , rel: 7 , size: 13) + | | | | x (abs: 40 , rel: 6 , size: 6) + | | | | b (abs: 73 , rel: 13 , size: 20) + | | | | x (abs: 66 , rel: 7 , size: 13) + | | | | b (abs: 60 , rel: 6 , size: 6) + | | | | d (abs: 80 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x//b | a | | root (abs: 207 , rel: 0 , size: 217) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 197 , rel: 10 , size: 207) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 76 , rel: 121 , size: 84) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 76 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 67 , rel: 9 , size: 66) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 20 , rel: 47 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 65 , rel: 8 , size: 31) +| | | | x (abs: 40 , rel: 27 , size: 20) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 33 , rel: 7 , size: 13) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | x (abs: 27 , rel: 6 , size: 6) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 60 , rel: 7 , size: 20) + | | | | x (abs: 53 , rel: 7 , size: 13) + | | | | b (abs: 47 , rel: 6 , size: 6) + | | | | x (abs: 97 , rel: 100 , size: 20) + | | | | b (abs: 90 , rel: 7 , size: 13) + | | | | x (abs: 84 , rel: 6 , size: 6) + | | | | b (abs: 117 , rel: 80 , size: 20) + | | | | x (abs: 110 , rel: 7 , size: 13) + | | | | b (abs: 104 , rel: 6 , size: 6) + | | | | a (abs: 187 , rel: 10 , size: 73) + | | | | b (abs: 134 , rel: 53 , size: 17) + | | | | test3 (abs: 124 , rel: 10 , size: 10)+ | | | | x (abs: 154 , rel: 33 , size: 20) + | | | | b (abs: 147 , rel: 7 , size: 13) + | | | | x (abs: 141 , rel: 6 , size: 6) + | | | | b (abs: 174 , rel: 13 , size: 20) + | | | | x (abs: 167 , rel: 7 , size: 13) + | | | | b (abs: 161 , rel: 6 , size: 6) + | | | | d (abs: 181 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| //x//b | r | | root (abs: 104 , rel: 0 , size: 114) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 95 , rel: 9 , size: 104) + b (abs: 34 , rel: 39 , size: 42) +| | | | x (abs: 13 , rel: 82 , size: 20) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | b (abs: 6 , rel: 7 , size: 13) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 0 , rel: 6 , size: 6) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 33 , rel: 62 , size: 20) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | x (abs: 26 , rel: 7 , size: 13) + a (abs: 65 , rel: 8 , size: 31) +| | | | b (abs: 20 , rel: 6 , size: 6) + b (abs: 52 , rel: 13 , size: 17) +| | | | a (abs: 86 , rel: 9 , size: 55) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | x (abs: 53 , rel: 33 , size: 20) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 46 , rel: 7 , size: 13) + | | | | x (abs: 40 , rel: 6 , size: 6) + | | | | b (abs: 73 , rel: 13 , size: 20) + | | | | x (abs: 66 , rel: 7 , size: 13) + | | | | b (abs: 60 , rel: 6 , size: 6) + | | | | d (abs: 80 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| //x//b | a | | root (abs: 207 , rel: 0 , size: 217) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 197 , rel: 10 , size: 207) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 76 , rel: 121 , size: 84) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 76 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 67 , rel: 9 , size: 66) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 20 , rel: 47 , size: 17) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 10 , size: 10)+ a (abs: 65 , rel: 8 , size: 31) +| | | | x (abs: 40 , rel: 27 , size: 20) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 33 , rel: 7 , size: 13) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | x (abs: 27 , rel: 6 , size: 6) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 60 , rel: 7 , size: 20) + | | | | x (abs: 53 , rel: 7 , size: 13) + | | | | b (abs: 47 , rel: 6 , size: 6) + | | | | x (abs: 97 , rel: 100 , size: 20) + | | | | b (abs: 90 , rel: 7 , size: 13) + | | | | x (abs: 84 , rel: 6 , size: 6) + | | | | b (abs: 117 , rel: 80 , size: 20) + | | | | x (abs: 110 , rel: 7 , size: 13) + | | | | b (abs: 104 , rel: 6 , size: 6) + | | | | a (abs: 187 , rel: 10 , size: 73) + | | | | b (abs: 134 , rel: 53 , size: 17) + | | | | test3 (abs: 124 , rel: 10 , size: 10)+ | | | | x (abs: 154 , rel: 33 , size: 20) + | | | | b (abs: 147 , rel: 7 , size: 13) + | | | | x (abs: 141 , rel: 6 , size: 6) + | | | | b (abs: 174 , rel: 13 , size: 20) + | | | | x (abs: 167 , rel: 7 , size: 13) + | | | | b (abs: 161 , rel: 6 , size: 6) + | | | | d (abs: 181 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x/b | i | | root (abs: 123 , rel: 0 , size: 133) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 115 , rel: 8 , size: 123) + c (abs: 34 , rel: 39 , size: 42) +| | | | c (abs: 76 , rel: 39 , size: 84) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 76 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 69 , rel: 7 , size: 66) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 60 , rel: 9 , size: 59) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 50 , size: 10)+ a (abs: 65 , rel: 8 , size: 31) +| | | | x (abs: 33 , rel: 27 , size: 20) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 26 , rel: 7 , size: 13) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | x (abs: 20 , rel: 6 , size: 6) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 53 , rel: 7 , size: 20) + | | | | x (abs: 46 , rel: 7 , size: 13) + | | | | b (abs: 40 , rel: 6 , size: 6) + | | | | a (abs: 107 , rel: 8 , size: 31) + | | | | b (abs: 94 , rel: 13 , size: 17) + | | | | test3 (abs: 84 , rel: 10 , size: 10) + | | | | d (abs: 101 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x//b | i | | root (abs: 207 , rel: 0 , size: 217) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 199 , rel: 8 , size: 207) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 116 , rel: 83 , size: 126) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 116 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 69 , rel: 47 , size: 66) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 60 , rel: 9 , size: 59) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 50 , size: 10)+ a (abs: 65 , rel: 8 , size: 31) +| | | | x (abs: 33 , rel: 27 , size: 20) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 26 , rel: 7 , size: 13) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | x (abs: 20 , rel: 6 , size: 6) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 53 , rel: 7 , size: 20) + | | | | x (abs: 46 , rel: 7 , size: 13) + | | | | b (abs: 40 , rel: 6 , size: 6) + | | | | x (abs: 89 , rel: 27 , size: 20) + | | | | b (abs: 82 , rel: 7 , size: 13) + | | | | x (abs: 76 , rel: 6 , size: 6) + | | | | b (abs: 109 , rel: 7 , size: 20) + | | | | x (abs: 102 , rel: 7 , size: 13) + | | | | b (abs: 96 , rel: 6 , size: 6) + | | | | a (abs: 191 , rel: 8 , size: 73) + | | | | b (abs: 176 , rel: 15 , size: 59) + | | | | test3 (abs: 126 , rel: 50 , size: 10)+ | | | | x (abs: 149 , rel: 27 , size: 20) + | | | | b (abs: 142 , rel: 7 , size: 13) + | | | | x (abs: 136 , rel: 6 , size: 6) + | | | | b (abs: 169 , rel: 7 , size: 20) + | | | | x (abs: 162 , rel: 7 , size: 13) + | | | | b (abs: 156 , rel: 6 , size: 6) + | | | | d (abs: 185 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x//b | b | | root (abs: 165 , rel: 0 , size: 175) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 157 , rel: 8 , size: 165) + c (abs: 34 , rel: 39 , size: 42) +| | | | c (abs: 76 , rel: 81 , size: 84) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 76 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 67 , rel: 9 , size: 66) + b (abs: 20 , rel: 7 , size: 17) +| | | | x (abs: 23 , rel: 44 , size: 20) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 16 , rel: 7 , size: 13) + a (abs: 65 , rel: 8 , size: 31) +| | | | x (abs: 10 , rel: 6 , size: 6) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 43 , rel: 24 , size: 20) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | x (abs: 36 , rel: 7 , size: 13) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 30 , rel: 6 , size: 6) + | | | | b (abs: 60 , rel: 7 , size: 17) + | | | | test2 (abs: 50 , rel: 10 , size: 10)+ | | | | a (abs: 147 , rel: 10 , size: 73) + | | | | x (abs: 97 , rel: 50 , size: 20) + | | | | b (abs: 90 , rel: 7 , size: 13) + | | | | x (abs: 84 , rel: 6 , size: 6) + | | | | b (abs: 117 , rel: 30 , size: 20) + | | | | x (abs: 110 , rel: 7 , size: 13) + | | | | b (abs: 104 , rel: 6 , size: 6) + | | | | b (abs: 134 , rel: 13 , size: 17) + | | | | test3 (abs: 124 , rel: 10 , size: 10)+ | | | | d (abs: 141 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| //x//b | b | | root (abs: 165 , rel: 0 , size: 175) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 157 , rel: 8 , size: 165) + c (abs: 34 , rel: 39 , size: 42) +| | | | c (abs: 76 , rel: 81 , size: 84) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 76 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 67 , rel: 9 , size: 66) + b (abs: 20 , rel: 7 , size: 17) +| | | | x (abs: 23 , rel: 44 , size: 20) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | b (abs: 16 , rel: 7 , size: 13) + a (abs: 65 , rel: 8 , size: 31) +| | | | x (abs: 10 , rel: 6 , size: 6) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 43 , rel: 24 , size: 20) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | x (abs: 36 , rel: 7 , size: 13) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 30 , rel: 6 , size: 6) + | | | | b (abs: 60 , rel: 7 , size: 17) + | | | | test2 (abs: 50 , rel: 10 , size: 10)+ | | | | a (abs: 147 , rel: 10 , size: 73) + | | | | x (abs: 97 , rel: 50 , size: 20) + | | | | b (abs: 90 , rel: 7 , size: 13) + | | | | x (abs: 84 , rel: 6 , size: 6) + | | | | b (abs: 117 , rel: 30 , size: 20) + | | | | x (abs: 110 , rel: 7 , size: 13) + | | | | b (abs: 104 , rel: 6 , size: 6) + | | | | b (abs: 134 , rel: 13 , size: 17) + | | | | test3 (abs: 124 , rel: 10 , size: 10)+ | | | | d (abs: 141 , rel: 6 , size: 6) + | | | | root (abs: 81 , rel: 0 , size: 91) +| //x//b | i | | root (abs: 207 , rel: 0 , size: 217) + x (abs: 73 , rel: 8 , size: 81) +| | | | x (abs: 199 , rel: 8 , size: 207) + b (abs: 34 , rel: 39 , size: 42) +| | | | b (abs: 116 , rel: 83 , size: 126) + test1 (abs: 0 , rel: 34 , size: 10) +| | | | test1 (abs: 0 , rel: 116 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | | | x (abs: 69 , rel: 47 , size: 66) + b (abs: 20 , rel: 7 , size: 17) +| | | | b (abs: 60 , rel: 9 , size: 59) + test2 (abs: 10 , rel: 10 , size: 10)+| | | | test2 (abs: 10 , rel: 50 , size: 10)+ a (abs: 65 , rel: 8 , size: 31) +| | | | x (abs: 33 , rel: 27 , size: 20) + b (abs: 52 , rel: 13 , size: 17) +| | | | b (abs: 26 , rel: 7 , size: 13) + test3 (abs: 42 , rel: 10 , size: 10) +| | | | x (abs: 20 , rel: 6 , size: 6) + d (abs: 59 , rel: 6 , size: 6) +| | | | b (abs: 53 , rel: 7 , size: 20) + | | | | x (abs: 46 , rel: 7 , size: 13) + | | | | b (abs: 40 , rel: 6 , size: 6) + | | | | x (abs: 89 , rel: 27 , size: 20) + | | | | b (abs: 82 , rel: 7 , size: 13) + | | | | x (abs: 76 , rel: 6 , size: 6) + | | | | b (abs: 109 , rel: 7 , size: 20) + | | | | x (abs: 102 , rel: 7 , size: 13) + | | | | b (abs: 96 , rel: 6 , size: 6) + | | | | a (abs: 191 , rel: 8 , size: 73) + | | | | b (abs: 176 , rel: 15 , size: 59) + | | | | test3 (abs: 126 , rel: 50 , size: 10)+ | | | | x (abs: 149 , rel: 27 , size: 20) + | | | | b (abs: 142 , rel: 7 , size: 13) + | | | | x (abs: 136 , rel: 6 , size: 6) + | | | | b (abs: 169 , rel: 7 , size: 20) + | | | | x (abs: 162 , rel: 7 , size: 13) + | | | | b (abs: 156 , rel: 6 , size: 6) + | | | | d (abs: 185 , rel: 6 , size: 6) + | | | | root (abs: 62 , rel: 0 , size: 72) +| /root//x//b | i | | root (abs: 230 , rel: 0 , size: 240) + x (abs: 51 , rel: 11 , size: 62) +| | | | x (abs: 219 , rel: 11 , size: 230) + a (abs: 0 , rel: 51 , size: 6) +| | | | a (abs: 0 , rel: 219 , size: 6) + b (abs: 6 , rel: 45 , size: 6) +| | | | b (abs: 46 , rel: 173 , size: 48) + b (abs: 18 , rel: 33 , size: 13) +| | | | x (abs: 19 , rel: 27 , size: 20) + c (abs: 12 , rel: 6 , size: 6) +| | | | b (abs: 12 , rel: 7 , size: 13) + x (abs: 38 , rel: 13 , size: 20) +| | | | x (abs: 6 , rel: 6 , size: 6) + b (abs: 31 , rel: 7 , size: 13) +| | | | b (abs: 39 , rel: 7 , size: 20) + @i (abs: 25 , rel: 6 , size: 6) +| | | | x (abs: 32 , rel: 7 , size: 13) + b (abs: 45 , rel: 6 , size: 6) +| | | | b (abs: 26 , rel: 6 , size: 6) + | | | | b (abs: 100 , rel: 119 , size: 55) + | | | | c (abs: 54 , rel: 46 , size: 6) + | | | | x (abs: 73 , rel: 27 , size: 20) + | | | | b (abs: 66 , rel: 7 , size: 13) + | | | | x (abs: 60 , rel: 6 , size: 6) + | | | | b (abs: 93 , rel: 7 , size: 20) + | | | | x (abs: 86 , rel: 7 , size: 13) + | | | | b (abs: 80 , rel: 6 , size: 6) + | | | | x (abs: 164 , rel: 55 , size: 62) + | | | | b (abs: 155 , rel: 9 , size: 55) + | | | | @i (abs: 109 , rel: 46 , size: 6) + | | | | x (abs: 128 , rel: 27 , size: 20) + | | | | b (abs: 121 , rel: 7 , size: 13) + | | | | x (abs: 115 , rel: 6 , size: 6) + | | | | b (abs: 148 , rel: 7 , size: 20) + | | | | x (abs: 141 , rel: 7 , size: 13) + | | | | b (abs: 135 , rel: 6 , size: 6) + | | | | b (abs: 211 , rel: 8 , size: 48) + | | | | x (abs: 184 , rel: 27 , size: 20) + | | | | b (abs: 177 , rel: 7 , size: 13) + | | | | x (abs: 171 , rel: 6 , size: 6) + | | | | b (abs: 204 , rel: 7 , size: 20) + | | | | x (abs: 197 , rel: 7 , size: 13) + | | | | b (abs: 191 , 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: 81 , rel: 0 , size: 91) +| /root/x/b | root (abs: 38 , rel: 0 , size: 48) + x (abs: 73 , rel: 8 , size: 81) +| | x (abs: 31 , rel: 7 , size: 38) + b (abs: 34 , rel: 39 , size: 42) +| | a (abs: 23 , rel: 8 , size: 31) + test1 (abs: 0 , rel: 34 , size: 10) +| | b (abs: 10 , rel: 13 , size: 17) + x (abs: 27 , rel: 7 , size: 24) +| | test3 (abs: 0 , rel: 10 , size: 10) + b (abs: 20 , rel: 7 , size: 17) +| | d (abs: 17 , rel: 6 , size: 6) + test2 (abs: 10 , rel: 10 , size: 10)+| | a (abs: 65 , rel: 8 , size: 31) +| | b (abs: 52 , rel: 13 , size: 17) +| | test3 (abs: 42 , rel: 10 , size: 10) +| | d (abs: 59 , rel: 6 , size: 6) +| | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x/b | root (abs: 38 , rel: 0 , size: 48) + x (abs: 73 , rel: 8 , size: 81) +| | x (abs: 31 , rel: 7 , size: 38) + b (abs: 34 , rel: 39 , size: 42) +| | a (abs: 23 , rel: 8 , size: 31) + test1 (abs: 0 , rel: 34 , size: 10) +| | b (abs: 10 , rel: 13 , size: 17) + x (abs: 27 , rel: 7 , size: 24) +| | test3 (abs: 0 , rel: 10 , size: 10) + b (abs: 20 , rel: 7 , size: 17) +| | d (abs: 17 , rel: 6 , size: 6) + test2 (abs: 10 , rel: 10 , size: 10)+| | a (abs: 65 , rel: 8 , size: 31) +| | b (abs: 52 , rel: 13 , size: 17) +| | test3 (abs: 42 , rel: 10 , size: 10) +| | d (abs: 59 , rel: 6 , size: 6) +| | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x/b | root (abs: 63 , rel: 0 , size: 73) + x (abs: 73 , rel: 8 , size: 81) +| | x (abs: 55 , rel: 8 , size: 63) + c (abs: 34 , rel: 39 , size: 42) +| | c (abs: 16 , rel: 39 , size: 24) + test1 (abs: 0 , rel: 34 , size: 10) +| | test1 (abs: 0 , rel: 16 , size: 10) + x (abs: 27 , rel: 7 , size: 24) +| | x (abs: 10 , rel: 6 , size: 6) + b (abs: 20 , rel: 7 , size: 17) +| | a (abs: 47 , rel: 8 , size: 31) + test2 (abs: 10 , rel: 10 , size: 10)+| | b (abs: 34 , rel: 13 , size: 17) + a (abs: 65 , rel: 8 , size: 31) +| | test3 (abs: 24 , rel: 10 , size: 10)+ b (abs: 52 , rel: 13 , size: 17) +| | d (abs: 41 , rel: 6 , size: 6) + test3 (abs: 42 , rel: 10 , size: 10) +| | d (abs: 59 , rel: 6 , size: 6) +| | | | root (abs: 81 , rel: 0 , size: 91) +| /root//x//b | root (abs: 38 , rel: 0 , size: 48) + x (abs: 72 , rel: 9 , size: 81) +| | x (abs: 30 , rel: 8 , size: 38) + c (abs: 27 , rel: 45 , size: 35) +| | c (abs: 10 , rel: 20 , size: 17) + test1 (abs: 0 , rel: 27 , size: 10) +| | test1 (abs: 0 , rel: 10 , size: 10) + b (abs: 20 , rel: 7 , size: 17) +| | a (abs: 23 , rel: 7 , size: 13) + test2 (abs: 10 , rel: 10 , size: 10) +| | d (abs: 17 , rel: 6 , size: 6) + a (abs: 58 , rel: 14 , size: 31) +| | b (abs: 45 , rel: 13 , size: 17) +| | test3 (abs: 35 , rel: 10 , size: 10) +| | d (abs: 52 , rel: 6 , size: 6) +| | b (abs: 66 , rel: 6 , size: 6) +| | | | root (abs: 88 , rel: 0 , size: 98) +| /root//x//b | root (abs: 38 , rel: 0 , size: 48) + x (abs: 78 , rel: 10 , size: 88) +| | x (abs: 30 , rel: 8 , size: 38) + c (abs: 27 , rel: 51 , size: 35) +| | c (abs: 10 , rel: 20 , size: 17) + test1 (abs: 0 , rel: 27 , size: 10) +| | test1 (abs: 0 , rel: 10 , size: 10) + b (abs: 20 , rel: 7 , size: 17) +| | a (abs: 23 , rel: 7 , size: 13) + test2 (abs: 10 , rel: 10 , size: 10) +| | d (abs: 17 , rel: 6 , size: 6) + a (abs: 58 , rel: 20 , size: 31) +| | b (abs: 45 , rel: 13 , size: 17) +| | test3 (abs: 35 , rel: 10 , size: 10) +| | d (abs: 52 , rel: 6 , size: 6) +| | b (abs: 66 , rel: 12 , size: 6) +| | b (abs: 72 , rel: 6 , size: 6) +| | | | root (abs: 95 , rel: 0 , size: 105) +| /root//x//b | root (abs: 38 , rel: 0 , size: 48) + x (abs: 85 , rel: 10 , size: 95) +| | x (abs: 30 , rel: 8 , size: 38) + c (abs: 27 , rel: 58 , size: 35) +| | c (abs: 10 , rel: 20 , size: 17) + test1 (abs: 0 , rel: 27 , size: 10) +| | test1 (abs: 0 , rel: 10 , size: 10) + b (abs: 20 , rel: 7 , size: 17) +| | a (abs: 23 , rel: 7 , size: 13) + test2 (abs: 10 , rel: 10 , size: 10) +| | d (abs: 17 , rel: 6 , size: 6) + a (abs: 58 , rel: 27 , size: 31) +| | b (abs: 45 , rel: 13 , size: 17) +| | test3 (abs: 35 , rel: 10 , size: 10) +| | d (abs: 52 , rel: 6 , size: 6) +| | b (abs: 72 , rel: 13 , size: 13) +| | @i (abs: 66 , rel: 6 , size: 6) +| | b (abs: 79 , rel: 6 , size: 6) +| | | | root (abs: 102 , rel: 0 , size: 112) +| /root//x//b | root (abs: 38 , rel: 0 , size: 48) + x (abs: 92 , rel: 10 , size: 102) +| | x (abs: 30 , rel: 8 , size: 38) + c (abs: 27 , rel: 65 , size: 35) +| | c (abs: 10 , rel: 20 , size: 17) + test1 (abs: 0 , rel: 27 , size: 10) +| | test1 (abs: 0 , rel: 10 , size: 10) + b (abs: 20 , rel: 7 , size: 17) +| | a (abs: 23 , rel: 7 , size: 13) + test2 (abs: 10 , rel: 10 , size: 10) +| | d (abs: 17 , rel: 6 , size: 6) + a (abs: 58 , rel: 34 , size: 31) +| | b (abs: 45 , rel: 13 , size: 17) +| | test3 (abs: 35 , rel: 10 , size: 10) +| | d (abs: 52 , rel: 6 , size: 6) +| | b (abs: 72 , rel: 20 , size: 13) +| | @i (abs: 66 , rel: 6 , size: 6) +| | b (abs: 85 , rel: 7 , size: 13) +| | @i (abs: 79 , rel: 6 , size: 6) +| | | | root (abs: 102 , rel: 0 , size: 112) +| /root//x//b | root (abs: 38 , rel: 0 , size: 48) + x (abs: 92 , rel: 10 , size: 102) +| | x (abs: 30 , rel: 8 , size: 38) + c (abs: 27 , rel: 65 , size: 35) +| | c (abs: 10 , rel: 20 , size: 17) + test1 (abs: 0 , rel: 27 , size: 10) +| | test1 (abs: 0 , rel: 10 , size: 10) + b (abs: 20 , rel: 7 , size: 17) +| | a (abs: 23 , rel: 7 , size: 13) + test2 (abs: 10 , rel: 10 , size: 10) +| | d (abs: 17 , rel: 6 , size: 6) + a (abs: 58 , rel: 34 , size: 31) +| | b (abs: 45 , rel: 13 , size: 17) +| | test3 (abs: 35 , rel: 10 , size: 10) +| | d (abs: 52 , rel: 6 , size: 6) +| | b (abs: 72 , rel: 20 , size: 13) +| | c (abs: 66 , rel: 6 , size: 6) +| | b (abs: 85 , rel: 7 , size: 13) +| | c (abs: 79 , rel: 6 , size: 6) +| | | | a (abs: 42 , rel: 0 , size: 50) +| /a/b//@id | a (abs: 26 , rel: 0 , size: 34) + b (abs: 13 , rel: 29 , size: 21) +| | b (abs: 6 , rel: 20 , size: 13) + @d (abs: 0 , rel: 13 , size: 6) +| | @d (abs: 0 , rel: 6 , size: 6) + @id (abs: 6 , rel: 7 , size: 7) +| | b (abs: 19 , rel: 7 , size: 13) + b (abs: 34 , rel: 8 , size: 21) +| | @d (abs: 13 , rel: 6 , size: 6) + @d (abs: 21 , rel: 13 , size: 6) +| | @id (abs: 27 , rel: 7 , size: 7) +| | | | a (abs: 42 , rel: 0 , size: 50) +| //@id | a (abs: 26 , rel: 0 , size: 34) + b (abs: 13 , rel: 29 , size: 21) +| | b (abs: 6 , rel: 20 , size: 13) + @d (abs: 0 , rel: 13 , size: 6) +| | @d (abs: 0 , rel: 6 , size: 6) + @id (abs: 6 , rel: 7 , size: 7) +| | b (abs: 19 , rel: 7 , size: 13) + b (abs: 34 , rel: 8 , size: 21) +| | @d (abs: 13 , rel: 6 , size: 6) + @d (abs: 21 , rel: 13 , size: 6) +| | @id (abs: 27 , rel: 7 , size: 7) +| | | | a (abs: 42 , rel: 0 , size: 50) +| //@* | a (abs: 12 , rel: 0 , size: 20) + b (abs: 13 , rel: 29 , size: 21) +| | b (abs: 0 , rel: 12 , size: 6) + @d (abs: 0 , rel: 13 , size: 6) +| | b (abs: 6 , rel: 6 , size: 6) + @id (abs: 6 , rel: 7 , size: 7) +| | b (abs: 34 , rel: 8 , size: 21) +| | @d (abs: 21 , rel: 13 , size: 6) +| | @id (abs: 27 , rel: 7 , size: 7) +| | | | (11 rows) drop table a; select xml.remove('', '/a/b/c'); remove ----------------- (1 row)