Бага в ActiveRecord

Вопросы, связанные с разработкой пакетов Limb3

Модератор: phpBB2 - administrators

Бага в ActiveRecord

Сообщение vasiatka » Пт сен 04, 2009 7:17 pm

Пример ниже несколько надуман, но в принципе вероятен.

Тут даже скорее всего виноваты критерии, а не AR

Допустим у нас есть отнаследованные объекты AR.

Задача выбрать объекты определенного класса по критерии.
Критерию создаем типа A or B

Код: Выделить всё
    $criteria1 = lmbSQlCriteria::equal('title','Some other title2');
    $criteria2 = lmbSQlCriteria::equal('title','Some other title');

    $criteria = new lmbSQlCriteria();
    $criteria->addOr($criteria1);
    $criteria->addOr($criteria2);


Реально получается типа 1=1 OR A OR B.

Ниже тест. С ходу пофиксить не получилось.

В актив рекорде в строках 1811 - 1818 накладывается условие по классу

Код: Выделить всё
  function addClassCriteria($criteria)
  {
    if($this->_isInheritable())
      return lmbSQLCriteria :: objectify($criteria)->addAnd(array($this->_db_conn->quoteIdentifier(self :: $_inheritance_field) .
                                                                  $this->getInheritanceCondition()));

    return $criteria;
  }


Ожидалось что запрос будет такого вида (1=1 OR A OR B) AND kind like "Имя класса1|%"

Однако получилось как-то так 1=1 OR A OR B AND kind like "Имя класса1|%"

Думаю результат понятен. Добавил тест.

Код: Выделить всё
   function testFindWithKind()
  {
    $object1 = new FooOneTableTestObject();
    $object1->setTitle('Some title');
    $object1->save();

    $object2 = new FooOneTableTestObject();
    $object2->setTitle('Some other title');
    $object2->save();

    $object3 = new BarFooOneTableTestObject();
    $object3->setTitle('Some other title');
    $object3->save();

    $object4 = new BarFooOneTableTestObject();
    $object4->setTitle('Some other title2');
    $object4->save();

    $criteria1 = lmbSQlCriteria::equal('title','Some other title2');
    $criteria2 = lmbSQlCriteria::equal('title','Some other title');

    $criteria = new lmbSQlCriteria();
    $criteria->addOr($criteria1);
    $criteria->addOr($criteria2);

    $rs = lmbActiveRecord :: find('BarFooOneTableTestObject',array('criteria'=>$criteria));
    $this->assertEqual($rs->count(), 2);
  }
Все грамматические ошибки являются авторским стилем изложения материала®
vasiatka
LIMB Developer
 
Сообщения: 277
Зарегистрирован: Чт июл 26, 2007 10:34 am
Откуда: PENZA, RUSSIA

Сообщение pachanga » Пн сен 07, 2009 10:21 am

М-да, похоже бага, попробую что-нибудь придумать(по идее должно просто фикситься)
Аватара пользователя
pachanga
LIMB Developer
 
Сообщения: 4504
Зарегистрирован: Вс июн 06, 2004 7:29 pm
Откуда: Russia, Penza

Re: Бага в ActiveRecord

Сообщение korchasa » Чт янв 28, 2010 4:48 am

Fixed in 8108
Аватара пользователя
korchasa
LIMB Developer
 
Сообщения: 936
Зарегистрирован: Чт май 10, 2007 3:47 am


Вернуться в Limb3 разработка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron