Supported PGQL Features and Limitations

This section provides the complete list of supported and unsupported PGQL functionalities in PGQL queries that can be performed directly on the property graphs in the database and those that are run after loading the graphs into memory.
Feature PGQL on RDBMS (PGQL Property Graph) PGQL on the Graph Server (PGX)
CREATE PROPERTY GRAPH Supported Supported
Limitations:
  • No composite keys for vertices
DROP PROPERTY GRAPH Supported Not Supported
Fixed-length pattern matching Supported Supported
Variable-length pattern matching goals Supported:
  • Reachability
  • Path search prefixes:
    • ANY
    • ANY SHORTEST
    • SHORTEST k
    • ALL
  • Path modes:
    • WALK

Limitations:

  • Path search prefixes:
    • ALL SHORTEST
    • ANY CHEAPEST
    • CHEAPEST k
  • Path modes:
    • TRAIL
    • SIMPLE
    • ACYCLIC
Supported:
  • Reachability
  • Path search prefixes:
    • ANY
    • ANY SHORTEST
    • SHORTEST k
    • ALL SHORTEST
    • ANY CHEAPEST
    • CHEAPEST k
    • ALL
  • Path modes:
    • WALK
    • TRAIL
    • SIMPLE
    • ACYCLIC
Variable-length pattern matching quantifiers Supported:
  • *
  • +
  • ?
  • { n }
  • { n, }
  • { n, m }
  • { , m }
Supported:
  • *
  • +
  • ?
  • { n }
  • { n, }
  • { n, m }
  • { , m }

Limitations:

  • ? is only supported for reachability
  • In case of ANY CHEAPEST and TOP k CHEAPEST, only * is supported
Variable-length path unnesting Supported:
  • ONE ROW PER STEP

    Limitation: Quantifier * not supported

Not supported:

  • ONE ROW PER VERTEX
Supported:
  • ONE ROW PER VERTEX
  • ONE ROW PER STEP

Limitation:

  • * quantifier is not supported
GROUP BY Supported Supported
HAVING Supported Supported
Aggregations Supported:
  • COUNT
  • MIN, MAX, AVG, SUM
  • LISTAGG
  • JSON_ARRAYAGG

Limitations:

  • ARRAY_AGG
Supported:
  • COUNT
  • MIN, MAX, AVG, SUM
  • LISTAGG
  • ARRAY_AGG

Not Supported:

  • JSON_ARRAYAGG
DISTINCT
  • SELECT DISTINCT
  • Aggregation with DISTINCT (such as, COUNT(DISTINCT e.prop))
Supported Supported
SELECT v.* Supported Supported
ORDER BY (+ASC/DESC), LIMIT, OFFSET Supported Supported
Data Types All available Oracle RDBMS data types supported Supported:
  • INTEGER (32-bit)
  • LONG (64-bit)
  • FLOAT (32-bit)
  • DOUBLE (64-bit)
  • STRING (no maximum length)
  • BOOLEAN
  • DATE
  • TIME
  • TIME WITH TIME ZONE
  • TIMESTAMP
  • TIMESTAMP WITH TIME ZONE
JSON Supported:
  • JSON storage:
    • JSON strings (VARCHAR2)
    • JSON objects
  • JSON functions:

    Any JSON function call that follows the syntax, json_function_name(arg1, arg2,…). For example:

    json_value(department_data, '$.department')

Limitations:
  • Simple Dot Notation
  • Any optional clause in a JSON function call (such as RETURNING, ERROR, and so on) is not supported. For example:

    json_value(department_data, '$.employees[1].hireDate' RETURNING DATE)

No built-in JSON support. However, JSON values can be stored as STRING and manipulated or queried through user-defined functions (UDFs) written in Java or JavaScript.
Operators Supported:
  • Relational: +, -, *, /, %, - (unary minus)
  • Arithmetic: =, <>, <, >, <=, >=
  • Logical: AND, OR, NOT
  • String: || (concat)
Supported:
  • Relational: +, -, *, /, %, - (unary minus)
  • Arithmetic: =, <>, <, >, <=, >=
  • Logical: AND, OR, NOT
  • String: || (concat)
Functions and predicates

Supported are all available functions in the Oracle RDBMS that take the form function_name(arg1, arg2, ...) with optional schema and package qualifiers.

Supported PGQL functions/predicates:

  • IS NULL, IS NOT NULL
  • JAVA_REGEXP_LIKE (based on CONTAINS)
  • LOWER, UPPER
  • SUBSTRING
  • ABS, CEIL/CEILING, FLOOR, ROUND
  • EXTRACT
  • ID
  • LABEL, HAS_LABEL
  • ALL_DIFFERENT
  • CAST
  • CASE
  • IN and NOT IN

Limitations:

  • LABELS
  • IN_DEGREE, OUT_DEGREE
Supported:
  • IS NULL, IS NOT NULL
  • JAVA_REGEXP_LIKE (based on CONTAINS)
  • LOWER, UPPER
  • SUBSTRING
  • ABS, CEIL/CEILING, FLOOR, ROUND
  • EXTRACT
  • ID, VERTEX_ID, EDGE_ID
  • LABEL, LABELS, IS [NOT] LABELED
  • ALL_DIFFERENT
  • IN_DEGREE, OUT_DEGREE
  • CAST
  • CASE
  • IN and NOT IN
  • MATCHNUM
  • ELEMENT_NUMBER
  • IS [NOT] SOURCE [OF], IS [NOT] DESTINATION [OF]
  • VERTEX_EQUAL, EDGE_EQUAL
User-defined functions Supported:
  • PL/SQL functions
  • Functions created via the Oracle Database Multilingual Engine (MLE)
Supported:
  • Java UDFs
  • JavaScript UDFs
Subqueries:
  • Scalar subqueries
  • EXISTS and NOT EXISTS subqueries
  • LATERAL subquery
Supported:
  • EXISTS and NOT EXISTS subqueries
  • Scalar subqueries
  • LATERAL subquery
Supported

Limitation

  • If a FROM clause contains a LATERAL subquery then the LATERAL subquery needs to be the first table expression in the FROM clause. The FROM clause may contain additional MATCH clauses but may not contain additional LATERAL subqueries or GRAPH_TABLE subquery operators.
GRAPH_TABLE operator Supported

Extension:

  • BASE GRAPHS clause in CREATE PROPERTY GRAPH for creating graphs based on metadata of other graphs
Supported
  • If a FROM clause contains a GRAPH_TABLE operator then the GRAPH_TABLE operator needs to be the first table expression in the FROM clause. The FROM clause may contain additional MATCH clauses but may not contain additional GRAPH_TABLE operators or LATERAL subqueries.
INSERT/UPDATE/DELETE Supported Supported
INTERVAL literals and operations Not supported

Supported literals:

  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • MONTH
  • YEAR

Supported operations:

  • Add INTERVAL to datetime (+)
  • Subtract INTERVAL from datetime (-)