Okay, I reversed the composite and seem to have come up with a solution. Although the rows are sorted by the status, the statuses are sorted temporally which helps. I tell you this type of modeling really breaks the rules :)

Anthony


On Fri, Sep 2, 2011 at 3:54 PM, Anthony Ikeda <anthony.ikeda.dev@gmail.com> wrote:
This is what I'm trying to do:

Sample of the data:
RowKey: localhost
=> (column=e3f3c900-d5b0-11e0-aa6b-005056c00008:ACTIVE, value=<?xml version="1.0" encoding="UTF-8" standalone="yes"?>, timestamp=1315001665761000)
=> (column=e4515250-d5b0-11e0-aa6b-005056c00008:INACTIVE, value=<?xml version="1.0" encoding="UTF-8" standalone="yes"?>, timestamp=1315001654271000)
=> (column=e45549f0-d5b0-11e0-aa6b-005056c00008:INACTIVE, value=<?xml version="1.0" encoding="UTF-8" standalone="yes"?>, timestamp=1315001654327000)
=> (column=e45cc400-d5b0-11e0-aa6b-005056c00008:INACTIVE, value=<?xml version="1.0" encoding="UTF-8" standalone="yes"?>, timestamp=1315001654355000)
=> (column=e462de80-d5b0-11e0-aa6b-005056c00008:INACTIVE, value=<?xml version="1.0" encoding="UTF-8" standalone="yes"?>, timestamp=1315001654394000)


I'll be activating and deactivating the inactive profiles in a chronological order.

  • So I want to first retrieve current "ACTIVE" record (easy cause it's cached)
  • Put it to use and when ready, recreate the column - same timeUUID but "EXHAUSTED" status (delete then add)
  • Next I have to fetch the first "INACTIVE" column after this, delete that and re-create the record with an "ACTIVE" composite (same timeuuid, again add then delete) and repeat the process.

The second part of my composite is an ENUM of String literals: Status.ACTIVE, Status.INACTIVE, Status.EXHAUSTED

I want to get the current row key of value (startTimeUUID, "ACTIVE") which should only be one column (provided the code works)

All earlier columns are (timeUUID, "EXHAUSTED"), all later columns should be (timeUUID, "INACTIVE")

I'm thinking to find the column that is "ACTIVE" I would set the range:

startComp = new Composite(timeUUID, "ACTIVE");
endComp = new Composite(timeUUID, ""ACTIVE_");

query.setRange(startComp, endComp, false, 2); //Fetch 2 just in case

To get all "INACTIVE" columns I'd use
startComp = new Composite(timeUUID, "INACTIVE");
endComp = new Composite(timeUUID, ""INACTIVE_");

query.setRange(startComp, endComp, false, 10);

Thing is I'm getting back all columns regardless of what I set for the second half of the composite. Is what I'm trying to do possible?

Anthony


On Fri, Sep 2, 2011 at 12:29 PM, Nate McCall <nate@datastax.com> wrote:
Instead of empty strings, try Character.[MAX|MIN-]_VALUE.

On Thu, Sep 1, 2011 at 8:27 PM, Anthony Ikeda
<anthony.ikeda.dev@gmail.com> wrote:
> My Column name is of Composite(TimeUUIDType, UTF8Type) and I can query
> across the TimeUUIDs correctly, but now I want to also range across the UTF8
> component. Is this possible?
>
> UUID start = uuidForDate(new Date(1979, 1, 1));
>
> UUID end = uuidForDate(new Date(Long.MAX_VALUE));
>
> String startState = "";
>
> String endState = "";
>
> if (desiredState != null) {
>
>     mLog.debug("Restricting state to [" + desiredState.getValue() + "]");
>
>     startState = desiredState.getValue();
>
>     endState = desiredState.getValue().concat("_");
>
> }
>
>
>
> Composite startComp = new Composite(start, startState);
>
> Composite endComp = new Composite(end, endState);
>
> query.setRange(startComp, endComp, true, count);
>
> So far I'm not seeing any effect setting my "endState" String value.
>
> Anthony