Где находятся методы инициализации для SQLite3 :: Database и SQLite3 :: Statement - PullRequest
4 голосов
/ 30 марта 2012

Я опытный программист, изучающий Ruby (и мне это очень нравится).Я работаю над настройкой базы данных с использованием SQLite3.Чтобы лучше изучить Ruby, я прослеживаю SQLite3.Чего я не понимаю, так это где код #new для классов Database и Statement.На самом деле я ожидаю не метод #new, а метод #initialize.

SQLite3::Database.new(file, options = {})
SQLite3::Statement.new(db, sql)

Два приведенных выше утверждения взяты из документации.Но в моем коде, когда я пытаюсь проследить в это

$db = SQLite3::Database.new"MyDBfile"

, он просто переходит.

Затем, когда я пытаюсь проследить в

#$db.execute 

Iпопадаю в метод #execute в файле Database.rb, но затем он вызывает метод #prepare, где я пытаюсь войти в

stmt = SQLite3::Statement.new( self, sql )

, но опять не повезло.Он просто переступает через него.

Я искал исходный код, сделал поиск и т. Д., Но не могу найти вызываемые методы инициализации.Где они?

Спасибо, что рассмотрели этот вопрос.

1 Ответ

2 голосов
/ 30 марта 2012

Метод initialize для SQLite3::Database реализован в C:

/* call-seq: SQLite3::Database.new(file, options = {})
 *
 * Create a new Database object that opens the given file. If utf16
 * is +true+, the filename is interpreted as a UTF-16 encoded string.
 *
 * By default, the new database will return result rows as arrays
 * (#results_as_hash) and has type translation disabled (#type_translation=).
 */
static VALUE initialize(int argc, VALUE *argv, VALUE self)

Аналогично для SQLite3::Statement:

/* call-seq: SQLite3::Statement.new(db, sql)
 *
 * Create a new statement attached to the given Database instance, and which
 * encapsulates the given SQL text. If the text contains more than one
 * statement (i.e., separated by semicolons), then the #remainder property
 * will be set to the trailing text.
 */
static VALUE initialize(VALUE self, VALUE db, VALUE sql)

Отладчик Ruby не знает, как перейти к функциям C (при условии, что расширения SQLite3 даже скомпилированы с поддержкой отладки), поэтому он пропускает их.

...