KirbyBase, Table Default Values not being assigned

A

Adam Akhtar

Hi Ive been using KirbyBase and got it up and working and been fine with
basic stuff such as inserting and selecting. I create my own record
class as well to retrieve and pass data to the table.

The problem is with using default values. I cant seem to get the db to
substitiute any blank (nil) values in my custom record class with the
default values I specified when creating the table. When i check the
table in a text editor after an insert the values are kb_nil - hence its
not substituting like it should during the insert operation. Hence when
I do a select on the table in question i get nil values back rather than
the default values.

I experimented in irb and when i dont create a custom record class it
seems to work but i cant find anything in the docs that suggest i should
be doing anything different if i use my own custom record class.

heres is some code for you to use in irb which makes use of a custom
record class called task (im making a todo list) which replicates the
problem


require 'kirbybase'

class Task
attr_accessor:)recno, :title)

def Task.kb_create(recno, title)
Task.new do |x|
x.recno = recno
x.title = title
end
end

def initialize(&block)
instance_eval(&block)
end
end

db = KirbyBase.new
tbl = db.create_table:)deleteme, :title, {:DataType=>:String,
:Default=>'No Title'}) do |t|
t.record_class = Task
end

a_task = Task.new {|r| r.title = nil}
tbl.insert(a_task)
tbl.select

============================================
the result of the above select
---------------------------------------------
irb(main):029:0> tbl.select
=> [#<Task:0x4ec71e8 @title=nil, @recno=1>]

title should not be nil. It should be "No Title".
finally

here is the table file after insert

000001|000000|Task|recno:Integer|title:String:Default->No Title
1|kb_nil


can anyone tell me where im going wrong on this????
 
A

Adam Akhtar

im still banging my head against a wall on this one. I have no idea what
im doing wrong...are there any other kirbybase users out there who can
test the code ive supplied and see if they get the same error???
 
P

Pit Capitain

Adam, from quickly browsing through the KirbyBase code, it looks like
the normal default value mechanism doesn't work if you use custom
record classes. A default value for a column is used only if the data
passed to #insert doesn't contain a value for the column. An instance
of your custom record class always has accessors for all columns, so
the default values are never used. I think you have to handle default
values in your custom class.

Regards,
Pit
 
A

Adam Akhtar

Thanks Pit for that, ive decided to scrap the class and just work with
hashses and structs.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,982
Messages
2,570,190
Members
46,740
Latest member
AdolphBig6

Latest Threads

Top