2016-07-13 5 views
0

Основываясь на том, чтобы эмулировать безопасную последовательность транзакций в MySQL https://stackoverflow.com/a/2292030/48659 и выполнения SQL-операторов How do you manually execute SQL commands in Ruby On Rails using NuoDBRails MySQL многоядерного оператора SQL терпит неудачу

Я пытаюсь сделать следующее:

ActiveRecord::Base.connection.execute("UPDATE sequence SET seq_current = (@next := seq_current + 1) WHERE seq_name = 'foo'; SELECT @next;") 

Но теперь я обнаружил, что драйвер Mysql2 не справляется с несколькими утверждениями!

Есть ли хорошее решение, которое я могу использовать? Если бы я разделил два заявления:

ActiveRecord::Base.connection.execute("UPDATE sequence SET seq_current = (@next := seq_current + 1) WHERE seq_name = 'foo';") 
ActiveRecord::Base.connection.execute("SELECT @next;") 

Он работает в консоли, но я могу быть уверен, что это действительно безопасно, и ничто не может еще может проникнуть в систему и выполнить в середине этих двух утверждений?

Есть ли лучшие решения? (Я не против использования PostgreSQL, если это сработает, но еще не пробовал.)

ответ

0

Я не на 100%, что это может сработать - могут ли транзакции помочь вам?

ActiveRecord::Base.transaction do 
    ActiveRecord::Base.connection.execute("UPDATE sequence SET seq_current = (@next := seq_current + 1) WHERE seq_name = 'foo';") 
    ActiveRecord::Base.connection.execute("SELECT @next;") 
end 
Смежные вопросы