sqlite транзакции не отображаются в test.log - PullRequest
2 голосов
/ 01 августа 2011

Я начал разрабатывать свое приложение rails, используя sqlite.Я достиг точки, когда мне нужно убедиться, что какой-то код выполняется в транзакции базы данных, что является чем-то новым для меня.Чтобы начать путешествие, я не хочу видеть транзакции, используемые в каждом тестовом примере.В конце концов, мне нужно отключить их для тестирования этой функции.

Когда я вижу test.log для любой из моих спецификаций, я получаю что-то вроде этого в test.log:

SQL (0.2ms)  SELECT 1 FROM "users" WHERE ("users"."login" = 'jaimito1') LIMIT 1
SQL (0.2ms)   SELECT name
FROM sqlite_master
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
AREL (0.5ms)  INSERT INTO "users" ("login", "password_digest", "created_at", "updated_at") VALUES ('jaimito1', '$2a$10$lJ/qIMfKymDmKuY6fYQF.u3bg8/ZdIzGU04MsjC6vJk8qygMEiemC', '2011-07-31 21:32:05.886797', '2011-07-31 21:32:05.886797')

Никаких признаков какой-либо транзакции, даже если у меня config.use_transactional_fixtures = true в моем spec_helper.rb

Если изменить базу данных на MySQL, этот же тест выдаст этот вывод в test.log:

SQL (0.2ms)  BEGIN
SQL (0.2ms)  SAVEPOINT active_record_1
SQL (0.3ms)  SELECT 1 FROM `users` WHERE (`users`.`login` = BINARY 'jaimito1') LIMIT 1
SQL (5.9ms)  SHOW TABLES
SQL (1.2ms)  describe `users`
AREL (0.3ms)  INSERT INTO `users` (`login`, `password_digest`, `created_at`, `updated_at`) VALUES ('jaimito1', '$2a$10$Ujsv0XGRLyHBZsI7sY4Vf.jv3bm1fyfeueV79o91gDY9xbdc7KUGC', '2011-07-31 19:50:28', '2011-07-31 19:50:28')
SQL (0.1ms)  RELEASE SAVEPOINT active_record_1
SQL (0.7ms)  ROLLBACK

Так?Что здесь происходит?Почему транзакции не отображаются для sqlite?Насколько я понимаю, транзакции sqlite поддерживаются в rails.

Мои версии: Mac OS X 10.6.8, Rails 3.0.9, sqlite 3.7.6, sqlite3 gem 1.3.3, ruby ​​1.9.2p290, mysql 5.00,91

Ответы [ 2 ]

3 голосов
/ 04 августа 2011

ActiveRecord 3.0.9 не поддерживает точки сохранения для sqlite :

# activerecord-3.0.9/lib/active_record/connection_adapters/abstract_adapter.rb
# Does this adapter support savepoints? PostgreSQL and MySQL do, SQLite does not.
def supports_savepoints?
  false
end

Последний кандидат на выпуск 3.1 (на момент написания статьи 3.1.0.rc5) поддерживает точки сохранения , поскольку в январе 2011 года была добавлена ​​поддержка .

Благодаря Rails 3. Вложенные транзакции. Исключение в дочернем блоке за помощь в ответе на этот вопрос.

0 голосов
/ 08 августа 2011

Транзакции не обнаруживались, потому что код для этого отсутствовал в sqlite_adapter.rb.Теперь это исправлено в багажнике рельсов:

https://github.com/rails/rails/commit/cdb49fc2f3f66bbae81be837424dcb45602ea5e2

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