Oh really? So any variables that I set within the function were being overwritten at every iteration by the next instance of the function?
>>> [EMAIL PROTECTED] 02/12/03 10:15AM >>> I bet you forgot to var scope your variables in the CFC. Custom tags variables are protected by default - values in a CFC method must be protected explicitely(sp) using the var scope declaration. ======================================================================= Raymond Camden, ColdFusion Jedi Master for Mindseye, Inc Email : [EMAIL PROTECTED] WWW : www.camdenfamily.com/morpheus Yahoo IM : morpheus "My ally is the Force, and a powerful ally it is." - Yoda > -----Original Message----- > From: Willy Ray [mailto:[EMAIL PROTECTED]] > Sent: Wednesday, February 12, 2003 11:03 AM > To: CF-Talk > Subject: CFC vs. Customtag Surprise: Recursion > > > Ok, > > my database table for storing my content is a big tree, set > up like this id ----- label ----- parentid 1 ---- 'myweb' > ---- 0 2 ------ 'links' -------1 3 ----- 'portfolio' ---1 4 > ----- 'firstlink' ---- 2 > > Make sense? Every row has it's own Id, and the ID of its > parent, and from this I get a big branching tree structure to > hold the data. I'm presented with this problem where I have > to take a branch of the tree and make an exact copy of it > within the database. The relationships have to be all the > same, but all new ids. A copy of the 'myweb' node from the > example above looks like this: > > id ----- label ----- parentid > 1 ---- 'myweb' ---- 0 > 2 ------ 'links' -------1 > 3 ----- 'portfolio' ---1 > 4 ----- 'firstlink' ---- 2 > 5 ---- 'myweb' ---- 0 > 6 ------ 'links' -------5 > 7 ----- 'portfolio' ---5 > 8 ----- 'firstlink' ---- 6 > > I'm thinking, excellent opportunity to go nuts with CFCs, > and write some recursion, right? Wrong. Here's what > happened (pseudo-code): > > 1.Create a function named replicate: > > 2.Takes two arguments: NodeToDuplicate, and ParentOfNewNode. > > 3.Selects everything from the table where id = nodeToDuplicate > > 4.Inserts the data from previous query with parentid = > arguments.ParentOfNewNode (this re-creates the node, with a > parent that > *I've* specified when I invoke the function) > > 5.Selects the MAX(id) from the table WHERE label = > 'thelabelIGotFromTheFirstQuery', sets that to NewNodeId > > 6.Selects all the ids WHERE parentid = NodeToDuplicate (this > gets all children of the current node) call it qGetChildren > > 7.Loop over qGetChildren > Re-invoke the replicate function from within itself for > every child of the current node. > NodeToDuplicate = qGetChildren.id > ParentOfNewNode = NewNodeId (the id of the newly > replicated node in step 4) > /loop > > Ok. let that soak in. Should work, right? Right. I > thought so too. > It fails hard. Gets off-track fast. I go through the logs > of what it did (after I reboot the web AND database server) > and it's getting down to the first node that has no > children... Then looping back to the top of the whole > structure, and looping trying to duplicate nodes that have no > relationship to the node I'm trying to duplicate, then it > gets into a loop where it's running down the left-hand side > of the tree from top to bottom over and over until the > house-of-cards comes crashing down, and I've killed the server. > > I'm thinking, 'It's in the logic. My recursion is bad'. > Spend about a week on the above 7 points. On a whim, > re-encapsulate THE EXACT SAME LOGIC as above into a Custom > Tag. Works like a freakin' charm. > > So, what's the difference? The CFCs are creating multiple > threads, and getting out of sync with the database returns? > Trying to process the next iteration before it's gotten the > return from the database, whereas the custom tag is running > more procedurally? Or what? > > Any thoughts? I'm happy to supply the actual code to anybody > who's interested. > > Willy > > > > > > ----- > Willy Ray > Web Applications Developer > Certified Advanced ColdFusion Developer > Westminster College > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| Archives: http://www.houseoffusion.com/cf_lists/index.cfm?forumid=4 Subscription: http://www.houseoffusion.com/cf_lists/index.cfm?method=subscribe&forumid=4 FAQ: http://www.thenetprofits.co.uk/coldfusion/faq Signup for the Fusion Authority news alert and keep up with the latest news in ColdFusion and related topics. http://www.fusionauthority.com/signup.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4