#6041: Model->find "NOT" does not work as expected
---------------------------+------------------------------------------------
    Reporter:  datac0re    |         Owner:           
        Type:  Bug         |        Status:  new      
    Priority:  Medium      |     Milestone:  1.2.x.x  
   Component:  Model       |       Version:  1.2 Final
    Severity:  Normal      |    Resolution:           
    Keywords:  Model NOT   |   Php_version:  PHP 5    
Cake_version:  1.2.0.7962  |  
---------------------------+------------------------------------------------
Comment (by datac0re):

 (I apologize if this double posts, but the formatting of the original
 ticket messes up what I'm trying to say)

 In 1.2.0.7962 when crafting the following conditions, the generated SQL
 does not match with what I would expect. Maybe this is a bug, maybe it's
 by design, but if it is by design, I feel that the behavior is counter-
 intuitive and may cause people to not get what they are looking for (it
 happened to me!).

 Example:


 {{{
 $model->find('all', array(
  'conditions' => array(
      'id >' => 25
      'NOT' => array(
           'src' => '',
           'lastapp' => 'MeetMe'
      )
  )
 ));
 }}}

 I would expect the SQL to generate the following:


 {{{
 1. WHERE id > 25 AND NOT (src = '' and lastapp = 'MeetMe')
 }}}

 instead, this is what is generated:


 {{{
 2. WHERE id > 25 AND (NOT (`src` = '') AND NOT (`lastapp` = 'MeetMe'))
 }}}


 The two statements are NOT equal (i.e. the NOT operator isn't
 distributive)

 See the following tests:


 {{{
 Ex 1:
 src = ''
 lastapp = 'MeetMe'

 Query 1: NOT (TRUE and TRUE) = FALSE
 Query 2: NOT (TRUE) and NOT (TRUE) = FALSE

 Ex 2:
 src = 'anything'
 lastapp = 'MeetMe'

 Query 1: NOT (FALSE AND TRUE) = TRUE
 Query 2: NOT (FALSE) and NOT (TRUE) = FALSE

 Ex 3:
 src = ''
 lastapp = 'anything'

 Query 1: NOT (TRUE AND FALSE) = TRUE
 Query 2: NOT (TRUE) and NOT (FALSE) = FALSE

 Ex 4:
 src = 'anything'
 lastapp = 'anything

 Query 1: NOT (FALSE AND FALSE) = TRUE
 Query 2: NOT (FALSE) and NOT (FALSE) = TRUE
 }}}

 Example 2 and 4 show that the statements are not equal. I've verified it
 by also doing both versions of the queries and getting counts back that
 differ.

-- 
Ticket URL: <https://trac.cakephp.org/ticket/6041#comment:1>
CakePHP : The Rapid Development Framework for PHP <https://trac.cakephp.org/>
Cake is a rapid development framework for PHP which uses commonly known design 
patterns like ActiveRecord, Association Data Mapping, Front Controller and MVC. 
Our primary goal is to provide a structured framework that enables PHP users at 
all levels to rapidly develop robust web applications, without any loss to 
flexibility.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"tickets cakephp" group.
To post to this group, send email to tickets-cakephp@googlegroups.com
To unsubscribe from this group, send email to 
tickets-cakephp+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/tickets-cakephp?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to