Example #1
0
  @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();
 }
Example #3
0
 @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);
  }
Example #6
0
 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();
   }
 }
Example #7
0
  @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();
  }
Example #8
0
  @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});
    }
  }