Cassandra
  1. Cassandra
  2. CASSANDRA-649

get_range_slice() behavior is inconsistent with get_slice() and multiget_slice() when super_column is set in ColumnParent

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Fix Version/s: 0.5
    • Component/s: Core
    • Labels:
      None
    • Environment:

      Linux

      Description

      Here's an example using my python library ( http://github.com/vomjom/pycassa ):

      >>> import pycassa
      >>> connect = pycassa.connect()
      >>> cf = pycassa.ColumnFamily(connect, 'Test Keyspace', 'Test Super', super=True)
      >>> cf.insert('key1', {'2': {'sub3': 'val3', 'sub4': 'val4'}})

      >>> cf.get('key1')
      {'2': {'sub4': 'val4', 'sub3': 'val3'}}
      >>> cf.get('key1', super_column='2')

      {'sub4': 'val4', 'sub3': 'val3'}

      >>> cf.multiget(['key1'])
      {'key1': {'2':

      {'sub4': 'val4', 'sub3': 'val3'}

      }}
      >>> cf.multiget(['key1'], super_column='2')
      {'key1': {'sub4': 'val4', 'sub3': 'val3'}}

      >>> list(cf.get_range())
      [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]
      >>> list(cf.get_range(super_column='2'))
      [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]

      In the last case, I expected:
      [('key1',

      {'sub4': 'val4', 'sub3': 'val3'}

      )]

      If the super_column argument is supplied, then all of these make a ColumnParent with:

      cp = ColumnParent(column_family=self.column_family, super_column=super_column)

      Or basically, in the KeySlice returned by get_range_slice(), if super_column was set in the passed in the ColumnParent, the columns member of the KeySlice should be a list of respective SuperColumn.columns and not a list of SuperColumn.

      Another way to describe the problem:
      get_slice(), multiget_slice(), and get_range_slice() all return:
      list<ColumnOrSuperColumn> in their return values in some way or another.

      If super_column is set in the ColumnParent then:
      1. get_slice() and multiget_slice() return the list of SuperColumn.columns each wrapped in a ColumnOrSuperColumn
      2. The KeySlice in get_range_slice() returns a list of ONE SuperColumn wrapped in a ColumnOrSuperColumn

      1. 649_unit_test.patch
        0.8 kB
        Jonathan Hseu
      2. 649.patch
        8 kB
        Jonathan Ellis

        Activity

        Gavin made changes -
        Workflow patch-available, re-open possible [ 12750954 ] reopen-resolved, no closed status, patch-avail, testing [ 12757450 ]
        Gavin made changes -
        Workflow no-reopen-closed, patch-avail [ 12485369 ] patch-available, re-open possible [ 12750954 ]
        Jonathan Ellis made changes -
        Status Open [ 1 ] Resolved [ 5 ]
        Assignee Jonathan Ellis [ jbellis ]
        Fix Version/s 0.5 [ 12314040 ]
        Resolution Fixed [ 1 ]
        Hide
        Jonathan Ellis added a comment -

        committed to 0.5 and trunk

        Show
        Jonathan Ellis added a comment - committed to 0.5 and trunk
        Hide
        Jonathan Hseu added a comment -

        +1

        Works for me.

        Thanks.

        Show
        Jonathan Hseu added a comment - +1 Works for me. Thanks.
        Jonathan Ellis made changes -
        Attachment 649.patch [ 12428955 ]
        Hide
        Jonathan Ellis added a comment -

        thanks for the test.

        patch extracts thriftifyColumnFamily and applies to getSlice and get_slice_range

        Show
        Jonathan Ellis added a comment - thanks for the test. patch extracts thriftifyColumnFamily and applies to getSlice and get_slice_range
        Jonathan Hseu made changes -
        Attachment 649_unit_test.patch [ 12428951 ]
        Hide
        Jonathan Hseu added a comment - - edited

        I've attached a patch to test_server.py to unit test the bug.

        The old test case depended on the behavior that I indicated, so I replaced that with the expected behavior.

        I tested the latest trunk and it seems to still have this issue.

        Show
        Jonathan Hseu added a comment - - edited I've attached a patch to test_server.py to unit test the bug. The old test case depended on the behavior that I indicated, so I replaced that with the expected behavior. I tested the latest trunk and it seems to still have this issue.
        Hide
        Jonathan Ellis added a comment -

        the patch for CASSANDRA-647 makes get_range_slice use the same convert-to-thrift format as get_slice and multiget_slice. If that doesn't fix it, please add a Thrift test to test_server.py showing the problem. (Running the thrift tests is described in http://wiki.apache.org/cassandra/HowToContribute)

        Show
        Jonathan Ellis added a comment - the patch for CASSANDRA-647 makes get_range_slice use the same convert-to-thrift format as get_slice and multiget_slice. If that doesn't fix it, please add a Thrift test to test_server.py showing the problem. (Running the thrift tests is described in http://wiki.apache.org/cassandra/HowToContribute )
        Hide
        Jonathan Ellis added a comment -

        I'd be a lot more sure that this is a bug in Cassandra rather than an under-tested client library if you stuck to raw Thrift.

        Show
        Jonathan Ellis added a comment - I'd be a lot more sure that this is a bug in Cassandra rather than an under-tested client library if you stuck to raw Thrift.
        Jonathan Hseu made changes -
        Description Here's an example using my python library ( http://github.com/vomjom/pycassa ):

        >>> import pycasso
        >>> connect = pycasso.connect()
        >>> cf = pycasso.ColumnFamily(connect, 'Test Keyspace', 'Test Super', super=True)
        >>> cf.insert('key1', {'2': {'sub3': 'val3', 'sub4': 'val4'}})

        >>> cf.get('key1')
        {'2': {'sub4': 'val4', 'sub3': 'val3'}}
        >>> cf.get('key1', super_column='2')
        {'sub4': 'val4', 'sub3': 'val3'}

        >>> cf.multiget(['key1'])
        {'key1': {'2': {'sub4': 'val4', 'sub3': 'val3'}}}
        >>> cf.multiget(['key1'], super_column='2')
        {'key1': {'sub4': 'val4', 'sub3': 'val3'}}

        >>> list(cf.get_range())
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]
        >>> list(cf.get_range(super_column='2'))
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]

        In the last case, I expected:
        [('key1', {'sub4': 'val4', 'sub3': 'val3'})]

        If the super_column argument is supplied, then all of these make a ColumnParent with:

        cp = ColumnParent(column_family=self.column_family, super_column=super_column)

        Or basically, in the KeySlice returned by get_range_slice(), if super_column was set in the passed in the ColumnParent, the columns member of the KeySlice should be a list of respective SuperColumn.columns and not a list of SuperColumn.

        Another way to describe the problem:
        get_slice(), multiget_slice(), and get_range_slice() all return:
        list<ColumnOrSuperColumn> in their return values in some way or another.

        If super_column is set in the ColumnParent then:
        1. get_slice() and multiget_slice() return the list of SuperColumn.columns each wrapped in a ColumnOrSuperColumn
        2. The KeySlice in get_range_slice() returns a list of ONE SuperColumn wrapped in a ColumnOrSuperColumn
        Here's an example using my python library ( http://github.com/vomjom/pycassa ):

        >>> import pycassa
        >>> connect = pycassa.connect()
        >>> cf = pycassa.ColumnFamily(connect, 'Test Keyspace', 'Test Super', super=True)
        >>> cf.insert('key1', {'2': {'sub3': 'val3', 'sub4': 'val4'}})

        >>> cf.get('key1')
        {'2': {'sub4': 'val4', 'sub3': 'val3'}}
        >>> cf.get('key1', super_column='2')
        {'sub4': 'val4', 'sub3': 'val3'}

        >>> cf.multiget(['key1'])
        {'key1': {'2': {'sub4': 'val4', 'sub3': 'val3'}}}
        >>> cf.multiget(['key1'], super_column='2')
        {'key1': {'sub4': 'val4', 'sub3': 'val3'}}

        >>> list(cf.get_range())
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]
        >>> list(cf.get_range(super_column='2'))
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]

        In the last case, I expected:
        [('key1', {'sub4': 'val4', 'sub3': 'val3'})]

        If the super_column argument is supplied, then all of these make a ColumnParent with:

        cp = ColumnParent(column_family=self.column_family, super_column=super_column)

        Or basically, in the KeySlice returned by get_range_slice(), if super_column was set in the passed in the ColumnParent, the columns member of the KeySlice should be a list of respective SuperColumn.columns and not a list of SuperColumn.

        Another way to describe the problem:
        get_slice(), multiget_slice(), and get_range_slice() all return:
        list<ColumnOrSuperColumn> in their return values in some way or another.

        If super_column is set in the ColumnParent then:
        1. get_slice() and multiget_slice() return the list of SuperColumn.columns each wrapped in a ColumnOrSuperColumn
        2. The KeySlice in get_range_slice() returns a list of ONE SuperColumn wrapped in a ColumnOrSuperColumn
        Jonathan Hseu made changes -
        Description Here's an example using my python library ( http://github.com/vomjom/pycasso ):

        >>> import pycasso
        >>> connect = pycasso.connect()
        >>> cf = pycasso.ColumnFamily(connect, 'Test Keyspace', 'Test Super', super=True)
        >>> cf.insert('key1', {'2': {'sub3': 'val3', 'sub4': 'val4'}})

        >>> cf.get('key1')
        {'2': {'sub4': 'val4', 'sub3': 'val3'}}
        >>> cf.get('key1', super_column='2')
        {'sub4': 'val4', 'sub3': 'val3'}

        >>> cf.multiget(['key1'])
        {'key1': {'2': {'sub4': 'val4', 'sub3': 'val3'}}}
        >>> cf.multiget(['key1'], super_column='2')
        {'key1': {'sub4': 'val4', 'sub3': 'val3'}}

        >>> list(cf.get_range())
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]
        >>> list(cf.get_range(super_column='2'))
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]

        In the last case, I expected:
        [('key1', {'sub4': 'val4', 'sub3': 'val3'})]

        If the super_column argument is supplied, then all of these make a ColumnParent with:

        cp = ColumnParent(column_family=self.column_family, super_column=super_column)

        Or basically, in the KeySlice returned by get_range_slice(), if super_column was set in the passed in the ColumnParent, the columns member of the KeySlice should be a list of respective SuperColumn.columns and not a list of SuperColumn.

        Another way to describe the problem:
        get_slice(), multiget_slice(), and get_range_slice() all return:
        list<ColumnOrSuperColumn> in their return values in some way or another.

        If super_column is set in the ColumnParent then:
        1. get_slice() and multiget_slice() return the list of SuperColumn.columns each wrapped in a ColumnOrSuperColumn
        2. The KeySlice in get_range_slice() returns a list of ONE SuperColumn wrapped in a ColumnOrSuperColumn
        Here's an example using my python library ( http://github.com/vomjom/pycassa ):

        >>> import pycasso
        >>> connect = pycasso.connect()
        >>> cf = pycasso.ColumnFamily(connect, 'Test Keyspace', 'Test Super', super=True)
        >>> cf.insert('key1', {'2': {'sub3': 'val3', 'sub4': 'val4'}})

        >>> cf.get('key1')
        {'2': {'sub4': 'val4', 'sub3': 'val3'}}
        >>> cf.get('key1', super_column='2')
        {'sub4': 'val4', 'sub3': 'val3'}

        >>> cf.multiget(['key1'])
        {'key1': {'2': {'sub4': 'val4', 'sub3': 'val3'}}}
        >>> cf.multiget(['key1'], super_column='2')
        {'key1': {'sub4': 'val4', 'sub3': 'val3'}}

        >>> list(cf.get_range())
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]
        >>> list(cf.get_range(super_column='2'))
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]

        In the last case, I expected:
        [('key1', {'sub4': 'val4', 'sub3': 'val3'})]

        If the super_column argument is supplied, then all of these make a ColumnParent with:

        cp = ColumnParent(column_family=self.column_family, super_column=super_column)

        Or basically, in the KeySlice returned by get_range_slice(), if super_column was set in the passed in the ColumnParent, the columns member of the KeySlice should be a list of respective SuperColumn.columns and not a list of SuperColumn.

        Another way to describe the problem:
        get_slice(), multiget_slice(), and get_range_slice() all return:
        list<ColumnOrSuperColumn> in their return values in some way or another.

        If super_column is set in the ColumnParent then:
        1. get_slice() and multiget_slice() return the list of SuperColumn.columns each wrapped in a ColumnOrSuperColumn
        2. The KeySlice in get_range_slice() returns a list of ONE SuperColumn wrapped in a ColumnOrSuperColumn
        Jonathan Hseu made changes -
        Description Here's an example using my python library ( http://github.com/vomjom/pycasso ):

        >>> import pycasso
        >>> connect = pycasso.connect()
        >>> cf = pycasso.ColumnFamily(connect, 'Test Keyspace', 'Test Super', super=True)
        >>> cf.insert('key1', {'2': {'sub3': 'val3', 'sub4': 'val4'}})

        >>> cf.get('key1')
        {'2': {'sub4': 'val4', 'sub3': 'val3'}}
        >>> cf.get('key1', super_column='2')
        {'sub4': 'val4', 'sub3': 'val3'}

        >>> cf.multiget(['key1'])
        {'key1': {'2': {'sub4': 'val4', 'sub3': 'val3'}}}
        >>> cf.multiget(['key1'], super_column='2')
        {'key1': {'sub4': 'val4', 'sub3': 'val3'}}

        >>> list(cf.get_range())
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]
        >>> list(cf.get_range(super_column='2'))
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]

        In the last case, I expected:
        [('key1', {'sub4': 'val4', 'sub3': 'val3'})]

        If the super_column argument is supplied, then all of these make a ColumnParent with:

        cp = ColumnParent(column_family=self.column_family, super_column=super_column)

        Or basically, in the KeySlice returned by get_range_slice(), if super_column was set in the passed in the ColumnParent, the columns member of the KeySlice should be a list of respective SuperColumn.columns and not a list of SuperColumn.

        Another way to describe the problem:
        get_slice(), multiget_slice(), and get_range_slice() all return:
        list<ColumnOrSuperColumn> in their return values in some way or another.

        If super_column is set in the ColumnParent then:
        1. get_slice() and multiget_slice() return the list of SuperColumn.columns each wrapped in a ColumnOrSuperColumn
        2. get_range_slice() returns a list of ONE SuperColumn wrapped in a ColumnOrSuperColumn
        Here's an example using my python library ( http://github.com/vomjom/pycasso ):

        >>> import pycasso
        >>> connect = pycasso.connect()
        >>> cf = pycasso.ColumnFamily(connect, 'Test Keyspace', 'Test Super', super=True)
        >>> cf.insert('key1', {'2': {'sub3': 'val3', 'sub4': 'val4'}})

        >>> cf.get('key1')
        {'2': {'sub4': 'val4', 'sub3': 'val3'}}
        >>> cf.get('key1', super_column='2')
        {'sub4': 'val4', 'sub3': 'val3'}

        >>> cf.multiget(['key1'])
        {'key1': {'2': {'sub4': 'val4', 'sub3': 'val3'}}}
        >>> cf.multiget(['key1'], super_column='2')
        {'key1': {'sub4': 'val4', 'sub3': 'val3'}}

        >>> list(cf.get_range())
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]
        >>> list(cf.get_range(super_column='2'))
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]

        In the last case, I expected:
        [('key1', {'sub4': 'val4', 'sub3': 'val3'})]

        If the super_column argument is supplied, then all of these make a ColumnParent with:

        cp = ColumnParent(column_family=self.column_family, super_column=super_column)

        Or basically, in the KeySlice returned by get_range_slice(), if super_column was set in the passed in the ColumnParent, the columns member of the KeySlice should be a list of respective SuperColumn.columns and not a list of SuperColumn.

        Another way to describe the problem:
        get_slice(), multiget_slice(), and get_range_slice() all return:
        list<ColumnOrSuperColumn> in their return values in some way or another.

        If super_column is set in the ColumnParent then:
        1. get_slice() and multiget_slice() return the list of SuperColumn.columns each wrapped in a ColumnOrSuperColumn
        2. The KeySlice in get_range_slice() returns a list of ONE SuperColumn wrapped in a ColumnOrSuperColumn
        Jonathan Hseu made changes -
        Description Here's an example using my python library ( http://github.com/vomjom/pycasso ):

        >>> import pycasso
        >>> connect = pycasso.connect()
        >>> cf = pycasso.ColumnFamily(connect, 'Test Keyspace', 'Test Super', super=True)
        >>> cf.insert('key1', {'2': {'sub3': 'val3', 'sub4': 'val4'}})

        >>> cf.get('key1')
        {'2': {'sub4': 'val4', 'sub3': 'val3'}}
        >>> cf.get('key1', super_column='2')
        {'sub4': 'val4', 'sub3': 'val3'}

        >>> cf.multiget(['key1'])
        {'key1': {'2': {'sub4': 'val4', 'sub3': 'val3'}}}
        >>> cf.multiget(['key1'], super_column='2')
        {'key1': {'sub4': 'val4', 'sub3': 'val3'}}

        >>> list(cf.get_range())
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]
        >>> list(cf.get_range(super_column='2'))
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]

        In the last case, I expected:
        [('key1', {'sub4': 'val4', 'sub3': 'val3'})]

        If the super_column argument is supplied, then all of these make a ColumnParent with:

        cp = ColumnParent(column_family=self.column_family, super_column=super_column)

        Or basically, in the KeySlice returned by get_range_slice(), if super_column was set in the passed in the ColumnParent, the columns member of the KeySlice should be a list of respective SuperColumn.columns and not a list of SuperColumn.

        Another way to describe the problem:
        get_slice(), multiget_slice(), and get_range_slice() all return:
        list<ColumnOrSuperColumn> in their return values in some way or another.

        If super_column is set in the ColumnParent then:
        1. get_slice() and multiget_slice() return a list of SuperColumn.columns each wrapped in a ColumnOrSuperColumn
        2. get_range_slice() returns a list of ONE SuperColumn wrapped in a ColumnOrSuperColumn
        Here's an example using my python library ( http://github.com/vomjom/pycasso ):

        >>> import pycasso
        >>> connect = pycasso.connect()
        >>> cf = pycasso.ColumnFamily(connect, 'Test Keyspace', 'Test Super', super=True)
        >>> cf.insert('key1', {'2': {'sub3': 'val3', 'sub4': 'val4'}})

        >>> cf.get('key1')
        {'2': {'sub4': 'val4', 'sub3': 'val3'}}
        >>> cf.get('key1', super_column='2')
        {'sub4': 'val4', 'sub3': 'val3'}

        >>> cf.multiget(['key1'])
        {'key1': {'2': {'sub4': 'val4', 'sub3': 'val3'}}}
        >>> cf.multiget(['key1'], super_column='2')
        {'key1': {'sub4': 'val4', 'sub3': 'val3'}}

        >>> list(cf.get_range())
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]
        >>> list(cf.get_range(super_column='2'))
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]

        In the last case, I expected:
        [('key1', {'sub4': 'val4', 'sub3': 'val3'})]

        If the super_column argument is supplied, then all of these make a ColumnParent with:

        cp = ColumnParent(column_family=self.column_family, super_column=super_column)

        Or basically, in the KeySlice returned by get_range_slice(), if super_column was set in the passed in the ColumnParent, the columns member of the KeySlice should be a list of respective SuperColumn.columns and not a list of SuperColumn.

        Another way to describe the problem:
        get_slice(), multiget_slice(), and get_range_slice() all return:
        list<ColumnOrSuperColumn> in their return values in some way or another.

        If super_column is set in the ColumnParent then:
        1. get_slice() and multiget_slice() return the list of SuperColumn.columns each wrapped in a ColumnOrSuperColumn
        2. get_range_slice() returns a list of ONE SuperColumn wrapped in a ColumnOrSuperColumn
        Jonathan Hseu made changes -
        Description Here's an example using my python library ( http://github.com/vomjom/pycasso ):

        >>> import pycasso
        >>> connect = pycasso.connect()
        >>> cf = pycasso.ColumnFamily(connect, 'Test Keyspace', 'Test Super', super=True)
        >>> cf.insert('key1', {'2': {'sub3': 'val3', 'sub4': 'val4'}})

        >>> cf.get('key1')
        {'2': {'sub4': 'val4', 'sub3': 'val3'}}
        >>> cf.get('key1', super_column='2')
        {'sub4': 'val4', 'sub3': 'val3'}

        >>> cf.multiget(['key1'])
        {'key1': {'2': {'sub4': 'val4', 'sub3': 'val3'}}}
        >>> cf.multiget(['key1'], super_column='2')
        {'key1': {'sub4': 'val4', 'sub3': 'val3'}}

        >>> list(cf.get_range())
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]
        >>> list(cf.get_range(super_column='2'))
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]

        In the last case, I expected:
        [('key1', {'sub4': 'val4', 'sub3': 'val3'})]

        If the super_column argument is supplied, then all of these make a ColumnParent with:

        cp = ColumnParent(column_family=self.column_family, super_column=super_column)

        Or basically, in the KeySlice returned by get_range_slice(), if super_column was set in the passed in the ColumnParent, the columns member of the KeySlice should be a list of respective SuperColumn.columns and not a list of SuperColumn.

        Another way to describe the problem:
        get_slice(), multiget_slice(), and get_range_slice() all return:
        list<ColumnOrSuperColumn> in their return values in some way or another.

        If super_column is set in the ColumnParent then, for each ColumnOrSuperColumn
        1. get_slice() and multiget_slice() return a list of SuperColumn.columns each wrapped in a ColumnOrSuperColumn
        2. get_range_slice() returns a list of ONE SuperColumn wrapped in a ColumnOrSuperColumn
        Here's an example using my python library ( http://github.com/vomjom/pycasso ):

        >>> import pycasso
        >>> connect = pycasso.connect()
        >>> cf = pycasso.ColumnFamily(connect, 'Test Keyspace', 'Test Super', super=True)
        >>> cf.insert('key1', {'2': {'sub3': 'val3', 'sub4': 'val4'}})

        >>> cf.get('key1')
        {'2': {'sub4': 'val4', 'sub3': 'val3'}}
        >>> cf.get('key1', super_column='2')
        {'sub4': 'val4', 'sub3': 'val3'}

        >>> cf.multiget(['key1'])
        {'key1': {'2': {'sub4': 'val4', 'sub3': 'val3'}}}
        >>> cf.multiget(['key1'], super_column='2')
        {'key1': {'sub4': 'val4', 'sub3': 'val3'}}

        >>> list(cf.get_range())
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]
        >>> list(cf.get_range(super_column='2'))
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]

        In the last case, I expected:
        [('key1', {'sub4': 'val4', 'sub3': 'val3'})]

        If the super_column argument is supplied, then all of these make a ColumnParent with:

        cp = ColumnParent(column_family=self.column_family, super_column=super_column)

        Or basically, in the KeySlice returned by get_range_slice(), if super_column was set in the passed in the ColumnParent, the columns member of the KeySlice should be a list of respective SuperColumn.columns and not a list of SuperColumn.

        Another way to describe the problem:
        get_slice(), multiget_slice(), and get_range_slice() all return:
        list<ColumnOrSuperColumn> in their return values in some way or another.

        If super_column is set in the ColumnParent then:
        1. get_slice() and multiget_slice() return a list of SuperColumn.columns each wrapped in a ColumnOrSuperColumn
        2. get_range_slice() returns a list of ONE SuperColumn wrapped in a ColumnOrSuperColumn
        Jonathan Hseu made changes -
        Description Here's an example using my python library ( http://github.com/vomjom/pycasso ):

        >>> import pycasso
        >>> connect = pycasso.connect()
        >>> cf = pycasso.ColumnFamily(connect, 'Test Keyspace', 'Test Super', super=True)
        >>> cf.insert('key1', {'2': {'sub3': 'val3', 'sub4': 'val4'}})

        >>> cf.get('key1')
        {'2': {'sub4': 'val4', 'sub3': 'val3'}}
        >>> cf.get('key1', super_column='2')
        {'sub4': 'val4', 'sub3': 'val3'}

        >>> cf.multiget(['key1'])
        {'key1': {'2': {'sub4': 'val4', 'sub3': 'val3'}}}
        >>> cf.multiget(['key1'], super_column='2')
        {'key1': {'sub4': 'val4', 'sub3': 'val3'}}

        >>> list(cf.get_range())
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]
        >>> list(cf.get_range(super_column='2'))
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]

        In the last case, I expected:
        [('key1', {'sub4': 'val4', 'sub3': 'val3'})]

        If the super_column argument is supplied, then all of these make a ColumnParent with:

        cp = ColumnParent(column_family=self.column_family, super_column=super_column)

        Or basically, in the KeySlice returned by get_range_slice(), if super_column was set in the passed in the ColumnParent, the columns member of the KeySlice should be a list of respective SuperColumn.columns and not a list of SuperColumn.
        Here's an example using my python library ( http://github.com/vomjom/pycasso ):

        >>> import pycasso
        >>> connect = pycasso.connect()
        >>> cf = pycasso.ColumnFamily(connect, 'Test Keyspace', 'Test Super', super=True)
        >>> cf.insert('key1', {'2': {'sub3': 'val3', 'sub4': 'val4'}})

        >>> cf.get('key1')
        {'2': {'sub4': 'val4', 'sub3': 'val3'}}
        >>> cf.get('key1', super_column='2')
        {'sub4': 'val4', 'sub3': 'val3'}

        >>> cf.multiget(['key1'])
        {'key1': {'2': {'sub4': 'val4', 'sub3': 'val3'}}}
        >>> cf.multiget(['key1'], super_column='2')
        {'key1': {'sub4': 'val4', 'sub3': 'val3'}}

        >>> list(cf.get_range())
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]
        >>> list(cf.get_range(super_column='2'))
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]

        In the last case, I expected:
        [('key1', {'sub4': 'val4', 'sub3': 'val3'})]

        If the super_column argument is supplied, then all of these make a ColumnParent with:

        cp = ColumnParent(column_family=self.column_family, super_column=super_column)

        Or basically, in the KeySlice returned by get_range_slice(), if super_column was set in the passed in the ColumnParent, the columns member of the KeySlice should be a list of respective SuperColumn.columns and not a list of SuperColumn.

        Another way to describe the problem:
        get_slice(), multiget_slice(), and get_range_slice() all return:
        list<ColumnOrSuperColumn> in their return values in some way or another.

        If super_column is set in the ColumnParent then, for each ColumnOrSuperColumn
        1. get_slice() and multiget_slice() return a list of SuperColumn.columns each wrapped in a ColumnOrSuperColumn
        2. get_range_slice() returns a list of ONE SuperColumn wrapped in a ColumnOrSuperColumn
        Jonathan Hseu made changes -
        Field Original Value New Value
        Description Here's an example using my python library ( http://github.com/vomjom/pycasso ):

        >>> import pycasso
        >>> connect = pycasso.connect()
        >>> cf = pycasso.ColumnFamily(connect, 'Test Keyspace', 'Test Super', super=True)
        >>> cf.insert('key1', {'2': {'sub3': 'val3', 'sub4': 'val4'}})

        >>> cf.get('key1')
        {'2': {'sub4': 'val4', 'sub3': 'val3'}}
        >>> cf.get('key1', super_column='2')
        {'sub4': 'val4', 'sub3': 'val3'}

        >>> cf.multiget(['key1'])
        {'key1': {'2': {'sub4': 'val4', 'sub3': 'val3'}}}
        >>> cf.multiget(['key1'], super_column='2')
        {'key1': {'sub4': 'val4', 'sub3': 'val3'}}

        >>> list(cf.get_range())
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]
        >>> list(cf.get_range(super_column='2'))
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]

        In the last case, I expected:
        [('key1', {'sub4': 'val4', 'sub3': 'val3'})]

        If the super_column argument is supplied, then all of these make a ColumnParent with:

        cp = ColumnParent(column_family=self.column_family, super_column=super_column)

        Or basically, in the KeySlice returned by get_range_slice(), if super_column was set in the passed in the ColumnParent, the columns member should be a list of respective SuperColumn.columns and not a list of SuperColumn.
        Here's an example using my python library ( http://github.com/vomjom/pycasso ):

        >>> import pycasso
        >>> connect = pycasso.connect()
        >>> cf = pycasso.ColumnFamily(connect, 'Test Keyspace', 'Test Super', super=True)
        >>> cf.insert('key1', {'2': {'sub3': 'val3', 'sub4': 'val4'}})

        >>> cf.get('key1')
        {'2': {'sub4': 'val4', 'sub3': 'val3'}}
        >>> cf.get('key1', super_column='2')
        {'sub4': 'val4', 'sub3': 'val3'}

        >>> cf.multiget(['key1'])
        {'key1': {'2': {'sub4': 'val4', 'sub3': 'val3'}}}
        >>> cf.multiget(['key1'], super_column='2')
        {'key1': {'sub4': 'val4', 'sub3': 'val3'}}

        >>> list(cf.get_range())
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]
        >>> list(cf.get_range(super_column='2'))
        [('key1', {'2': {'sub4': 'val4', 'sub3': 'val3'}})]

        In the last case, I expected:
        [('key1', {'sub4': 'val4', 'sub3': 'val3'})]

        If the super_column argument is supplied, then all of these make a ColumnParent with:

        cp = ColumnParent(column_family=self.column_family, super_column=super_column)

        Or basically, in the KeySlice returned by get_range_slice(), if super_column was set in the passed in the ColumnParent, the columns member of the KeySlice should be a list of respective SuperColumn.columns and not a list of SuperColumn.
        Jonathan Hseu created issue -

          People

          • Assignee:
            Jonathan Ellis
            Reporter:
            Jonathan Hseu
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development