Как обрабатывать устаревшие «встроенные переводчики» в SQLite3 - PullRequest
0 голосов
/ 11 марта 2020

Похоже, что перевод типа для гема SQLite3 устарел. Например, этот код:

#!/usr/bin/ruby -w
require 'sqlite3'
dbh = SQLite3::Database.new('/tmp/my.db')
dbh.translator

выдает следующие объемные ошибки:

/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:75:in `block in register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0
/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:75:in `block in register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0
/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:77:in `register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0
/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:78:in `register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0
/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:86:in `block in register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0
/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:86:in `block in register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0
/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:86:in `block in register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0
/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:86:in `block in register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0
/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:86:in `block in register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0
/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:86:in `block in register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0
/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:86:in `block in register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0
/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:92:in `block in register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0
/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:92:in `block in register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0
/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:92:in `block in register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0
/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:92:in `block in register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0
/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:92:in `block in register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0
/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:97:in `block in register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0
/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:97:in `block in register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0
/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:97:in `block in register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0
/var/lib/gems/2.5.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb:106:in `register_default_translators' is calling `add_translator`.
Built in translators are deprecated and will be removed in version 2.0.0

Есть ли замена для переводчиков типов? Я сам по себе с точки зрения выполнения перевода типов?

В частности, я хочу перевести true и false в Ruby в 1 и 0 в SQLite.

1 Ответ

0 голосов
/ 12 марта 2020

Я думаю, что это на самом деле серия предупреждений для отладки.

ruby -w устанавливает флаг в SQLite3, который генерирует более подробный вывод.

#!/usr/bin/ruby -w
require 'sqlite3'
dbh = SQLite3::Database.new('/tmp/my.db')
dbh.translator

# !> /Users/greg/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/seeing_is_believing-3.6.1/lib/seeing_is_believing/the_matrix.rb:51: warning: `*' interpreted as argument prefix
# !> /Users/greg/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/seeing_is_believing-3.6.1/lib/seeing_is_believing/safe.rb:59: warning: constant ::Fixnum is deprecated
# !> /Users/greg/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/seeing_is_believing-3.6.1/lib/seeing_is_believing/the_matrix.rb:54: warning: method redefined; discarding old exec
# !> /Users/greg/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/seeing_is_believing-3.6.1/lib/seeing_is_believing/the_matrix.rb:60: warning: method redefined; discarding old exit!
# !> /Users/greg/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/seeing_is_believing-3.6.1/lib/seeing_is_believing/the_matrix.rb:65: warning: method redefined; discarding old fork
# !> /Users/greg/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/seeing_is_believing-3.6.1/lib/seeing_is_believing/the_matrix.rb:68: warning: method redefined; discarding old fork
# !> /Users/greg/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/seeing_is_believing-3.6.1/lib/seeing_is_believing/the_matrix.rb:69: warning: method redefined; discarding old fork
# !> /Users/greg/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/seeing_is_believing-3.6.1/lib/seeing_is_believing/customize_pp.rb:2: warning: method redefined; discarding old pretty_print
# !> /Users/greg/.rbenv/versions/2.7.0/lib/ruby/2.7.0/pp.rb:396: warning: previous definition of pretty_print was here
....

Удалите -w и попробуйте:

#!/usr/bin/ruby 
require 'sqlite3'
dbh = SQLite3::Database.new('/tmp/my.db')
dbh.translator

Все предупреждения пропали .

Что касается перевода с true / false на 1 / 0 соответственно, то простой ха sh упрощает:

TRANSLATOR = {
  true => 1,
  false => 0
}

TRANSLATOR[true]  # => 1
TRANSLATOR[false] # => 0

I ' хотя я рекомендую не использовать гем SQLite3 напрямую. Слой ORM позволяет очень легко писать код DBM-agnosti c, что позволяет легко переходить с SQLite на PostgreSQL, MySQL, Oracle, et c., Без необходимости переписывать что-либо, кроме ваши данные для типа DBM и использование файла YAML для хранения информации о DSN, чтение и последующее заполнение переменных для соединения делает это еще проще. Настройте файл YAML, перезапустите код, и все готово.

Лично мне нравится и рекомендую Сиквел , но если у вас есть опыт работы с Rails, тогда Active Record также является разумным выбором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...