#!/usr/local/qddb/bin/qtclsh
#
# qsub -	substitute qddb fields in document
#

proc new_view {schema_desc tuple_desc array_name} {
  set l [qddb_schema leaves $schema_desc]
  foreach i $l {
    lappend attrs [list $i ${array_name}($i)]
  }
  return [qddb_view define $tuple_desc $attrs]
}

if { $argc != 4} {
  puts "Usage: qsub <RELATION> <KEYFIELD> <KEY> <infile>"
  exit 1
}

set relation [lindex $argv 0]
set keyfield [lindex $argv 1]
set key [lindex $argv 2]
set infile [lindex $argv 3]

set s [qddb_schema open $relation]
set k [qddb_search $s -prunebyattr $keyfield $key]
set k [qddb_keylist process nullop -deldup_sameentry on $k]

foreach i [qddb_keylist get $k] {
  set t [qddb_tuple read $s $i]
  if {[string length $t] ==0} {continue}
  new_view $s $t arr
}

set fd [open $infile r]
while {[gets $fd l] != -1} {
  if {[string first "$" $l] !=-1} {
    foreach i [array names arr] {
      regsub \\$$i $l $arr($i) l
    }
  }
  puts $l
}

qddb_keylist delete $k
qddb_schema close $s


