عند مراجعة بعض سجلات SQL، لاحظت أن بعض الاستعلامات غير متناسقة مع ما يهدف الكود إلى تحقيقه بسبب الاستخدام المختلط لـ Active Record و mini_sql.
عند محاولة تحديث بعض العناصر القابلة للمراجعة، نقوم بزيادة الإصدار داخل معاملة (transaction) لمنع بعض حالات التنافس المحتملة (كما يظهر في مقتطف الكود أدناه). وعلى الرغم من أن الزيادة تبدو جزءًا من المعاملة، إلا أنها في الواقع ليست كذلك.
Reviewable.transaction هنا هي ميزة من Active Record، بينما تستخدم increment_version! mini_sql:
Active Record لا يدرك ما تفعله mini_sql. يبدو أن Active Record يستخدم ميزة كسولة (lazy)، حيث يتم إصدار BEGIN مباشرة قبل تنفيذ أول استعلام داخل المعاملة. وبالتالي، يتم زيادة الإصدار أولاً، ثم تبدأ المعاملة مباشرة قبل تنفيذ أول استعلام من Active Record. يصبح الأمر أشبه بهذا:
UPDATE reviewables SET version = version + 1 WHERE version=version AND id = reviewable.id RETURNING version;
BEGIN;
...
مع وجود زيادة الإصدار خارج المعاملة، لا يمكن تحقيق بعض الضمانات التي يوفرها القفل التفاؤلي (optimistic locking). وذلك لأن الزيادة ليست ذرية (atomically) مع المعاملة.