| Index: impl/memory/datastore_query_execution_test.go
 | 
| diff --git a/impl/memory/datastore_query_execution_test.go b/impl/memory/datastore_query_execution_test.go
 | 
| index 2a030b9c2455b075083a39564920f325bb0bb046..0f83959d90b42a99baad5a4d54fb1cb766ac5c05 100644
 | 
| --- a/impl/memory/datastore_query_execution_test.go
 | 
| +++ b/impl/memory/datastore_query_execution_test.go
 | 
| @@ -10,11 +10,13 @@ import (
 | 
|  	"testing"
 | 
|  	"time"
 | 
|  
 | 
| +	"github.com/luci/gae/service/blobstore"
 | 
|  	ds "github.com/luci/gae/service/datastore"
 | 
|  	"github.com/luci/gae/service/info"
 | 
| +	"golang.org/x/net/context"
 | 
| +
 | 
|  	. "github.com/luci/luci-go/common/testing/assertions"
 | 
|  	. "github.com/smartystreets/goconvey/convey"
 | 
| -	"golang.org/x/net/context"
 | 
|  )
 | 
|  
 | 
|  type qExpect struct {
 | 
| @@ -85,6 +87,32 @@ var stage2Data = []ds.PropertyMap{
 | 
|  	),
 | 
|  }
 | 
|  
 | 
| +var collapsedData = []ds.PropertyMap{
 | 
| +	// PTTime
 | 
| +	pmap("$key", key("Kind", 1), Next,
 | 
| +		"Date", time.Date(2000, time.January, 1, 1, 1, 1, 1, time.UTC), Next,
 | 
| +	),
 | 
| +	pmap("$key", key("Kind", 2), Next,
 | 
| +		"Date", time.Date(2000, time.March, 1, 1, 1, 1, 1, time.UTC), Next,
 | 
| +	),
 | 
| +
 | 
| +	// PTBlobKey
 | 
| +	pmap("$key", key("Kind", 3), Next,
 | 
| +		"Key", blobstore.Key("foo"), Next,
 | 
| +	),
 | 
| +	pmap("$key", key("Kind", 4), Next,
 | 
| +		"Key", blobstore.Key("qux"), Next,
 | 
| +	),
 | 
| +
 | 
| +	// PTBytes
 | 
| +	pmap("$key", key("Kind", 5), Next,
 | 
| +		"Val", []byte("ohai"), Next,
 | 
| +	),
 | 
| +	pmap("$key", key("Kind", 6), Next,
 | 
| +		"Val", []byte("uwutm8"), Next,
 | 
| +	),
 | 
| +}
 | 
| +
 | 
|  var queryExecutionTests = []qExTest{
 | 
|  	{"basic", []qExStage{
 | 
|  		{
 | 
| @@ -385,6 +413,56 @@ var queryExecutionTests = []qExTest{
 | 
|  			},
 | 
|  		},
 | 
|  	}},
 | 
| +	{"collapsed types", []qExStage{
 | 
| +		{
 | 
| +			putEnts: collapsedData,
 | 
| +		},
 | 
| +		{
 | 
| +			expect: []qExpect{
 | 
| +				// PTTime
 | 
| +				{
 | 
| +					q: nq("Kind").Lte("Date", time.Date(2000, time.February, 1, 1, 1, 1, 1, time.UTC)),
 | 
| +					get: []ds.PropertyMap{
 | 
| +						collapsedData[0],
 | 
| +					},
 | 
| +				},
 | 
| +				{
 | 
| +					q: nq("Kind").Eq("Date", time.Date(2000, time.March, 1, 1, 1, 1, 1, time.UTC)),
 | 
| +					get: []ds.PropertyMap{
 | 
| +						collapsedData[1],
 | 
| +					},
 | 
| +				},
 | 
| +
 | 
| +				// PTBlobKey
 | 
| +				{
 | 
| +					q: nq("Kind").Lte("Key", blobstore.Key("foo")),
 | 
| +					get: []ds.PropertyMap{
 | 
| +						collapsedData[2],
 | 
| +					},
 | 
| +				},
 | 
| +				{
 | 
| +					q: nq("Kind").Eq("Key", blobstore.Key("qux")),
 | 
| +					get: []ds.PropertyMap{
 | 
| +						collapsedData[3],
 | 
| +					},
 | 
| +				},
 | 
| +
 | 
| +				// PTBytes
 | 
| +				{
 | 
| +					q: nq("Kind").Lte("Val", []byte("ohai")),
 | 
| +					get: []ds.PropertyMap{
 | 
| +						collapsedData[4],
 | 
| +					},
 | 
| +				},
 | 
| +				{
 | 
| +					q: nq("Kind").Eq("Val", []byte("uwutm8")),
 | 
| +					get: []ds.PropertyMap{
 | 
| +						collapsedData[5],
 | 
| +					},
 | 
| +				},
 | 
| +			},
 | 
| +		},
 | 
| +	}},
 | 
|  }
 | 
|  
 | 
|  func TestQueryExecution(t *testing.T) {
 | 
| @@ -468,7 +546,7 @@ func TestQueryExecution(t *testing.T) {
 | 
|  										So(data.GetAll(expect.q, &rslt), ShouldBeNil)
 | 
|  										So(len(rslt), ShouldEqual, len(expect.get))
 | 
|  										for i, r := range rslt {
 | 
| -											So(r, ShouldResemble, expect.get[i])
 | 
| +											So(r, ShouldResembleV, expect.get[i])
 | 
|  										}
 | 
|  										return nil
 | 
|  									}, &ds.TransactionOptions{XG: true})
 | 
| 
 |