def add_column(table, field_def, after)
if after.nil? or table.field_names.last == after
insert_after = -1
else
insert_after = table.field_names.index(after)+1
end
with_write_lock(table.name) do
fptr = open(table.filename, 'r')
new_fptr = open(table.filename+'temp', 'w')
line = fptr.readline.chomp
if line[0..0] == 'Z'
header_rec = unencrypt_str(line[1..-1]).split('|')
else
header_rec = line.split('|')
end
if insert_after == -1
header_rec.insert(insert_after, field_def)
else
header_rec.insert(insert_after+3, field_def)
end
if line[0..0] == 'Z'
new_fptr.write('Z' + encrypt_str(header_rec.join('|')) +
"\n")
else
new_fptr.write(header_rec.join('|') + "\n")
end
begin
while true
line = fptr.readline.chomp
if table.encrypted?
temp_line = unencrypt_str(line)
else
temp_line = line
end
rec = temp_line.split('|', -1)
rec.insert(insert_after, '')
if table.encrypted?
new_fptr.write(encrypt_str(rec.join('|')) + "\n")
else
new_fptr.write(rec.join('|') + "\n")
end
end
rescue EOFError
end
fptr.close
new_fptr.close
File.delete(table.filename)
FileUtils.mv(table.filename+'temp', table.filename)
end
end