9 days agoUpdate master
Jasper Blues [Sat, 17 Sep 2022 02:21:05 +0000 (12:21 +1000)] 

Improve wording.

9 days agoUpdate
Jasper Blues [Sat, 17 Sep 2022 02:20:05 +0000 (12:20 +1000)] 

fix typo.

10 days agoUpdate
Jasper Blues [Fri, 16 Sep 2022 02:02:58 +0000 (12:02 +1000)] 

Add another important use-case.

2 weeks agoUpdate documentation link in
Pieterjan De Potter [Thu, 8 Sep 2022 10:07:05 +0000 (12:07 +0200)] 
Update documentation link in

2 weeks agoUpdate
gorgonzola [Wed, 7 Sep 2022 07:37:31 +0000 (16:37 +0900)] 

- documentation link
- age viewer description

2 weeks agoUpdated drivers, minor docs fixes
Tomasz Durda [Sun, 4 Sep 2022 11:10:19 +0000 (13:10 +0200)] 
Updated drivers, minor docs fixes

2 weeks agoUpdate
Andrew Ko [Tue, 6 Sep 2022 04:21:09 +0000 (13:21 +0900)] 

Updating the latest release

5 weeks agoGraph names with empty string '' are no more allowed. (#251)
Shoaib [Mon, 22 Aug 2022 15:38:01 +0000 (17:38 +0200)] 
Graph names with empty string '' are no more allowed. (#251)

5 weeks agoImplement CALL ...[YIELD] for cypher functions. 249/head
Dehowe Feng [Tue, 19 Jul 2022 06:28:33 +0000 (15:28 +0900)] 
Implement CALL ...[YIELD] for cypher functions.

Queries can now call functions using the form CALL ... YIELD.

CALL ... YIELD can be used in some of the following forms:



In the future, CALL YIELD support for record returning functions and
multiple variable output functions can be added.

Known Issue with WHERE clause where a WHERE in a MATCH + CALL subquery
does not filter results is known.

6 weeks agoUpdate NOTICE file 245/head
John Gemignani [Wed, 10 Aug 2022 22:55:02 +0000 (15:55 -0700)] 
Update NOTICE file

Updated NOTICE file to remove 'incubating'

6 weeks agoUpgrade AGE version from 1.0.0-->1.1.0
Dehowe Feng [Wed, 10 Aug 2022 19:55:46 +0000 (12:55 -0700)] 
Upgrade AGE version from 1.0.0-->1.1.0

Upgrade AGE version to 1.1.0

6 weeks agoAdd upgrade script for 1.0.0 to 1.1.0
John Gemignani [Wed, 10 Aug 2022 19:14:51 +0000 (12:14 -0700)] 
Add upgrade script for 1.0.0 to 1.1.0

Added upgrade script for 1.0.0 to 1.1.0

2 months agoFix Bug in integer serialization for integers in GIN
Josh Innis [Fri, 15 Jul 2022 07:19:47 +0000 (16:19 +0900)] 
Fix Bug in integer serialization for integers in GIN

Fixed a bug where integers were not being serialized
correctly when stored in GIN indices.

Added more regression tests in light of the found issue

2 months agoFix issue #240 - negative array bounds - addendum
John Gemignani [Tue, 12 Jul 2022 22:51:56 +0000 (15:51 -0700)] 
Fix issue #240 - negative array bounds - addendum

Fixed github issue #240 - negative array bounds - addendum.

There was found to be an issue with the transform_A_Indirection
function. Previous work on the function removed a few important
lines. This caused it to improperly transform nested indirections.
These lines were added back in.

Additionally, since the previous work on transform_A_Indirection,
some new functionality was added to transform_ColumnRef. This
allowed the removal of some unnecessary code as well.

Added regression tests to cover nested access and slice operations.

2 months agoFix issue #240 - negative array bounds
John Gemignani [Mon, 11 Jul 2022 19:47:40 +0000 (12:47 -0700)] 
Fix issue #240 - negative array bounds

Fix github issue #240 - negative array bounds.

The issue was that the wrong variable name was used for the array
index. It needed to be array_index, but was index instead. The reason
this was not caught was -

     1) There weren't any regression tests for this functionality.
     2) The name 'index' was defined elsewhere as either a function
        or a struct. So, the compiler was okay with the particular

The variable name was changed to the correct name.

Regression tests were added.

2 months agoFix MERGE visibility in chained commands, SET specifically.
John Gemignani [Wed, 6 Jul 2022 23:26:14 +0000 (16:26 -0700)] 
Fix MERGE visibility in chained commands, SET specifically.


The MERGE command searches for a pattern to return. If that pattern
isn't found, it will create it and return the newly created pattern.
In both cases, MERGE will return one or more tuples.

When MERGE is chained with other commands, the tuples generated
(either found or created) by MERGE are passed up to the parent
commands. Those parent commands can then make modifications to
those tuples, if necessary.


The issue here was that the newly created tuples were not visible,
meaning the currentCommandId used to create them was not strictly
less than the currentCommandId used to update them further in the

The error with the processed tuples would show up on the surface (the
return value) as being correct. However, after inspection, it would
be shown that the tuple wasn't actually modified by any of the chained
commands. Note, this was only the case for newly created tuples.

merge (n:node {name: 'Jason'}) SET = 'Lisa' RETURN n;
 {"id": 844424930131970, "label": "node", "properties": {"name": "Lisa"}}::vertex
(1 row)

match (n) return n;
 {"id": 844424930131970, "label": "node", "properties": {"name": "Jason"}}::vertex
(1 row)

To fix this, the currentCommandId needed to be incremented after creating
a tuple in MERGE. This would allow the chained commands that follow, to
see it.  However, the currentCommandId used by the MERGE still needed to
remain the same. This made it necessary to create a field in the custom
scan node to hold the original currentCommandId for the MERGE instances'
updates. What this does is to always keep the newly created MERGE tuples
updated with a currentCommandId that is always 1 less than the currrent

Doing this corrected the issue.

merge (n:node {name: 'Jason'}) SET = 'Lisa' RETURN n;
 {"id": 844424930131971, "label": "node", "properties": {"name": "Lisa"}}::vertex
(1 row)

match (n) return n;
 {"id": 844424930131971, "label": "node", "properties": {"name": "Lisa"}}::vertex
(1 row)

Added regression tests.

2 months agoFix MERGE/SET github issue #235
John Gemignani [Thu, 30 Jun 2022 19:41:17 +0000 (12:41 -0700)] 
Fix MERGE/SET github issue #235

Fixed github issue #235 for when MERGE and SET were used together.

FX: MERGE (n:node {name: 'Jason'}) SET = 'Lisa' RETURN n

The issue is that the above command would cause a crash when the
target of the MERGE command existed. Meaning, it found a matching
tuple to return to the SET command.

The tuple generated for that particular case was not being sent up
to the SET command correctly, this was fixed.

Added a regression test.

2 months agoFix VLE peek stack
John Gemignani [Wed, 29 Jun 2022 22:30:47 +0000 (15:30 -0700)] 
Fix VLE peek stack

Fix the VLE peek_stack_head routine to return a NULL if the stack
is NULL.

3 months agoUpdate after TLP
Eya Badal [Fri, 17 Jun 2022 21:14:11 +0000 (14:14 -0700)] 
Update after TLP

3 months agofix regression tests to fix issues on mac with trigonometric functions (#224)
Shoaib [Fri, 10 Jun 2022 22:42:27 +0000 (00:42 +0200)] 
fix regression tests to fix issues on mac with trigonometric functions (#224)

4 months agoFix VLE local cache bug (crash)
John Gemignani [Thu, 26 May 2022 20:49:19 +0000 (13:49 -0700)] 
Fix VLE local cache bug (crash)

Fixed the VLE local cache. It had a bug that caused a circular loop
in the LRU cache list. This loop would then cause a crash when the
cache attempted to purge off old entries.

No impact on regression tests.

4 months agoFix local cached contexts for static procedures. Issue #220
John Gemignani [Wed, 25 May 2022 19:34:49 +0000 (12:34 -0700)] 
Fix local cached contexts for static procedures. Issue #220

This fix allows locally cached contexts to be rebuilt for actions that
update the specified underlying graph.

Local contexts are tied to their VLE grammar node IDs, which is unique to
each command. This ID allows the caching of contexts, which allows their
reuse, thus saving the expensive costs of rebuilding a new local context
every time, for the same command. Its expected use was within a single
command line. This is because the VLE SRF may get invoked many times
through the single grammar node's lifetime on that line.

However, it was overlooked in static procedures (stored procedures and
user created functions) that these grammar nodes might persist longer
than the expected life of just one command line.

This fix allows them to persist and update along with the graph.

Added regression tests.

4 months agoAllow global graph contexts to see currentCommandIds
John Gemignani [Thu, 19 May 2022 16:51:45 +0000 (09:51 -0700)] 
Allow global graph contexts to see currentCommandIds

Allow the global graph contexts to see the curcid - the snapshot
copy of currentCommandId for that snapshot.

This will allow the contexts to be refreshed, as needed, inside
BEGIN/COMMIT blocks. This problem was brought up in issue #217

Added regression tests.

4 months agoFix Bug in WHERE clause and property contraints
Josh Innis [Wed, 11 May 2022 02:45:56 +0000 (19:45 -0700)] 
Fix Bug in WHERE clause and property contraints

When the property contraints and the where clause are used together,
the property contraints are ignored.

There was a second issue where the where clause needs to be coerced to a
boolean value before ANDed with the property constraint quals

4 months agoFix bug in aggregate function collect()
John Gemignani [Tue, 10 May 2022 19:03:44 +0000 (12:03 -0700)] 
Fix bug in aggregate function collect()

Fixes a bug where the collect functions aggtransfn is not called but
the aggfinalfn is. While I'm not sure why this case happens, as it
'should' always call the aggtransfn, it crashes because the collect
aggregate state (castate) hasn't been initialized and is still null.

The fix is to have the aggfinalfn check for a null state and create
the state for finalizing the empty '[]' results.

Added a regression test for this case.

4 months agoAdd access operator (`->`, `->>`) to Agtype (#212)
Alex Kwak [Fri, 6 May 2022 23:43:45 +0000 (08:43 +0900)] 
Add access operator (`->`, `->>`) to Agtype (#212)

* Add access operator (`->`, `->>`) to Agtype

Added the `->`, `->>` operator to agtype for approaching like Json(b).

4 months agoImprove Where clause performance and supoort Index Scans
Josh Innis [Fri, 6 May 2022 21:28:15 +0000 (14:28 -0700)] 
Improve Where clause performance and supoort Index Scans

Improve the evaluation of qual in the WHERE clause by referencing
the properties column in the underlying table, rather than having
to go through the constructed variable for the entity.

Allow the access operator to be used in index construction.

Modify the inderection logic to be capable of using indices,
if they exist.

4 months agoVLE path variable integration performance patch
John Gemignani [Sat, 23 Apr 2022 00:44:11 +0000 (17:44 -0700)] 
VLE path variable integration performance patch

This patch fixes 2 cases where the match terminal edge logic
for the VLE integration into a match shouldn't be called for a path
variable. The cases are as follows -

    1) p=()-[*]-(), p=()-[*]->(), p=()<-[*]-()
    2) p=(u)-[*]-(), p=(u)-[*]->(), p=(u)<-[*]-()

Note: This is for any length of VLE edge, not just *

Note: It may be possible to expand this to other cases. This is left
      for a potential future patch.

In the cases listed above, this decreases the execution speed by
orders of magnitude.

There are no impact on regression tests.

4 months agoAdd CALL [YIELD] grammar rules
Dehowe Feng [Thu, 5 May 2022 00:20:37 +0000 (17:20 -0700)] 
Add CALL [YIELD] grammar rules

Add call ...[yield] grammar rules for the implementation of
CALL procedures.

4 months agoModify Docker url
Josh Innis [Thu, 28 Apr 2022 18:16:30 +0000 (11:16 -0700)] 
Modify Docker url

Modify the Docker urls to point to the Apache docker image

5 months agoSupport for Agtype Containment Ops and GIN Indices
Josh Innis [Mon, 25 Apr 2022 18:13:16 +0000 (11:13 -0700)] 
Support for Agtype Containment Ops and GIN Indices

Add support for @>, <@, ?, ?|, ?& operators postgres operators.

Alter property contraint checks in MATCH clause to use the @>  operator.

Add support for GIN Indices

5 months agoCache AGTYPE and GRAPHID Oids
John Gemignani [Thu, 21 Apr 2022 00:36:08 +0000 (17:36 -0700)] 

Set up caching mechanism for AGTYPE and GRAPHID Oids.

Previously these were set up as #define statements that used syscache
lookups, as these are all dynamically allocated.

They are now set up to use global variables to hold the values, after
the first lookup, to enable faster lookups.

No regression tests were affected.

5 months agoAllow lists and maps to be used in the SET clause
Josh Innis [Thu, 21 Apr 2022 17:13:28 +0000 (10:13 -0700)] 
Allow lists and maps to be used in the SET clause

Patch fixes a bug that did not allow lists or maps
to be used in the SET clause properly.

Optimized some code in the SET clause.

Code cleanup and documenation added too.

5 months agoUpdates to 1.0.0 (#197)
Nick Sorrell [Thu, 21 Apr 2022 11:48:06 +0000 (07:48 -0400)] 
Updates to 1.0.0 (#197)

* Updates to 1.0.0

* Updating copyright date in notice

5 months agoFix global graph hashtable insert messaging
John Gemignani [Tue, 19 Apr 2022 20:41:23 +0000 (13:41 -0700)] 
Fix global graph hashtable insert messaging

Fixed the global graph hashtable routines to error out, instead of
crashing due to an assert, for duplicate ids.

5 months agochore: (Docker) Removing upstream clone and unneeded dependencies (#205)
Nick Sorrell [Mon, 11 Apr 2022 05:29:50 +0000 (01:29 -0400)] 
chore: (Docker) Removing upstream clone and unneeded dependencies (#205)

Currently, Dockerfile always cloning repository with master branch.
so, it always build of master. and, difficult to configure a proper
Docker CD environment

Therefore, makes to build Dockerfile by copying current directories
without doing clone. according to this change, remove unneeded

5 months agoAdd chained comparisons to openCypher
John Gemignani [Thu, 7 Apr 2022 22:13:32 +0000 (15:13 -0700)] 
Add chained comparisons to openCypher

Added chained comparisons to AGE's openCypher specification.

Added regression tests.

5 months agoImprove Performance of MATCH and support Indices in Queries
Josh Innis [Wed, 6 Apr 2022 15:31:54 +0000 (08:31 -0700)] 
Improve Performance of MATCH and support Indices in Queries

Change the logic that constructs the join tree in a match to  use the id,
start_id, and end_ids as the graphid type, rather than using Agtype, this will
save time for every row qual check by skipping unneeded processing time to
convert graphids to agtype when it is not necessary.

Change the functions used by match to check that the output is  correct will now
accept graphids and agtype, which will improve performance.

Enable graphids to be used in hash joins and merge joins, this will allow the
optimizer to choose more efficient query plans in the planner/optimization

Fix a bug in the cypher writing clauses, that allow them to support updating
indices. This allows users to build indices that would allow for more efficient
queries. Such as using Index scans instead of sequence scans and make for more
opportunities for merge joins to be a better option for the planner, which
combines the time complexity of hash joins, with the space complexity of nested
loop joins. Nested loop joins also have the opportunity of using index scans
which will also improve performance.

5 months agoFix chained unions returning unexpected results
Dehowe Feng [Thu, 31 Mar 2022 21:16:26 +0000 (14:16 -0700)] 
Fix chained unions returning unexpected results

Rewrote the union logic to integrate union set operation values
into the cypher_return node. Removed the cypher_union ag node to be
more in line with the postgresql implementation.

Altered the grammar to utilize the make_set_op function for future
set operations if necessary. Also changed query_list rule to
cypher_stmt for more clarity.

Refactored logic surrounding isLeaf in transform_cypher_union_tree
to have the function call tree be more congruent with the postgres
function tree.

Fixed a bug where chained union operations resulted in unexpected

Also fixed minor grammatical errors in comments and style issues.

5 months agoVLE memory usage bug fixes
John Gemignani [Thu, 24 Mar 2022 01:01:33 +0000 (18:01 -0700)] 
VLE memory usage bug fixes

Added some bug fixes to the VLE memory management system.

Moved the age_vertex_stats function to global_graph.

6 months agoImprove performance of VLE cases
Josh Innis [Fri, 25 Mar 2022 19:27:57 +0000 (12:27 -0700)] 
Improve performance of VLE cases

For some MATCH queries that use the VLE, there where unecessary
comparisons to ensure the correct output was generated. When the vertex
after the vle edge is not included in the query, the
age_match_vle_terminal_edge function does not need to be called.

MATCH (a)-[e*1..5]->() RETURN a, e;

6 months agoFix Simple Undirected MATCH Case
Josh Innis [Wed, 23 Mar 2022 22:39:59 +0000 (15:39 -0700)] 
Fix Simple Undirected MATCH Case

When a MATCH has two vertices and an undirected edge, where no
information was referenced in the two vertices, such as:

MATCH ()-[e]-() RETURN e;

Only half the number of rows were returned from what was expected.
Every  edge should be included twice, once for each direction.

6 months agoFix small memory leak in VLE
John Gemignani [Tue, 22 Mar 2022 19:53:36 +0000 (12:53 -0700)] 
Fix small memory leak in VLE

Fixed a small memory leak in the VLE. A character string for the edge
lable name in the local VLE context was not getting freed.

6 months agoAdd VLE performance enhancements
John Gemignani [Thu, 10 Mar 2022 22:14:36 +0000 (14:14 -0800)] 
Add VLE performance enhancements

Added to the VLE code a local context LRU cache to improve

The following command demonstrates an issue with the VLE and
SRFs -

    MATCH (u)-[*]-() RETURN COUNT(1);

This command will repeatedly call the VLE SRF with different
starting vertices until all vertices matching u are exhausted.
However, the issue is, each of these vertices will initiate a
new SRF call - not a continuation of the same SRF. These new
calls have to rebuild all of the local structures for the same
VLE grammar node. This ends up taking a lot of time and resources.

To resolve this a simple LRU based cache was added for these local
VLE contexts and keyed on the grammar node id. This id was added so
that each VLE grammar node would be unique and therefore, reusable
for repeated calls using the same grammar node.

Added split edge lists for the edges stored for each vertex. This
comprises 3 edge lists to improve performance for directional cases.

Originally, all edges entering and exiting a vertex were stored in
the 'edges' list. Now the edges are stored in edges_in, edges_out,
and edges_self. This allows directed searchs to avoid checking edges
that don't meet the direction criteria.

Added new logic for matching an edge in function is_an_edge_match.
It now uses agtype_deep_contains for comparisons.

Added the cypher function age_vertex_stats which will return vertex
statistics. This function is helpful for debugging graphs.

Added a grammar rule to allow functions to be used as the parent of
an indirection. As in the following example -

    MATCH (u) WHERE vertex_stats(u).in_degree > 10 RETURN vertex_stats(u);

Additionally, a few small memory leaks were fixed.

Added regression tests.

All previous regression tests passed.

6 months agoAdd ASF license to upgrade scripts
John Gemignani [Tue, 8 Mar 2022 17:29:08 +0000 (09:29 -0800)] 
Add ASF license to upgrade scripts

Added the ASF license to the upgrade scripts.

Minor formatting of contents.

6 months agoAdding a upgrading SQL script file from 0.5.0 to 0.6.0 (#190)
Quoc Viet Vuong [Tue, 8 Mar 2022 16:45:47 +0000 (23:45 +0700)] 
Adding a upgrading SQL script file from 0.5.0 to 0.6.0 (#190)

6 months agoAdd upgrading file age--0.7.0--1.0.0.sql (#191)
Quoc Viet Vuong [Fri, 4 Mar 2022 23:05:49 +0000 (06:05 +0700)] 
Add upgrading file age--0.7.0--1.0.0.sql (#191)

Add upgrading file age--0.6.0--0.7.0.sql

6 months agoRefactor function get_agtype_value_object_value
John Gemignani [Wed, 2 Mar 2022 00:44:31 +0000 (16:44 -0800)] 
Refactor function get_agtype_value_object_value

Refactored the function get_agtype_value_object_value to use binary
search to find the specified key. Previously it just did a linear
seach through the keys.

Removed the function get_agtype_key as it was redundant.

Added the macro GET_AGTYPE_VALUE_OBJECT_VALUE for usage with string
constants. Thank you Alex!

Replaced all occurrences of get_agtype_key to use either the
get_agtype_value_object_value or GET_AGTYPE_VALUE_OBJECT_VALUE
calls, depending on whether string constants were used or not.

Adjusted all calls to get_agtype_value_object_value due to the
addition of a length parameter.

All regression tests succeeded.

6 months agoChange version from 0.7.0 to 1.0.0
Josh Innis [Wed, 2 Mar 2022 23:00:05 +0000 (15:00 -0800)] 
Change version from 0.7.0 to 1.0.0

6 months agoAge load issue (#188)
Shoaib [Wed, 2 Mar 2022 19:09:44 +0000 (20:09 +0100)] 
Age load issue (#188)

Refactored the agtype_access_operator and support functions to
eliminate the constant conversions back-and-forth.

Integrated the bulk import tool into AGE.

Also corrected the response to AGTV_NULL

Moved get_agtype_key from age_vle.c to agtype.c for usage by

Adjusted 2 regression tests.

Co-authored-by: John Gemignani <>
6 months agoRefactor agtype_access_operator
John Gemignani [Fri, 25 Feb 2022 01:01:34 +0000 (17:01 -0800)] 
Refactor agtype_access_operator

Refactored the agtype_access_operator and support functions to
eliminate the constant conversions back-and-forth.

Also corrected the response to AGTV_NULL

Moved get_agtype_key from age_vle.c to agtype.c for usage by

Adjusted 2 regression tests.

7 months agoBugfix - Remove INLINE from function delcaration
Josh Innis [Thu, 10 Feb 2022 03:04:24 +0000 (19:04 -0800)] 
Bugfix - Remove INLINE from function delcaration

7 months agoRebase VLE code
John Gemignani [Sat, 5 Feb 2022 01:22:55 +0000 (17:22 -0800)] 
Rebase VLE code

Rebased the VLE code -

Pulled out the graphid list and stack data structures used by the
VLE so that they may be used by others. This also provides a good
place for other graph related data structures to be stored.

Pulled out the graph creation and management routines and the graph
vertex and edge data structures to allow for other uses beyond VLE.

The data structures for the graph were purposely not moved in with
the other data structures as they are vital to the graph creation
and management logic. It might be useful to eventually refactor this
to expand what a graph may contain. But, for now, it was left alone.

The header files: age_global_graph.h and age_graphid_ds.h have the
interfaces for these functions and are designed to hide the
implementation from the user.

All regression tests completed without issue.

7 months agoImplement Merge Clause
Josh Innis [Thu, 10 Feb 2022 01:37:45 +0000 (17:37 -0800)] 
Implement Merge Clause

MERGE either matches existing nodes and binds them, or
it creates new data and binds that. It’s like a
combination  of  MATCH  and  CREATE  that  additionally
allows  you  to  specify  what  happens  if  the  data
was matched or created.

For example, you can specify that the graph must contain
a node for a user with a certain name. If there isn’t a
node with the correct name, a new node will be created
and its name property set.

When  using  MERGE  on  full patterns, the behavior is
that either the whole pattern matches, or the whole
pattern is created. MERGE will not partially use existing
patterns—it’s all or nothing. If partial matches are
needed, this can be accomplished by splitting a pattern up
into multiple MERGE clauses.

As with MATCH, MERGE can match multiple occurrences of a
pattern. If there are multiple matches, they will all be
passed on to later stages of the query.

7 months agobug-fix: chained union logic
Dehowe Feng [Thu, 3 Feb 2022 00:42:39 +0000 (16:42 -0800)] 
bug-fix: chained union logic

fixed bug with chained unions that failed to remove duplicate values

the bug appeared when mixing agtypes and chaining multiple unions

7 months agoAllow a path of one vertex
John Gemignani [Tue, 25 Jan 2022 23:59:07 +0000 (15:59 -0800)] 
Allow a path of one vertex

Add in the logic to allow a path of one vertex. This will bring AGE
paths in line with others who use the openCypher specification,
namely, Neo4j.

Adjust regression tests.

7 months agoCreated functions for load graph from csv files (#155)
Shoaib [Wed, 26 Jan 2022 18:01:19 +0000 (19:01 +0100)] 
Created functions for load graph from csv files (#155)

8 months agohotfix: A C99 compliant declaration was used
John Gemignani [Wed, 26 Jan 2022 01:59:39 +0000 (17:59 -0800)] 
hotfix: A C99 compliant declaration was used

A C99 compliant declaration was used by mistake -

In function ‘transform_cypher_optional_match_clause’:
error: ‘for’ loop initial declarations are only allowed in C99 mode

for (int i = list_length(pstate->p_joinexprs) + 1; i < j->rtindex; i++)

This corrects that issue.

8 months agofeat: Implement `OPTIONAL MATCH` (#175)
Alex Kwak [Wed, 26 Jan 2022 01:46:44 +0000 (10:46 +0900)] 
feat: Implement `OPTIONAL MATCH` (#175)

* feat: Implement `OPTIONAL MATCH`

* Reflect review.

* Reflect review

* Reflect review

* Reflect review

* Reflect review

* Reflect Review

* Reflect review

* Reflect review

* Fix broken

8 months agoAdd UNION into EXPLAIN grammar rule
Dehowe Feng [Wed, 26 Jan 2022 01:36:05 +0000 (17:36 -0800)] 
Add UNION into EXPLAIN grammar rule

Small bug fix to include UNION into thr EXPLAIN grammar rule

Replaces single_query with query_list in EXPLAIN grammar rules

8 months agofeat: Implement `UNWIND` clause. (#173)
Alex Kwak [Wed, 26 Jan 2022 00:19:21 +0000 (09:19 +0900)] 
feat: Implement `UNWIND` clause. (#173)

* feat: Implement `UNWIND` clause.

* Block types on use `UNWIND` clause.

* Block types on use `UNWIND` clause.

* Block types on use `UNWIND` clause.

* Block types on use `UNWIND` clause.

* Reflect review

* Reflect review

Co-authored-by: Josh Innis <>
8 months agoImplement UNION clause
Dehowe Feng [Thu, 20 Jan 2022 23:31:37 +0000 (15:31 -0800)] 
Implement UNION clause

Adds UNION clause to AGE

Modifies grammar rules to accomodate UNION and future set functions

UNION returns all rows of two sets

UNION ALL appends the sets and returns all rows

8 months agofix: small error
0xflotus [Sat, 22 Jan 2022 13:52:45 +0000 (14:52 +0100)] 
fix: small error

8 months agoRemove old docs
Pieterjan De Potter [Thu, 23 Dec 2021 14:04:06 +0000 (15:04 +0100)] 
Remove old docs

8 months agofix: (nodejs) Corrects parsing for independence value (#177)
Alex Kwak [Fri, 21 Jan 2022 17:10:36 +0000 (02:10 +0900)] 
fix: (nodejs) Corrects parsing for independence value (#177)

8 months agoMerge branch 'master' of 174/head v.0.7.0-rc0 v0.7.0
Dehowe Feng [Fri, 14 Jan 2022 00:42:46 +0000 (16:42 -0800)] 
Merge branch 'master' of

8 months agoUpdate AGE from 0.6.0 to 0.7.0
Dehowe Feng [Fri, 14 Jan 2022 00:25:06 +0000 (16:25 -0800)] 
Update AGE from 0.6.0 to 0.7.0

Updated the Makefile, the README, the default version in age.control,
added released notes and updated the age--*.sql filename.

8 months agoUpdate from 0.6.0 to 0.7.0
Dehowe Feng [Fri, 14 Jan 2022 00:25:06 +0000 (16:25 -0800)] 
Update from 0.6.0 to 0.7.0

Updated the Makefile, the README, the default version in age.control,
added released notes and updated the age--*.sql filename.

8 months agoFix is_array_path to accept a single vertex.
John Gemignani [Tue, 11 Jan 2022 00:30:41 +0000 (16:30 -0800)] 
Fix is_array_path to accept a single vertex.

Fixed the is_array_path function to accept a single vertex.

8 months agoAdd fix for VLE zero boundary case in path
John Gemignani [Sat, 8 Jan 2022 00:07:20 +0000 (16:07 -0800)] 
Add fix for VLE zero boundary case in path

Added a fix for the VLE zero boundary case when paths are generated.

Added regression tests.

8 months agoAdding ASF License header to Python and Golang Drivers source files (#150)
Rhizome [Thu, 6 Jan 2022 21:49:23 +0000 (06:49 +0900)] 
Adding ASF License header to Python and Golang Drivers source files (#150)

* Delete .DS_Store
* Delete mapper.go
* fix caching vertex object
* prepare for variable path
* Add ASF License
* Change Agtype Parser antlr grammar

Co-authored-by: rhizome-ai <>
Co-authored-by: Halkrine <>
8 months agoAdd zero boundary case [*0..x] to VLE
John Gemignani [Tue, 4 Jan 2022 23:22:10 +0000 (15:22 -0800)] 
Add zero boundary case [*0..x] to VLE

Added the zero boundary case [*0..x] to the VLE.

Fixed some Travis CI warnings in the VLE code.

Added additional regression tests.

8 months agoCreate Dockerfile (#164)
joefagan [Tue, 4 Jan 2022 18:09:53 +0000 (18:09 +0000)] 
Create Dockerfile (#164)

* Create Dockerfile

* Add AGE to load automatically.

Add to skip the 'CREATE EXTENSION' and 'LOAD' commands.

Co-authored-by: Alex Kwak <>
8 months agoupdated documentation link (#170)
Shoaib [Thu, 30 Dec 2021 01:51:51 +0000 (02:51 +0100)] 
updated documentation link (#170)

updated broken logo path

8 months agoFix Travis CI build warning messages
John Gemignani [Wed, 29 Dec 2021 21:06:42 +0000 (13:06 -0800)] 
Fix Travis CI build warning messages

Fixed some of the Travic CI build warning messages.

Others are due to Assert being removed from compilation.

8 months agoExpose private function integer_to_agtype_value
John Gemignani [Tue, 28 Dec 2021 18:55:09 +0000 (10:55 -0800)] 
Expose private function integer_to_agtype_value

Expose the private function integer_to_agtype_value.

9 months agoFix typo in Github issue templates (#169)
Pieterjan De Potter [Thu, 23 Dec 2021 16:54:44 +0000 (17:54 +0100)] 
Fix typo in Github issue templates (#169)

9 months agoAdd test for handling incorrect variable in Set Clause (#160 #165) (#167)
Pieterjan De Potter [Wed, 22 Dec 2021 19:45:53 +0000 (20:45 +0100)] 
Add test for handling incorrect variable in Set Clause (#160 #165) (#167)

9 months agofeat: implement type casting, Agtype to int4[] (#107)
Alex Kwak [Wed, 22 Dec 2021 01:08:43 +0000 (10:08 +0900)] 
feat: implement type casting, Agtype to int4[] (#107)

* feat: implement type casting, Agtype to int4[]

* chore: reformat code.

* Clean up

9 months agoCorrects abnormal termination due to incorrect variable in Set Clause. (#165)
Alex Kwak [Wed, 22 Dec 2021 00:09:48 +0000 (09:09 +0900)] 
Corrects abnormal termination due to incorrect variable in Set Clause. (#165)

Previously, `ColumnRef` may come according to the Parser rule. but, this case is not considered.
Therefore, add logic to detect these errors.

9 months agoAdd to age_round function so that it accepts 2 parameters and returned a rounded...
Quoc Viet Vuong [Wed, 22 Dec 2021 00:06:47 +0000 (07:06 +0700)] 
Add to age_round function so that it accepts 2 parameters and returned a rounded number with precision passed as 2nd parameter (#159)

9 months agoAdd AGTYPE and GRAPHID send and receive functions
John Gemignani [Tue, 21 Dec 2021 22:48:03 +0000 (14:48 -0800)] 
Add AGTYPE and GRAPHID send and receive functions

Added the send and receive functions for both AGTYPE and GRAPHID.

9 months agoRefactor VLE edge uniqueness check
John Gemignani [Thu, 16 Dec 2021 01:18:05 +0000 (17:18 -0800)] 
Refactor VLE edge uniqueness check

Refactored the VLE edge uniqueness check to make it more efficient
for larger paths.

This change replaces _ag_enforce_edge_uniqueness with a hash table
implementation. This will impact all callers to this function.

Added the option to pass in INT8 and GRAPHID.

Removed unnecessary supporting code.

9 months agoFix Licensing Issues in Master (#157)
Josh Innis [Fri, 10 Dec 2021 22:44:51 +0000 (14:44 -0800)] 
Fix Licensing Issues in Master (#157)

Changed License for some files to Postgres License
Fixed Copyright information in NOTICE
Alter Disclaimer

Co-authored-by: Eya Badal <>
9 months agoIntegrate the VLE core into the MATCH clause
John Gemignani [Fri, 22 Oct 2021 21:51:38 +0000 (14:51 -0700)] 
Integrate the VLE core into the MATCH clause

This patch integrates the VLE core (age_vle) into the MATCH clause.

All ranges are suppored (except for an initial 0, it is treated as
a 1 currently) -

    MATCH (u)-[*]->(v) RETURN u,v;
    MATCH ()-[e*]->() RETURN e;
    MATCH ()-[e*1]->() RETURN e;
    MATCH ()-[e*..]->() RETURN e;
    MATCH ()-[e*1..]->() RETURN e;
    MATCH ()-[e*..2]->() RETURN e;
    MATCH ()-[e*1..2]->() RETURN e;

All directions are supported -

    MATCH ()-[e*]->() RETURN e;
    MATCH ()<-[e*]-() RETURN e;
    MATCH ()-[e*]-() RETURN e;

Labels are supported -


Properties are supported -

    MATCH (c1:CITY)-[* {name: "Main St."}]-(c2:CITY) RETURN c1, c2;

Singular VLE expressions are supported -

    MATCH ()-[e*]->() RETURN e;

The path variable is supported -

    MATCH p=()-[*]-() RETURN p;

Chained VLE expressions are supported -

   BUG: MATCH ()-[e1*]->()-[e2*]->() RETURN e1,e2; (crash)

Mixed VLE expressions are supported -

   BUG: MATCH ()-[e1]->(v)-[e2*]->() RETURN e1,e2;

Split VLE expressions are NOT supported yet -

     MATCH (u)-[e1*]->(v) MATCH (v)-[e2*]->(w) RETURN e1;

Added regression tests.

NOTE: A VLE edge variable will return a list of edges.

9 months agoFix wrong parse tree when use EXISTS PATTERN (#141)
Alex Kwak [Tue, 30 Nov 2021 22:36:09 +0000 (07:36 +0900)] 
Fix wrong parse tree when use EXISTS PATTERN (#141)

EXISTS PATTERN used ParseState as it was and affected the upper query.
Use a temporary ParseState to solve this problem.

9 months agoAdding AGType parsers and driver supports for Python & Go (#87)
Rhizome [Tue, 30 Nov 2021 22:16:52 +0000 (07:16 +0900)] 
Adding AGType parsers and driver supports for Python & Go   (#87)

Co-authored-by: rhizome-ai <>
Co-authored-by: Halkrine <>
9 months agoUpdated code for create vertex and edge labels (#136)
Shoaib [Tue, 30 Nov 2021 20:36:44 +0000 (21:36 +0100)] 
Updated code for create vertex and edge labels (#136)

Code now inherits tables from ag_vertex and ag_edges that was a bug in
previous release.

9 months agoAdd to age_reverse function so that it can reverse an agtype list (#146)
Quoc Viet Vuong [Tue, 30 Nov 2021 20:27:30 +0000 (03:27 +0700)] 
Add to age_reverse function so that it can reverse an agtype list (#146)

9 months agofix: (driver/nodejs) fix problems that occur when an object is empty or nested. ...
Alex Kwak [Tue, 30 Nov 2021 20:21:59 +0000 (05:21 +0900)] 
fix: (driver/nodejs) fix problems that occur when an object is empty or nested. (#104)

9 months agochore: create issue templates (#90)
Alex Kwak [Tue, 30 Nov 2021 20:18:57 +0000 (05:18 +0900)] 
chore: create issue templates (#90)

* chore: create issue templates
* chore: applied suggestion to

10 months ago fix to allow compilation on mac os x (#82)
Dmitriy Dorofeev [Mon, 8 Nov 2021 16:53:12 +0000 (19:53 +0300)] 
 fix to allow compilation on mac os x (#82)

10 months agoFix documentation link in readme (fixes #133) (#134)
Pieterjan De Potter [Thu, 28 Oct 2021 19:59:16 +0000 (21:59 +0200)] 
Fix documentation link in readme (fixes #133) (#134)

11 months agoImplement XOR Operator
Dehowe Feng [Sat, 23 Oct 2021 00:40:19 +0000 (17:40 -0700)] 
Implement XOR Operator

Implemented XOR in the grammar using logical and, or and not.

This is ticket AGE2-478

Added regression tests.

11 months agoAdd openCypher nodes() function AGE2-421
Dehowe Feng [Tue, 12 Oct 2021 20:32:22 +0000 (13:32 -0700)] 
Add openCypher nodes() function AGE2-421

Add the openCypher nodes() function.

Added regression tests.

Reorganized the keys implementation to be where the
rest of the list functions were.

11 months agoAdd openCypher labels() function AGE2-420
John Gemignani [Thu, 7 Oct 2021 00:53:09 +0000 (17:53 -0700)] 
Add openCypher labels() function AGE2-420

Added the openCypher labels() function. This is Jira ticket AGE2-420.

Added regression tests.

11 months agoUpdate (#128)
Andy Koh [Fri, 8 Oct 2021 20:20:09 +0000 (05:20 +0900)] 
Update (#128)

11 months agoAdd openCypher keys() function AGE2-419
Dehowe Feng [Wed, 6 Oct 2021 23:58:13 +0000 (16:58 -0700)] 
Add openCypher keys() function AGE2-419

Added  the keys() function. This is ticket AGE2-419.

Added regression tests.

11 months agoAdd openCypher range() function AGE2-422
John Gemignani [Wed, 6 Oct 2021 00:31:40 +0000 (17:31 -0700)] 
Add openCypher range() function AGE2-422

Added the openCypher range() function. This is Jira ticket

Added regression tests.


This range() function differs slightly from some other
implementations in that it will return an empty list for start,
end, and step combinations that wouldn't result in anything being
generated. Some other implementations will generate errors instead.

For example: range(0, -10, 1) or range(0, -10) will return [].

11 months agoAdd openCypher relationships() function AGE2-423
John Gemignani [Tue, 5 Oct 2021 00:21:17 +0000 (17:21 -0700)] 
Add openCypher relationships() function AGE2-423

Added the openCypher relationships() function. This is Jira ticket

Added regression tests.