On Thu, 26 Sep 2002 16:32:08 -0700 Joe Conway <[EMAIL PROTECTED]> wrote:
> Masaru Sugawara wrote: > > The previous patch fixed an infinite recursion bug in > > contrib/tablefunc/tablefunc.c:connectby. But, other unmanageable error > > seems to occur even if a table has commonplace tree data(see below). > > > > I would think the patch, ancestor check, should be > > > > if (strstr(branch_delim || branchstr->data || branch_delim, > > branch_delim || current_key || branch_delim)) > > > > This is my image, not a real code. However, if branchstr->data includes > > branch_delim, my image will not be perfect. > > Good point. Thank you Masaru for the suggested fix. > > Attached is a patch to fix the bug found by Masaru. His example now produces: > > regression=# SELECT * FROM connectby('connectby_tree', 'keyid', > 'parent_keyid', '11', 0, '-') AS t(keyid int, parent_keyid int, level int, > branch text); > keyid | parent_keyid | level | branch > -------+--------------+-------+---------- > 11 | | 0 | 11 > 10 | 11 | 1 | 11-10 > 111 | 11 | 1 | 11-111 > 1 | 111 | 2 | 11-111-1 > (4 rows) > > While making the patch I also realized that the "no show branch" form of the > function was not going to work very well for recursion detection. Therefore > there is now a default branch delimiter ('~') that is used internally, for > that case, to enable recursion detection to work. If you need a different > delimiter for your specific data, you will have to use the "show branch" form > of the function. > > If there are no objections, please apply. Thanks, I have no objection to your internally adding strings to detect a recursion. And I agree with your definition--the default delimiter is a tilde. Thanks a lot. Regards, Masaru Sugawara ---------------------------(end of broadcast)--------------------------- TIP 6: Have you searched our list archives? http://archives.postgresql.org