Posted to tcl by AspiringTickler at Sun Oct 03 10:33:32 GMT 2021view pretty
proc withdb { var handler } {
sqlite3 $var "db"
$var timeout 10000
try { uplevel $handler } finally { $var close }
}
proc someImport {id} {
withdb db {
if [db eval { SELECT COUNT() FROM foo WHERE id = $id }] {
puts [format "%s already exists" $id]
return # the return here should return someImport (and does with return -level 2), but not without
}
db eval { INSERT OR IGNORE INTO foo(id) VALUES($id) }
}
}
Comments
Posted by AspiringTickler at Sun Oct 03 10:59:23 GMT 2021 [text] [code]
``` proc withdb { var handler } { sqlite3 $var "db" $var timeout 10000 tailcall try $handler finally [list $var close] } ``` Usage of tailcall and try was suggested by aspect1 and works exactly as I intended. This technique is also mentioned here: https://wiki.tcl-lang.org/page/try under the section "Use with [tailcall]"