I guess the new method should be named inWhere().



On 11/21/07, Shekar C Reddy <[EMAIL PROTECTED]> wrote:
>
> Thomas,
>
> I encourage you to test the where() method with v1.0.2 and see the results
> - it generates SQL imploding all the array values into a single placeholder
> as expected. The documentation used to have this usage listed but now it
> seems to have been removed. The code snipped you gave generated the
> following SQL with 1.0.2:
>
> price IN (2, 10, 14, 20, 2, 10, 14, 20, 2, 10, 14, 20, 2, 10, 14, 20)
>
> and the following SQL with the current SVN:
>
> price IN (2, 10, 14, 20)
>
> indicating they are generating different SQL. Enhancements are welcome but
> I thought they would be backwards compatible - I had to revert to 1.0.2 :(
>  The old code used to be generic and would apply to both - a normal where
> clause with a boolean operator or an IN operator because it used to implode
> the array into a list of values to replace a single placeholder but the new
> enhancements need IN-operators handled differently using arrays and multiple
> placeholders. I guess having a separate in() function for such expressions
> is more ideal and desired at the component level.
>
> Here is the issue to get started:
>
> http://framework.zend.com/issues/browse/ZF-2223
>
>
> Keep up the good work!
>
>
>
>
>
> On 11/21/07, Thomas Weidner <[EMAIL PROTECTED]> wrote:
> >
> > Shekar,
> >
> > actually the documentation does not mention this usage.
> >
> > And there are also no testcases.
> > All testcases have approved before I did my commit.
> >
> > Actually, giving an array as input would result in each single
> > placeholder
> > to be replaced.
> >
> > where("price > ? and price <= ?", array(2, 10));
> > becomes
> > "where (price > 2 and price <= 10)"
> >
> > This is the reason why the automatic imploding does not work anymore.
> >
> > Principially there are several ways:
> > You could for example do the following:
> >
> > $array = array(2,10,14,20);
> > $addwhere = "";
> > for($i = 1; $i < count($array); ++$i) {
> >    $addwhere .= ", ?";
> > }
> >
> > $where = "price IN (?". $addwhere.")";
> > $db->where($where, $array);
> >
> > In my eyes it would be better to have a own "IN" function avaiable for
> > such
> > clauses.
> > I am actually also working on a BEWTEEN function which adds between to
> > be
> > avaiable.
> >
> > So eighter you use a the codesnippet I gave you or you add a new issue
> > for
> > creating a "IN" function which handles the IN within the where clause.
> >
> > Greetings
> > Thomas
> > I18N Team Leader
> >
> >
> > ----- Original Message -----
> > From: "Shekar C Reddy" <[EMAIL PROTECTED]>
> > To: "Thomas Weidner" <[EMAIL PROTECTED] >
> > Cc: "Zend Framework General" <[email protected]>
> > Sent: Wednesday, November 21, 2007 8:28 AM
> > Subject: Re: [fw-general] Zend_Db_Select::where() malfunction
> >
> >
> > > Thomas,
> > >
> > > This feature of imploding an array of values into a single
> > place-holder
> > > was
> > > there from the the days of ZF v0.1.5 or earlier. My code was working
> > fine
> > > all these days. There were code examples in the documentation that
> > showed
> > > how an array would be imploded into the SQL using where(). I even
> > created
> > > an
> > > issue in the past to avoid quoting numeric values in the resulting
> > SQL's
> > > array (look for the issue that reads: "quote() quotes numeric values"
> > a
> > > bug
> > > that was attributed to PDO). I just did a diff on Select.php between
> > the
> > > current SVN and 1.0.2 and noticed that where() method actually invokes
> > and
> > > delegates to _where() in the current SVN whereas there is no _where()
> > > method
> > > in 1.0.2. My same code with ZF 1.0.2 works fine as expected but not
> > with
> > > the
> > > latest SVN update.
> > >
> > > If this is not supported, what's the syntax for the expected SQL? I
> > need
> > > to
> > > generate a where clause as under:
> > >
> > > WHERE status IN ( 'A', 'I' )
> > >
> > > Thanks,
> > >
> > >
> > >
> > >
> > > On 11/20/07, Thomas Weidner < [EMAIL PROTECTED]> wrote:
> > >>
> > >> Hy Shekar,
> > >>
> > >> this is not supported, and it was not supported in the past.
> > >> Because ? is a placeholder for only ONE variable.
> > >> And you gave two within your array :-)
> > >>
> > >> Actually I am working on a array integration which adds several new
> > >> features
> > >> to where.
> > >> But the behaviour you are expecting would break things with other new
> >
> > >> where
> > >> features.
> > >>
> > >> For now it is not planned to support such a use case.
> > >>
> > >> Btw: Before my improvement several days ago even the first variable
> > would
> > >> not have been integrated.
> > >> That the array value is inserted for a placeholder is also one of the
> > new
> > >> features :-)
> > >>
> > >> Greetings
> > >> Thomas
> > >> I18N Team Leader
> > >>
> > >> ----- Original Message -----
> > >> From: "Shekar C Reddy" <[EMAIL PROTECTED]>
> > >> To: "Zend Framework General" <[email protected] >
> > >> Sent: Tuesday, November 20, 2007 10:55 AM
> > >> Subject: [fw-general] Zend_Db_Select::where() malfunction
> > >>
> > >>
> > >> > Bill,
> > >> >
> > >> > I downloaded the latest SVN today and noticed a strange behavior
> > with
> > >> the
> > >> > select component:
> > >> >
> > >> > $select->where( 'status IN ( ? )', array( 'A', 'I' ));
> > >> >
> > >> >
> > >> > SQL generated:
> > >> >
> > >> > WHERE status IN ( 'A' )
> > >> >
> > >> >
> > >> > SQL expected:
> > >> >
> > >> > WHERE status IN ( 'A', 'I' )
> > >> >
> > >>
> > >>
> > >
> >
> >
>

Reply via email to