[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: CAP 10: CREATE Command and ordering of responses.
Doug replied on 02/18/2003 08:28:09 PM:
> > > As we are not doing transactions there can not be
more than
> > > one match in your example provided. Once it is deleted
by the 1st QUERY
> > > it could not have existed for the 2nd QUERY to match.
(no matter
> > > which one of them you process 1st).
> >
> > As Andrea has pointed out, this is not actually stated in the
text and
> > so he inferred that it was possible. I think we all here
agree but its
> > just not clear in the draft.
>
> Sure it is:
>
> 5. When multiple "QUERY" properties
are supplied in a single
> "VQUERY" component, the results
returned are the same as the
> results returned for multiple "VQUERY"
components having each a
> single "QUERY" property and
the results are return in the same
> order as the "VQUERY" properties
were specified in the original
> command.
Hmm, sorry but I dont see any prose
in the paragraph above that matches what you said in the 1st quoted block
above. The paragraph strictly above talks about "the same"
results being returned no matter the order of VQUERY/QUERY pairings used.
There is nothing saying that results are unique per match that I
see...
Put another way, that paragraph does
not cover the case where the VQUERY/QUERYs overlap in their data sets.
What Andrea and I (and you I think) expect is that results are unique
per matching entry, not mulitple per any VQUERY/QUERY combinations.
> Except for the fact we are removing 'ordering'
(Sorry I missed its removal
> in this section), if you were to submit two VQUERIES each with a single
> QUERY the second would not be able to delete the object the 1st VQUERY
> had deleted.
Common sense would dictate this but
in the past Ive seen some folks a bit less than full of it when interpreting
the RFCs.
Its not clear in any text Ive seen that
the actions based on mulitple VQUERY/QUERYs occur in any particular order
or as an amalgum in one big operation. If I were to combine the "All
VEVENTs on my calendar for last week" and "VEVENT with UID:12345@qwerty"
in a single DELETE command then it is not clear what kind of response(s)
would get back when the results form an overlapping case. (That is,
UID:12345@qwerty occurred last week.)
For example, if the "All VEVENTS"
were deleted first with the proper VREPLYs sent back then one _could_ assume
that the "VEVENT with UID:12345@qwerty" would return a failure
VREPLY. However since there would already have been a success VREPLY
for the first QUERY bit the CUA gets mixed messages.
If however the CS performs the "VEVENT
with UID:12345@qwerty" deletion first and sends back a success VREPLY
and then it performs the "All VEVENTS" deletion then no such
conflicting VREPLY would be sent back as the entry would have already been
removed from consideration.
So ordering of the actions seems to
have some implicit effect on the expectations. This is why Andrea
and I think that a unique response per entry is the proper course to take
and the draft should expressly, not implicitly, define this. If that
means that we have prose that says "Only a single VREPLY MAY be sent
per command per unique entity; mulitple VREPLYs per unique entity MUST
NOT be sent per each individual command." then so be it. Perhaps
we need to put in some prose to the effect: "No matter the number
or combination of VQUERYs and QUERYs, the entire combined result set is
acted upon by the command as a whole." so that the proper net effect
is acheived and its up to implementors to do it their own private ways.
> > > For QUERYs that are not deletes
I would say return each VREPLY
> > > that matches the supplied QUERY value.
> >
> > Whats the use of this? If the VEVENT matches any QUERY
then it should
> > be sent back; do multiple copies give it any greater emphasis
to the
> > user? Would resending the same large ZIP ATTACHment result
in anything
> > more than just extra wasted bandwidth?
>
> It had to do with if you were to submit two VQUERIES each with a single
> QUERY the second could return the same entries as the first.
Not what I was trying to ask. Put
another way: If my first QUERY SELECTed a different or overlapping set
of properties to return than my second QUERY would/should I send back 2
different copies of the same entity? Use the 2 QUERYs from above
but add different and possibly partially or non-overlapping cap-val values.
Is it reasonable to actually send back
2 copies of the same VEVENT (thus possibly wasting the bandwidth) or should
the CS send back one amalgumated VEVENT with all the matching requested
properties and parameters? I tend to prefer the latter over the former.
This may be the approach that would happen if we adopt the "Pool
all the matching entries in the QUERYs into 1 result pool and then send
back 1 entry per uniqueue entry.", just that the CS would have to
merge the SELECTed properties in this case.
> Please don't personalize the issues - this was
put in after
> some objected to multiple QUERYs in a VQUERY.
Sorry, not trying to get nasty or anything.
>
They did not want
> to be forced to do optimization in the CS.
Not sure I follow a bit here.
There is no optimization being done
(or mandated) at all if the CS is expected to treat multiple VQUERY/QUERYs
in any combination as all identical. The only possible optimization
I see is the "return in the same order" clause that we want removed.
The current text would allow a CS to just process queries on a first
come, first processed basis thus allowing someone to craft a very simple
CS quite quickly. It however does not benefit anyone really as the
results of this are NOT identical if the ordering of the queries is changed
(see above DELETE example).
I dont view making the proposed changes
Andrea/I made as forcing folks to optimize their CS; I view it as good
design. Since some folks here are gung-ho to build their CS on robust
RDBMS systems then our changes should make no great burden on them. Even
my "pool the result set" idea above is no great burden for them...
> > Id like to take a simplified approach here
since I see no real benefit
> > to over engineering this.
>
> At no place in the draft are you required to put multiple QUERYs in
> a single VQUERY. The simple approach could be to issue multiple
> VQUERYs and that can also return the items multiple times.
How is having 2 VQUERYs with 1 QUERY
each simpler than 1 VQUERY with 2 QUERYs in it? Is it any more efficient
to do so? Its certainly more octets on the wire to achieve the _exact_
same results.
> The reason multiple QUERYs were added was so
that you could get all BOOKED
> entries for a date range and all UNPROCESSED entries in one round
trip.
> ~Something~ like:
>
> QUERY:SELECT * FROM VAGENDA WHERE <...date range...>
> AND STATE() == 'BOOKED'
> QUERY:SELECT * FROM VAGENDA WHERE STATE == 'UNPROCESSED'
>
> It avoided two round trips for what was thought to be
> a common 1st query after authentication.
If I can craft the EXACT same logical
query using:
BEGIN:VQUERY
QUERY:SELECT * FROM VAGENDA WHERE <...date range...>
AND STATE() == 'BOOKED'
END:VQUERY
BEGIN:VQUERY
QUERY:SELECT * FROM VAGENDA WHERE STATE == 'UNPROCESSED'
END:VQUERY
with no apparent justification for this
then I call this overengineering it. Lets simplify the design to
avoid "Well I did it this way only since the spec says I can. I
dont care if you only designed your product to do it only another way!
kinds of discussions we will eventually run into otherwise.
Bruce
===========================================================================
Bruce Kahn
INet: Bruce_Kahn@xxxxxxxxxxxxxxxx
Messaging & Collaboration
Phone: 978.399.6496
IBM Software Group
FAX: and nothing but the FAX...
Standard disclaimers apply, even where prohibited by law...