code: func (b *lowBuilder) sortedStorageAt(sortedType dbname, filePrefix string) (map[string]interface{}, error) {
  	dbms, err := b.sortedDBMS(sortedType)
  	if err != nil {
  		return nil, err
  	}
  	if dbms != nil {
  		return dbms, nil
  	}
  	if b.high.MemoryIndex {
  		return map[string]interface{}{
  			"type": "memory",
  		}, nil
  	}
  	if sortedType != "index" && filePrefix == "" {
  		return nil, fmt.Errorf("internal error: use of sortedStorageAt with a non-index type (%v) and no file location for non-database sorted implementation", sortedType)
  	}
  	// dbFile returns path directly if sortedType == "index", else it returns filePrefix+"."+ext.
  	dbFile := func(path, ext string) string {
  		if sortedType == "index" {
  			return path
  		}
  		return filePrefix + "." + ext
  	}
  	if b.high.SQLite != "" {
  		return map[string]interface{}{
  			"type": "sqlite",
  			"file": dbFile(b.high.SQLite, "sqlite"),
  		}, nil
  	}
  	if b.high.KVFile != "" {
  		return map[string]interface{}{
  			"type": "kv",
  			"file": dbFile(b.high.KVFile, "kv"),
  		}, nil
  	}
  	if b.high.LevelDB != "" {
  		return map[string]interface{}{
  			"type": "leveldb",
  			"file": dbFile(b.high.LevelDB, "leveldb"),
  		}, nil
  	}
  	panic("internal error: sortedStorageAt didn't find a sorted implementation")
  }
docs: // filePrefix gives a file path of where to put the database. It can be omitted by
  // some sorted implementations, but is required by others.
  // The filePrefix should be to a file, not a directory, and should not end in a ".ext" extension.
  // An extension like ".kv" or ".sqlite" will be added.