46 lines
729 B
Go
46 lines
729 B
Go
package ramdb
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/google/btree"
|
|
)
|
|
|
|
type table struct {
|
|
exists bool
|
|
mutex *sync.Mutex
|
|
indexes map[string]*index
|
|
}
|
|
|
|
// CreateIndex creates an index for onColumn.
|
|
func (t *table) CreateIndex(column string) error {
|
|
if column == "" {
|
|
return ErrInvalidIndex
|
|
}
|
|
|
|
if _, found := t.indexes[column]; found {
|
|
return ErrIndexExists
|
|
}
|
|
|
|
idx := &index{
|
|
tree: btree.New(5),
|
|
column: column,
|
|
table: t,
|
|
}
|
|
|
|
t.mutex.Lock()
|
|
defer t.mutex.Unlock()
|
|
|
|
t.indexes[column] = idx
|
|
return nil
|
|
}
|
|
|
|
// HasIndex returns true if an index exists for the column and false if it does not.
|
|
func (t *table) HasIndex(column string) bool {
|
|
if _, found := t.indexes[column]; found {
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|