Forum: Ruby Trouble with create_function and sqlite3-ruby-1.1.0

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
7c1727640c0d6f089fce77c6d1403bad?d=identicon&s=25 Helge Elvik (Guest)
on 2006-06-07 14:50
(Received via mailing list)
Hi,

I'm currently trying to implement an app that makes use of the
sqlite3-ruby library. My app requires that I compute soundexes for a lot
of values, and also that I'm able to clean up some names with a basic
gsub-based function. For that I've created two very basic functions
called "soundex" and "cleanup_name". The cleanup-function is pretty much
a one-liner that does a gsub on the value, while the soundex function
calls Text::Soundex.soundex on the value. I run version 1.1.0 of
sqlite3-ruby (MSWIN32), and I've installed version 3.3.5 of the
sqlite3.dll. (just to check, I also tried to downgrade to the previous
version of sqlite3-ruby, without any luck)

The problem is that I'm getting an awful lot of segfaults. Sometimes
I've been able to get the functions to run on a table or two, only to
fail on another one. I've tried to reform my functions in every way I
can think of, including using ".dup", ".to_s", ".dup"-ing into an
intermediate variable etc, but I still keep getting the segfaults.

Is there any special way I should handle the arguments to the
create_function block? Should I for instance make a copy of them before
I change them? Should I treat my return values a certain way? The
documentation doesn't mention anything specific, other than that you
should use result= or set_result() functions on the FunctionProxy to
return the value of the function.

Also, could the problem be that I use the two functions together? I use
them like this: "soundex(cleanup_name(COLUMN)) as COLUMN_SOUNDEX" in the
SQL.

By putting in a bit of "puts" here and there in the ruby-code in
sqlite3-ruby, I've narrowed the problem down to the "step"-function.
It's called in the native-code, but control is never returned to the
ruby-api before the segfault.

I should probably also mention that I used the sqlite-ruby-api at first,
and then both functions worked without any issues. I'd really like to
use sqlite3 though for the added functionality.

Helge Elvik
This topic is locked and can not be replied to.