reactor  

Re: [Reactor for CF] How to reset getWhere() in an iterator ?

bayo
Tue, 28 Nov 2006 21:33:25 -0800

Matt,

With the lines

<cfset 
r_Company.getAttributeIterator().getWhere().isEqual('CompanyAttribute','companyID',3854)>
<cfset 
r_Company.getAttributeIterator().getWhere().isEqual('Attribute','AttributeTypeID',5)>

you are effectively adding 2 whereCommands to a single where object.  So in SQL 
terms your where clause looks like 

'where companyId = 3854 and attributeTypeID = 5'

Ater this, when you call 

<cfset 
r_Company.getAttributeIterator().resetwhere()>

the r_Company iterator gets assigned a new where object instance.  In SQL 
terms, all the conditionals in the where clause are cleared.  In addition, the 
array of record objects and the query results that back the iterator are 
cleared.

Ok, so far.

With 

<cfset 
r_Company.getAttributeIterator().getWhere().isEqual('Attribute','AttributeTypeID',5)>

followed by

<cfset 
r_Company.getAttributeIterator().reset()>

followed by

<cfset 
r_Company.getAttributeIterator().getWhere().isEqual('Attribute','AttributeTypeID',6)>

the where object held by the queryObject (which is in turn held by the 
r_Company iterator) is the same one for both calls to isEqual().  This means 
that you presently have an iterator with a where clause that looks like

'where attributeId = 5 and attributeId = 6'

...which will always return 0 records.

Bayo


----- Original Message ----
From: Matt Hall-Smith <[EMAIL PROTECTED]>
To: reactor@doughughes.net
Sent: Tuesday, November 28, 2006 8:11:51 PM
Subject: [Reactor for CF] How to reset getWhere() in an iterator ?

Blank

 
BODY {
MARGIN-TOP:25px;FONT-SIZE:10pt;MARGIN-LEFT:25px;COLOR:#000000;FONT-FAMILY:Arial,
 Helvetica;BACKGROUND-COLOR:#ffffff;}
P.msoNormal {
MARGIN-TOP:0px;FONT-SIZE:10pt;MARGIN-LEFT:0px;COLOR:#ffffcc;FONT-FAMILY:Helvetica,
 "Times New Roman";}
LI.msoNormal {
MARGIN-TOP:0px;FONT-SIZE:10pt;MARGIN-LEFT:0px;COLOR:#ffffcc;FONT-FAMILY:Helvetica,
 "Times New Roman";}



Hello again,

 

Looking for guidance on the correct way to 
reset getWhere on an iterator ...

 

(On latest build via svn)

 

This (I think) should work, but my comments 
show that after the first getWhere and a reset subsequent calls *append* the 
successive getWhere statements causing q_AttrTwo and q_AttrThree to return 
zero records in the 3rd and 4th query.

 

<cfset r_Company = 
Reactor.CreateRecord("COMPANY").load(CompanyID=3854)>
  
<cfset 
q_iterator = r_Company.getAttributeIterator().getQuery()>
<cfdump 
var="#q_iterator#"> <!--- 12 Attributes returned --->

 

<!--- attempt to get AttrOne -->
<cfset 
r_Company.getAttributeIterator().getWhere().isEqual('Attribute','AttributeTypeID',5)>
<cfset 
q_AttrOne = r_Company.getAttributeIterator().getQuery()>
<cfdump 
var="#q_AttrOne#"> <!--- 1 Attribute returned, fires OK--->

 

<!--- 
reset backing query etc, and attempt to get AttrTwo-->

<cfset 
r_Company.getAttributeIterator().reset()>
<cfset 
r_Company.getAttributeIterator().getWhere().isEqual('Attribute','AttributeTypeID',6)>
<cfset 
q_AttrTwo = r_Company.getAttributeIterator().getQuery()>
<cfdump 
var="#q_AttrTwo#"> <!--- 0 records returned, should be 
1 --->
 

<!--- reset backing query etc, and attempt to get 
AttrThree -->
<cfset 
r_Company.getAttributeIterator().reset()>
<cfset 
r_Company.getAttributeIterator().getWhere().isEqual('Attribute','AttributeTypeID',4)>
<cfset 
q_AttrThree = 
r_Company.getAttributeIterator().getQuery()>  
<cfdump 
var="#q_AttrThree#"> <!--- 0 records returned, should be 
1--->

 

This works (explicit resetwhere(), then 2 x 
GetWhere's to get where I want to be) :

 

<cfset r_Company = 
Reactor.CreateRecord("COMPANY").load(CompanyID=3854)>
  
<cfset 
q_iterator = r_Company.getAttributeIterator().getQuery()>
<cfdump 
var="#q_iterator#"> <!--- 12 Attributes returned --->


<cfset 
r_Company.getAttributeIterator().getWhere().isEqual('CompanyAttribute','companyID',3854)>
<cfset 
r_Company.getAttributeIterator().getWhere().isEqual('Attribute','AttributeTypeID',5)>
<cfset 
q_AttrOne = r_Company.getAttributeIterator().getQuery()>
<cfdump 
var="#q_AttrOne#"> <!--- 1 Attribute returned, 
fantastic --->

 

<cfset 
r_Company.getAttributeIterator().resetwhere()>
<cfset 
r_Company.getAttributeIterator().getWhere().isEqual('CompanyAttribute','companyID',3854)>
<cfset 
r_Company.getAttributeIterator().getWhere().isEqual('Attribute','AttributeTypeID',6)>
<cfset 
q_AttrTwo = r_Company.getAttributeIterator().getQuery()>
<cfdump 
var="#q_AttrTwo#"> <!--- 1 Attribute returned, you 
beauty --->
 
<cfset 
r_Company.getAttributeIterator().resetwhere()>
<cfset 
r_Company.getAttributeIterator().getWhere().isEqual('CompanyAttribute','companyID',3854)>
<cfset 
r_Company.getAttributeIterator().getWhere().isEqual('Attribute','AttributeTypeID',4)>
<cfset 
q_AttrThree = 
r_Company.getAttributeIterator().getQuery()>  
<cfdump 
var="#q_AttrThree#"> <!--- 1 Attribute returned, 
hola --->

 

Should method 1 work or am I 
misiterpreting what reset() actually does ?

 

Cheers,

 

Matt

 

Pauaware Information Architects

 

Live data on demand

 

 

www.pauaware.co.nz

 

 

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
Reactor for ColdFusion Mailing List
reactor@doughughes.net
Archives at: http://www.mail-archive.com/reactor%40doughughes.net/
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --





-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
Reactor for ColdFusion Mailing List
reactor@doughughes.net
Archives at: http://www.mail-archive.com/reactor%40doughughes.net/
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --