none
MS-OXCDATA 2.13.5.1 (Restrictions) table question RRS feed

  • Question

  • In [MS-OXCDATA] — v20090712, the table on pages 99/100 is not very clear.

    First of all, the last two rows of the table both refer to PropTag of "Multi-valued but not same as MultivalueInstance of table" and TaggedValue of "Single-valued", but contain different Support and Details cell entries. I believe that the last row should actually have TaggedValue of "Multi-valued". Is that indeed the case?

    Secondly, the PropTag descriptions in the table are unclear. What exactly do the entries "Multi-valued and same as MultivalueInstance column of table" and "Multi-valued but not same as MultivalueInstance of table" mean? Does "Multi-valued and same as MultivalueInstance column of table" mean that the bit field of the PropTag in the restriction is the same as the MultivalueInstance bit field of the column? Since MultivalueInstance bit must not be set on the PropTag field in the restriction, does "Multi-valued and same as MultivalueInstance column of table" refer to the case when the table column also does not have the MultivalueInstance bit set? That does not seem to make sense given the actual Details descriptions involved.

    Thanks.

    Dan

    Thursday, October 29, 2009 1:27 AM

Answers

  • Dan,

    Here's the explanation, let me know if this makes sense to you. 

    The MultivalueInstance bit does not really apply to restrictions. It applies to SetColumns, or to SortTable.

     

    Now, when using a restriction, it may have a different effect if the table it is used on had columns specified with the MutlivalueInstance bit.  That is what the table is trying to explain.

     

    Each row of the table has explanations inserted directly in red
     

    PropTag

    TaggedValue

    Support

    Details

    Single-valued

    Single-valued

    All RelOp values are supported

    Simple comparison

    This is the normal comparison of two single values. MultivalueInstance plays no part here. The table could have a column with MultivalueInstance bit set (or not), but that is not the column we are basing our restriction on. Example: A table with column1 (subject), column2 (categories, multivalue). The restriction for this case could be [subject equals "hello"], comparing a single value with a single value column (column1 - subject).

    Single-valued

    Multi-valued

    Not supported. <5>

    The value of property PropTag is compared with each value of TaggedValue. If there are any matches, RelationalOperatorEqual is satisfied. If there are no matches, then RelationalOperatorNotEqual is satisfied.

    In this comparison, we are using a restriction based on a single value column, but we are passing a multivalue value. Example: A table with column1 (subject), column2 (categories, multivalued). The restriction could be [subject equals "hello","hi"] The message would be a match if its subject is EITHER "hello" or "hi".

    This is not supported.

    Multi-valued and same as MultivalueInstance column of table

    Single-valued

    All RelOp values are supported

    The single instance value of property PropTag on the row is compared with TaggedValue.

    In this case we are going to compare against a column of the table that was requested with the MultivalueInstance bit set. Note that the bit was set on ropSetColumns, not on the restriction.

    Example: Table with column1 (subject), column2 (categories, multivalue with MultivalueInstance bit). Since the MultivalueInstance bit was used in ropSetColumns, then there will be a separate row for each category that a given message has (there will be one or more rows for each message, depending on how many categories it has). This is the behavior of ropSetColumns with MultivalueInstance, and it is better explained in MS-OXCTABL (I believe). Restriction for this example: [categories equals "red" (single value)]. Notice that we are talking about a column that is multivalue (categories) and providing a single value (red) AND we are basing the restriction on a column that was specified with the MultivalueInstance bit. In this case, we will get a match for each row that matches the category. In this case, if there was a message that had categories "red" and "blue", it will show in two separate rows, but only one of those rows (the one marked "red") would match.

    Multi-valued and same as MultivalueInstancecolumn of table

    Multi-valued

    Not supported.

    The single instance value of property PropTag on the row is compared with each value of TaggedValue. If there are any matches, then RelationalOperatorEqual is satisfied. If there are no matches, then RelationalOperatorNotEqual is satisfied.

    This case is pretty similar to the second row of this table. We have a table that used the MutlivalueInstance bit on ropSetColumns. This means that each row will have a single value of the multivalue property. (If the message has two categories (red and blue), there will be two rows for that message - one will show categories as red (single value), the other row will show categories as blue (single value).

    Example: Table with column1 (subject), column2 (categories, mutlivalue with MultivalueInstance bit). Restriction [categories equals "red", "green"].

    If we had a message in the table with categories red and blue, then the row that says categories "red" (single value) will be a match (since red is one of the colors specificied in the restriction). However, the row that says that the categories for that message is "blue" will not match.

    This is not supported.

    Multi-valued but not same as MultivalueInstance of table

    Single-valued

    All RelOp values supported

    Each value of the property PropTag is compared with TaggedValue. For all RelOp values except RelationalOperatorNotEqual, one successful match means the restriction is satisfied. For RelationalOperatorNotEqual, the restriction is satisfied only when there are no matches

    In this case, we are comparing a multivalue column that is NOT MutlivalueInstance using a single value. (There might be another column that has the MutlivalueInstance bit, but our restriction is not comparing against that column.)

    Example: Table with column1 (subject), column2 (categories, multivalued). Restriction [categories equals "red" (single value)].

    In this case, we are comparing against a column that is multivalue but we did not use MultivalueInstance bit on ropSetColumns. A message with multiple categories appears on a SINGLE row. The value of categories for such a message is a multivalue with all the categories of the message. Such a row may read: ["subject of message with two categories"] (single value subject), ["red, "blue"] (multivalue categories).

    Our restriction says, compare against a column that is multivalue, but pass a single value, as in [categories (multivalue) equal "red" (single value)].

    In this case the message will be a match if the single value we pass is a match when compared to ANY of the values in the multivalue column. (In our example, the message will be a match, since one its categories is red.)

    There is an exception for RelationalOperatorNotEqual as described in the text above.

    Multi-valued but not same as MultivalueInstance of table

    Multi-valued

    Not supported

    This one is really not defined. It is the many to many comparison.

    It is not supported.

     

    Let me know if you have what you need.

     

    Best regards,

    Tom Jebo

    Senior Support Escalation Engineer

    Microsoft Open Specification Documentation Support

    • Marked as answer by Tom Jebo MSFT Thursday, January 7, 2010 8:54 PM
    Thursday, January 7, 2010 8:54 PM

All replies

  • Dan,

       Thanks for your question.  One of our team member will work on your question and get back to you when investigation is done.

    Thanks!
    Hongwei Sun -MSFT
    Thursday, October 29, 2009 3:33 PM
  • Hi Dan,

    I'll be looking into your questions.  I will let you know as soon as I have an answer for you.


    Best regards, Tom Jebo Senior Support Escalation Engineer Microsoft Open Specification Support
    Friday, October 30, 2009 5:07 PM
    Moderator
  • Dan,

    Just letting you know that we're still investigating this to get you an explanation on the "Multi-valued and same as MultivalueInstance column of table" and "Multi-valued but not same as MultivalueInstance of table".   I've filed a bug to correct the last entry in the supported cases table so it has a TaggedValue of "Multi-valued".  


    Best regards, Tom Jebo Senior Support Escalation Engineer Microsoft Open Specification Support
    Thursday, November 12, 2009 7:34 PM
    Moderator
  • Dan,

    I can confirm that the correction has been made in the last row of the multi-valued property support table and this correction will appear in future releases of MS-OXCDATA.   The corrected TaggedValue column for that last row does indeed read "Multi-valued" instead of "Single-valued". 

    As far as the clarification or explanation of the "Multi-valued and same as MultivalueInstance column of table" (et al), I'm still awaiting and explanation.   I'll let you know was soon as I have something.


    Best regards, Tom Jebo Senior Support Escalation Engineer Microsoft Open Specification Documentation Support
    Tuesday, November 17, 2009 3:50 PM
  • Tom,

    Can we get the TDI number for the correction, so we can see this come though to the docs?

    Brad
    Friday, November 20, 2009 11:10 PM
  • Brad,

    I took this offline with you in email...


    Best regards, Tom Jebo Senior Support Escalation Engineer Microsoft Open Specification Documentation Support
    Friday, December 4, 2009 5:11 PM
  • Dan,

    Here's the explanation, let me know if this makes sense to you. 

    The MultivalueInstance bit does not really apply to restrictions. It applies to SetColumns, or to SortTable.

     

    Now, when using a restriction, it may have a different effect if the table it is used on had columns specified with the MutlivalueInstance bit.  That is what the table is trying to explain.

     

    Each row of the table has explanations inserted directly in red
     

    PropTag

    TaggedValue

    Support

    Details

    Single-valued

    Single-valued

    All RelOp values are supported

    Simple comparison

    This is the normal comparison of two single values. MultivalueInstance plays no part here. The table could have a column with MultivalueInstance bit set (or not), but that is not the column we are basing our restriction on. Example: A table with column1 (subject), column2 (categories, multivalue). The restriction for this case could be [subject equals "hello"], comparing a single value with a single value column (column1 - subject).

    Single-valued

    Multi-valued

    Not supported. <5>

    The value of property PropTag is compared with each value of TaggedValue. If there are any matches, RelationalOperatorEqual is satisfied. If there are no matches, then RelationalOperatorNotEqual is satisfied.

    In this comparison, we are using a restriction based on a single value column, but we are passing a multivalue value. Example: A table with column1 (subject), column2 (categories, multivalued). The restriction could be [subject equals "hello","hi"] The message would be a match if its subject is EITHER "hello" or "hi".

    This is not supported.

    Multi-valued and same as MultivalueInstance column of table

    Single-valued

    All RelOp values are supported

    The single instance value of property PropTag on the row is compared with TaggedValue.

    In this case we are going to compare against a column of the table that was requested with the MultivalueInstance bit set. Note that the bit was set on ropSetColumns, not on the restriction.

    Example: Table with column1 (subject), column2 (categories, multivalue with MultivalueInstance bit). Since the MultivalueInstance bit was used in ropSetColumns, then there will be a separate row for each category that a given message has (there will be one or more rows for each message, depending on how many categories it has). This is the behavior of ropSetColumns with MultivalueInstance, and it is better explained in MS-OXCTABL (I believe). Restriction for this example: [categories equals "red" (single value)]. Notice that we are talking about a column that is multivalue (categories) and providing a single value (red) AND we are basing the restriction on a column that was specified with the MultivalueInstance bit. In this case, we will get a match for each row that matches the category. In this case, if there was a message that had categories "red" and "blue", it will show in two separate rows, but only one of those rows (the one marked "red") would match.

    Multi-valued and same as MultivalueInstancecolumn of table

    Multi-valued

    Not supported.

    The single instance value of property PropTag on the row is compared with each value of TaggedValue. If there are any matches, then RelationalOperatorEqual is satisfied. If there are no matches, then RelationalOperatorNotEqual is satisfied.

    This case is pretty similar to the second row of this table. We have a table that used the MutlivalueInstance bit on ropSetColumns. This means that each row will have a single value of the multivalue property. (If the message has two categories (red and blue), there will be two rows for that message - one will show categories as red (single value), the other row will show categories as blue (single value).

    Example: Table with column1 (subject), column2 (categories, mutlivalue with MultivalueInstance bit). Restriction [categories equals "red", "green"].

    If we had a message in the table with categories red and blue, then the row that says categories "red" (single value) will be a match (since red is one of the colors specificied in the restriction). However, the row that says that the categories for that message is "blue" will not match.

    This is not supported.

    Multi-valued but not same as MultivalueInstance of table

    Single-valued

    All RelOp values supported

    Each value of the property PropTag is compared with TaggedValue. For all RelOp values except RelationalOperatorNotEqual, one successful match means the restriction is satisfied. For RelationalOperatorNotEqual, the restriction is satisfied only when there are no matches

    In this case, we are comparing a multivalue column that is NOT MutlivalueInstance using a single value. (There might be another column that has the MutlivalueInstance bit, but our restriction is not comparing against that column.)

    Example: Table with column1 (subject), column2 (categories, multivalued). Restriction [categories equals "red" (single value)].

    In this case, we are comparing against a column that is multivalue but we did not use MultivalueInstance bit on ropSetColumns. A message with multiple categories appears on a SINGLE row. The value of categories for such a message is a multivalue with all the categories of the message. Such a row may read: ["subject of message with two categories"] (single value subject), ["red, "blue"] (multivalue categories).

    Our restriction says, compare against a column that is multivalue, but pass a single value, as in [categories (multivalue) equal "red" (single value)].

    In this case the message will be a match if the single value we pass is a match when compared to ANY of the values in the multivalue column. (In our example, the message will be a match, since one its categories is red.)

    There is an exception for RelationalOperatorNotEqual as described in the text above.

    Multi-valued but not same as MultivalueInstance of table

    Multi-valued

    Not supported

    This one is really not defined. It is the many to many comparison.

    It is not supported.

     

    Let me know if you have what you need.

     

    Best regards,

    Tom Jebo

    Senior Support Escalation Engineer

    Microsoft Open Specification Documentation Support

    • Marked as answer by Tom Jebo MSFT Thursday, January 7, 2010 8:54 PM
    Thursday, January 7, 2010 8:54 PM