add upsert operation