mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-09-11 15:21:02 +00:00
more cardinality and conversions
This commit is contained in:
parent
487a369c6d
commit
32c3b2ad52
2 changed files with 18 additions and 9 deletions
|
|
@ -1715,7 +1715,7 @@ func intersectRunRun(a, b *container) *container {
|
|||
i++
|
||||
}
|
||||
}
|
||||
if output.n < 4096 && len(output.runs) > output.n/2 {
|
||||
if output.n < ArrayMaxSize && len(output.runs) > output.n/2 {
|
||||
output.runToArray()
|
||||
} else if len(output.runs) > RunMaxSize {
|
||||
output.runToBitmap()
|
||||
|
|
@ -1724,10 +1724,10 @@ func intersectRunRun(a, b *container) *container {
|
|||
}
|
||||
|
||||
// intersectBitmapRun returns an array container if the run container's
|
||||
// cardinality is < 4096. Otherwise it returns a bitmap container.
|
||||
// cardinality is < ArrayMaxSize. Otherwise it returns a bitmap container.
|
||||
func intersectBitmapRun(a, b *container) *container {
|
||||
var output *container
|
||||
if b.n < 4096 {
|
||||
if b.n < ArrayMaxSize {
|
||||
// output is array container
|
||||
output = &container{}
|
||||
for _, iv := range b.runs {
|
||||
|
|
@ -1776,7 +1776,7 @@ func intersectBitmapRun(a, b *container) *container {
|
|||
valast = vastart + 63
|
||||
}
|
||||
}
|
||||
if output.n < 4096 {
|
||||
if output.n < ArrayMaxSize {
|
||||
output.bitmapToArray()
|
||||
}
|
||||
}
|
||||
|
|
@ -1906,13 +1906,18 @@ func unionArrayRun(a, b *container) *container {
|
|||
vb = b.runs[j]
|
||||
}
|
||||
if i < na && (j >= nb || va < vb.start) {
|
||||
output.runAppendInterval(interval32{start: va, last: va})
|
||||
output.n += output.runAppendInterval(interval32{start: va, last: va})
|
||||
i++
|
||||
} else {
|
||||
output.runAppendInterval(vb)
|
||||
output.n += output.runAppendInterval(vb)
|
||||
j++
|
||||
}
|
||||
}
|
||||
if output.n < ArrayMaxSize {
|
||||
output.runToArray()
|
||||
} else if len(output.runs) > RunMaxSize {
|
||||
output.runToBitmap()
|
||||
}
|
||||
return output
|
||||
}
|
||||
|
||||
|
|
@ -1953,17 +1958,21 @@ func unionRunRun(a, b *container) *container {
|
|||
vb = b.runs[j]
|
||||
}
|
||||
if i < na && (j >= nb || va.start < vb.start) {
|
||||
output.runAppendInterval(va)
|
||||
output.n += output.runAppendInterval(va)
|
||||
i++
|
||||
} else {
|
||||
output.runAppendInterval(vb)
|
||||
output.n += output.runAppendInterval(vb)
|
||||
j++
|
||||
}
|
||||
}
|
||||
if len(output.runs) > RunMaxSize {
|
||||
output.runToBitmap()
|
||||
}
|
||||
return output
|
||||
}
|
||||
|
||||
func unionBitmapRun(a, b *container) *container {
|
||||
// TODO
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ func TestRunAppendInterval(t *testing.T) {
|
|||
{
|
||||
base: []interval32{{start: 20, last: 23}},
|
||||
app: interval32{start: 19, last: 25},
|
||||
exp: 3,
|
||||
exp: 2, // runAppendInterval explicitly does not support intervals whose start is < c.runs[-1].start
|
||||
},
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue