abnormal program termination with dynamic data, but not with fixed data

W

walter

hi everyone. I am stumped!

I have code that is part of a simple persistent object manager.
The system takes an object, builds an update statement, and
builds the parameter list.

I keep getting an abnormal program termination. Hoever as you
can see in the modified code segment below, I can run the same query
with the same data that is hand keyed and it works fine.

Below, you can see that the dynamically created arrays and the
hand keyed one are identical, but one always aborts and one works
fine. I am running ruby 1.8 on windows 2000 using the pragmatic
programmers installer.

Does anyone have any ideas?


Walt



This one ends in a segmentation fault
## original code ##
def update(obj)
raise SpomDBClosedException.new if closed?
executeCount = 0
dbObject = @spom.getObjectMapping(obj.class)
dbHandle.prepare(dbObject.updateSQL) do |sth|
params = []
dbObject.nonKeyFields.each{|field| params <<
field.toDB(obj)}
dbObject.keyFields.each{|field| params
<<field.toDB(obj)}
executeCount = sth.execute(*params)
end
executeCount
end
## end original code ##



this modified version works. The main difference is that I am
executing the update with a fixed array, not the dynamically computed

array. It also has some code to compare the dynamically computed
array, and the fixed one. It appears that they are identical,
however,
the dynamically created one always ends with :

C:/ruby/lib/ruby/site_ruby/1.8/DBD/ODBC/ODBC.rb:202: [BUG]
Segmentation fault
ruby 1.8.0 (2003-05-26) [i386-mswin32]


abnormal program termination


## modified code ##
def update(obj)
raise SpomDBClosedException.new if closed?
executeCount = 0
dbObject = @spom.getObjectMapping(obj.class)
dbHandle.prepare(dbObject.updateSQL) do |sth|
params = []
dbObject.nonKeyFields.each{|field| params <<
field.toDB(obj)}
dbObject.keyFields.each{|field| params
<<field.toDB(obj)}

puts "computed data"
puts compData = params.join(",")
compClasses = params.collect{|i| i.class}
puts compClasses.join(",")

keyed = [Date.today, 'aaa', 'POIL', 'line1', 'line2', 'city', 'st',
'zip', 'country', 'p', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'10', Date.today, '-' , '', '', '', '', '', '', '', 20, 21, 'sic',
'disp', 'oth3', "31", "32", "33", "34", "35", 'POIL', 999999]

puts ""
puts "hand keyed data"
puts keyedData = keyed.join(",")
keyedClasses = keyed.collect{|i| i.class}
puts keyedClasses.join(",")

puts ""
puts "size (#{params.size}) same? #{params.size == keyed.size}"
puts "raw data same? #{params == keyed}"
puts "joined data same? #{compData == keyedData}"
puts "raw classes same #{compClasses == keyedClasses}"

#note nothing prints
params.each_with_index do |p, index|
puts "******* #{index} does NOT equal data" if p != keyed[index]
puts "******* #{index} does NOT equal class" if p.class !=
keyed[index].class
end

params = keyed #NOTE: replace dynamic data with keyed data

executeCount = sth.execute(*params)
end
executeCount
end

## end modified code ##

******************
***** OUTPUT *****
******************

computed data
2003-07-
12,aaa,POIL,line1,line2,city,st,zip,country,p,1,2,3,4,5,6,7,8,9,10,200
3-07-12,-,,,,,,,,20,21,sic,disp,oth3,31,32,33,34,35,POIL,999999
Date,String,String,String,String,String,String,String,String,String,St
ring,String,String,String,String,String,String,String,String,String,Da
te,String,String,String,String,String,String,String,String,Fixnum,Fixn
um,String,String,String,String,String,String,String,String,String,Fixn
um

hand keyed data
2003-07-
12,aaa,POIL,line1,line2,city,st,zip,country,p,1,2,3,4,5,6,7,8,9,10,200
3-07-12,-,,,,,,,,20,21,sic,disp,oth3,31,32,33,34,35,POIL,999999
Date,String,String,String,String,String,String,String,String,String,St
ring,String,String,String,String,String,String,String,String,String,Da
te,String,String,String,String,String,String,String,String,Fixnum,Fixn
um,String,String,String,String,String,String,String,String,String,Fixn
um

size (41) same? true
raw data same? true
joined data same? true
raw classes same true

*****************************************************
Walter Szewelanczyk
IS Director
M.W. Sewall & CO. email : (e-mail address removed)
259 Front St. Phone : (207) 442-7994 x 128
Bath, ME 04530 Fax : (207) 443-6284
*****************************************************
 
S

Sean O'Dell

Sean O'Dell said:
hi everyone. I am stumped!

I have code that is part of a simple persistent object manager.
The system takes an object, builds an update statement, and
builds the parameter list.

I keep getting an abnormal program termination. Hoever as you
can see in the modified code segment below, I can run the same query
with the same data that is hand keyed and it works fine.

Below, you can see that the dynamically created arrays and the
hand keyed one are identical, but one always aborts and one works
fine. I am running ruby 1.8 on windows 2000 using the pragmatic
programmers installer.

Does anyone have any ideas?


Walt



This one ends in a segmentation fault
## original code ##
def update(obj)
raise SpomDBClosedException.new if closed?
executeCount = 0
dbObject = @spom.getObjectMapping(obj.class)
dbHandle.prepare(dbObject.updateSQL) do |sth|
params = []
dbObject.nonKeyFields.each{|field| params <<
field.toDB(obj)}
dbObject.keyFields.each{|field| params
<<field.toDB(obj)}
executeCount = sth.execute(*params)
end
executeCount
end
## end original code ##



this modified version works. The main difference is that I am
executing the update with a fixed array, not the dynamically computed

array. It also has some code to compare the dynamically computed
array, and the fixed one. It appears that they are identical,
however,
the dynamically created one always ends with :

C:/ruby/lib/ruby/site_ruby/1.8/DBD/ODBC/ODBC.rb:202: [BUG]
Segmentation fault
ruby 1.8.0 (2003-05-26) [i386-mswin32]


abnormal program termination


## modified code ##
def update(obj)
raise SpomDBClosedException.new if closed?
executeCount = 0
dbObject = @spom.getObjectMapping(obj.class)
dbHandle.prepare(dbObject.updateSQL) do |sth|
params = []
dbObject.nonKeyFields.each{|field| params <<
field.toDB(obj)}
dbObject.keyFields.each{|field| params
<<field.toDB(obj)}

puts "computed data"
puts compData = params.join(",")
compClasses = params.collect{|i| i.class}
puts compClasses.join(",")

keyed = [Date.today, 'aaa', 'POIL', 'line1', 'line2', 'city', 'st',
'zip', 'country', 'p', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'10', Date.today, '-' , '', '', '', '', '', '', '', 20, 21, 'sic',
'disp', 'oth3', "31", "32", "33", "34", "35", 'POIL', 999999]

puts ""
puts "hand keyed data"
puts keyedData = keyed.join(",")
keyedClasses = keyed.collect{|i| i.class}
puts keyedClasses.join(",")

puts ""
puts "size (#{params.size}) same? #{params.size == keyed.size}"
puts "raw data same? #{params == keyed}"
puts "joined data same? #{compData == keyedData}"
puts "raw classes same #{compClasses == keyedClasses}"

#note nothing prints
params.each_with_index do |p, index|
puts "******* #{index} does NOT equal data" if p != keyed[index]
puts "******* #{index} does NOT equal class" if p.class !=
keyed[index].class
end

params = keyed #NOTE: replace dynamic data with keyed data

executeCount = sth.execute(*params)
end
executeCount
end

## end modified code ##

******************
***** OUTPUT *****
******************

computed data
2003-07-
12,aaa,POIL,line1,line2,city,st,zip,country,p,1,2,3,4,5,6,7,8,9,10,200
3-07-12,-,,,,,,,,20,21,sic,disp,oth3,31,32,33,34,35,POIL,999999
Date,String,String,String,String,String,String,String,String,String,St
ring,String,String,String,String,String,String,String,String,String,Da
te,String,String,String,String,String,String,String,String,Fixnum,Fixn
um,String,String,String,String,String,String,String,String,String,Fixn
um

hand keyed data
2003-07-
12,aaa,POIL,line1,line2,city,st,zip,country,p,1,2,3,4,5,6,7,8,9,10,200
3-07-12,-,,,,,,,,20,21,sic,disp,oth3,31,32,33,34,35,POIL,999999
Date,String,String,String,String,String,String,String,String,String,St
ring,String,String,String,String,String,String,String,String,String,Da
te,String,String,String,String,String,String,String,String,Fixnum,Fixn
um,String,String,String,String,String,String,String,String,String,Fixn
um

size (41) same? true
raw data same? true
joined data same? true
raw classes same true

Which line is line 202?

Actually, what is the entire backtrace? What line in your code is causing
the failure?

Sean O'Dell
 

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

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,011
Latest member
AjaUqq1950

Latest Threads

Top