func()

in store/engine/postgresql/postgresql.go [181:220]


func (p *Postgresql) List(ctx context.Context, prefix string) ([]engine.Entry, error) {
	prefixWithWildcard := prefix + "%"
	query := "SELECT key, value from kv WHERE key LIKE $1"
	rows, err := p.db.Query(query, prefixWithWildcard)
	if err != nil {
		return nil, err
	}
	defer rows.Close()

	prefixLen := len(prefix)
	entries := make([]engine.Entry, 0)
	for rows.Next() {
		var key string
		var value []byte

		err := rows.Scan(&key, &value)
		if err != nil {
			return nil, err
		}

		if key == prefix {
			continue
		}

		key = strings.TrimLeft(key[prefixLen+1:], "/")
		if strings.ContainsRune(key, '/') {
			continue
		}
		entries = append(entries, engine.Entry{
			Key:   key,
			Value: value,
		})
	}

	if err := rows.Err(); err != nil {
		return nil, err
	}

	return entries, nil
}