Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > abnormal program termination with dynamic data, but not with fixed data

Reply
Thread Tools

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

 
 
walter@mwsewall.com
Guest
Posts: n/a
 
      07-13-2003
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,99 9999
Date,String,String,String,String,String,String,Str ing,String,String,St
ring,String,String,String,String,String,String,Str ing,String,String,Da
te,String,String,String,String,String,String,Strin g,String,Fixnum,Fixn
um,String,String,String,String,String,String,Strin g,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,99 9999
Date,String,String,String,String,String,String,Str ing,String,String,St
ring,String,String,String,String,String,String,Str ing,String,String,Da
te,String,String,String,String,String,String,Strin g,String,Fixnum,Fixn
um,String,String,String,String,String,String,Strin g,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 : http://www.velocityreviews.com/forums/(E-Mail Removed)
259 Front St. Phone : (207) 442-7994 x 128
Bath, ME 04530 Fax : (207) 443-6284
************************************************** ***


 
Reply With Quote
 
 
 
 
Sean O'Dell
Guest
Posts: n/a
 
      07-17-2003
"Sean O'Dell" <(E-Mail Removed)> wrote in message
news:HiBRa.265$(E-Mail Removed). ..
> <(E-Mail Removed)> wrote in message
> news:3F1094D4.21763.2AFC3C8@localhost...
> > 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,99 9999
> > Date,String,String,String,String,String,String,Str ing,String,String,St
> > ring,String,String,String,String,String,String,Str ing,String,String,Da
> > te,String,String,String,String,String,String,Strin g,String,Fixnum,Fixn
> > um,String,String,String,String,String,String,Strin g,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,99 9999
> > Date,String,String,String,String,String,String,Str ing,String,String,St
> > ring,String,String,String,String,String,String,Str ing,String,String,Da
> > te,String,String,String,String,String,String,Strin g,String,Fixnum,Fixn
> > um,String,String,String,String,String,String,Strin g,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


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Python 2.2.1 DLL extension causes "abnormal program termination" Hugh Python 2 09-01-2005 03:18 PM
Tkinter callback caused abnormal program termination John Pote Python 2 11-11-2004 09:45 AM
Abnormal program termination - Please help! Mahmood Ahmad C++ 3 02-22-2004 09:21 PM
ABNORMAL PROGRAM TERMINATION Control Panel CBUILDER 6 R6_2003 C++ 1 10-23-2003 07:30 AM
"abnormal program termination" Gabe Computer Support 1 09-28-2003 11:20 PM



Advertisments