Remove created field

This commit is contained in:
tidwall 2022-09-21 10:03:53 -07:00
parent 2c643996e7
commit def9c173bf
9 changed files with 52 additions and 63 deletions

View File

@ -196,7 +196,7 @@ func (c *Collection) Set(obj *object.Object) (prev *object.Object) {
// Delete removes an object and returns it.
// If the object does not exist then the 'ok' return value will be false.
func (c *Collection) Delete(id string) (prev *object.Object) {
key := object.New(id, nil, 0, 0, field.List{})
key := object.New(id, nil, 0, field.List{})
prev, _ = c.items.Delete(key)
if prev == nil {
return nil
@ -221,7 +221,7 @@ func (c *Collection) Delete(id string) (prev *object.Object) {
// Get returns an object.
// If the object does not exist then the 'ok' return value will be false.
func (c *Collection) Get(id string) *object.Object {
key := object.New(id, nil, 0, 0, field.List{})
key := object.New(id, nil, 0, field.List{})
obj, _ := c.items.Get(key)
return obj
}
@ -291,7 +291,7 @@ func (c *Collection) ScanRange(
return keepon
}
pstart := object.New(start, nil, 0, 0, field.List{})
pstart := object.New(start, nil, 0, field.List{})
if desc {
c.items.Descend(pstart, iter)
} else {
@ -354,8 +354,8 @@ func (c *Collection) SearchValuesRange(start, end string, desc bool,
return keepon
}
pstart := object.New("", String(start), 0, 0, field.List{})
pend := object.New("", String(end), 0, 0, field.List{})
pstart := object.New("", String(start), 0, field.List{})
pend := object.New("", String(end), 0, field.List{})
if desc {
// descend range
c.values.Descend(pstart, func(item *object.Object) bool {
@ -394,7 +394,7 @@ func (c *Collection) ScanGreaterOrEqual(id string, desc bool,
keepon = iterator(o)
return keepon
}
pstart := object.New(id, nil, 0, 0, field.List{})
pstart := object.New(id, nil, 0, field.List{})
if desc {
c.items.Descend(pstart, iter)
} else {

View File

@ -48,7 +48,7 @@ func TestCollectionNewCollection(t *testing.T) {
id := strconv.FormatInt(int64(i), 10)
obj := PO(rand.Float64()*360-180, rand.Float64()*180-90)
objs[id] = obj
c.Set(object.New(id, obj, 0, 0, field.List{}))
c.Set(object.New(id, obj, 0, field.List{}))
}
count := 0
bbox := geometry.Rect{
@ -81,31 +81,31 @@ func TestCollectionSet(t *testing.T) {
t.Run("AddString", func(t *testing.T) {
c := New()
str1 := String("hello")
old := c.Set(object.New("str", str1, 0, 0, field.List{}))
old := c.Set(object.New("str", str1, 0, field.List{}))
expect(t, old == nil)
})
t.Run("UpdateString", func(t *testing.T) {
c := New()
str1 := String("hello")
str2 := String("world")
old := c.Set(object.New("str", str1, 0, 0, field.List{}))
old := c.Set(object.New("str", str1, 0, field.List{}))
expect(t, old == nil)
old = c.Set(object.New("str", str2, 0, 0, field.List{}))
old = c.Set(object.New("str", str2, 0, field.List{}))
expect(t, old.Geo() == str1)
})
t.Run("AddPoint", func(t *testing.T) {
c := New()
point1 := PO(-112.1, 33.1)
old := c.Set(object.New("point", point1, 0, 0, field.List{}))
old := c.Set(object.New("point", point1, 0, field.List{}))
expect(t, old == nil)
})
t.Run("UpdatePoint", func(t *testing.T) {
c := New()
point1 := PO(-112.1, 33.1)
point2 := PO(-112.2, 33.2)
old := c.Set(object.New("point", point1, 0, 0, field.List{}))
old := c.Set(object.New("point", point1, 0, field.List{}))
expect(t, old == nil)
old = c.Set(object.New("point", point2, 0, 0, field.List{}))
old = c.Set(object.New("point", point2, 0, field.List{}))
expect(t, old.Geo().Center() == point1.Base())
})
t.Run("Fields", func(t *testing.T) {
@ -115,7 +115,7 @@ func TestCollectionSet(t *testing.T) {
fNames := []string{"a", "b", "c"}
fValues := []string{"1", "2", "3"}
fields1 := toFields(fNames, fValues)
old := c.Set(object.New("str", str1, 0, 0, fields1))
old := c.Set(object.New("str", str1, 0, fields1))
expect(t, old == nil)
str2 := String("hello")
@ -124,23 +124,23 @@ func TestCollectionSet(t *testing.T) {
fValues = []string{"4", "5", "6"}
fields2 := toFields(fNames, fValues)
old = c.Set(object.New("str", str2, 0, 0, fields2))
old = c.Set(object.New("str", str2, 0, fields2))
expect(t, old.Geo() == str1)
expect(t, reflect.DeepEqual(old.Fields(), fields1))
fNames = []string{"a", "b", "c", "d", "e", "f"}
fValues = []string{"7", "8", "9", "10", "11", "12"}
fields3 := toFields(fNames, fValues)
old = c.Set(object.New("str", str1, 0, 0, fields3))
old = c.Set(object.New("str", str1, 0, fields3))
expect(t, old.Geo() == str2)
expect(t, reflect.DeepEqual(old.Fields(), fields2))
})
t.Run("Delete", func(t *testing.T) {
c := New()
c.Set(object.New("1", String("1"), 0, 0, field.List{}))
c.Set(object.New("2", String("2"), 0, 0, field.List{}))
c.Set(object.New("3", PO(1, 2), 0, 0, field.List{}))
c.Set(object.New("1", String("1"), 0, field.List{}))
c.Set(object.New("2", String("2"), 0, field.List{}))
c.Set(object.New("3", PO(1, 2), 0, field.List{}))
expect(t, c.Count() == 3)
expect(t, c.StringCount() == 2)
@ -196,7 +196,7 @@ func TestCollectionScan(t *testing.T) {
c := New()
for _, i := range rand.Perm(N) {
id := fmt.Sprintf("%04d", i)
c.Set(object.New(id, String(id), 0, 0, makeFields(
c.Set(object.New(id, String(id), 0, makeFields(
field.Make("ex", id),
)))
}
@ -293,8 +293,7 @@ func TestCollectionSearch(t *testing.T) {
id := fmt.Sprintf("%04d", j)
ex := fmt.Sprintf("%04d", i)
c.Set(object.New(id, String(ex),
0, 0,
makeFields(
0, makeFields(
field.Make("i", ex),
field.Make("j", id),
)))
@ -352,11 +351,11 @@ func TestCollectionSearch(t *testing.T) {
func TestCollectionWeight(t *testing.T) {
c := New()
c.Set(object.New("1", String("1"), 0, 0, field.List{}))
c.Set(object.New("1", String("1"), 0, field.List{}))
expect(t, c.TotalWeight() > 0)
c.Delete("1")
expect(t, c.TotalWeight() == 0)
c.Set(object.New("1", String("1"), 0, 0,
c.Set(object.New("1", String("1"), 0,
toFields(
[]string{"a", "b", "c"},
[]string{"1", "2", "3"},
@ -365,19 +364,19 @@ func TestCollectionWeight(t *testing.T) {
expect(t, c.TotalWeight() > 0)
c.Delete("1")
expect(t, c.TotalWeight() == 0)
c.Set(object.New("1", String("1"), 0, 0,
c.Set(object.New("1", String("1"), 0,
toFields(
[]string{"a", "b", "c"},
[]string{"1", "2", "3"},
),
))
c.Set(object.New("2", String("2"), 0, 0,
c.Set(object.New("2", String("2"), 0,
toFields(
[]string{"d", "e", "f"},
[]string{"4", "5", "6"},
),
))
c.Set(object.New("1", String("1"), 0, 0,
c.Set(object.New("1", String("1"), 0,
toFields(
[]string{"d", "e", "f"},
[]string{"4", "5", "6"},
@ -417,13 +416,13 @@ func TestSpatialSearch(t *testing.T) {
q4, _ := geojson.Parse(gjson.Get(json, `features.#[id=="q4"]`).Raw, nil)
c := New()
c.Set(object.New("p1", p1, 0, 0, field.List{}))
c.Set(object.New("p2", p2, 0, 0, field.List{}))
c.Set(object.New("p3", p3, 0, 0, field.List{}))
c.Set(object.New("p4", p4, 0, 0, field.List{}))
c.Set(object.New("r1", r1, 0, 0, field.List{}))
c.Set(object.New("r2", r2, 0, 0, field.List{}))
c.Set(object.New("r3", r3, 0, 0, field.List{}))
c.Set(object.New("p1", p1, 0, field.List{}))
c.Set(object.New("p2", p2, 0, field.List{}))
c.Set(object.New("p3", p3, 0, field.List{}))
c.Set(object.New("p4", p4, 0, field.List{}))
c.Set(object.New("r1", r1, 0, field.List{}))
c.Set(object.New("r2", r2, 0, field.List{}))
c.Set(object.New("r3", r3, 0, field.List{}))
var n int
@ -507,7 +506,7 @@ func TestCollectionSparse(t *testing.T) {
x := (r.Max.X-r.Min.X)*rand.Float64() + r.Min.X
y := (r.Max.Y-r.Min.Y)*rand.Float64() + r.Min.Y
point := PO(x, y)
c.Set(object.New(fmt.Sprintf("%d", i), point, 0, 0, field.List{}))
c.Set(object.New(fmt.Sprintf("%d", i), point, 0, field.List{}))
}
var n int
n = 0
@ -587,7 +586,7 @@ func TestManyCollections(t *testing.T) {
col = New()
colsM[key] = col
}
col.Set(object.New(id, obj, 0, 0, field.List{}))
col.Set(object.New(id, obj, 0, field.List{}))
k++
}
}
@ -641,7 +640,7 @@ func benchmarkInsert(t *testing.B, nFields int) {
col := New()
t.ResetTimer()
for i := 0; i < t.N; i++ {
col.Set(object.New(items[i].id, items[i].object, 0, 0, items[i].fields))
col.Set(object.New(items[i].id, items[i].object, 0, items[i].fields))
}
}
@ -665,11 +664,11 @@ func benchmarkReplace(t *testing.B, nFields int) {
}
col := New()
for i := 0; i < t.N; i++ {
col.Set(object.New(items[i].id, items[i].object, 0, 0, items[i].fields))
col.Set(object.New(items[i].id, items[i].object, 0, items[i].fields))
}
t.ResetTimer()
for _, i := range rand.Perm(t.N) {
o := col.Set(object.New(items[i].id, items[i].object, 0, 0, field.List{}))
o := col.Set(object.New(items[i].id, items[i].object, 0, field.List{}))
if o.Geo() != items[i].object {
t.Fatal("shoot!")
}
@ -696,7 +695,7 @@ func benchmarkGet(t *testing.B, nFields int) {
}
col := New()
for i := 0; i < t.N; i++ {
col.Set(object.New(items[i].id, items[i].object, 0, 0, items[i].fields))
col.Set(object.New(items[i].id, items[i].object, 0, items[i].fields))
}
t.ResetTimer()
for _, i := range rand.Perm(t.N) {
@ -727,7 +726,7 @@ func benchmarkRemove(t *testing.B, nFields int) {
}
col := New()
for i := 0; i < t.N; i++ {
col.Set(object.New(items[i].id, items[i].object, 0, 0, items[i].fields))
col.Set(object.New(items[i].id, items[i].object, 0, items[i].fields))
}
t.ResetTimer()
for _, i := range rand.Perm(t.N) {
@ -758,7 +757,7 @@ func benchmarkScan(t *testing.B, nFields int) {
}
col := New()
for i := 0; i < t.N; i++ {
col.Set(object.New(items[i].id, items[i].object, 0, 0, items[i].fields))
col.Set(object.New(items[i].id, items[i].object, 0, items[i].fields))
}
t.ResetTimer()
for i := 0; i < t.N; i++ {

View File

@ -9,7 +9,6 @@ import (
type Object struct {
id string
geo geojson.Object
created int64 // unix nano created
expires int64 // unix nano expiration
fields field.List
}
@ -28,13 +27,6 @@ func (o *Object) Fields() field.List {
return o.fields
}
func (o *Object) Created() int64 {
if o == nil {
return 0
}
return o.created
}
func (o *Object) Expires() int64 {
if o == nil {
return 0
@ -83,13 +75,11 @@ func (o *Object) Weight() int {
return weight
}
func New(id string, geo geojson.Object, created, expires int64,
fields field.List,
func New(id string, geo geojson.Object, expires int64, fields field.List,
) *Object {
return &Object{
id: id,
geo: geo,
created: created,
expires: expires,
fields: fields,
}

View File

@ -13,6 +13,6 @@ func P(x, y float64) geojson.Object {
return geojson.NewSimplePoint(geometry.Point{X: 10, Y: 20})
}
func TestObject(t *testing.T) {
o := New("hello", P(10, 20), 0, 99, field.List{})
o := New("hello", P(10, 20), 99, field.List{})
assert.Assert(o.ID() == "hello")
}

View File

@ -721,7 +721,7 @@ func (s *Server) cmdSET(msg *Message) (resp.Value, commandDetails, error) {
ofields = ofields.Set(f)
}
obj := object.New(id, oobj, 0, ex, ofields)
obj := object.New(id, oobj, ex, ofields)
old := col.Set(obj)
// >> Response
@ -815,7 +815,7 @@ func (s *Server) cmdFSET(msg *Message) (resp.Value, commandDetails, error) {
updateCount++
}
}
obj := object.New(id, o.Geo(), 0, o.Expires(), ofields)
obj := object.New(id, o.Geo(), o.Expires(), ofields)
col.Set(obj)
d.command = "fset"
d.key = key
@ -860,7 +860,7 @@ func (s *Server) cmdEXPIRE(msg *Message) (resp.Value, commandDetails, error) {
o := col.Get(id)
ok = o != nil
if ok {
obj = object.New(id, o.Geo(), 0, ex, o.Fields())
obj = object.New(id, o.Geo(), ex, o.Fields())
col.Set(obj)
}
}
@ -919,7 +919,7 @@ func (s *Server) cmdPERSIST(msg *Message) (resp.Value, commandDetails, error) {
var obj *object.Object
var cleared bool
if o.Expires() != 0 {
obj = object.New(id, o.Geo(), 0, 0, o.Fields())
obj = object.New(id, o.Geo(), 0, o.Fields())
col.Set(obj)
cleared = true
}

View File

@ -156,7 +156,7 @@ func fenceMatch(
fence.cmd = "intersects"
temp = true
}
lso := object.New("", ls, 0, 0, field.List{})
lso := object.New("", ls, 0, field.List{})
if fenceMatchObject(fence, lso) {
detect = "cross"
}

View File

@ -300,7 +300,7 @@ func (s *Server) cmdJset(msg *Message) (res resp.Value, d commandDetails, err er
s.cols.Set(key, col)
}
var oobj geojson.Object = collection.String(json)
obj := object.New(id, oobj, 0, 0, fields)
obj := object.New(id, oobj, 0, fields)
col.Set(obj)
d.key = key
@ -369,7 +369,7 @@ func (s *Server) cmdJdel(msg *Message) (res resp.Value, d commandDetails, err er
}
var oobj geojson.Object = collection.String(json)
obj := object.New(id, oobj, 0, 0, fields)
obj := object.New(id, oobj, 0, fields)
col.Set(obj)
d.key = key

View File

@ -307,7 +307,7 @@ func (sw *scanWriter) pushObject(opts ScanWriterParams) (keepGoing bool, err err
opts.obj = object.New(
opts.obj.ID(),
clip.Clip(opts.obj.Geo(), opts.clip, &sw.s.geomIndexOpts),
0, opts.obj.Expires(),
opts.obj.Expires(),
opts.obj.Fields(),
)
}

View File

@ -48,7 +48,7 @@ func BenchmarkFieldMatch(t *testing.B) {
for i := 0; i < t.N; i++ {
// one call is super fast, measurements are not reliable, let's do 100
for ix := 0; ix < 100; ix++ {
sw.fieldMatch(object.New("", items[i].object, 0, 0, items[i].fields))
sw.fieldMatch(object.New("", items[i].object, 0, items[i].fields))
}
}
}