/** * Copies this instance to a new one. * * @return the new instance */ public DeleteOptions copy() { DeleteOptions deleteOptions = new DeleteOptions() .writeConcern(getWriteConcern()); if (getCollation() != null) { deleteOptions.collation(Collation.builder(getCollation()).build()); } return deleteOptions; }
<T> DeleteOptions enforceWriteConcern(final DeleteOptions options, final Class<T> klass) { if (options.getWriteConcern() == null) { return options .copy() .writeConcern(getWriteConcern(klass)); } return options; }
@Override public <T> WriteResult delete(final Query<T> query, final WriteConcern wc) { return delete(query, new DeleteOptions().writeConcern(wc)); }
@Test public void passThrough() { Collation collation = Collation.builder() .locale("en") .caseLevel(true) .build(); DBCollectionRemoveOptions options = new DeleteOptions() .collation(collation) .writeConcern(WriteConcern.JOURNALED) .getOptions(); assertEquals(collation, options.getCollation()); assertEquals(WriteConcern.JOURNALED, options.getWriteConcern()); } }
@Test @SuppressWarnings("deprecation") public void testEnforceWriteConcern() { DatastoreImpl ds = (DatastoreImpl) getDs(); FindAndModifyOptions findAndModifyOptions = new FindAndModifyOptions(); assertNull(findAndModifyOptions.getWriteConcern()); assertEquals(ACKNOWLEDGED, ds.enforceWriteConcern(findAndModifyOptions, FacebookUser.class) .getWriteConcern()); assertEquals(MAJORITY, ds.enforceWriteConcern(findAndModifyOptions.writeConcern(MAJORITY), FacebookUser.class) .getWriteConcern()); InsertOptions insertOptions = new InsertOptions(); assertNull(insertOptions.getWriteConcern()); assertEquals(ACKNOWLEDGED, ds.enforceWriteConcern(insertOptions, FacebookUser.class) .getWriteConcern()); assertEquals(MAJORITY, ds.enforceWriteConcern(insertOptions.writeConcern(MAJORITY), FacebookUser.class) .getWriteConcern()); UpdateOptions updateOptions = new UpdateOptions(); assertNull(updateOptions.getWriteConcern()); assertEquals(ACKNOWLEDGED, ds.enforceWriteConcern(updateOptions, FacebookUser.class) .getWriteConcern()); assertEquals(MAJORITY, ds.enforceWriteConcern(updateOptions.writeConcern(MAJORITY), FacebookUser.class) .getWriteConcern()); DeleteOptions deleteOptions = new DeleteOptions(); assertNull(deleteOptions.getWriteConcern()); assertEquals(ACKNOWLEDGED, ds.enforceWriteConcern(deleteOptions, FacebookUser.class) .getWriteConcern()); assertEquals(MAJORITY, ds.enforceWriteConcern(deleteOptions.writeConcern(MAJORITY), FacebookUser.class) .getWriteConcern()); }
@Test public void testDeleteWithCollation() { checkMinServerVersion(3.4); getDs().getCollection(FacebookUser.class).drop(); getDs().save(asList(new FacebookUser(1, "John Doe"), new FacebookUser(2, "john doe"))); Query<FacebookUser> query = getDs().find(FacebookUser.class) .field("username").equal("john doe"); assertEquals(1, getDs().delete(query).getN()); assertEquals(1, getDs().delete(query, new DeleteOptions() .collation(Collation.builder() .locale("en") .collationStrength(CollationStrength.SECONDARY) .build())) .getN()); }
@Override public <T> WriteResult delete(final Query<T> query, final DeleteOptions options) { DBCollection dbColl = query.getCollection(); // TODO remove this after testing. if (dbColl == null) { dbColl = getCollection(query.getEntityClass()); } if (query.getSortObject() != null || query.getOffset() != 0 || query.getLimit() > 0) { throw new QueryException("Delete does not allow sort/offset/limit query options."); } return dbColl.remove(query.getQueryObject(), enforceWriteConcern(options, query.getEntityClass()).getOptions()); }
@Override public <T> WriteResult delete(final T entity, final WriteConcern wc) { return delete(entity, new DeleteOptions().writeConcern(wc)); }
@Override public <T, V> WriteResult delete(final Class<T> clazz, final V id) { return delete(clazz, id, new DeleteOptions().writeConcern(getWriteConcern(clazz))); }
@Override @Deprecated public <T, V> WriteResult delete(final String kind, final Class<T> clazz, final V id, final WriteConcern wc) { return delete(find(kind, clazz).filter("_id", id), new DeleteOptions().writeConcern(wc)); }
@Override public <T> WriteResult delete(final Query<T> query) { return delete(query, new DeleteOptions().writeConcern(getWriteConcern(query.getEntityClass()))); }