Analyst#matrixFactorizationRecommendationsAsync
could fail in remote server mode PGX MLlib & Frames
MLlib
is taken out of betaPgxFrame
is taken out of betaPGX Python client
PGX JShell
PGX Clients
PGX shared-memory and distributed execution mode
PgxGraph#getMetaData
is now public, and the GraphMetaData
objects now include information about the properties associated to vertex and edge providers PGX shared-memory execution mode
PgxGraph#rename
is now possible to be used for private graphs loaded from a data sourcePgxFrame
objects from/to an Oracle database PGX distributed execution mode
all_different()
function. ||
) to concatenate strings. UPPER
and LOWER
functions, which allow transforming string to upper-case and lower-case respectively. SUBSTRING
to return a substring of the given string. LISTAGG(DISTINCT)
, which allows aggregating multiple rows into a string. PgxGraph#cloneAndExecutePgql
API call, avoiding double graph cloning. PGX Python packaged distribution
null
when a user tries to get a published graph for which they do not at least have READ
permission PgxSession#getGraphs
would return graphs that a user did not have permissions on GraphMetaData
were renamed (e.g. VertexTableMetaData
is renamed to VertexProviderMetaData
) MULTI_TABLES_DB
format and related classes and configurations: Format#MULTI_TABLES_DB
MultipleTablesGraphConfig
, MultipleTablesNodePropertyConfig
, MultipleTablesNodeTypeConfig
, MultipleTablesEdgeTypeConfig
AbstractMultipleTablesConfig
, AbstractNodePropertyConfig
, AbstractNodeTypeConfig
MultipleTablesConfigBuilder
, MultipleTablesGraphConfigFactory
VersionInfo#getVersion
and VersionInfo#setVersion
. The alternatives are VersionInfo#getApiVersion
and VersionInfo#setApiVersion
ArgumentType#PATH_FINDING_FILTER
, which breaks compatibility with PGX clients older than version 2.5.0PgxGraph#pickRandomVertex
and PgxGraph#pickRandomVertexAsync
. The alternatives are PgxGraph#getRandomVertex
and PgxGraph#getRandomVertexAsync
PgxMap#set
and PgxMap#setAsync
. The alternatives are PgxMap#put
and PgxMap#putAsync
PgxCollection#getElementType
. The alternative is PgxCollection#getContentType
memory_limits.max_total_memory_size
to set absolute memory limit across entire PGX enginememory_limits.max_total_memory_ratio
to set memory limit across entire PGX engine relative to available system memorymemory_limits.max_private_memory_size
to set absolute memory limit of private data (includes non-published graphs and PGQL results)memory_limits.max_private_memory_ratio
to set memory limit of private data (includes non-published graphs and PGQL results) relative to total PGX engine memory limitmemory_limits.max_shared_memory_size
to set absolute memory limit of shared data (includes published graphs and pinned non-referenced graphs)"memory_limits.max_shared_memory_ratio
to set memory limit of shared data (includes published graphs and pinned non-referenced graphs) relative to total PGX engine memory limitmemory_limits.max_user_memory_size
to set absolute memory limit for any one user of the PGX enginememory_limits.max_user_memory_ratio
to set memory limit for any one user of the PGX engine relative to the private data memory limitmemory_limits.max_session_memory_size
to set absolute memory limit for any one session of the PGX enginememory_limits.max_session_memory_ratio
to set memory limit for any one session of the PGX engine relative to the user data memory limitauthorization.max_memory_size
to set absolute memory limit of the authorization entity's private data (includes non-published graphs and PGQL results)authorization.max_memory_ratio
to set memory limit of the authorization entity's private data (includes non-published graphs and PGQL results) relative to the maximum PGX engine memory limit for any userenable_memory_limits_checks
to set enable memory limitsServerInstance#setSessionMaxMemorySize
API to set the maximum memory limit for the given sessionAll APIs that accept a boolean ignoreNotFound
flag are now deprecated and variants without the flag have been added instead.
The new variants behave as if ignoreNotFound = false
, and throw a NotFoundException
if they cannot find the object for which the action was meant.
These are the deprecated APIs:
CompiledProgram#destroyAsync(boolean)
(use CompiledProgram#destroyAsync()
instead)ComponentCollection#destroyAsync(boolean)
(use ComponentCollection#destroyAsync()
instead)Partition#destroyAsync(boolean)
(use Partition#destroyAsync()
instead)Specifying the graph retention policy (PgxGraph#Retention
) when calling PgxGraph#destroy(PgxGraph#Retention)
is
now deprecated. Use PgxGraph#destroy()
and PgxGraph#setPinnedStatus()
instead.
PGX shared-memory and distributed execution mode
PgxGraph#createSynchronizer
.FlashbackSynchronizer
API implementation uses RDBMS SCN and Flashback Query features to load deltas into a PGX ChangeSet.PGX_STICKY_COOKIE
); the PGX Server can generate sticky cookies and the PGX Client will resend those it receives. InvalidChangePolicy
allows to ignore and log issues such as conflicting changes or inconsistent property typesrequiredConversionPolicy
allows the conversion of vertex IDs from long/integer to string and from string to long/integerGraphChangeSet#setInvalidChangePolicy
and GraphChangeSet#setRequiredConversionPolicy
PGX shared-memory execution mode
PgxPreparedStatement
can now be used to prepare and execute INSERT and DELETE queries for transient graphs PgxSession#executePgql(String)
and PgxSession#executePgqlAsync(String)
to run any queries using the PgxSession API PgxVertex.getOutDegree()
and PgxVertex.getInDegree()
APIs are now supported on partitioned graphs invalid columns name from graph configuration
). Now, there are specific error messages for the different
types of errors:name must not be empty
).ORA-00972: identifier is too long
).ORA-00922: missing or invalid option
). LISTAGG
operator, which allows aggregating multiple rows into a string. UPPER
and LOWER
functions, which allow transforming string to upper-case and lower-case respectively. SUBSTRING
to return a portion of the given string. ||
) to concatenate strings. CREATE PROPERTY GRAPH
statement, usable when a database realm is configured (only possible in remote mode). InvalidChangePolicy
allows to ignore and log issues such as changes that conflict with the existing graphrequiredConversionPolicy
allows the conversion of vertex IDs from long/integer to string and from string to long/integerGraphChangeSet#setInvalidChangePolicy
and GraphChangeSet#setRequiredConversionPolicy
PGX distributed execution mode
isFresh
method now returns accurate results for all graphs, independently of the formats or file systems they were loaded from. executePgql()
. PgxPreparedStatement#execute()
. UPDATE
/INSERT
/DELETE
statements. IS NULL
/IS NOT NULL
predicates. PGX shared-memory and distributed execution mode
PgxSession.getAvailableSnapshots
ResultSet#print(long numResults, int from)
ignore the from
parameter. myTable
could not be used in a PGX graph
config because e.g. "database_table_name":"myTable"
in the graph config would reference table MYTABLE
instead of table myTable
. myColumn
could
not be used as key column, source column or destination column in a PGX graph config because e.g.
"key_column":"myColumn"
would reference column MYCOLUMN
instead of column myColumn
. Note that this issue
did not exist in distributed execution mode. oracle.pgx.common.auth.*
as default import for the PGX shell and jshell PGX shared-memory execution mode
WHERE
PGQL clauses DELETE
query on an empty provider caused an Exception PgxSession
which is created by the jshell-based PGX shell would not be closed properly when closing the shell PGX distributed execution mode
ignoreNotFound
flag set to True
would cause a crash ignoreNotFound
flag set to True
would still return an error PGX shared-memory and distributed execution mode
"database_table_name":"myTable"
would reference MYTABLE
instead of myTable
. Although this is fixed now,
it means that references in existing graph configs that contain lower-case characters should be uppercased to
match the actual names of the tables that are referenced. Alternatively, the tables in the database
should be renamed to match the names in the graph config. GraphChangeSet
are logged on log level DEBUG
instead of WARN
addExistingEdgePolicy
path_to_gm_compiler
, cc
, cflags
, lflags
PGX config fields deprecated in 3.2.0PgxSession#newGraphBuilder()
and PgxSession#newGraphBuilder(IdType)
deprecated in 3.1.0, use PgxSession#createGraphBuilder()
and PgxSession#createGraphBuilder(IdType)
insteadNOTE: PgxSession#newGraphBuilder()
would return a builder that used IdGenerationStrategy.USER_IDS
for edge IDs, while PgxSession#createGraphBuilder()
returns a builder that uses IdGenerationStrategy.AUTO_GENERATED
for edge IDs.
In this case, it is not possible to create new edges with explicit edge IDs (e.g., session.createGraphBuilder().addEdge(0, 1, 2);
will fail). To get the same behavior, use PgxSession#createGraphBuilder(IdGenerationStrategy.USER_IDS, IdGenerationStrategy.USER_IDS)
and PgxSession#createGraphBuilder(IdType, IdGenerationStrategy.USER_IDS, IdGenerationStrategy.USER_IDS)
, respectively.
ServerInstance#addPinnedGraph
and ServerInstance#demotePinnedGraph
and corresponding REST endpoints deprecated in 3.0.0ServerInstance#resizePool
and ServerInstance#resizePoolAsync
and corresponding REST endpoints deprecated in 3.0.0ServerInstance#getPgxVersion
deprecated in 2.7.0, use ServerInstance#getVersion
insteadServerInstance#lookupPreloadedGraph
and corresponding REST endpoint deprecated in 2.7.0cctrace
, cctrace_out
, cctrace_print_stacktraces
, always_use_jni
, use_native_analysis
, and use_native_loaders
PGX config fields deprecated in 2.7.0enable_solaris_studio_labeling
PGX config field deprecated in 2.6.0Removed the following APIs in oracle.pgx.api.Pgx
deprecated in 2.6.0:
Pgx#getInstance(String,String,String,Integer,Integer,Integer,Integer)
Pgx#getInstance(String,String,String,Integer,Integer,Integer,Integer,Boolean)
Pgx#getInstance(String,String,String,Integer,Integer,Integer,Integer,Boolean,Integer)
Instead, use oracle.pgx.config.ClientConfigBuilder
to create a oracle.pgx.config.ClientConfig
object and invoke Pgx#getInstance(ClientConfig)
* Removed the CALLER_THREAD
PoolType
deprecated in 2.5.0
* Removed the salsa_deprecated
algorithm deprecated in 2.5.0
* Removed methods PgxConfig#init
, PgxConfig#reset
, and RuntimeConfig#init
deprecated in 2.4.0
* Removed the GraphConfigBuilder#forSingleFileFormats()
and GraphConfigBuilder#forMultipleFileFormats()
deprecated in 2.3.0, use instead the unified GraphConfigBuilder#forFileFormats()
which accepts all of the following:
a single file via the setUri()
method
multiple files via the addUri()
method
multiple vertex and edge files via the addVertexUri()
and addEdgeUri()
methods
* Removed the GraphConfigBuilder#forSingleFileFormat(Format)
and GraphConfigBuilder#forMultipleFileFormat(Format)
methods deprecated in 2.3.0, use instead the unified GraphConfigBuilder#forFileFormat(Format)
method.
* Removed the num_workers_analysis
, num_workers_fast_track_analysis
, and num_workers_io
PGX config top-level fields deprecated in 2.3.0
* Removed the deprecated use_string_pool
PGX config field
* Removed the graphs
PGX config field, use preload_graphs
instead
* Removed the Zeppelin interpreter module from the project
PGX shared-memory
* In embedded mode, fine-grained data access control is no longer available. Use a remote server to enable it
* Trying to convert a long
vertex ID that does not fit into an integer
throws and IllegalArgumentException
instead of an ArithmeticException
PgxSession.registerKeystore
. setPassword
methods in the graph configuration builders enable_client_authentication
and authorization
are now deprecated. Use native PGX authentication and authorization instead.getGraph(String)
in remote server mode PGX will not search in the public namespace if the user does not have SESSION_GET_PUBLISHED_GRAPH
permission pgx_
isFresh
method to always return true
for graphs loaded from RDBMS UPDATE
PGQL clause would fail on graphs that are optimized for updates UPDATE
in PGQL would fail if the query also has an INSERT
or DELETE
clause allow_local_filesystem
and datasource_dir_whitelist
config fields; use permissions on file-locations instead PGX shared-memory and distributed execution mode
IN
predicate. Previously, only positive numbers and other literals were supported. PGX shared-memory execution mode
MATCH ( (n) -> (m), (n) -> (o) ) ON myGraph
). ServerInstance.getServerState()
API. PGX distributed execution mode
LIMIT
and OFFSET
without ORDER BY
in PGQL. SELECT DISTINCT
in PGQL. CASE
expression performance optimizations in PGQL. HAVING
in PGQL. GROUP BY
, HAVING
, and ORDER BY
in PGQL. explainPgql()
. Green-Marl / PGX Algorithm
New: PGX Python client
pypgx
, a Python client for PGX. This package is in a beta release state. The API may change in the next
releases.PGX shared-memory execution mode
PATH
macro with bind variables in PGQL was invoked multiple times, then the internal bind variable count
was incorrectly multiplied such that more bind variables had to be set by the user than there were bind variables
in the query. ARRAY_AGG
in PGQL was not formatted properly for Time, Timestamp and LocalDate. SELECT DISTINCT
in combination with ORDER BY
and unquoted (case insensitive) identifiers was not working in PGQL. Partition
class to retrieve the vertex property used to store component IDs PGX distributed execution mode
PGX shared-memory and distributed execution mode
tmp_dir
if set. SELECT DISTINCT
followed by a unary minus expression (e.g. SELECT DISTINCT -n.prop ...
) threw an exception in PGQL. pgx_vfs_cache*
directories in the default temporary directory. Fixed a bug where loading a graph with labels using session.readGraphFile()
throws a MemoryMapperOutOfBoundsException
exception.
tmp_dir
if set. IllegalStateException
. GraphChangeSet
LONG_SET
and SPARSE
were removed from the PropertyType
enumeration. Those types were not usable in any manner.Fixed a bug that could cause exceptions when running an algorithm on a partitioned graph
Deprecating Analyst.filteredBfs
and Analyst.filteredDfs
methods that accept a filter it has no effect.
oracle.pgx.vfs.VirtualFileManager
can no longer be used with the tmp
scheme such that any temporary directories
will have to be set up manually and resolved via the file
scheme. Keywords DISTINCT
and NOT
in PGQL are now reserved such that they can no longer be used as identifier in unquoted form;
work around by using the double-quoted identifier form (e.g. "DISTINCT"
or "NOT"
).
The DATE
property type support was removed. For graphs that were using DATE
properties, it is now necessary to
either use LOCAL_DATE
or TIMESTAMP
properties instead. Please refer to Using Datetime Data Types
to determine what is the correct type for your needs. For graphs store in the PGB
format, DATE
properties will be loaded as TIMESTAMP
properties
automatically (that change should be reflected in the graph configuration if one is provided).
When loading edges with missing source/destination edges, the default behavior is changed to throw an error. This behavior can be changed in the graph config.
Replaced graphs
section in ServerInstance#getServerState()
with cached_graphs
and published_graphs
and fixed
issues in ServerInstance#getServerState
to not count published graphs and properties more than once
The vertex_labels
and edge_label
graph config fields to configure whether the graph has the vertex / edge label or not
were removed. For graphs that were using vertex_labels
or edge_label
it is now necessary to use loading.load_vertex_labels
and loading.load_edge_label
instead
Mllib
Partitioned graphs
key_column
property from graph config to improve cost/cardinality estimationEXTRACT
) in PGQL. ABS
, FLOOR
, CEIL
/CEILING
and ROUND
) in PGQL. CASE
statements in PGQL. labels()
for edges and label()
for vertices in PGQL queries. PGQL 1.3 in shared-memory execution mode
SELECT
and GROUP BY
SELECT
and GROUP BY
PGX Algorithm
REST requests are now by default limited to not exceed 10 MB. This can be configured in the pgx configuration using max_http_client_request_size
Added VertexCollectionFilters and EdgeCollectionFilters that make it possible to extract a subgraph from vertex and edge collections
Adding the possibility to create graph snapshots from ChangeSets: Configuring the Snapshots Source
Deprecating PgxSession.getAvailableSnapshots(GraphConfig)
in favour of PgxSession.getAvailableSnapshots(PgxGraph)
Partitioned graphs
label
entry in the provider configuration to allow setting a label different than the provider name for partitioned graphs; more info in the documentation. AUTO_GENERATED
edge IDs are now supported when using GraphChangeSet
with partitioned graphsThe embedded tomcat server now shuts down when the PGX webapp fails to start
The administrator can now set the minimum refresh intervals for auto-refresh and delta-refresh via the min_update_interval_sec
and min_fetch_interval_sec
options of the PGX engine configuration
PGX configuration
PGX distributed execution mode
label()
were rejected. PGX Algorithm
Fixed a bug in PGQL on partitioned graphs where queries matching a neighbor of another vertex and specifying a constraint on the label and ID of the neighbor would fail
server_private_key
in Server Configuration guide is only readable and writable only for the current (permissions 600
in a POSIX filesystem) and refuses to load it otherwise ChangeSet
will throw an IllegalArgumentException
instead of an IllegalStateException
.null
key to disable this feature).Mllib
PGX Shell
On PGX single machine, improved substantially the speed to create new graphs or graph snapshots from ChangeSet changes when there are relatively few changes in the ChangeSet
Avoiding to wrap exceptions when parsing configurations so that the root cause issues can be easily found.
Adding the possibility to publish a graph with current and future snapshots Publishing a Graph.
We removed the limitation of graph names being unique across PGX and introduced session-private namespaces as well as a namespace for published graphs.
Partitioned graphs
Analyst.communitiesLabelPropoagation
and Analyst.whomToFollow
PGX distributed execution mode
hostnames
option accepts IPv6 addresses. GROUP BY
and ORDER BY
. CAST
) Green-Marl / PGX Algorithm
PgxSession
LATEST_SNAPSHOT
constant to easily check out the latest graph snapshot. Extended APIs in PgxSession, PgxGraph and MlLib classes, where some methods were incomplete.
Specific schemes (https, ftps, hdfs) can now be allowed for remote loading/storing, via the allowed_remote_loading_locations
configuration option of the PGX engine.
Added several new algorithms to the Analyst API
instance.getGraphInfo()
, instance.getGraphInfos()
and instance.getServerState()
.createListener
endpoint. PgxGraph.publish()
could throw an exception now, if a graph with the given name has been published before. NO_IDS
for either vertices or edges. edge()
in certain conditions. idType
throws an IllegalArgumentException
. X-Content-Type-Options header added on every response with nosniff
value.
Server PGX config files cannot be loaded from remote. For example, the following command now throws an exception ``` JAVA_OPTS='-Dpgx_conf=http://remote.host:8000/pgx.conf' ./pgx ...
```
allowed_remote_loading_locations
to allow loading graphs from remote locations; by default, no remote loading is allowed. PGX Shell based on jshell
Reduced substantially the memory consumption when loading vertex labels with PGX shared memory.
PgxFrame
PgxFrame.union()
and PgxFrame.join()
operations. MlLib
Heterogeneous graphs
Partitioned graphs
PgxGraph.getVertex()
and PgxGraph.getEdge()
PGX distributed execution mode
/core/v1/analyses
, /core/v1/analyses/{AID}
and
/core/v1/availableAnalysesIds
. ]enable_secure_handshake
option which enables TLS-PSK based secured handshaking among PGX machines in a cluster. PGX ISO Query Planner
Improved isCancelled
check in remote mode to check the status of the future on the server.
GraphChangeSet
to not allow adding edges if vertexIdGenerationStrategy
is set to AUTO_GENERATED
.PGQL
Green-Marl / PGX Algorithm
oracle.pgx.api.beta
to oracle.pgx.algorithm
). GraphMetaData.getDataSourceVersion()
documentation changed: implementation details are not present anymore. COUNT(*)
with GROUP BY in PGX.D. GROUP BY
in PGQL is not supported on null
values. GraphChangeSet
might throws an IllegalArgumentException
. vertexIdGenerationStrategy
is set to AUTO_GENERATED
.serverInstance.getMemoryInfo()
returns zeros in remote mode. internal_communication_port
pgxd configuration in the distributed.
execution mode. The TCP channel has been replaced with a Domain socket. --attach
and --access_token
are removed from the PGX shell running on Groovysh. --password,-p
is not accepted anymore in the the PGX shell running on Groovysh: if it is used, the shell
shows an error message and terminates immediately; if needed, the shell automatically prompts with the password; the same behavior
occurs in the new PGX shell based on jshell. allow_local_filesystem
is used, it is now required to provide a list of approved directories with datasource_dir_whitelist
. keystore_alias
in the graph configuration instead. During server or shell startup keystore can be configured by appending --secret-store path/to/vault.jks
, which tells PGX the keystore path to use. If the keystore is password protected, then the corresponding password will be prompted during startup. GraphConfigBuilder.setPassword
in favor of encrypted java keystores for graph loading. allow_local_filesystem
is used, it is now required to provide a list of approved directories with datasource_dir_whitelist
. --attach
and --access_token
are removed from the PGX shell running on Groovysh. --password,-p
is not accepted anymore in the the PGX shell running on Groovysh: if it is used, the shell
shows an error message and terminates immediately; if needed, the shell automatically prompts with the password; the same behavior
occurs in the new PGX shell based on jshell. Compiler.GM_LEGACY
has been deprecated and using it will lead to an exception at runtime.separator
field in a graph configPGX Shell, Classpath
CLASSPATH
and CLASSPATH_APPEND
to prepend and/or append additional dependencies to the PGX classpath to facilitate use of PGX with connectors. It is now possible to load homogeneous graphs in the CSV, FLAT_FILE, TWO_TABLES RDBMS and PG formats as heterogeneous graphs based on the vertex labels and edge labels
There must now be an exact, case-sensitive match between columns and property names to load from two-tables RDBMSs
PGQL
SELECT
may not only be referenced in HAVING
and ORDER BY
but also in WHERE
and GROUP BY
. Green-Marl / PGX Algorithm
Improved PG RDBMS partitioned view loading performance
PGQL
SHORTEST
in combination with a label predicate or other filter predicate ORDER BY
in a subquery DISTINCT
after SHORTEST
in combination with a path filter ARRAY_AGG
to include null values in the output array; null values are now ignored n <> m
) and ALL_DIFFERENT
filters (e.g. ALL_DIFFERENT(n, m)
) to be ignored when using SHORTEST
SHORTEST
path Green-Marl / PGX Algorithm
oracle.pgx.api.AllPaths.getPath
API will not work correctly in remote mode when using a PGX client version 19.1.0 with a PGX server version 19.2.0 or later.GraphChangeSet
s is supported.PgxSession.createGraphBuilder()
and
PgxSession.createGraphBuilder(IdType idType)
to create new GraphBuilder. PGX Distributed only support IdType.PGX_LONG
and IdType.PGX.INT
.GraphBuilder
:PgxSession.createGraphBuilder(IdGenerationStrategy vertexIdGenerationStrategy, IdGenerationStrategy edgeIdGenerationStrategy)
method.PgxSession.createGraphBuilder(IdType idType, IdGenerationStrategy vertexIdGenerationStrategy, IdGenerationStrategy edgeIdGenerationStrategy)
method.GraphBuilder.addEdge(VID srcVertex, VID dstVertex)
method.GraphBuilder.addEdge(VertexBuilder<VID> srcVertex, VertexBuilder<VID> dstVertex)
method.GraphBuilder.addVertex()
method.PgxSession.runConcurrently
to run the supplied tasks concurrently.ExecutionEnvironment.allowsConcurrentTasks
to get the value of the execution environment field ALLOW_MULTIPLE_CONCURRENT_TASKS
.STRING
properties without having a GROUP BY
clause.CASE
statement.working_dir
can be used to change the directory used by the PGX.SM server to store temporary filespersonalized_pagerank_from_set.gm
and personalized_weighted_pagerank_from_set.gm
to the supported algorithms in DIST.Split PGX version into release version and api version.
New beta API methods
executePgql(String pgqlString)
,
cloneAndExecutePgql(String pgqlString)
and
cloneAndExecutePgql(String pgqlString, String newGraphName)
were added to the PgxGraph API
GM-GENERATED***
is no longer generated for each PGQL or Filter Expression execution. vfs_cache***
is no longer left behind upon shutdown of PGX. EDGE_KEY_MAPPING_NOT_SUPPORTED
LoaderException
GraphChangeSet
API throws an exception NullPointerException
IllegalArgumentException
PgxGraph.Retention.KEEP_GRAPH
, resulting in a memory leakFixed a bug where resources could leak, when loading graphs using HBase
or NoSQL
formats
PGQL (in shared-memory execution mode):
SELECT *
in combination with ORDER BY
either returned results in a wrong order or gave an
unexpected error message label
and labels
is now aligned with PGQL 1.1 tmp_dir
configuration field from system temporary directory to null.VersionInfo
private, which were public previously by mistake.GraphMetaData()
; use GraphMetaData(IdType vertexIdType, IdType edgeIdType)
instead.GraphMetaData(GraphMetaData other, URI baseUri)
; use GraphMetaData(GraphMetaData other)
instead.GraphMetaData.setVertexIdType()
, GraphMetaData.setEdgeIdType()
. The IdType
fields will be made final
and the setters removed in a future version.PgxML
library employs PgxFrames
to communicate the output of some operations.CSV
data (commma separated or any other separator) or from/to PGB
.PgxFrames
can be manipulated with operations such as select()
, renameColumns
, print()
, head()
, tail()
, flatten()
.PgqResultSets
can be converted to PgxFrames
with PgqlResultSet.toFrame()
for postprocessing or storing PGQL query output.graph_algorithm_language
configuration option to JAVA
.myAlgorithm = session.compileProgram('/path/to/MyAlgorithm.java')
to compile a PGX Algorithm.session.createMap(PropertyType.INTEGER, PropertyType.DOUBLE, "myMap")
)close()
and destroyAsync()
methods on Destroyable
API objects are no longer final.PgqlResultSet.print(...)
now returns PgqlResultSet
so it can be closed using rs.print().close()
.ABS
, CEIL
, FLOOR
and ROUND
built-in functions.EXTRACT
function which allows extracting values from date, time or timestamp expressions.IN
predicate which tests a value for membership in an array of values. Both array literals
as well as array bind values are suppported.IS NULL
and IS NOT NULL
.oaa.edge.sequence
function to create an edge sequence object.nodeSeq
and edgeSeq
parameters in findCycle.oaa.graph
algorithm.cursor
and columnName
parameters to oaa.subGraph
function to allow filtering by cursor.:version
command to print version info from client / server.PgxGraph.Retention.KEEP_GRAPH
, resulting in a memory leakEDGE_KEY_MAPPING_NOT_SUPPORTED
(backported) create_label_histogram
throws an IllegalArgumentException
exceptionCPL, CPLL, CTL, CTLL, CPL@, CPLL@
types CAST
function on one side were also involving a different numeric type on the
other side of the expression (e.g. in operation CAST(2 AS INTEGER) + 2.0
we have INTEGER
on the left side and
DOUBLE
on the right side) we were getting a cannot be evaluated as
error. Same situation occurred for
in_degree
function (e.g. in_degree(n) * 2.0
) and out_degree
function (e.g. out_degree(n) * 3.0
). This has
been fixed. TIME WITH TIME ZONE
property against TIME
expression or TIME
property
against TIME WITH TIME ZONE
expression(e.g. TIME '23:00:00' = n.time_with_tz
) we were getting a cannot be
evaluated as
error. Same thing happened when comparing TIMESTAMP
property against TIMESTAMP WITH TIME ZONE
expression and for TIMESTAMP WITH TIME ZONE
property against TIMESTAMP
expression. This has been fixed. IllegalArgumentException
PgxConfig
object built whith PgxConfigBuilder
returns nullNULL
values in relational tables would cause a NullPointerException
if loading edge labels in the TWO_TABLES
format from database. UNSAFE_use_legacy_compiler
flag in the Engine config has been replaced by compiler
.tmp_dir
configuration field from system temporary directory to null; users need to set tmp_dir
to a valid path in the configuration file in order for PGX to be able to start properly.PgxFuture<Void> setAsync(K key, V value)
in oracle.pgx.api.PgxMap
is deprecated, use PgxFuture<Void> putAsync(K key, V value)
insteadvoid set(K key, V value)
in oracle.pgx.api.PgxMap
is deprecated, use void put(K key, V value)
insteadcc
, cflags
and lflags
)path_to_gm_compiler
field in PGX configNullPointerException
when trying to execute PGQL queries on Windows Added possibility to refresh a graph in-place instead of creating new snapshot:
update_properties_in_place
field in the graph loading config.ExecutionEnvironment.setUpdateConsistencyModel
to set the consistency model to be used (ALLOW_INCONSISTENCIES
or CANCEL_TASKS
).ExecutionEnvironment.getUpdateConsistencyModel
to get the used consistency model.ExecutionEnvironment.resetUpdateConsistencyModel
to reset the consistency module to the default value.ExecutionEnvironment.withUpdateConsistencyModel
to execute the given request with the given consistency model.Added property convenience APIs getOrCreateVertexProperty
and destroyVertexPropertyIfExists
to PgxGraph
including their variants for edge properties, vector properties and asyncronous execution.
Added new APIs PgxSession.createGraphBuilder()
and
PgxSession.createGraphBuilder(IdType idType)
to create new GraphBuilder.
Added support for adding vertex/edge in GraphBuilder
and GraphChangeSet
using implicit ID:
PgxSession.createGraphBuilder(IdGenerationStrategy vertexIdGenerationStrategy, IdGenerationStrategy edgeIdGenerationStrategy)
method.PgxSession.createGraphBuilder(IdType idType, IdGenerationStrategy vertexIdGenerationStrategy, IdGenerationStrategy edgeIdGenerationStrategy)
method.PgxGraph.createChangeSet(IdGenerationStrategy vertexIdGenerationStrategy, IdGenerationStrategy edgeIdGenerationStrategy)
method.GraphBuilder.addEdge(VID srcVertex, VID dstVertex)
method.GraphBuilder.addEdge(VertexBuilder<VID> srcVertex, VertexBuilder<VID> dstVertex)
method.GraphBuilder.addVertex()
method.PGQL:
OAAgraph:
oaa.graph.data.frame
function performance.columnNames
argument in oaa.graph.ore.frame
and oaa.create.oaa.graph
functions to change table column
names used to read a graph from two database tables or to write a graph into two database tables.oaa.getNodeDegree
function.bipartite_check.gm
to the supported algorithms in DIST.eigenvector_centrality.gm
to the supported algorithms in DIST.filteredDfs
algorithm. See documentation for more details.maxDepth
parameter to built-in filteredBfs
algorithm. See documentation for more details.print
and println
statements in paragraphs. This behavior
can be turned off by setting the interpreter property pgx.printStdout
to false
. By default it is set to true
.pgx.printLastExpression
interpeter property. By default it is set to true
.interval_to_poll_max
that sets the maximum value of the polling interval
used by the PGX Client when requesting the future status.PgxGraph#getInEdges
, PgxGraph#getOutEdges
, PgxGraph#getInNeighbors
, PgxGraph#getOutNeighbors
interval_to_poll_max
that sets the maximum value of the polling interval
used by the PGX Client when requesting the future status.client_server_interaction_mode
to ClientConfig
and as an argument in the PGX Shell. If the field is set to async_polling
,
the PGX client would poll the status of the future until it's completed, else if it's set to blocking
the PGX client
would send a request to directly get the value of the future and the server would block until the future result is ready.getInteger(..)
, getLong(..)
, getFloat(..)
and getDouble(..)
previously threw an
exception when numbers should have been coerced. Similarly, getTime(..)
and getTimeWithTimezone(..)
threw an
exception when times should have been coerced, and, getTimestamp(..)
and getTimestampWithTimezone(..)
threw an
exception when timestamps should have been coerced. Coercion is now properly supported. CAST
function now applies truncation instead of rounding when casting floats or doubles to integers or longs,
as is the generally more accepted behavior for binary numeric data types. distinct
such as DISTINCTabc
or distinctxyz
no longer give an error when they
are used as the first element in the SELECT
clause (e.g. SELECT DISTINCTabc ...
).SELECT
got aliased to the same name as a vertex or edge variable in the MATCH
,
and, the alias or the expression itself was used in the ORDER BY
, then, an error was raised with message
Cannot order by vertex
or Cannot order by edge
. This has been fixed now. Duplicate variable (variable with same name is passed from an outer query)
. SELECT
clause should shadow variables in the MATCH
clause. However, such shadowing was not correctly
supported such that references in the ORDER BY
clause in some cases wrongly referenced variables in the MATCH
clause
instead of the SELECT
clause. This was for example the case for the query SELECT id(n) AS n MATCH (n) ORDER BY id(n)
.
Now, such queries result in exceptions being raised instead of incorrect result being returned. double
values were wrongfully serialized into scientific notation in remote deploymentsPgxGraph#createChangeSet
generating very long graph names when invoked multiple times. PgxGraph.undirect()
throws a validation exception if the graph contains self edges.MapResource#extractTopKFromMap
endpoint caused by PgxFutureWrapper
trying to get the resource ID of a Void resultStringIndexOutOfBoundsException
in Zeppelin interpreter when trying to render certain PGQL query error messages conf/log4j2.xml
by default. hasLabel
in Green-Marl Fixed a bug where updates received from the database could be applied incorrectly. The change sets received by the database are now sanitized before application on a graph to avoid such issues.
Shell Client:
CAST
function now applies truncation instead of rounding when casting floats or doubles to integers or
longs. Also see the item under bug fixes (above).DISTINCT
, MATCH
, ORDER
) are no longer allowed to be followed directly by an alphanumeric
character. For example, ORDERBY
is no longer allowed and should be ORDER BY
. Similarly, WHEREx.prop > 3
is
no longer allowed and should be WHERE x.prop > 3
.SELECT *
is no longer allowed when there are no vertex or edge variables in the MATCH
clause. This prevents
zero-column result sets to be returned... GROUP BY v AS v2 ORDER BY v2
).
This is fixed now such that errors are raised in all cases. Changes
, ElementsChanges
, EdgeChanges
and VertexChanges
from oracle.pgx.api.graphbuilder
to an internal package.PgxGraph.createChangeSet()
by default uses auto generated Ids for edges. To use user explicit Ids use PgxGraph.createChangeSet(IdGenerationStrategy vertexIdGenerationStrategy, IdGenerationStrategy edgeIdGenerationStrategy)
instead.parallelization_strategy
runtime configuration field (deprecated since 2.3.0).PgxSession.newGraphBuilder()
and PgxSession.newGraphBuilder(IdType idType)
are now deprecated use PgxSession.createGraphBuilder()
and PgxSession.createGraphBuilder(IdType idType)
instead.PgxEntity#getProperty()
to return external Ids instead of internal ones in case of VERTEX/EDGE typed properties.Analyst#countTriangles
when sortVerticesByDegree
is true.queryPgql
endpoint using a HTTP GET methodgetRandomNode
endpoint. Call getRandomEntity
endpoint insteaddemotePinnedGraph
resizePool
addPinnedGraph
getSessionInfos
getGraphInfos
getSessionInfo
getGraphInfo
getMemoryInfo
getThreadPoolInfo
CompiledProgram#runAsync(PoolType targetPool, Object... args)
. Use
CompiledProgram#runAsync(WorkloadCharacteristicPreset characteristics, Object... args)
instead.tls_version
.ciphers
and tls_version
.oracle.pgx.api.GraphEntityCollection
API
instead of oracle.pgx.api.PgxCollection
.oracle.pgx.api.ScalarCollection
API and don't depend on graphs. The types of scalar collections we currently offer are sets and sequences.
They can hold primitive data types like Integer
, Long
, Float
and Double
and can be created using the
oracle.pgx.api.PgxSession
API.findCycle
and whomToFollow
in PGX shared memorygraph.publish()
session.getGraph("<name>")
graph.rename("<name>")
property.publish()
session.getGraphs()
EXISTS
and NOT EXISTS
subqueriesDISTINCT
inside SELECT
and aggregations.GROUP BY
inside subqueries.PATH
filters.n."my prop"
).n.prop = 'string''value'
is now an alternative for n.prop = 'string\'value'
and
FROM "my""graph"
is now an alternative for FROM "my\"graph"
.rename
, publish
and isPublished
functions into Graph
class.publish
and isPublished
functions into Property
class.getGraph
and getGraphs
functions into Session
class.getName
, rename
, oaa.publish
, oaa.isPublished
functions for oaa.graph
objects.oaa.getGraph
and oaa.getGraphs
functions.oaa.publish
and oaa.isPublished
functions for oaa.property
objects.file
and format
parameters in oaa.graph
function to support pgb
and graphml
formats to load graphs from file.cursor
and columnName
parameters to oaa.node.set
function which can be used to create a node set out of a PGQL result set.bindVars
parameter to oaa.cursor
function to prepare PGQL query string parameters.preload_graphs
configuration field to register graphs at start-up and publish them if needed. It overrides graphs
configuration field.ServerInstance#getServerState()
to retrieve the current server state (sessions, graphs, memory, threadPools and tasks)ERROR
but instead as INFO
. Only system errors may be logged as ERROR
.NegativeArraySizeException
when executing a BFS if too much memory was availableIndexOutOfBoundsException
when SELECT *
is used in combination with GROUP BY
. .
). approximateVertexBetweennessCentrality
.listening_socket_timeout
seconds. NullPointerException
when running out of memory in e.g. a PGQL query diameter
, radius
, periphery
and center
computing wrong eccentricity values on disconnected graphs.shortestPathDijkstra
might fail for undirected graph instances EntityType elementType
. Use PropertyType contentType
instead.EntityType getElementType()
. Use PropertyType getContentType()
instead.PgxFuture<Void> addAllAsync(Collection<E> source)
. Use PgxFuture<Void> addAllElementsAsync(Collection<E> source)
instead.PgxFuture<Void> removeAllAsync(Collection<E> source)
. Use PgxFuture<Void> removeAllElementsAsync(Collection<E> source)
instead.void addAll(ID... ids)
. Use void addAllById(ID... ids)
from oracle.pgx.api.GraphEntityCollection
instead.void removeAll(ID... ids)
. Use void removeAllById(ID... ids)
from oracle.pgx.api.GraphEntityCollection
instead.
of the oracle.pgx.api.PgxCollection
API are now deprecated.Pair<VertexSequence<ID>, VertexSequence<ID>> salsa(BipartiteGraph graph, int k)
. Use VertexProperty<ID, Double> salsa(BipartiteGraph graph)
instead.Pair<VertexSequence<ID>, VertexSequence<ID>> salsa(BipartiteGraph graph, int k, double maxDiff, double d, int maxIter)
. Use VertexProperty<ID, Double> salsa(BipartiteGraph graph, double maxDiff, int maxIter)
instead.Pair<VertexSequence<ID>, VertexSequence<ID>> salsaAsync(BipartiteGraph graph, int k)
. Use VertexProperty<ID, Double> salsaAsync(BipartiteGraph graph)
instead.Pair<VertexSequence<ID>, VertexSequence<ID>> salsaAsync(BipartiteGraph graph, int k, double maxDiff, double d, int maxIter)
. Use VertexProperty<ID, Double> salsaAsync(BipartiteGraph graph, double maxDiff, int maxIter)
instead.cctrace
, cctrace_out
and cctrace_print_stacktraces
are now deprecated and ignored if set. Use the corresponding client configuration fields enable_cctrace
, cctrace_out
and cctrace_print_stacktraces
instead.always_use_jni
in the enterprise scheduler flags is now deprecated.ServerInstance#getPgxVersion
and ServerInstance#getPgxVersionAsync
are now deprecated, use ServerInstance#getVersion
and ServerInstance#getVersionAsync
instead to get information about the server's version.ServerInstance#lookupPreloadedGraph
is now deprecated./control/graph/<graphName>/preloaded
is deprecated.use_native_analysis
PGX config flag is now deprecated.use_native_loaders
PGX config flag is now deprecated.getSessionInfos
, getGraphInfos
, getSessionInfo
, getGraphInfo
, getGraphInfo
, getMemoryInfo
and getThreadPoolInfo
in control API are now deprecated. Use ServerInstance#getServerState
to get information about the current server statewhomToFollow
now creates its internal bipartite graph in a different way, which may lead to different results.spark_streams
to specify the socket port and network interface for spark communication.+
for one or more, ?
for zero or one, and {1,4}
for one to four hops).SELECT * MATCH (n) -/:likes*/-> (m)
is now allowed and returns the same result as PATH some_identifier AS () -[:likes]-> () SELECT * MATCH (n) -/:some_identifier*/-> (m)
.PgxGraph#explainPgql(String)
for explaining the execution plan of a PGQL query.PgqlResultSet
. The methods next
, previous
, last
, afterLast
, first
,
beforeFirst
, absolute
and relative
can be used to update a cursor, which can point to a specific row in the result set.
Different get
methods can be used to obtain a value in the a column. The first column and the first row have index 1
.PgqlResultSet
iterable, so you can iterate over the result set directly without calling getResults()
first.FROM
clause for specifying an input graph.FROM
clause is optional in PgxGraph#queryPgql(String)
, PgxGraph#preparePgql(String)
and PgxGraph#explainPgql(String)
FROM
clause is mandatory in PgxSession#queryPgql(String)
, PgxSession#preparePgql(String)
and PgxSession#explainPgql(String)
WHERE
clause from PGQL 1.0 has been split up into a MATCH
clause and a WHERE
clause.MATCH
clause contains the graph pattern (vertices, edges and paths) while the WHERE
clause in PGQL 1.1 contains only the filter predicates.WHERE
clause for specifying filter expressions
(e.g. PATH connects_to AS () -[e]-> () WHERE e.status = 'OPEN' SELECT * MATCH ...
).WITH ...
have been removed.x.label()
or x.id()
) has been replaced by functional-style syntax (e.g. label(x)
or id(x)
).PgxGraph#queryPgql(String)
, however, PGQL 1.0 is now considered deprecated and may be discontinued in a future PGX version.int
, double
, string
)pgx_hostnames
parameter instead of host names.GraphBuilder#addVertex
, GraphBuilder#addEdge
idempotentgetString(x)
method, where x
is the index or name of a column in the result set.GraphChangeSet
context_path
to PGX.SM server to allow custom context paths--access_token
option and Java applications
can use the ServerInstance getInstance(String baseUrl, String accessToken)
API.oracle.pgx.config.ClientConfigBuilder
class which makes programmatic creation of client configs more flexible.spark_streams_interface
option is not given, now Spark loader choose the first workable interface.PgxGraph.getMemory()
(Oracle Bug #26479966)PgxGraph#getVertexAsync
PgxGraph#hasVertexAsync
GraphChangeSet#addEdge
pgx_num_worker_threads
configuration value (Oracle Bug #26797611)CachedGraph#renameProperty
to keep transient properties for a session after a failed renaming (Oracle Bug #26797142).GraphChangeSet#setRetainEdgeIds(true)
doesn't create an edge key mapping (Oracle Bug #26830179)LOCAL_DATE
type. Previously, it was mapped to the (deprecated) DATE
type.ArgumentType
from oracle.pgx.api.internal
to oracle.pgx.common.types
enable_solaris_studio_labeling
PGX config flag is now deprecated.spark_streams_interface
PGX config flag is now deprecated. Use spark_streams_config.network_interface
instread.getResults()
in PgqlResultSet
is now deprecated, since PgqlResultSet
is now directly iterable.PgqlResult
(a result of resultSet.getResults().iterator().next()
) is now deprecated. Instead, use PgxResult
as returned from resultSet.iterator().next()
. Get
methods in PgxResult
use index 1
for the first column
while they used to use index 0
in PgqlResult
.oracle.pgx.api.Pgx
are now deprecated. Instead, use the new oracle.pgx.config.ClientConfigBuilder
class.ServerInstance getInstance(String,String,String,Integer,Integer,Integer,Integer)
ServerInstance getInstance(String,String,String,Integer,Integer,Integer,Integer,Boolean)
ServerInstance getInstance(String,String,String,Integer,Integer,Integer,Integer,Boolean,Integer)
\u6075
) when printing a ResultSet through resultSet.print(..)
(Oracle Bug #26865324)max_client_http_connections
for controlling the maximum number of connections
between a PGX Client and PGX Server.hasVertexLabels()
and hasEdgeLabel()
to check whether a PgxGraph
has vertex labels / edge labels.getRandomEdge()
to retrieve a random edge from a PgxGraph
.PgxSession#getGraph(String)
for getting a reference to a session-bound PgxGraph
by name.skip_edges
and skip_vertices
to be able to skip loading vertices or edges
when reading two-table formats (CSV, Spark, RDBMS).PgxSparkContext
in the new oracle.pgx.api.spark2
package.~
character in paths as a placeholder for the user's home directory.local_date
, time
, timestamp
, time_with_timezone
and timestamp_with_timezone
,
replacing the now deprecated type date
.RO_STRING_SET
, LONG_SET
and SPARSE
property types. In the future, the access mode, sparsity and value types of set will not be encoded directly in the property type.SVID
could be renamed to a custom name like
SourceVertexID
.string
, integer
and long
as vertex ID types.detect_gzip
to enable/disable automatic gzip compression detection.pgx.enterprise_scheduler_config__num_io_threads_per_task
.local_date
, not to the deprecated property type date
), TIME, TIMESTAMP,
TIME WITH TIMEZONE and TIMESTAMP WITH TIMEZONE.PATH connects_to_high_volt_dev := (:Device) -> (:Device WITH voltage > 35000) SELECT ...
SELECT * WHERE (n), (m)
SELECT * WHERE (n), (m), n.prop = m.prop
all_different(v1, v2, ...)
for specifying that a certain set of values (typically
vertices or edges) are all different from each other.<>
(not equals) operator as a syntactic alternative for !=
(not equals).to_date
, to_time
and to_timestamp
to convert a string to a temporal type, given a specific format.ST_PointFromText
, ST_X
and ST_Y
to deal with the spatial type Point2D
import oracle.pgx.compilers.Compilers
import oracle.pgx.compilers.Language
legacyCompiler = Compilers.findCompiler(Language.GM_LEGACY)
string
, integer
and long
.Improved log messages when parsing values for temporal typed properties fails.
When :timing ON
is set, the PGX shell now always outputs time in seconds in the fixed format X+.XXXs
, where X
is [0-9]
, instead of switching between seconds and milliseconds. This change should make it easier to parse the logs for timing information.
string_pooling_strategy
to indexed
. Since it is still in an experimental stage there might be unforeseen bugs and performance issues.vertexProp.set(v1, null)
) will throw an
exception: property values cannot be NULL
""
(empty String)new Date(0)
(epoch time)PgxGraph.createVertexProperty(...)
and PgxGraph.createEdgeProperty(...)
.setProperty(String key, Object value)
and addLabel(String label)
in the Graph Builder and Graph
Change Set APIs no longer allow null to be passed as value
/label
argument. Previously, null was an
indication that the property/label should be set to its default (e.g. 0 for integers, 0.0 for doubles). However,
with the change, an exception is thrown instead:
property values cannot be null
. Now, to set properties to their defaults, it is necessary to explicitly
pass the default, for example: setProperty("integerProp1", 0)
instead of setProperty("integerProp1", null)
.ExecutionException
and InterruptedException
for synchronized API methods that
are expected to finish quickly and are executed directly on the caller thread.
A full list of affected methods can be found here: removed exception methodsResultSet.getPgqlResultElements()
and ResultSet.getNumResults()
no longer throw exceptions after the
result set has been closed, but instead return the same result as before closing of the result set. This is a result
of removing some code complexity from the client implementations into the server implementation. Note: behavior of
ResultSet
is undefined after it has been closed, so avoid using result sets after closing them.PgxSparkContext
in the oracle.pgx.api
is now deprecated. Use the class in oracle.pgx.api.spark1
package instead./core/graph/<graphname>/randomNode
is deprecated. /core/graph/<graphname/randomEntity
should be called insteadskip_nodes
and skip_edges
are deprecated. Use graph loading configurations fields loading.skip_vertices
and loading.skip_edges
instead.isSkipNodes()
and isSkipEdges()
are deprecated. Use skipVertexLoading()
and skipEdgeLoading()
methods instead.algorithms/link_prediction/salsa_deprecated.gm
is deprecated. algorithms/ranking_and_walking/salsa.gm
should be used insteadCALLER_THREAD
PoolType is deprecated./core/analysis/<analysisId>
with a targetPool
is deprecated. Use the workloadCharacteristics
field instead/core/graph/<graphname>/query
is deprecated. Use POST to /core/graph/<graphname>/query
with query and semantic options in json payloadall_different(v1, v2, ...)
or using non-equality constraints (e.g. v1 != v2
). The deprecations are as follows:PgxGraph.queryPgql(String, PatternMatchingSemantic)
(use PgxGraph.queryPgql(String)
instead)PgxSession.setPatternMatchingSemantic(..)
pattern_matching_semantic
nrow
function was added for oaa.cursor
, oaa.partition
, oaa.node.set
and oaa.node.sequence
objectsnames.oaa.graph
function was replaced with getPropertyNames.oaa.graph
function to avoid conflict with names
function in base packagenames.oaa.cursor
function was replaced with getColumnNames.oaa.cursor
function to avoid conflict with names
function in base packagelength
function was modified for oaa.cursor
, oaa.partition
and oaa.node.collection
objects to avoid
conflict with str function in base package. It's now returning number of columns rather than number of rowsoaa.getPersistedSnapshots
function now returns character(0)
instead of an error if there are no snapshotsoaa.graphSnapshot
function now returns an error if no snapshots were foundnodeSet
option to personalized versions of pagerank and SALSA algorithmsoaa.graphSnapshotList
function now supports lowercase pattern
argument.serviceName
argument to oaa.graphConnect
function to support connecting to Databases which do not have a SIDoaa.getProperty
function prints a warning and returns NULL
if property not found instead of throwing an error.PgxPath
(Oracle Bug #26174519)overwrite
flag is TRUEstring
VL
and EL
columns)null
over the remote API (Oracle Bug #25497517)id()
would throw an exception if the
graph has no IDs defined. This behavior changed in PGX 2.4.0. Such a query now succeeds and the internal IDs
are returned. This applies to both vertex and edge IDs.setUseVertexPropertyValueAsLabel(...)
on a graph config builder implicitly
loaded that given property as a vertex label. Since 2.4.0, you additionally have to call setLoadVertexLabel(true)
on that same builder object, otherwise the resulting graph will not have any vertex labels./core/graph/build
without the config
parameter is deprecatedMutationStrategy
analyst
can now be abbreviatedPartition
objectsPgxVertex
now returns Java Collections
instead of Iterable
when asked for in/out edges or getIn/OutNeighbors are called.
Thereby, operations like vertex.getInNeighbors().size()
are possible to determine the degree of a vertex.PgxVertex
.PgxEdge
that returns its vertices as a Pair
.PgxVertex
by specifying an edge Direction
contains()
method to PgxCollection
.approximatePagerank()
in the Analyst calling non-approximated algorithm internallypersonalizedPagerank()
not respecting vertex
argument correctly in the Analystclone()
and toMutable()
methods of collections ignoring user-specified names in remote modeArithmeticException
(Oracle Bug #24971496)HTTP
/HTTPS
(Oracle Bug #24971441)getVertexLabels()
not working in the remote caseGraphConfigBuilder
class, the methods forSingleFileFormats()
and forMultipleFileFormats()
are now
deprecated and were unified into a new forFileFormats()
which accepts all of the following:setUri()
methodaddUri()
methodaddVertexUri()
and addEdgeUri()
methods
Similarly, the methods forSingleFileFormat(Format)
and forMultipleFileFormat(Format)
are now deprecated and
unified into a new forFileFormat(Format)
method.With introduction of the enterprise scheduler the following PGX config fields are deprecated:
num_workers_analysis
, num_workers_fast_track_analysis
and num_workers_io
on the top level are now deprecated.
Instead, they must be placed into the new, nested fj_pool_config
field. For example, the following config file:
{ ... "num_workers_analysis": 64, "num_workers_fast_track_analysis": 1, "num_workers_io": 72, ... }
must now be written like this:
{ ... "basic_scheduler_config": { "num_workers_analysis": 64, "num_workers_fast_track_analysis": 1, "num_workers_io": 72 }, ... }
parallelization_strategy
is now deprecated and was replaced by a new field scheduler
. For example, the
following config file:
{ ... "parallelization_strategy": "task_stealing_counted", ... }
must now be expressed like this:
{ ... "scheduler": "basic_scheduler", ... }
On a similar note, the previous value rts
for parallelization_strategy
is mapped to the scheduler
value enterprise_scheduler
.
The remaining two deprecated strategies task_stealing
and segmented
no longer have any effect and will be treated like setting the scheduler
value to basic_scheduler
PGQL result element types VERTEX_LABELS
and EDGE_LABEL
changed to STRING_SET
and STRING
.
The column types of a PgqlResultSet
, as obtained via getPgqlResultElements().get(i).getElementType()
, previously
included VERTEX_LABELS
in the case the labels of a vertex were returned, and, EDGE_LABEL
in the case the label of
an edge was returned. VERTEX_LABELS
and EDGE_LABEL
are now deprecated and are no longer returned from
getElementType()
. Instead, STRING_SET
is returned in the case of vertex labels and STRING
is returned in the
case of an edge label. Take the following example PGQL query:
SELECT n.labels(), e.label(), n.stringProp WHERE (n) -[e]-> (m)
Previously, getPgqlResultElements()
would return the list [VERTEX_LABELS, EDGE_LABEL, STRING]
, but this has now
changed to [STRING_SET, STRING, STRING]
.
.jar
file to persist the compilation across different PGX
instances. See this tutorial for an example usage.PgxGraph#getVertices()
and PgxGraph#getEdges()
to return an immutable, virtual view on all vertices/edgesPgxVertex
/PgxEdge
objectsEdgeProperty.ALL
giving an error if using remotely during sparsify()
undirect()
implementation which might lead to a corrupt vertex ID mapping on large graphs (Oracle Bug #23527638)PgxVertex
class to retrieve all neighbor vertices and all out-going edges.Ctrl+C
keyboard signal to interrupt the currently running request.zip
, jar
, tar
, tgz
, tbz2
, gz
, bz2
and ftp(s)
. All previous
formats and protocols (http(s)
, hdfs
, classpath
and res
) are still supported, but have a new implementation.print()
statementpgx /path/to/script.groovy script-arg1 script-arg2
--max-output-lines
parameter to limit the maximum amount of elements printed if an iterable is returnedPgxVertex
/PgxEdge
objects.Analyst
API now have more meaningful default names.getVertex(...)
and getEdge(...)
now verify the given vertex/edge ID exists on the graph.ls
, mv
, pwd
, cp
and cat
)javadoc
command which prints the Javadocs of shell variables, class names and methods directly in the shellexperimental/dist/doc
directory for documentationProperties.ALL
and Properties.NONE
to fix inconsistencies between null
and empty listsInitial release