Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.rootUpdates.multiRootUpdate
on multiRootUpdate (rootNamesList) {
<<Monday, November 15, 1999 at 11:55:21 PM by AR
<<Don't call this verb directly, use rootUpdates.threadedMultiRootUpdate as a wrapper instead
<<rootNamesList is supposed to be a list of strings which are names of entries in user.databases.
<<The actual work is done in another thread, one root at a time. We don't return until all updates have completed.
on threadedCall (routinename, param) {
<<We can't use thread.easyCall because it doesn't return a thread ID.
param = string.replaceAll (param, "\\", "\\\\");
param = string.replaceAll (param, "\"", "\\\"");
local (s = routinename + " (\"" + param + "\", flQuietMode:true)");
return (thread.evaluate (s))};
local (rootName, id, adrRoot, adrScript);
for rootName in list (rootNamesList) {
msg (string (this) + ": Updating " + rootName);
if string.lower (rootName) == "frontier.root" {
adrRoot = @root}
else {
adrRoot = @[user.databases.[rootName].f]};
table.sureDatabaseOpen (adrRoot);
adrScript = table.copy (@rootUpdates.update, @system.temp);
id = threadedCall (adrScript, adrRoot);
while thread.exists (id) {
thread.sleepFor (5)}};
msg ("");
return (true)}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.