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/
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --