mirror of https://github.com/tidwall/tile38.git
removed ScanType
This commit is contained in:
parent
4656c4c8f3
commit
53ceb4ee2e
|
@ -150,7 +150,7 @@ func (c *Controller) aofshrink() {
|
||||||
objs := make(map[string]objFields)
|
objs := make(map[string]objFields)
|
||||||
c.mu.Lock()
|
c.mu.Lock()
|
||||||
fnames := col.FieldArr() // reload an array of field names to match each object
|
fnames := col.FieldArr() // reload an array of field names to match each object
|
||||||
col.ScanGreaterOrEqual(nextID, 1, collection.TypeAll, false,
|
col.ScanGreaterOrEqual(nextID, 1, false,
|
||||||
func(id string, obj geojson.Object, fields []float64) bool {
|
func(id string, obj geojson.Object, fields []float64) bool {
|
||||||
if id != nextID {
|
if id != nextID {
|
||||||
objs[id] = objFields{obj, fields}
|
objs[id] = objFields{obj, fields}
|
||||||
|
|
|
@ -6,18 +6,6 @@ import (
|
||||||
"github.com/tidwall/tile38/index"
|
"github.com/tidwall/tile38/index"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ScanType is the classification of objects that are returned from Scan()
|
|
||||||
type ScanType int
|
|
||||||
|
|
||||||
const (
|
|
||||||
// TypeAll means to return all type during a Scan()
|
|
||||||
TypeAll = ScanType(0)
|
|
||||||
// TypeGeometry means to return only geometries
|
|
||||||
TypeGeometry = ScanType(1)
|
|
||||||
// TypeNonGeometry means to return non-geometries
|
|
||||||
TypeNonGeometry = ScanType(2)
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
idOrdered = 0
|
idOrdered = 0
|
||||||
valueOrdered = 1
|
valueOrdered = 1
|
||||||
|
@ -84,15 +72,8 @@ func New() *Collection {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Count returns the number of objects in collection.
|
// Count returns the number of objects in collection.
|
||||||
func (c *Collection) Count(stype ScanType) int {
|
func (c *Collection) Count() int {
|
||||||
switch stype {
|
return c.objects + c.nobjects
|
||||||
default:
|
|
||||||
return c.objects + c.nobjects
|
|
||||||
case TypeGeometry:
|
|
||||||
return c.objects
|
|
||||||
case TypeNonGeometry:
|
|
||||||
return c.nobjects
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// PointCount returns the number of points (lat/lon coordinates) in collection.
|
// PointCount returns the number of points (lat/lon coordinates) in collection.
|
||||||
|
@ -236,7 +217,7 @@ func (c *Collection) FieldArr() []string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scan iterates though the collection ids. A cursor can be used for paging.
|
// Scan iterates though the collection ids. A cursor can be used for paging.
|
||||||
func (c *Collection) Scan(cursor uint64, stype ScanType, desc bool,
|
func (c *Collection) Scan(cursor uint64, desc bool,
|
||||||
iterator func(id string, obj geojson.Object, fields []float64) bool,
|
iterator func(id string, obj geojson.Object, fields []float64) bool,
|
||||||
) (ncursor uint64) {
|
) (ncursor uint64) {
|
||||||
var i uint64
|
var i uint64
|
||||||
|
@ -258,7 +239,7 @@ func (c *Collection) Scan(cursor uint64, stype ScanType, desc bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
// ScanGreaterOrEqual iterates though the collection starting with specified id. A cursor can be used for paging.
|
// ScanGreaterOrEqual iterates though the collection starting with specified id. A cursor can be used for paging.
|
||||||
func (c *Collection) ScanRange(cursor uint64, stype ScanType, start, end string, desc bool,
|
func (c *Collection) ScanRange(cursor uint64, start, end string, desc bool,
|
||||||
iterator func(id string, obj geojson.Object, fields []float64) bool,
|
iterator func(id string, obj geojson.Object, fields []float64) bool,
|
||||||
) (ncursor uint64) {
|
) (ncursor uint64) {
|
||||||
var i uint64
|
var i uint64
|
||||||
|
@ -281,7 +262,7 @@ func (c *Collection) ScanRange(cursor uint64, stype ScanType, start, end string,
|
||||||
}
|
}
|
||||||
|
|
||||||
// SearchValues iterates though the collection values. A cursor can be used for paging.
|
// SearchValues iterates though the collection values. A cursor can be used for paging.
|
||||||
func (c *Collection) SearchValues(cursor uint64, stype ScanType, desc bool,
|
func (c *Collection) SearchValues(cursor uint64, desc bool,
|
||||||
iterator func(id string, obj geojson.Object, fields []float64) bool,
|
iterator func(id string, obj geojson.Object, fields []float64) bool,
|
||||||
) (ncursor uint64) {
|
) (ncursor uint64) {
|
||||||
var i uint64
|
var i uint64
|
||||||
|
@ -303,7 +284,7 @@ func (c *Collection) SearchValues(cursor uint64, stype ScanType, desc bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
// SearchValuesRange iterates though the collection values. A cursor can be used for paging.
|
// SearchValuesRange iterates though the collection values. A cursor can be used for paging.
|
||||||
func (c *Collection) SearchValuesRange(cursor uint64, stype ScanType, start, end string, desc bool,
|
func (c *Collection) SearchValuesRange(cursor uint64, start, end string, desc bool,
|
||||||
iterator func(id string, obj geojson.Object, fields []float64) bool,
|
iterator func(id string, obj geojson.Object, fields []float64) bool,
|
||||||
) (ncursor uint64) {
|
) (ncursor uint64) {
|
||||||
var i uint64
|
var i uint64
|
||||||
|
@ -325,7 +306,7 @@ func (c *Collection) SearchValuesRange(cursor uint64, stype ScanType, start, end
|
||||||
}
|
}
|
||||||
|
|
||||||
// ScanGreaterOrEqual iterates though the collection starting with specified id. A cursor can be used for paging.
|
// ScanGreaterOrEqual iterates though the collection starting with specified id. A cursor can be used for paging.
|
||||||
func (c *Collection) ScanGreaterOrEqual(id string, cursor uint64, stype ScanType, desc bool,
|
func (c *Collection) ScanGreaterOrEqual(id string, cursor uint64, desc bool,
|
||||||
iterator func(id string, obj geojson.Object, fields []float64) bool,
|
iterator func(id string, obj geojson.Object, fields []float64) bool,
|
||||||
) (ncursor uint64) {
|
) (ncursor uint64) {
|
||||||
var i uint64
|
var i uint64
|
||||||
|
|
|
@ -229,7 +229,7 @@ func (c *Controller) cmdDel(msg *server.Message) (res string, d commandDetailsT,
|
||||||
if col != nil {
|
if col != nil {
|
||||||
d.obj, d.fields, ok = col.Remove(d.id)
|
d.obj, d.fields, ok = col.Remove(d.id)
|
||||||
if ok {
|
if ok {
|
||||||
if col.Count(collection.TypeAll) == 0 {
|
if col.Count() == 0 {
|
||||||
c.deleteCol(d.key)
|
c.deleteCol(d.key)
|
||||||
d.revert = func() {
|
d.revert = func() {
|
||||||
c.setCol(d.key, col)
|
c.setCol(d.key, col)
|
||||||
|
|
|
@ -5,7 +5,6 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/tidwall/resp"
|
"github.com/tidwall/resp"
|
||||||
"github.com/tidwall/tile38/controller/collection"
|
|
||||||
"github.com/tidwall/tile38/controller/glob"
|
"github.com/tidwall/tile38/controller/glob"
|
||||||
"github.com/tidwall/tile38/controller/server"
|
"github.com/tidwall/tile38/controller/server"
|
||||||
"github.com/tidwall/tile38/geojson"
|
"github.com/tidwall/tile38/geojson"
|
||||||
|
@ -40,9 +39,8 @@ func (c *Controller) cmdScan(msg *server.Message) (res string, err error) {
|
||||||
}
|
}
|
||||||
sw.writeHead()
|
sw.writeHead()
|
||||||
if sw.col != nil {
|
if sw.col != nil {
|
||||||
stype := collection.TypeAll
|
|
||||||
if sw.output == outputCount && len(sw.wheres) == 0 && sw.globEverything == true {
|
if sw.output == outputCount && len(sw.wheres) == 0 && sw.globEverything == true {
|
||||||
count := sw.col.Count(stype) - int(s.cursor)
|
count := sw.col.Count() - int(s.cursor)
|
||||||
if count < 0 {
|
if count < 0 {
|
||||||
count = 0
|
count = 0
|
||||||
}
|
}
|
||||||
|
@ -50,14 +48,14 @@ func (c *Controller) cmdScan(msg *server.Message) (res string, err error) {
|
||||||
} else {
|
} else {
|
||||||
g := glob.Parse(sw.globPattern, s.desc)
|
g := glob.Parse(sw.globPattern, s.desc)
|
||||||
if g.Limits[0] == "" && g.Limits[1] == "" {
|
if g.Limits[0] == "" && g.Limits[1] == "" {
|
||||||
s.cursor = sw.col.Scan(s.cursor, stype, s.desc,
|
s.cursor = sw.col.Scan(s.cursor, s.desc,
|
||||||
func(id string, o geojson.Object, fields []float64) bool {
|
func(id string, o geojson.Object, fields []float64) bool {
|
||||||
return sw.writeObject(id, o, fields, false)
|
return sw.writeObject(id, o, fields, false)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
s.cursor = sw.col.ScanRange(
|
s.cursor = sw.col.ScanRange(
|
||||||
s.cursor, stype, g.Limits[0], g.Limits[1], s.desc,
|
s.cursor, g.Limits[0], g.Limits[1], s.desc,
|
||||||
func(id string, o geojson.Object, fields []float64) bool {
|
func(id string, o geojson.Object, fields []float64) bool {
|
||||||
return sw.writeObject(id, o, fields, false)
|
return sw.writeObject(id, o, fields, false)
|
||||||
},
|
},
|
||||||
|
|
|
@ -8,7 +8,6 @@ import (
|
||||||
|
|
||||||
"github.com/tidwall/resp"
|
"github.com/tidwall/resp"
|
||||||
"github.com/tidwall/tile38/controller/bing"
|
"github.com/tidwall/tile38/controller/bing"
|
||||||
"github.com/tidwall/tile38/controller/collection"
|
|
||||||
"github.com/tidwall/tile38/controller/glob"
|
"github.com/tidwall/tile38/controller/glob"
|
||||||
"github.com/tidwall/tile38/controller/server"
|
"github.com/tidwall/tile38/controller/server"
|
||||||
"github.com/tidwall/tile38/geojson"
|
"github.com/tidwall/tile38/geojson"
|
||||||
|
@ -366,9 +365,8 @@ func (c *Controller) cmdSearch(msg *server.Message) (res string, err error) {
|
||||||
}
|
}
|
||||||
sw.writeHead()
|
sw.writeHead()
|
||||||
if sw.col != nil {
|
if sw.col != nil {
|
||||||
stype := collection.TypeAll
|
|
||||||
if sw.output == outputCount && len(sw.wheres) == 0 && sw.globEverything == true {
|
if sw.output == outputCount && len(sw.wheres) == 0 && sw.globEverything == true {
|
||||||
count := sw.col.Count(stype) - int(s.cursor)
|
count := sw.col.Count() - int(s.cursor)
|
||||||
if count < 0 {
|
if count < 0 {
|
||||||
count = 0
|
count = 0
|
||||||
}
|
}
|
||||||
|
@ -376,14 +374,14 @@ func (c *Controller) cmdSearch(msg *server.Message) (res string, err error) {
|
||||||
} else {
|
} else {
|
||||||
g := glob.Parse(sw.globPattern, s.desc)
|
g := glob.Parse(sw.globPattern, s.desc)
|
||||||
if g.Limits[0] == "" && g.Limits[1] == "" {
|
if g.Limits[0] == "" && g.Limits[1] == "" {
|
||||||
s.cursor = sw.col.SearchValues(s.cursor, stype, s.desc,
|
s.cursor = sw.col.SearchValues(s.cursor, s.desc,
|
||||||
func(id string, o geojson.Object, fields []float64) bool {
|
func(id string, o geojson.Object, fields []float64) bool {
|
||||||
return sw.writeObject(id, o, fields, false)
|
return sw.writeObject(id, o, fields, false)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
s.cursor = sw.col.SearchValuesRange(
|
s.cursor = sw.col.SearchValuesRange(
|
||||||
s.cursor, stype, g.Limits[0], g.Limits[1], s.desc,
|
s.cursor, g.Limits[0], g.Limits[1], s.desc,
|
||||||
func(id string, o geojson.Object, fields []float64) bool {
|
func(id string, o geojson.Object, fields []float64) bool {
|
||||||
return sw.writeObject(id, o, fields, false)
|
return sw.writeObject(id, o, fields, false)
|
||||||
},
|
},
|
||||||
|
|
|
@ -9,7 +9,6 @@ import (
|
||||||
|
|
||||||
"github.com/tidwall/btree"
|
"github.com/tidwall/btree"
|
||||||
"github.com/tidwall/resp"
|
"github.com/tidwall/resp"
|
||||||
"github.com/tidwall/tile38/controller/collection"
|
|
||||||
"github.com/tidwall/tile38/controller/server"
|
"github.com/tidwall/tile38/controller/server"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -34,7 +33,7 @@ func (c *Controller) cmdStats(msg *server.Message) (res string, err error) {
|
||||||
points := col.PointCount()
|
points := col.PointCount()
|
||||||
m["num_points"] = points
|
m["num_points"] = points
|
||||||
m["in_memory_size"] = col.TotalWeight()
|
m["in_memory_size"] = col.TotalWeight()
|
||||||
m["num_objects"] = col.Count(collection.TypeAll)
|
m["num_objects"] = col.Count()
|
||||||
switch msg.OutputType {
|
switch msg.OutputType {
|
||||||
case server.JSON:
|
case server.JSON:
|
||||||
ms = append(ms, m)
|
ms = append(ms, m)
|
||||||
|
@ -93,7 +92,7 @@ func (c *Controller) cmdServer(msg *server.Message) (res string, err error) {
|
||||||
c.cols.Ascend(func(item btree.Item) bool {
|
c.cols.Ascend(func(item btree.Item) bool {
|
||||||
col := item.(*collectionT).Collection
|
col := item.(*collectionT).Collection
|
||||||
points += col.PointCount()
|
points += col.PointCount()
|
||||||
objects += col.Count(collection.TypeAll)
|
objects += col.Count()
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
m["num_points"] = points
|
m["num_points"] = points
|
||||||
|
@ -156,7 +155,7 @@ func (c *Controller) statsCollections(line string) (string, error) {
|
||||||
points := col.PointCount()
|
points := col.PointCount()
|
||||||
m["num_points"] = points
|
m["num_points"] = points
|
||||||
m["in_memory_size"] = col.TotalWeight()
|
m["in_memory_size"] = col.TotalWeight()
|
||||||
m["num_objects"] = col.Count(collection.TypeAll)
|
m["num_objects"] = col.Count()
|
||||||
ms = append(ms, m)
|
ms = append(ms, m)
|
||||||
} else {
|
} else {
|
||||||
ms = append(ms, nil)
|
ms = append(ms, nil)
|
||||||
|
|
Loading…
Reference in New Issue