Как я могу проверить выполнение запроса без ошибок в транзакции? - PullRequest
2 голосов
/ 08 февраля 2011

Я выполняю два запроса в транзакции ColdFusion (ColdFusion 9, MySQL 5):

private boolean function updates()
{
    transaction
    {
        local.foo = new Query();
        local.foo.setSql("UPDATE foo SET bar = foo");
        local.foo.execute();

        local.bar = new Query();
        local.bar.setSql("UPDATE bar SET foo = bar");
        local.bar.execute();
    }

    if (both updates were successful)
    {
        return true;
    }
    else
    {
        return false;
    }
}

Я хотел бы знать следующее: Что я должен заменить both updates where successful в if()с целью проверки правильности выполнения запросов?

1 Ответ

4 голосов
/ 08 февраля 2011

Это решение поглощает ошибки и предоставляет вызывающей функции их проверку и повторное удаление.Таким образом, я изменил ваше возвращаемое значение на вас.Это структура с логическим значением и массивом ошибок.

local.result.bool = false;
local.result.error = ArrayNew(1);
TRANSACTION action="begin" 
{
 try{
    local.foo = new Query();
    local.foo.setSql("UPDATE foo SET bar = foo");
    local.foo.execute();
    local.bar = new Query();
    local.bar.setSql("UPDATE bar SET foo = bar");
    local.bar.execute();
 }
 catch(any excpt){
    ArrayAppend(local.result.error, excpt);
 }finally{
   if(ArrayLen(local.result.error) gt 0){
      transactionRollback();
    }else{
      local.result.bool = true; 
    }
 } 
}
return local.result;
...