func (view *viewIndexer) CreateIndex(requestId, name string, equalKey, rangeKey expression.Expressions, where expression.Expression, with value.Value) (datastore.Index, errors.Error) { view.Refresh() if _, exists := view.indexes[name]; exists { return nil, errors.NewCbViewExistsError(nil, name) } // if the name matches any of the unusable indexes, return an error for _, iname := range view.nonUsableIndexes { if name == iname { return nil, errors.NewCbViewExistsError(nil, "Non usuable index "+name) } } if with != nil { return nil, errors.NewCbViewsWithNotAllowedError(nil, "") } logging.Debugf("Creating index %s with equal key %v range key %v", name, equalKey, rangeKey) idx, err := newViewIndex(name, datastore.IndexKey(rangeKey), where, view) if err != nil { return nil, errors.NewCbViewCreateError(err, name) } view.Lock() defer view.Unlock() view.indexes[idx.Name()] = idx return idx, nil }
func (view *viewIndexer) CreatePrimaryIndex(requestId, name string, with value.Value) ( datastore.PrimaryIndex, errors.Error) { // if name is not provided then use default name #primary if name == "" { name = PRIMARY_INDEX } view.Refresh() if _, exists := view.indexes[name]; exists { return nil, errors.NewCbViewExistsError(nil, name) } // if the name matches any of the unusable indexes, return an error for _, iname := range view.nonUsableIndexes { if name == iname { return nil, errors.NewCbViewExistsError(nil, "Non usuable index "+name) } } if with != nil { return nil, errors.NewCbViewsWithNotAllowedError(nil, "") } logging.Debugf("Creating primary index %s", name) idx, err := newViewPrimaryIndex(view, name) if err != nil { return nil, errors.NewCbViewCreateError(err, name) } view.Lock() defer view.Unlock() view.indexes[idx.Name()] = idx view.primary[idx.Name()] = idx return idx, nil }