20.8 Java APIs for Executing UPDATE Queries
The UPDATE queries make changes to existing graphs using
                        the INSERT, UPDATE, and
                                    DELETE operations.
               
Note that INSERT allows you to insert new vertices and edges into a
                                    graph, UPDATE allows you to update existing
                                    vertices and edges by setting their properties to new values,
                                    and DELETE allows you to delete vertices and
                                    edges from a graph.
               
- Updatability of Graphs Through PGQL
 Graph data that is loaded from the Oracle RDBMS or from CSV files into the PGX is not updatable through PGQL right away.
- Executing UPDATE Queries Against a Graph in the Graph Server (PGX)
 To executeUPDATEqueries against a graph, use thePgxGraph.executePgql(String query)method.
- Executing UPDATE Queries Against a PGX Session
 You can also executeUPDATEqueries against aPgxSession.
- Altering the Underlying Schema of a Graph
 TheINSERToperations can only insert vertices and edges with known labels and properties. Similarly,UPDATEoperations can only set values of known properties. Thus, new data must always conform to the existing schema of the graph.
Parent topic: Executing PGQL Queries Against the Graph Server (PGX)
20.8.1 Updatability of Graphs Through PGQL
Graph data that is loaded from the Oracle RDBMS or from CSV files into the PGX is not updatable through PGQL right away.
First, you need to create a copy of the data through the
                                PgxGraph.clone() method. The resulting graph is
                        fully updatable.
                  
Consider the following example:
// load a graph from the RDBMS or from CSV
PgxGraph g1 = session.readGraphByName("<graph>",GraphSource.PG_PGQL);
// create an updatable copy of the graph
PgxGraph g2 = g1.clone("new_graph_name");
// insert an additional vertex into the graph
g2.executePgql("INSERT VERTEX v " +
               "         LABELS ( Person ) " +
               "         PROPERTIES ( v.firstName = 'Camille', " +
               "                      v.lastName = ' Mullins')"); 
Additionally, there is also a
                                        PgxGraph.cloneAndExecutePgql(String query, String
                                        graphName) method that combines the last two steps
                                from above example into a single step:
                     
// create an updatable copy of the graph while inserting a new vertex
PgxGraph g2_copy = g1.cloneAndExecutePgql(
                     "INSERT VERTEX v " +
                     "         LABELS ( Person ) " +
                     "         PROPERTIES ( v.firstName = 'Camille', " +
                     "                      v.lastName = ' Mullins') "
                   , "new_graph_name");Note that graphs that are created through
                                        PgxGraph.clone() are local to the session.
                                However, they can be shared with other sessions through the
                                        PgxGraph.publish(..) methods but then they
                                are no longer updatable through PGQL. Only session-local graphs are
                                updatable but persistent graphs are not.
                     
Parent topic: Java APIs for Executing UPDATE Queries
20.8.2 Executing UPDATE Queries Against a Graph in the Graph Server (PGX)
To execute UPDATE queries against a graph, use the
      PgxGraph.executePgql(String query) method.
                  
The following is an example of
          INSERT query:
                     
g.executePgql("INSERT VERTEX v " +
              "         LABELS ( Person ) " +
              "         PROPERTIES ( v.firstName = 'Camille', " +
              "                      v.lastName = ' Mullins' ) "); 
Note that the INTO clause of
        the INSERT can be omitted. If you use an INTO clause, the
        graph name in the INTO clause must correspond to the name of the PGX graph
          (PgxGraph.getName()) that the query is executed against. 
                     
The following is an example of
          UPDATE query:
                     
// set the date of birth of Camille to 2014-11-15
g.executePgql("UPDATE v SET ( v.dob = DATE '2014-11-14' ) " +
              "FROM MATCH (v:Person) " +
              "WHERE v.firstName = 'Camille' AND v.lastName = ' Mullins' "); 
The following is an example of
          DELETE query:
                     
// delete Camille from the graph
g.executePgql("DELETE v " +
              "FROM MATCH (v:Person) " +
              "WHERE v.firstName = 'Camille' AND v.lastName = 'Mullins' "); Parent topic: Java APIs for Executing UPDATE Queries
20.8.3 Executing UPDATE Queries Against a PGX Session
You can also execute UPDATE queries against a
                                    PgxSession.
                  
UPDATE queries against the
               PgxSession.//Loads the graph into the graph server (PGX)
PgxGraph g1 = session.readGraphByName("BANK_GRAPH_VIEW",GraphSource.PG_PGQL);
//Clones the graph
PgxGraph g2 = g1.clone("BANK_GRAPH_NEW");
//Get the graph
session.getGraph("BANK_GRAPH_NEW");
//Insert vertices and an edge connecting the vertices into the graph
session.executePgql(
     "INSERT INTO BANK_GRAPH_NEW "+
     "   VERTEX v1 LABELS (Accounts) PROPERTIES (v1.id=1001, v1.name='New account-1') "+
     ",  VERTEX v2 LABELS (Accounts) PROPERTIES (v2.id=1002, v2.name='New account-2') "+
     ",  EDGE e1 BETWEEN v1 AND v2 LABELS (Transfers) PROPERTIES (e1.amount=3000) "
);
//Query the graph to verify the newly added edge
session.executePgql(
     "SELECT e.amount FROM MATCH (v1:Accounts) -[e:Transfers]-> (v2:Accounts) "+
     "ON BANK_GRAPH_NEW "+
     "WHERE v1.id=1001 AND v2.id=1002"
);Parent topic: Java APIs for Executing UPDATE Queries
20.8.4 Altering the Underlying Schema of a Graph
The INSERT operations can only insert vertices and edges
                with known labels and properties. Similarly, UPDATE operations can
                only set values of known properties. Thus, new data must always conform to the
                existing schema of the graph.
                  
However, some PGX APIs exist for updating the schema of a graph:
                        while no APIs exist for adding new labels, new properties can be added
                        through the PgxGraph.createVertexProperty(PropertyType type, String
                                name) and PgxGraph.createEdgeProperty(PropertyType
                                type, String name) methods. The new properties are attached
                        to each vertex/edge in the graph, irrespective of their labels. Initially
                        the properties are assigned a default value but then the values can be
                        updated through the UPDATE statements.
                  
Consider the following example:
// load a graph from the RDBMS or from CSV
PgxGraph g = session.readGraphByName("<graph>",GraphSource.PG_PGQL);
// add a new property to the graph
g.createVertexProperty(PropertyType.LOCAL_DATE, "dob");
// set the date of birth of Camille to 2014-11-15
g.executePgql("UPDATE v SET ( v.dob = DATE '2014-11-14' ) " +
              "FROM MATCH (v:Person) " +
              "WHERE v.firstName = 'Camille' AND v.lastName = ' Mullins' ");Parent topic: Java APIs for Executing UPDATE Queries