Ejemplo n.º 1
0
func (this *builder) selectPrimaryScan(keyspace datastore.Keyspace,
	node *algebra.KeyspaceTerm) (Operator, error) {
	indexers, err := keyspace.Indexers()
	if err != nil {
		return nil, err
	}

	var primary datastore.PrimaryIndex

	for _, indexer := range indexers {
		indexes, err := indexer.PrimaryIndexes()
		if err != nil {
			return nil, err
		}

		for _, index := range indexes {
			state, _, er := index.State()
			if er != nil {
				return nil, er
			}

			if state != datastore.ONLINE {
				primary = index
				continue
			}

			scan := NewPrimaryScan(index, node)
			return scan, nil
		}
	}

	if primary == nil {
		return nil, fmt.Errorf(
			"No primary index on keyspace %s. Use CREATE PRIMARY INDEX to create one.",
			keyspace.Name())
	}

	return nil, fmt.Errorf("Primary index %s not online.", primary.Name())
}