6.8.1.4.6.4 Partialオブジェクト構築のオプション
問合せ結果からエッジを読み込んでいるとき、開始および終了頂点をローカル・キャッシュに追加する際に、次の2つ動作が可能です。
-
エッジ自体から入手可能な頂点IDのみを追加します。このオプションは、効率化のためのデフォルトです。
-
頂点IDを追加し、開始および終了頂点のすべてのプロパティを取得します。この動作では、PGQL問合せ結果セットから作成された各
OracleVertex
オブジェクトでsetPartial(true)
を呼び出せます。
例6-21 PgqlExample14.java
PgqlExample14.java
は、この動作の違いを示しています。このプログラムは、まずすべてのエッジを取得するための問合せを実行します。それにより、インシデントの頂点がローカル・キャッシュに追加されます。2番目の問合せはすべての頂点を取得します。次に、プログラムは、各OracleVertex
オブジェクトを表示して、どのプロパティがロードされているかを示します。
import java.sql.Connection;
import oracle.pg.rdbms.Oracle;
import oracle.pg.rdbms.OraclePropertyGraph;
import oracle.pg.rdbms.OracleVertex;
import oracle.pg.rdbms.pgql.PgqlConnection;
import oracle.pg.rdbms.pgql.PgqlResultSet;
import oracle.pg.rdbms.pgql.PgqlStatement;
import oracle.ucp.jdbc.PoolDataSourceFactory;
import oracle.ucp.jdbc.PoolDataSource;
/**
* This example shows the behavior of setPartial(true) for OracleVertex objects
* created from PGQL query results.
*/
public class PgqlExample14
{
public static void main(String[] args) throws Exception
{
int idx=0;
String host = args[idx++];
String port = args[idx++];
String sid = args[idx++];
String user = args[idx++];
String password = args[idx++];
String graph = args[idx++];
Connection conn = null;
Oracle oracle = null;
OraclePropertyGraph opg = null;
PgqlStatement ps = null;
PgqlResultSet rs = null;
try {
//Get a jdbc connection
PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();
pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
pds.setURL("jdbc:oracle:thin:@"+host+":"+port +":"+sid);
pds.setUser(user);
pds.setPassword(password);
conn = pds.getConnection();
// Get a PGQL connection
PgqlConnection pgqlConn = PgqlConnection.getConnection(conn);
pgqlConn.setGraph(graph);
// Create a PgqlStatement
ps = pgqlConn.createStatement();
// Query to illustrate set partial
String pgql =
"SELECT id(e), label(e) "+
"FROM MATCH (v1)-[e:\"knows\"]->(v2)";
// execute query
rs = ps.executeQuery(pgql, " ");
// print results
System.out.println("-- Results for edge query -----------------");
rs.print();
// close result set
rs.close();
// Create an Oracle Property Graph instance
oracle = new Oracle(conn);
opg = OraclePropertyGraph.getInstance(oracle,graph);
// Query to retrieve vertices
pgql =
"SELECT id(v) "+
"FROM MATCH (v)";
// Get each vertex object in result and print with toString()
rs = ps.executeQuery(pgql, " ");
// iterate through result
System.out.println("-- Vertex objects retrieved from vertex query --");
while (rs.next()) {
Long vid = rs.getLong(1);
OracleVertex v = OracleVertex.getInstance(opg, vid);
System.out.println(v.toString());
}
// close result set
rs.close();
// Execute the same query but call setPartial(true) for each vertex
rs = ps.executeQuery(pgql, " ");
System.out.println("-- Vertex objects retrieved from vertex query with setPartial(true) --");
while (rs.next()) {
Long vid = rs.getLong(1);
OracleVertex v = OracleVertex.getInstance(opg, vid);
v.setPartial(true);
System.out.println(v.toString());
}
// close result set
rs.close();
}
finally {
// close the result set
if (rs != null) {
rs.close();
}
// close the statement
if (ps != null) {
ps.close();
}
// close the connection
if (conn != null) {
conn.close();
}
// close the property graph
if (opg != null) {
opg.close();
}
// close oracle
if (oracle != null) {
oracle.dispose();
}
}
}
}
PgqlExample14.java
の出力(GraphLoaderExample.java
コードを使用してロードできます)は、次のとおりです。
-- Results for edge query ----------------- +------------------+ | id(e) | label(e) | +------------------+ | 6 | knows | | 11 | knows | | 10 | knows | | 5 | knows | | 4 | knows | | 13 | knows | | 9 | knows | | 12 | knows | | 8 | knows | | 7 | knows | | 14 | knows | | 15 | knows | +------------------+ -- Vertex objects retrieved from vertex query -- Vertex ID 3 [NULL] {} Vertex ID 0 [NULL] {} Vertex ID 2 [NULL] {} Vertex ID 1 [NULL] {} -- Vertex objects retrieved from vertex query with setPartial(true) -- Vertex ID 3 [NULL] {bval:bol:false, fname:str:Susan, lname:str:Blue, mval:bol:false, age:int:35} Vertex ID 0 [NULL] {bval:bol:true, fname:str:Bill, lname:str:Brown, mval:str:y, age:int:40} Vertex ID 2 [NULL] {fname:str:Ray, lname:str:Green, mval:dat:1985-01-01 04:00:00.0, age:int:41} Vertex ID 1 [NULL] {bval:bol:true, fname:str:John, lname:str:Black, mval:int:27, age:int:30}
親トピック: PGQL変換および実行の追加オプション