@Test public void testRelationshipChangeProperty2() { Integer int1 = new Integer(1); Integer int2 = new Integer(2); String string1 = new String("1"); String string2 = new String("2"); Boolean bool1 = new Boolean(true); Boolean bool2 = new Boolean(false); Node node1 = getGraphDb().createNode(); Node node2 = getGraphDb().createNode(); Relationship rel1 = node1.createRelationshipTo(node2, MyRelTypes.TEST); rel1.setProperty(key1, int1); rel1.setProperty(key1, int2); assertEquals(int2, rel1.getProperty(key1)); rel1.removeProperty(key1); rel1.setProperty(key1, string1); rel1.setProperty(key1, string2); assertEquals(string2, rel1.getProperty(key1)); rel1.removeProperty(key1); rel1.setProperty(key1, bool1); rel1.setProperty(key1, bool2); assertEquals(bool2, rel1.getProperty(key1)); rel1.removeProperty(key1); rel1.delete(); node2.delete(); node1.delete(); }
@Test public void testRelMultiRemoveProperty() { Node node1 = getGraphDb().createNode(); Node node2 = getGraphDb().createNode(); Relationship rel = node1.createRelationshipTo(node2, MyRelTypes.TEST); rel.setProperty("key0", "0"); rel.setProperty("key1", "1"); rel.setProperty("key2", "2"); rel.setProperty("key3", "3"); rel.setProperty("key4", "4"); newTransaction(); rel.removeProperty("key3"); rel.removeProperty("key2"); rel.removeProperty("key3"); newTransaction(); getNodeManager().clearCache(); assertEquals("0", rel.getProperty("key0")); assertEquals("1", rel.getProperty("key1")); assertEquals("4", rel.getProperty("key4")); assertTrue(!rel.hasProperty("key2")); assertTrue(!rel.hasProperty("key3")); rel.delete(); node1.delete(); node2.delete(); }
@Test public void testChangeProperty() { Node node1 = getGraphDb().createNode(); Node node2 = getGraphDb().createNode(); Relationship rel = node1.createRelationshipTo(node2, MyRelTypes.TEST); rel.setProperty("test", "test1"); newTransaction(); rel.setProperty("test", "test2"); rel.removeProperty("test"); rel.setProperty("test", "test3"); assertEquals("test3", rel.getProperty("test")); rel.removeProperty("test"); rel.setProperty("test", "test4"); newTransaction(); assertEquals("test4", rel.getProperty("test")); }
@Override public void removeProperty(final PropertyKey key) throws FrameworkException { dbRelationship.removeProperty(key.dbName()); // remove from index removeFromIndex(key); }
@Test public void testNodeRemoveProperty() { Node node1 = getGraphDb().getNodeById(node1Id); Node node2 = getGraphDb().getNodeById(node2Id); Relationship rel = node1.getSingleRelationship(MyRelTypes.TEST, Direction.BOTH); // test remove property assertEquals(1, node1.removeProperty(key1)); assertEquals(2, node2.removeProperty(key1)); assertEquals(1, rel.removeProperty(key1)); assertEquals(string1, node1.removeProperty(key2)); assertEquals(string2, node2.removeProperty(key2)); assertEquals(string1, rel.removeProperty(key2)); assertTrue(node1.removeProperty(arrayKey) != null); assertTrue(node2.removeProperty(arrayKey) != null); assertTrue(rel.removeProperty(arrayKey) != null); }
public void removeRelationshipProperty(long relationshipId, String key) throws RelationshipNotFoundException, NoSuchPropertyException { Relationship relationship = relationship(relationshipId); Transaction tx = graphDb.beginTx(); try { if (relationship.removeProperty(key) == null) { throw new NoSuchPropertyException(relationship, key); } tx.success(); } finally { tx.finish(); } }
@Test public void testRelationshipRemoveProperty() { Integer int1 = new Integer(1); Integer int2 = new Integer(2); String string1 = new String("1"); String string2 = new String("2"); Node node1 = getGraphDb().createNode(); Node node2 = getGraphDb().createNode(); Relationship rel1 = node1.createRelationshipTo(node2, MyRelTypes.TEST); Relationship rel2 = node2.createRelationshipTo(node1, MyRelTypes.TEST); // verify that we can rely on PL to reomve non existing properties try { if (rel1.removeProperty(key1) != null) { fail("Remove of non existing property should return null"); } } catch (NotFoundException e) { } try { rel1.removeProperty(null); fail("Remove null property should throw exception."); } catch (IllegalArgumentException e) { } rel1.setProperty(key1, int1); rel2.setProperty(key1, string1); rel1.setProperty(key2, string2); rel2.setProperty(key2, int2); try { rel1.removeProperty(null); fail("Null argument should result in exception."); } catch (IllegalArgumentException e) { } // test remove property assertEquals(int1, rel1.removeProperty(key1)); assertEquals(string1, rel2.removeProperty(key1)); // test remove of non exsisting property try { if (rel2.removeProperty(key1) != null) { fail("Remove of non existing property should return null"); } } catch (NotFoundException e) { // have to set rollback only here getTransaction().failure(); } rel1.delete(); rel2.delete(); node1.delete(); node2.delete(); }
@Test public void testRelGetProperties() { Integer int1 = new Integer(1); Integer int2 = new Integer(2); String string = new String("3"); Node node1 = getGraphDb().createNode(); Node node2 = getGraphDb().createNode(); Relationship rel1 = node1.createRelationshipTo(node2, MyRelTypes.TEST); try { rel1.getProperty(key1); fail("get non existing property din't throw exception"); } catch (NotFoundException e) { } try { rel1.getProperty(null); fail("get of null key din't throw exception"); } catch (IllegalArgumentException e) { } assertTrue(!rel1.hasProperty(key1)); assertTrue(!rel1.hasProperty(null)); rel1.setProperty(key1, int1); rel1.setProperty(key2, int2); rel1.setProperty(key3, string); assertTrue(rel1.hasProperty(key1)); assertTrue(rel1.hasProperty(key2)); assertTrue(rel1.hasProperty(key3)); try { rel1.removeProperty(key3); } catch (NotFoundException e) { fail("Remove of property failed."); } assertTrue(!rel1.hasProperty(key3)); assertTrue(!rel1.hasProperty(null)); rel1.delete(); node2.delete(); node1.delete(); }
@Test public void shouldGetCorrectTransactionDataUponCommit() { // Create new data, nothing modified, just added/created ExpectedTransactionData expectedData = new ExpectedTransactionData(); VerifyingTransactionEventHandler handler = new VerifyingTransactionEventHandler(expectedData); GraphDatabaseService db = dbRule.getGraphDatabaseService(); db.registerTransactionEventHandler(handler); Node node1 = null, node2, node3 = null; Relationship rel1 = null, rel2 = null; try { try (Transaction tx = db.beginTx()) { node1 = db.createNode(); expectedData.expectedCreatedNodes.add(node1); node2 = db.createNode(); expectedData.expectedCreatedNodes.add(node2); rel1 = node1.createRelationshipTo(node2, RelTypes.TXEVENT); expectedData.expectedCreatedRelationships.add(rel1); node1.setProperty("name", "Mattias"); expectedData.assignedProperty(node1, "name", "Mattias", null); node1.setProperty("last name", "Persson"); expectedData.assignedProperty(node1, "last name", "Persson", null); node1.setProperty("counter", 10); expectedData.assignedProperty(node1, "counter", 10, null); rel1.setProperty("description", "A description"); expectedData.assignedProperty(rel1, "description", "A description", null); rel1.setProperty("number", 4.5D); expectedData.assignedProperty(rel1, "number", 4.5D, null); node3 = db.createNode(); expectedData.expectedCreatedNodes.add(node3); rel2 = node3.createRelationshipTo(node2, RelTypes.TXEVENT); expectedData.expectedCreatedRelationships.add(rel2); node3.setProperty("name", "Node 3"); expectedData.assignedProperty(node3, "name", "Node 3", null); tx.success(); } assertTrue("Should have been invoked", handler.hasBeenCalled()); if (handler.failure() != null) { throw new RuntimeException(handler.failure()); } } finally { db.unregisterTransactionEventHandler(handler); } // Use the above data and modify it, change properties, delete stuff expectedData = new ExpectedTransactionData(); handler = new VerifyingTransactionEventHandler(expectedData); db.registerTransactionEventHandler(handler); try { try (Transaction tx = db.beginTx()) { Node newNode = db.createNode(); expectedData.expectedCreatedNodes.add(newNode); Node tempNode = db.createNode(); Relationship tempRel = tempNode.createRelationshipTo(node1, RelTypes.TXEVENT); tempNode.setProperty("something", "Some value"); tempRel.setProperty("someproperty", 101010); tempNode.removeProperty("nothing"); node3.setProperty("test", "hello"); node3.setProperty("name", "No name"); node3.delete(); expectedData.expectedDeletedNodes.add(node3); expectedData.removedProperty(node3, "name", null, "Node 3"); node1.setProperty("new name", "A name"); node1.setProperty("new name", "A better name"); expectedData.assignedProperty(node1, "new name", "A better name", null); node1.setProperty("name", "Nothing"); node1.setProperty("name", "Mattias Persson"); expectedData.assignedProperty(node1, "name", "Mattias Persson", "Mattias"); node1.removeProperty("counter"); expectedData.removedProperty(node1, "counter", null, 10); node1.removeProperty("last name"); node1.setProperty("last name", "Hi"); expectedData.assignedProperty(node1, "last name", "Hi", "Persson"); rel2.delete(); expectedData.expectedDeletedRelationships.add(rel2); rel1.removeProperty("number"); expectedData.removedProperty(rel1, "number", null, 4.5D); rel1.setProperty("description", "Ignored"); rel1.setProperty("description", "New"); expectedData.assignedProperty(rel1, "description", "New", "A description"); tempRel.delete(); tempNode.delete(); tx.success(); } assertTrue("Should have been invoked", handler.hasBeenCalled()); if (handler.failure() != null) { throw new RuntimeException(handler.failure()); } } finally { db.unregisterTransactionEventHandler(handler); } }
private void indexProperty(final AbstractRelationship rel, final String key) { // String combinedType = node.getClass().getSimpleName(); Relationship dbRel = rel.getRelationship(); long id = rel.getId(); if (key == null) { logger.log(Level.SEVERE, "Relationship {0} has null key", new Object[] {id}); return; } boolean emptyKey = StringUtils.isEmpty((String) key); if (emptyKey) { logger.log( Level.SEVERE, "Relationship {0} has empty, not-null key, removing property", new Object[] {id}); dbRel.removeProperty(key); return; } /* * if (!(dbRel.hasProperty(key))) { * * removeRelationshipPropertyFromAllIndices(dbRel, key); * logger.log(Level.FINE, "Relationship {0} has no key {1}, to be sure, it was removed from all indices", new Object[] { id, key }); * return; * * } */ Object value = rel.getProperty(key); // dbRel.getProperty(key); Object valueForIndexing = rel.getPropertyForIndexing(key); boolean emptyValue = ((value instanceof String) && StringUtils.isEmpty((String) value)); /* logger.log(Level.INFO, "Indexing key {0} with value {1} of ID {2}", new Object[] { key, value != null ? value : "null", rel.getStringProperty("uuid") } ); */ if (value == null) { logger.log( Level.FINE, "Node {0} has null value for key {1}, removing property", new Object[] {id, key}); dbRel.removeProperty(key); removeRelationshipPropertyFromAllIndices(dbRel, key); } else if (emptyValue) { logger.log( Level.FINE, "Node {0} has empty, non-null value for key {1}, removing property", new Object[] {id, key}); dbRel.removeProperty(key); removeRelationshipPropertyFromAllIndices(dbRel, key); } else { // index.remove(node, key, value); removeRelationshipPropertyFromAllIndices(dbRel, key); logger.log( Level.FINE, "Node {0}: Old value for key {1} removed from all indices", new Object[] {id, key}); addRelationshipPropertyToFulltextIndex(dbRel, key, valueForIndexing); addRelationshipPropertyToKeywordIndex(dbRel, key, valueForIndexing); if (key.equals(AbstractRelationship.Key.uuid.name())) { addRelationshipPropertyToUuidIndex(dbRel, key, valueForIndexing); } logger.log( Level.FINE, "Node {0}: New value {2} added for key {1}", new Object[] {id, key, value}); } }