-- $NetBSD: sqlite.lua,v 1.4 2017/05/10 07:37:33 mbalmer Exp $

local sqlite = require 'sqlite'

print(sqlite._VERSION .. ' - ' .. sqlite._DESCRIPTION)
print(sqlite._COPYRIGHT)
print()

print('initialize sqlite')
sqlite.initialize()

print('this is sqlite ' .. sqlite.libversion() .. ' (' ..
   sqlite.libversion_number() .. ')')
print('sourceid ' .. sqlite.sourceid())

db, state = sqlite.open('/tmp/db.sqlite', sqlite.OPEN_READWRITE |
   sqlite.OPEN_CREATE)

if state ~= sqlite.OK then
       print('db open failed')
else
       err = db:exec('create table test (name varchar(32))')

       if err ~= sqlite.OK then
               print('table creation failed')
               print('error code ' .. db:errcode() .. ' msg ' .. db:errmsg())
       end

       db:exec("insert into test values('Balmer')")
       print('last command changed ' .. db:changes() .. ' rows')

       stmt = db:prepare("insert into test values(:name)")

       print('statement has ' .. stmt:bind_parameter_count() .. ' parameters')
       print('param 1 name: ' .. stmt:bind_parameter_name(1))
       print('param name is at index ' .. stmt:bind_parameter_index(':name'))

       stmt:bind(1, 'Hardmeier')
       stmt:step()
       stmt:reset()
       stmt:bind(1, 'Keller')
       stmt:step()
       stmt:finalize()

       s2 = db:prepare('select name from test')

       while s2:step() == sqlite.ROW do
               print('name = ' .. s2:column(1))
       end
       s2:finalize()

       stmt = db:prepare('drop table test')
       stmt:step()
       stmt:finalize()
       db:close()
end

print('shutdown sqlite')
sqlite.shutdown()