This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch asf-staging
in repository https://gitbox.apache.org/repos/asf/age-website.git


The following commit(s) were added to refs/heads/asf-staging by this push:
     new afad479  deploy: c76e717fd37fce856a29d2cad4cba93315b8399f
afad479 is described below

commit afad4792bffd36ea68a790c669bbd7fa98e33921
Author: JoshInnis <[email protected]>
AuthorDate: Wed Oct 26 04:26:57 2022 +0000

    deploy: c76e717fd37fce856a29d2cad4cba93315b8399f
---
 age-dev-manual/.doctrees/environment.pickle    | Bin 20985 -> 29361 bytes
 age-dev-manual/.doctrees/index.doctree         | Bin 3063 -> 3084 bytes
 age-dev-manual/.doctrees/intro/setup.doctree   | Bin 0 -> 21890 bytes
 age-dev-manual/.doctrees/postgres/node.doctree | Bin 26123 -> 26210 bytes
 age-dev-manual/_sources/index.rst.txt          |   2 +-
 age-dev-manual/_sources/intro/setup.md.txt     | 149 +++++++++++++
 age-dev-manual/_sources/postgres/node.md.txt   |  93 ++++-----
 age-dev-manual/genindex.html                   |   1 +
 age-dev-manual/intro/overview.html             |   5 +-
 age-dev-manual/intro/setup.html                | 276 +++++++++++++++++++++++++
 age-dev-manual/objects.inv                     |   4 +-
 age-dev-manual/postgres/node.html              | 135 ++++++------
 age-dev-manual/postgres/query_processing.html  |   5 +-
 age-dev-manual/search.html                     |   1 +
 age-dev-manual/searchindex.js                  |   2 +-
 15 files changed, 554 insertions(+), 119 deletions(-)

diff --git a/age-dev-manual/.doctrees/environment.pickle 
b/age-dev-manual/.doctrees/environment.pickle
index 1f212d9..acf53b1 100644
Binary files a/age-dev-manual/.doctrees/environment.pickle and 
b/age-dev-manual/.doctrees/environment.pickle differ
diff --git a/age-dev-manual/.doctrees/index.doctree 
b/age-dev-manual/.doctrees/index.doctree
index c74fa65..1c31e06 100644
Binary files a/age-dev-manual/.doctrees/index.doctree and 
b/age-dev-manual/.doctrees/index.doctree differ
diff --git a/age-dev-manual/.doctrees/intro/setup.doctree 
b/age-dev-manual/.doctrees/intro/setup.doctree
new file mode 100644
index 0000000..bc8a98f
Binary files /dev/null and b/age-dev-manual/.doctrees/intro/setup.doctree differ
diff --git a/age-dev-manual/.doctrees/postgres/node.doctree 
b/age-dev-manual/.doctrees/postgres/node.doctree
index 1005dc4..4977e8b 100644
Binary files a/age-dev-manual/.doctrees/postgres/node.doctree and 
b/age-dev-manual/.doctrees/postgres/node.doctree differ
diff --git a/age-dev-manual/_sources/index.rst.txt 
b/age-dev-manual/_sources/index.rst.txt
index b5f8a0a..49efe91 100644
--- a/age-dev-manual/_sources/index.rst.txt
+++ b/age-dev-manual/_sources/index.rst.txt
@@ -7,7 +7,7 @@ Apache AGE's documentation
    :maxdepth: 1
 
    intro/overview
-
+   intro/setup
 
 .. toctree::                                                                   
  
    :caption: Postgres Internals                                                
     
diff --git a/age-dev-manual/_sources/intro/setup.md.txt 
b/age-dev-manual/_sources/intro/setup.md.txt
new file mode 100644
index 0000000..97dd27c
--- /dev/null
+++ b/age-dev-manual/_sources/intro/setup.md.txt
@@ -0,0 +1,149 @@
+# Setup
+
+## Getting AGE
+
+
+### Source code
+
+The source code can be found at <https://github.com/apache/age>
+
+## Installing From Source Code
+
+### Pre-Installation
+
+Install the following essential libraries according to each OS.
+Building AGE from source depends on the following Linux libraries (Ubuntu 
package names shown below):
+
+#### CentOS
+
+```console
+yum install gcc glibc glib-common readline readline-devel zlib zlib-devel flex 
bison
+```
+
+#### Fedora
+
+```console
+dnf install gcc glibc bison flex readline readline-devel zlib zlib-devel
+```
+
+#### Ubuntu
+
+```console
+sudo apt-get install build-essential libreadline-dev zlib1g-dev flex bison
+```
+
+### Install Postgres
+
+You will need to install a AGE compatible version of Postgres, for now AGE 
only supports Postgres 11 and 12.
+
+#### Install From Source Code
+
+You can <a href='https://www.postgresql.org/download/'>download the Postgres 
source code</a> and install your own instance of Postgres. You can read 
instructions on how to install from <a 
href='https://www.postgresql.org/docs/11/installation.html'>source code on the 
offical Postgres Website</a>
+
+#### Install From a Package Manager
+
+You can use a package management that your OS provides to download AGE.
+
+#### Ubuntu
+
+##### Postgres 11
+
+```
+sudo apt install postgresql-server-dev-11
+```
+
+##### Postgres 12
+```
+sudo apt install postgresql-12
+```
+
+### Installation
+
+Clone the <a href='https://github.com/apache/age'>github repository</a>
+
+Run the pg_config utility and check the version of PostgreSQL, currently only 
PostgreSQL versions 11 & 12 are supported. If you have any other version of 
postgres, you will need to install PostgreSQL version 11 & 12. Follow Setting 
up multiple versions of PostgreSQL
+```console
+pg_config
+```
+
+The build process will attempt to use the first path in the PATH environment 
variable when installing AGE. If the pg_config path is located there, run the 
following command in the source code directory of Apache AGE to build and 
install the extension.
+
+```console
+make install
+```
+
+If the path to your Postgres installation is not in the PATH variable, add the 
path in the arguments:
+
+```console
+make PG_CONFIG=/path/to/postgres/bin/pg_config install
+```
+
+#### Setting up multiple versions of PostgreSQL
+
+Install the intended version of PostgreSQL (11 or 12).
+
+Use the pg_config to check if it points to the intended version of PostgreSQL, 
if it does we will have to PGBINROOT. Open /usr/bin/pg_config in write mode 
(might require root previllages) and edit the PGBINROOT value
+
+```console
+sudo vi /usr/bin/pg_config
+```
+
+By default PGBINROOT is set to /usr/lib/postsgresql , the directory which 
contains all the postgres versions. Change this to 
/usr/lib/postgresql/[intended version of postgres]
+
+Check the PostgreSQL conf file of your PostgreSQL version to figure out which 
port its running on.
+The conf file is generally located in /etc/postgresql/[intended version of 
postgres]/main
+
+```console
+vi /etc/postgresql/11/main/postgresql.conf
+```
+
+Check the PORT the particular version of PostgreSQL runs on by default.
+
+Restart PostgreSQL
+
+```console
+sudo service postgresql restart
+```
+Change user to postgres connect to the PostgreSQL server
+
+```console
+sudo su - postgres
+psql --port PORT
+```
+
+### Post Installation AGE Setup
+
+
+After the installation, open a connection to a running instance of your 
database and run the CREATE EXTENSION command to have AGE be installed on the 
server.
+
+```postgresql
+CREATE EXTENSION age;
+```
+
+### Per Session Instructions
+
+For every connection of AGE you start you will need to load the AGE extension.
+
+```postgresql
+LOAD 'age';
+```
+
+We recommend adding ag_catalog to your search_path to simplify your queries. 
The rest of this document will assume you have done so. If you do not, remember 
to add 'ag_catalog' to your cypher query function calls.
+
+```postgresql
+SET search_path = ag_catalog, "$user", public;
+```
+
+### Optional: allow non-superusers to use Apache AGE
+
+* Non-superusers can only apply LOAD to library files located in 
`$libdir/plugins/` (see <https://www.postgresql.org/docs/11/sql-load.html>). A 
symlink can be created to allow non-superusers to LOAD the Apache AGE library:
+
+```console
+sudo ln -s /usr/lib/postgresql/11/lib/age.so 
/usr/lib/postgresql/11/lib/plugins/age.so
+```
+
+* In order to use Apache AGE, users need `USAGE` privileges on the 
`ag_catalog` schema (example for user `db_user`):
+
+```postgresql
+GRANT USAGE ON SCHEMA ag_catalog TO db_user;
+```
diff --git a/age-dev-manual/_sources/postgres/node.md.txt 
b/age-dev-manual/_sources/postgres/node.md.txt
index 47ce7d9..53d8bde 100644
--- a/age-dev-manual/_sources/postgres/node.md.txt
+++ b/age-dev-manual/_sources/postgres/node.md.txt
@@ -4,7 +4,7 @@
 
 Postgres has a default struct that it uses for throughout most of its query 
processing engine, <a 
href='https://github.com/postgres/postgres/blob/master/src/include/nodes/nodes.h#L105'>Node</a>.
 The Node struct is defined as follows:
 
-```
+```c
 typedef struct Node
 {
     NodeTag type;
@@ -15,54 +15,54 @@ The stuct Node and Postgres as a whole take advantage of 
pointers and how C allo
 
 <b>NOTE:</b> This is not a datatype that someone using Postgres needs to be 
concerned about, only someone working with Postgres Internals. Postgres 
datatypes and the Datum data type will be discussed later.
 
-## What is a Pointer?                                                          
  
-                                                                               
  
+## What is a Pointer?
+
 Unlike a variable a pointer stores the memory address of a variable. In other 
words, it tells you where in memory something is located. Its a pretty simple 
concept, that holds a lot of complexity and power within it.
 
 For a full tutorial of pointers you can <a 
href='https://www.youtube.com/watch?v=zuegQmMdy8M&ab_channel=freeCodeCamp.org'>watch
 this tutorial.</a>
 
-For our purposes, the important thing to note about pointers is. All pointers 
are the same: a 4 byte integer.
+For our purposes, the important thing to note about pointers is, all the 
pointers are of same size: INT 4 byte.
 
 You can denote pointers of different types such as:
 
-```                                                                            
  
+```c
 int *int_ptr;
 char *string_ptr;
 myStruct *struct_ptr;
 void *void_ptr;
-```    
-All of these pointers as far a the hardware and memory is concerned are the 
same: they are 4 byte integer.
+```
+
+All of these pointers as far as the hardware and memory is concerned are of 
the same size: INT 4 byte.
 
 ## What is a Struct?
 
-A struct is a composite data type that defines a physically group list of 
variables in one name in a <b>continous</b> block of memory.
+A `struct` is a composite data type that defines a physically group list of 
variables in one name in a <b>continous</b> block of memory.
 
 If we have a struct defined as:
 
-```                                                                            
  
-typedef struct myStruct                                                        
      
-{                                                                              
  
+```c
+typedef struct myStruct
+{
     int var1;
     float var2;
-    char var3;                                                                
-} myStruct;                                                                    
      
-```     
-
-When we allocate room for that struct, a set amount of bytes for the struct 
will be found in memory and allocated. In our above example, on most modern 
systems: 4 bytes for var1, 4 bytes for var2 and 1 byte for var3 resulting in 9 
bytes total being allocated for the struct, and they will be allocated in the 
order that they are defined above.
+    char var3;
+} myStruct;
+```
 
+When we allocate room for that struct, a set amount of bytes for the struct 
will be found in memory and allocated. In our above example, on most modern 
systems: **4 bytes for var1**, **4 bytes for var2** and **1 byte for var3** 
resulting in `9 bytes` total being allocated for the struct, and they will be 
allocated in the order that they are defined above.
 
-for a further tutorial of structs please review this <a 
href='https://www.simplilearn.com/tutorials/c-tutorial/structure-in-c'>tutorial.</a>
+For a further tutorial on structs, please review this <a 
href='https://www.simplilearn.com/tutorials/c-tutorial/structure-in-c'>tutorial.</a>
 
 ## Pointers to Structs
 
 When you create a pointer to a struct, what is contained in the pointer is the 
address of the first byte of the struct. When accessing an element in a struct 
with a pointer, such as:
 
-```                                                                            
  
-myStruct *str = malloc(sizeof(myStruct));                                      
  
-str->var2 = 1.0;                                                               
  
-```     
+```c
+myStruct *str = malloc(sizeof(myStruct));
+str->var2 = 1.0;
+```
 
-The address of the pointer is offset by the distance that var2 is from the 
start of the struct. In this case, is adress of the pointer + 4 bytes, to 
bypass the int field in the struct.
+The address of the pointer is offset by the distance that var2 is from the 
start of the struct. In this case, is address of the pointer + 4 bytes, to 
bypass the `int` field in the struct.
 
 ### Void Pointers and Pointer Casting
 
@@ -70,34 +70,35 @@ One of the more unique features that C offers is the void 
pointer. This offers p
 
 This pointer knows the address in memory that something is located, but it 
doesn't know what is located there, so:
 
-
-```  
+```c
 void myFunction(void *ptr)
 {
     ptr->var1 = 1;
-}                                                                            
-```  
+}
+```
 
-Will throw an error. However, you can cast the void pointer to the pointer of 
another type.
+The above code will throw an error. However, you can cast the void pointer to 
the pointer of another type.
 
-```                                                                            
  
-void myFunction(void *ptr)                                                     
                     {                                                          
                      
+```c
+void myFunction(void *ptr){
     myStruct *str = (myStruct *)ptr;
-    str->var1 = 1;                                                             
  
-}                                                                              
  
-```    
+    str->var1 = 1;
+}
+```
+
+The code above will work.
 
-Will work. This opens opportunity for developers to create functions that are 
more versitile that if the developer needs know exactly what something was 
pointing to and code for all situations. However, developers need to be careful 
with this feature because it allows for some very strange behavior if the 
developer does not use them carefully.
+This opens opportunity for developers to create functions that are more 
versitile that if the developer needs know exactly what something was pointing 
to and code for all situations. However, developers need to be careful with 
this feature because it allows for some very strange behavior if the developer 
does not use them carefully.
 
 Postgres has designed a way to use the power of void pointers, but with 
certain precautions that make them safer to use.
 
-## How Postgres Uses Structs and Pointers  
+## How Postgres Uses Structs and Pointers
 
 Void pointers assume nothing about what the pointer is referencing. The Node 
struct on the other hand know about one field the <a 
href='https://github.com/postgres/postgres/blob/REL_11_17/src/include/nodes/nodes.h#L26'>enum
 NodeType</a>. Nearly all the postgres data structures used in the query 
processing engine start with this field.
 
-For example, here is the data structure that represents a fucntion call in the 
parser phase:
+For example, here is the data structure that represents a function call in the 
parser phase:
 
-``` 
+```c
 typedef struct FuncCall
 {
        NodeTag         type;
@@ -113,11 +114,11 @@ typedef struct FuncCall
        CoercionForm funcformat;        /* how to display this node */
        int                     location;               /* token location, or 
-1 if unknown */
 } FuncCall;
-``` 
+```
 
 and here is the data structure that represents a constant in the parser phase.
 
-``` 
+```c
 typedef struct A_Const
 {
        NodeTag         type;
@@ -125,8 +126,7 @@ typedef struct A_Const
        bool            isnull;                 /* SQL NULL constant */
        int                     location;               /* token location, or 
-1 if unknown */
 } A_Const;
-``` 
-
+```
 
 Given that each other these things a function can appear in a large 
combination of ways:
 
@@ -136,9 +136,9 @@ SELECT 1, function_call();
 SELECT function_call(), 1;
 ```
 
-Many parts of the code don't need to know the specifics, but since each start 
with NodeTag, these functions can pass Node to each other and not have to care 
about the details it isn't concerned with.
+Many parts of the code don't need to know the specifics, but since each start 
with `NodeTag`, these functions can pass Node to each other and not have to 
care about the details it isn't concerned with.
 
-For example the transformExpr function, which is what converts nodes such as 
these from parser nodes to their analyze node couterparts:
+For example the `transformExpr` function, which is what converts nodes such as 
these from parser nodes to their analyze node couterparts:
 
 ```
 extern Node *transformExpr(ParseState *pstate, Node *expr, ParseExprKind 
exprKind);
@@ -146,18 +146,19 @@ extern Node *transformExpr(ParseState *pstate, Node 
*expr, ParseExprKind exprKin
 
 Can be used in a generic way, reducing the number of permutations of a 
function that needs to be created, when something is similar but not exact.
 
-The at points where the differences do matter, the NodeTag can be checked and 
the correct logic can be run:
+At the points where the differences do matter, the `NodeTag` can be checked 
and the correct logic can be run:
 
-``` 
+```c
        switch (nodeTag(node))
        {
                case T_FuncCall:
-                       result = transformColumnRef(pstate, (FuncCall *) node);
+                       result = transformFuncCallRef(pstate, (FuncCall *) 
node);
                        break;
                case T_A_Const:
                        result = (Node *) make_const(pstate, (A_Const *) node);
                        break;
-``` 
+       }
+```
 
 ## Extensible Nodes
 
diff --git a/age-dev-manual/genindex.html b/age-dev-manual/genindex.html
index 4f858fb..7081370 100644
--- a/age-dev-manual/genindex.html
+++ b/age-dev-manual/genindex.html
@@ -42,6 +42,7 @@
               <p class="caption" role="heading"><span 
class="caption-text">Introduction</span></p>
 <ul>
 <li class="toctree-l1"><a class="reference internal" 
href="intro/overview.html">Overview</a></li>
+<li class="toctree-l1"><a class="reference internal" 
href="intro/setup.html">Setup</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Postgres 
Internals</span></p>
 <ul>
diff --git a/age-dev-manual/intro/overview.html 
b/age-dev-manual/intro/overview.html
index 000a2a5..a97d20b 100644
--- a/age-dev-manual/intro/overview.html
+++ b/age-dev-manual/intro/overview.html
@@ -22,7 +22,7 @@
     <script src="../_static/js/theme.js"></script>
     <link rel="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" />
-    <link rel="next" title="Postgres Query Processing Stages" 
href="../postgres/query_processing.html" />
+    <link rel="next" title="Setup" href="setup.html" />
     <link rel="prev" title="Apache AGE’s documentation" href="../index.html" 
/> 
 </head>
 
@@ -45,6 +45,7 @@
               <p class="caption" role="heading"><span 
class="caption-text">Introduction</span></p>
 <ul class="current">
 <li class="toctree-l1 current"><a class="current reference internal" 
href="#">Overview</a></li>
+<li class="toctree-l1"><a class="reference internal" 
href="setup.html">Setup</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Postgres 
Internals</span></p>
 <ul>
@@ -86,7 +87,7 @@
           </div>
           <footer><div class="rst-footer-buttons" role="navigation" 
aria-label="Footer">
         <a href="../index.html" class="btn btn-neutral float-left" 
title="Apache AGE’s documentation" accesskey="p" rel="prev"><span class="fa 
fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
-        <a href="../postgres/query_processing.html" class="btn btn-neutral 
float-right" title="Postgres Query Processing Stages" accesskey="n" 
rel="next">Next <span class="fa fa-arrow-circle-right" 
aria-hidden="true"></span></a>
+        <a href="setup.html" class="btn btn-neutral float-right" title="Setup" 
accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" 
aria-hidden="true"></span></a>
     </div>
 
   <hr/>
diff --git a/age-dev-manual/intro/setup.html b/age-dev-manual/intro/setup.html
new file mode 100644
index 0000000..e0c812b
--- /dev/null
+++ b/age-dev-manual/intro/setup.html
@@ -0,0 +1,276 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: 
http://docutils.sourceforge.net/"; />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Setup &mdash; Apache AGE master documentation</title>
+      <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" 
/>
+    <link rel="shortcut icon" href="../_static/favicon.ico"/>
+  <!--[if lt IE 9]>
+    <script src="../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="../" id="documentation_options" 
src="../_static/documentation_options.js"></script>
+        <script src="../_static/jquery.js"></script>
+        <script src="../_static/underscore.js"></script>
+        <script 
src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
+        <script src="../_static/doctools.js"></script>
+        <script src="../_static/sphinx_highlight.js"></script>
+    <script src="../_static/js/theme.js"></script>
+    <link rel="index" title="Index" href="../genindex.html" />
+    <link rel="search" title="Search" href="../search.html" />
+    <link rel="next" title="Postgres Query Processing Stages" 
href="../postgres/query_processing.html" />
+    <link rel="prev" title="Overview" href="overview.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="../index.html" class="icon icon-home"> Apache AGE
+            <img src="../_static/logo.png" class="logo" alt="Logo"/>
+          </a>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../search.html" 
method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" 
role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span 
class="caption-text">Introduction</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" 
href="overview.html">Overview</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" 
href="#">Setup</a><ul>
+<li class="toctree-l2"><a class="reference internal" 
href="#getting-age">Getting AGE</a><ul>
+<li class="toctree-l3"><a class="reference internal" 
href="#source-code">Source code</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" 
href="#installing-from-source-code">Installing From Source Code</a><ul>
+<li class="toctree-l3"><a class="reference internal" 
href="#pre-installation">Pre-Installation</a><ul>
+<li class="toctree-l4"><a class="reference internal" 
href="#centos">CentOS</a></li>
+<li class="toctree-l4"><a class="reference internal" 
href="#fedora">Fedora</a></li>
+<li class="toctree-l4"><a class="reference internal" 
href="#ubuntu">Ubuntu</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" 
href="#install-postgres">Install Postgres</a><ul>
+<li class="toctree-l4"><a class="reference internal" 
href="#install-from-source-code">Install From Source Code</a></li>
+<li class="toctree-l4"><a class="reference internal" 
href="#install-from-a-package-manager">Install From a Package Manager</a></li>
+<li class="toctree-l4"><a class="reference internal" 
href="#id1">Ubuntu</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" 
href="#installation">Installation</a><ul>
+<li class="toctree-l4"><a class="reference internal" 
href="#setting-up-multiple-versions-of-postgresql">Setting up multiple versions 
of PostgreSQL</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" 
href="#post-installation-age-setup">Post Installation AGE Setup</a></li>
+<li class="toctree-l3"><a class="reference internal" 
href="#per-session-instructions">Per Session Instructions</a></li>
+<li class="toctree-l3"><a class="reference internal" 
href="#optional-allow-non-superusers-to-use-apache-age">Optional: allow 
non-superusers to use Apache AGE</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Postgres 
Internals</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" 
href="../postgres/query_processing.html">Postgres Query Processing 
Stages</a></li>
+<li class="toctree-l1"><a class="reference internal" 
href="../postgres/node.html">Node (The Default Postgres Data Structure)</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav 
class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../index.html">Apache AGE</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Setup</li>
+      <li class="wy-breadcrumbs-aside">
+              <a 
href="https://github.com/apache/age-website/blob/master/docs/intro/setup.md"; 
class="fa fa-github"> Edit on GitHub</a>
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" 
itemtype="http://schema.org/Article";>
+           <div itemprop="articleBody">
+             
+  <section id="setup">
+<h1>Setup<a class="headerlink" href="#setup" title="Permalink to this 
heading"></a></h1>
+<section id="getting-age">
+<h2>Getting AGE<a class="headerlink" href="#getting-age" title="Permalink to 
this heading"></a></h2>
+<section id="source-code">
+<h3>Source code<a class="headerlink" href="#source-code" title="Permalink to 
this heading"></a></h3>
+<p>The source code can be found at <a class="reference external" 
href="https://github.com/apache/age";>https://github.com/apache/age</a></p>
+</section>
+</section>
+<section id="installing-from-source-code">
+<h2>Installing From Source Code<a class="headerlink" 
href="#installing-from-source-code" title="Permalink to this heading"></a></h2>
+<section id="pre-installation">
+<h3>Pre-Installation<a class="headerlink" href="#pre-installation" 
title="Permalink to this heading"></a></h3>
+<p>Install the following essential libraries according to each OS.
+Building AGE from source depends on the following Linux libraries (Ubuntu 
package names shown below):</p>
+<section id="centos">
+<h4>CentOS<a class="headerlink" href="#centos" title="Permalink to this 
heading"></a></h4>
+<div class="highlight-console notranslate"><div 
class="highlight"><pre><span></span><span class="go">yum install gcc glibc 
glib-common readline readline-devel zlib zlib-devel flex bison</span>
+</pre></div>
+</div>
+</section>
+<section id="fedora">
+<h4>Fedora<a class="headerlink" href="#fedora" title="Permalink to this 
heading"></a></h4>
+<div class="highlight-console notranslate"><div 
class="highlight"><pre><span></span><span class="go">dnf install gcc glibc 
bison flex readline readline-devel zlib zlib-devel</span>
+</pre></div>
+</div>
+</section>
+<section id="ubuntu">
+<h4>Ubuntu<a class="headerlink" href="#ubuntu" title="Permalink to this 
heading"></a></h4>
+<div class="highlight-console notranslate"><div 
class="highlight"><pre><span></span><span class="go">sudo apt-get install 
build-essential libreadline-dev zlib1g-dev flex bison</span>
+</pre></div>
+</div>
+</section>
+</section>
+<section id="install-postgres">
+<h3>Install Postgres<a class="headerlink" href="#install-postgres" 
title="Permalink to this heading"></a></h3>
+<p>You will need to install a AGE compatible version of Postgres, for now AGE 
only supports Postgres 11 and 12.</p>
+<section id="install-from-source-code">
+<h4>Install From Source Code<a class="headerlink" 
href="#install-from-source-code" title="Permalink to this heading"></a></h4>
+<p>You can <a href='https://www.postgresql.org/download/'>download the 
Postgres source code</a> and install your own instance of Postgres. You can 
read instructions on how to install from <a 
href='https://www.postgresql.org/docs/11/installation.html'>source code on the 
offical Postgres Website</a></p>
+</section>
+<section id="install-from-a-package-manager">
+<h4>Install From a Package Manager<a class="headerlink" 
href="#install-from-a-package-manager" title="Permalink to this 
heading"></a></h4>
+<p>You can use a package management that your OS provides to download AGE.</p>
+</section>
+<section id="id1">
+<h4>Ubuntu<a class="headerlink" href="#id1" title="Permalink to this 
heading"></a></h4>
+<section id="postgres-11">
+<h5>Postgres 11<a class="headerlink" href="#postgres-11" title="Permalink to 
this heading"></a></h5>
+<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">sudo</span> <span 
class="n">apt</span> <span class="n">install</span> <span 
class="n">postgresql</span><span class="o">-</span><span 
class="n">server</span><span class="o">-</span><span class="n">dev</span><span 
class="o">-</span><span class="mi">11</span>
+</pre></div>
+</div>
+</section>
+<section id="postgres-12">
+<h5>Postgres 12<a class="headerlink" href="#postgres-12" title="Permalink to 
this heading"></a></h5>
+<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">sudo</span> <span 
class="n">apt</span> <span class="n">install</span> <span 
class="n">postgresql</span><span class="o">-</span><span class="mi">12</span>
+</pre></div>
+</div>
+</section>
+</section>
+</section>
+<section id="installation">
+<h3>Installation<a class="headerlink" href="#installation" title="Permalink to 
this heading"></a></h3>
+<p>Clone the <a href='https://github.com/apache/age'>github repository</a></p>
+<p>Run the pg_config utility and check the version of PostgreSQL, currently 
only PostgreSQL versions 11 &amp; 12 are supported. If you have any other 
version of postgres, you will need to install PostgreSQL version 11 &amp; 12. 
Follow Setting up multiple versions of PostgreSQL</p>
+<div class="highlight-console notranslate"><div 
class="highlight"><pre><span></span><span class="go">pg_config</span>
+</pre></div>
+</div>
+<p>The build process will attempt to use the first path in the PATH 
environment variable when installing AGE. If the pg_config path is located 
there, run the following command in the source code directory of Apache AGE to 
build and install the extension.</p>
+<div class="highlight-console notranslate"><div 
class="highlight"><pre><span></span><span class="go">make install</span>
+</pre></div>
+</div>
+<p>If the path to your Postgres installation is not in the PATH variable, add 
the path in the arguments:</p>
+<div class="highlight-console notranslate"><div 
class="highlight"><pre><span></span><span class="go">make 
PG_CONFIG=/path/to/postgres/bin/pg_config install</span>
+</pre></div>
+</div>
+<section id="setting-up-multiple-versions-of-postgresql">
+<h4>Setting up multiple versions of PostgreSQL<a class="headerlink" 
href="#setting-up-multiple-versions-of-postgresql" title="Permalink to this 
heading"></a></h4>
+<p>Install the intended version of PostgreSQL (11 or 12).</p>
+<p>Use the pg_config to check if it points to the intended version of 
PostgreSQL, if it does we will have to PGBINROOT. Open /usr/bin/pg_config in 
write mode (might require root previllages) and edit the PGBINROOT value</p>
+<div class="highlight-console notranslate"><div 
class="highlight"><pre><span></span><span class="go">sudo vi 
/usr/bin/pg_config</span>
+</pre></div>
+</div>
+<p>By default PGBINROOT is set to /usr/lib/postsgresql , the directory which 
contains all the postgres versions. Change this to 
/usr/lib/postgresql/[intended version of postgres]</p>
+<p>Check the PostgreSQL conf file of your PostgreSQL version to figure out 
which port its running on.
+The conf file is generally located in /etc/postgresql/[intended version of 
postgres]/main</p>
+<div class="highlight-console notranslate"><div 
class="highlight"><pre><span></span><span class="go">vi 
/etc/postgresql/11/main/postgresql.conf</span>
+</pre></div>
+</div>
+<p>Check the PORT the particular version of PostgreSQL runs on by default.</p>
+<p>Restart PostgreSQL</p>
+<div class="highlight-console notranslate"><div 
class="highlight"><pre><span></span><span class="go">sudo service postgresql 
restart</span>
+</pre></div>
+</div>
+<p>Change user to postgres connect to the PostgreSQL server</p>
+<div class="highlight-console notranslate"><div 
class="highlight"><pre><span></span><span class="go">sudo su - postgres</span>
+<span class="go">psql --port PORT</span>
+</pre></div>
+</div>
+</section>
+</section>
+<section id="post-installation-age-setup">
+<h3>Post Installation AGE Setup<a class="headerlink" 
href="#post-installation-age-setup" title="Permalink to this heading"></a></h3>
+<p>After the installation, open a connection to a running instance of your 
database and run the CREATE EXTENSION command to have AGE be installed on the 
server.</p>
+<div class="highlight-postgresql notranslate"><div 
class="highlight"><pre><span></span><span class="k">CREATE</span><span 
class="w"> </span><span class="k">EXTENSION</span><span class="w"> </span><span 
class="n">age</span><span class="p">;</span><span class="w"></span>
+</pre></div>
+</div>
+</section>
+<section id="per-session-instructions">
+<h3>Per Session Instructions<a class="headerlink" 
href="#per-session-instructions" title="Permalink to this heading"></a></h3>
+<p>For every connection of AGE you start you will need to load the AGE 
extension.</p>
+<div class="highlight-postgresql notranslate"><div 
class="highlight"><pre><span></span><span class="k">LOAD</span><span class="w"> 
</span><span class="s1">&#39;age&#39;</span><span class="p">;</span><span 
class="w"></span>
+</pre></div>
+</div>
+<p>We recommend adding ag_catalog to your search_path to simplify your 
queries. The rest of this document will assume you have done so. If you do not, 
remember to add ‘ag_catalog’ to your cypher query function calls.</p>
+<div class="highlight-postgresql notranslate"><div 
class="highlight"><pre><span></span><span class="k">SET</span><span class="w"> 
</span><span class="n">search_path</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span 
class="n">ag_catalog</span><span class="p">,</span><span class="w"> 
</span><span class="s s-Name">&quot;$user&quot;</span><span 
class="p">,</span><span class="w"> </span><span class="n">public</span><span 
class="p">;</span><span class="w"></span>
+</pre></div>
+</div>
+</section>
+<section id="optional-allow-non-superusers-to-use-apache-age">
+<h3>Optional: allow non-superusers to use Apache AGE<a class="headerlink" 
href="#optional-allow-non-superusers-to-use-apache-age" title="Permalink to 
this heading"></a></h3>
+<ul class="simple">
+<li><p>Non-superusers can only apply LOAD to library files located in <code 
class="docutils literal notranslate"><span 
class="pre">$libdir/plugins/</span></code> (see <a class="reference external" 
href="https://www.postgresql.org/docs/11/sql-load.html";>https://www.postgresql.org/docs/11/sql-load.html</a>).
 A symlink can be created to allow non-superusers to LOAD the Apache AGE 
library:</p></li>
+</ul>
+<div class="highlight-console notranslate"><div 
class="highlight"><pre><span></span><span class="go">sudo ln -s 
/usr/lib/postgresql/11/lib/age.so 
/usr/lib/postgresql/11/lib/plugins/age.so</span>
+</pre></div>
+</div>
+<ul class="simple">
+<li><p>In order to use Apache AGE, users need <code class="docutils literal 
notranslate"><span class="pre">USAGE</span></code> privileges on the <code 
class="docutils literal notranslate"><span class="pre">ag_catalog</span></code> 
schema (example for user <code class="docutils literal notranslate"><span 
class="pre">db_user</span></code>):</p></li>
+</ul>
+<div class="highlight-postgresql notranslate"><div 
class="highlight"><pre><span></span><span class="k">GRANT</span><span 
class="w"> </span><span class="n">USAGE</span><span class="w"> </span><span 
class="k">ON</span><span class="w"> </span><span class="k">SCHEMA</span><span 
class="w"> </span><span class="n">ag_catalog</span><span class="w"> 
</span><span class="k">TO</span><span class="w"> </span><span 
class="n">db_user</span><span class="p">;</span><span class="w"></span>
+</pre></div>
+</div>
+</section>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" 
aria-label="Footer">
+        <a href="overview.html" class="btn btn-neutral float-left" 
title="Overview" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" 
aria-hidden="true"></span> Previous</a>
+        <a href="../postgres/query_processing.html" class="btn btn-neutral 
float-right" title="Postgres Query Processing Stages" accesskey="n" 
rel="next">Next <span class="fa fa-arrow-circle-right" 
aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2021, Apache AGE.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/";>Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme";>theme</a>
+    provided by <a href="https://readthedocs.org";>Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/age-dev-manual/objects.inv b/age-dev-manual/objects.inv
index 14cd449..82ae53e 100644
--- a/age-dev-manual/objects.inv
+++ b/age-dev-manual/objects.inv
@@ -2,4 +2,6 @@
 # Project: Apache AGE
 # Version: 
 # The remainder of this file is compressed using zlib.
-xڅ�An�0E�9�,a[vH 
���+cO�H�'�c��z�^�'i"�MRE����3mi��g�5���~�*�2��=�S$;hD�j!
�������B���d[#;Z�ݣķi�X�Q���T�f6���G���T0��X�g�Я-)7M�h<w��]{��"���`/X@�.H�C�=�k^jG�/����
�k'C6d�,4�dt�?'gd��{NSc�EO���J��i�N
\ No newline at end of file
+xڅ�1N�0E��bJ(�-�J�KP葱'��1�x!��z��x�%     �D7���}k��U��Օ�h`u   
�l/Z�ܦ��0E2A3b�l67�_�F 
�hYpGv4��5���;|[&̕u_^�����9���IcՓ:������;R�`i�(��֖�o,�l�%��q,��C] �
+а�����)�5���'�!tV�<���~����Ѱ��Y�*��d��
+/ۥ1�z���T�$���
\ No newline at end of file
diff --git a/age-dev-manual/postgres/node.html 
b/age-dev-manual/postgres/node.html
index 4d75e47..43c949a 100644
--- a/age-dev-manual/postgres/node.html
+++ b/age-dev-manual/postgres/node.html
@@ -44,6 +44,7 @@
               <p class="caption" role="heading"><span 
class="caption-text">Introduction</span></p>
 <ul>
 <li class="toctree-l1"><a class="reference internal" 
href="../intro/overview.html">Overview</a></li>
+<li class="toctree-l1"><a class="reference internal" 
href="../intro/setup.html">Setup</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Postgres 
Internals</span></p>
 <ul class="current">
@@ -91,10 +92,10 @@
 <section id="overview">
 <h2>Overview<a class="headerlink" href="#overview" title="Permalink to this 
heading"></a></h2>
 <p>Postgres has a default struct that it uses for throughout most of its query 
processing engine, <a 
href='https://github.com/postgres/postgres/blob/master/src/include/nodes/nodes.h#L105'>Node</a>.
 The Node struct is defined as follows:</p>
-<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">typedef</span> <span 
class="n">struct</span> <span class="n">Node</span>
-<span class="p">{</span>
-    <span class="n">NodeTag</span> <span class="nb">type</span><span 
class="p">;</span>
-<span class="p">}</span> <span class="n">Node</span><span class="p">;</span>
+<div class="highlight-c notranslate"><div 
class="highlight"><pre><span></span><span class="k">typedef</span><span 
class="w"> </span><span class="k">struct</span><span class="w"> </span><span 
class="nc">Node</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="n">NodeTag</span><span class="w"> 
</span><span class="n">type</span><span class="p">;</span><span 
class="w"></span>
+<span class="p">}</span><span class="w"> </span><span 
class="n">Node</span><span class="p">;</span><span class="w"></span>
 </pre></div>
 </div>
 <p>The stuct Node and Postgres as a whole take advantage of pointers and how C 
allocates memory to implement as pseudo inheritance system similar to high 
level languages such as C++, Java, etc.</p>
@@ -104,89 +105,90 @@
 <h2>What is a Pointer?<a class="headerlink" href="#what-is-a-pointer" 
title="Permalink to this heading"></a></h2>
 <p>Unlike a variable a pointer stores the memory address of a variable. In 
other words, it tells you where in memory something is located. Its a pretty 
simple concept, that holds a lot of complexity and power within it.</p>
 <p>For a full tutorial of pointers you can <a 
href='https://www.youtube.com/watch?v=zuegQmMdy8M&ab_channel=freeCodeCamp.org'>watch
 this tutorial.</a></p>
-<p>For our purposes, the important thing to note about pointers is. All 
pointers are the same: a 4 byte integer.</p>
+<p>For our purposes, the important thing to note about pointers is, all the 
pointers are of same size: INT 4 byte.</p>
 <p>You can denote pointers of different types such as:</p>
-<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="nb">int</span> <span 
class="o">*</span><span class="n">int_ptr</span><span class="p">;</span>
-<span class="n">char</span> <span class="o">*</span><span 
class="n">string_ptr</span><span class="p">;</span>
-<span class="n">myStruct</span> <span class="o">*</span><span 
class="n">struct_ptr</span><span class="p">;</span>
-<span class="n">void</span> <span class="o">*</span><span 
class="n">void_ptr</span><span class="p">;</span>
+<div class="highlight-c notranslate"><div 
class="highlight"><pre><span></span><span class="kt">int</span><span class="w"> 
</span><span class="o">*</span><span class="n">int_ptr</span><span 
class="p">;</span><span class="w"></span>
+<span class="kt">char</span><span class="w"> </span><span 
class="o">*</span><span class="n">string_ptr</span><span 
class="p">;</span><span class="w"></span>
+<span class="n">myStruct</span><span class="w"> </span><span 
class="o">*</span><span class="n">struct_ptr</span><span 
class="p">;</span><span class="w"></span>
+<span class="kt">void</span><span class="w"> </span><span 
class="o">*</span><span class="n">void_ptr</span><span class="p">;</span><span 
class="w"></span>
 </pre></div>
 </div>
-<p>All of these pointers as far a the hardware and memory is concerned are the 
same: they are 4 byte integer.</p>
+<p>All of these pointers as far as the hardware and memory is concerned are of 
the same size: INT 4 byte.</p>
 </section>
 <section id="what-is-a-struct">
 <h2>What is a Struct?<a class="headerlink" href="#what-is-a-struct" 
title="Permalink to this heading"></a></h2>
-<p>A struct is a composite data type that defines a physically group list of 
variables in one name in a <b>continous</b> block of memory.</p>
+<p>A <code class="docutils literal notranslate"><span 
class="pre">struct</span></code> is a composite data type that defines a 
physically group list of variables in one name in a <b>continous</b> block of 
memory.</p>
 <p>If we have a struct defined as:</p>
-<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">typedef</span> <span 
class="n">struct</span> <span class="n">myStruct</span>                         
                                     
-<span class="p">{</span>                                                       
                         
-    <span class="nb">int</span> <span class="n">var1</span><span 
class="p">;</span>
-    <span class="nb">float</span> <span class="n">var2</span><span 
class="p">;</span>
-    <span class="n">char</span> <span class="n">var3</span><span 
class="p">;</span>                                                              
  
-<span class="p">}</span> <span class="n">myStruct</span><span 
class="p">;</span>                                                              
            
+<div class="highlight-c notranslate"><div 
class="highlight"><pre><span></span><span class="k">typedef</span><span 
class="w"> </span><span class="k">struct</span><span class="w"> </span><span 
class="nc">myStruct</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="kt">int</span><span class="w"> 
</span><span class="n">var1</span><span class="p">;</span><span 
class="w"></span>
+<span class="w">    </span><span class="kt">float</span><span class="w"> 
</span><span class="n">var2</span><span class="p">;</span><span 
class="w"></span>
+<span class="w">    </span><span class="kt">char</span><span class="w"> 
</span><span class="n">var3</span><span class="p">;</span><span 
class="w"></span>
+<span class="p">}</span><span class="w"> </span><span 
class="n">myStruct</span><span class="p">;</span><span class="w"></span>
 </pre></div>
 </div>
-<p>When we allocate room for that struct, a set amount of bytes for the struct 
will be found in memory and allocated. In our above example, on most modern 
systems: 4 bytes for var1, 4 bytes for var2 and 1 byte for var3 resulting in 9 
bytes total being allocated for the struct, and they will be allocated in the 
order that they are defined above.</p>
-<p>for a further tutorial of structs please review this <a 
href='https://www.simplilearn.com/tutorials/c-tutorial/structure-in-c'>tutorial.</a></p>
+<p>When we allocate room for that struct, a set amount of bytes for the struct 
will be found in memory and allocated. In our above example, on most modern 
systems: <strong>4 bytes for var1</strong>, <strong>4 bytes for var2</strong> 
and <strong>1 byte for var3</strong> resulting in <code class="docutils literal 
notranslate"><span class="pre">9</span> <span class="pre">bytes</span></code> 
total being allocated for the struct, and they will be allocated in the order 
that they are defined a [...]
+<p>For a further tutorial on structs, please review this <a 
href='https://www.simplilearn.com/tutorials/c-tutorial/structure-in-c'>tutorial.</a></p>
 </section>
 <section id="pointers-to-structs">
 <h2>Pointers to Structs<a class="headerlink" href="#pointers-to-structs" 
title="Permalink to this heading"></a></h2>
 <p>When you create a pointer to a struct, what is contained in the pointer is 
the address of the first byte of the struct. When accessing an element in a 
struct with a pointer, such as:</p>
-<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">myStruct</span> <span 
class="o">*</span><span class="nb">str</span> <span class="o">=</span> <span 
class="n">malloc</span><span class="p">(</span><span 
class="n">sizeof</span><span class="p">(</span><span 
class="n">myStruct</span><span class="p">));</span>                             
           
-<span class="nb">str</span><span class="o">-&gt;</span><span 
class="n">var2</span> <span class="o">=</span> <span class="mf">1.0</span><span 
class="p">;</span>                                                              
   
+<div class="highlight-c notranslate"><div 
class="highlight"><pre><span></span><span class="n">myStruct</span><span 
class="w"> </span><span class="o">*</span><span class="n">str</span><span 
class="w"> </span><span class="o">=</span><span class="w"> </span><span 
class="n">malloc</span><span class="p">(</span><span 
class="k">sizeof</span><span class="p">(</span><span 
class="n">myStruct</span><span class="p">));</span><span class="w"></span>
+<span class="n">str</span><span class="o">-&gt;</span><span 
class="n">var2</span><span class="w"> </span><span class="o">=</span><span 
class="w"> </span><span class="mf">1.0</span><span class="p">;</span><span 
class="w"></span>
 </pre></div>
 </div>
-<p>The address of the pointer is offset by the distance that var2 is from the 
start of the struct. In this case, is adress of the pointer + 4 bytes, to 
bypass the int field in the struct.</p>
+<p>The address of the pointer is offset by the distance that var2 is from the 
start of the struct. In this case, is address of the pointer + 4 bytes, to 
bypass the <code class="docutils literal notranslate"><span 
class="pre">int</span></code> field in the struct.</p>
 <section id="void-pointers-and-pointer-casting">
 <h3>Void Pointers and Pointer Casting<a class="headerlink" 
href="#void-pointers-and-pointer-casting" title="Permalink to this 
heading"></a></h3>
 <p>One of the more unique features that C offers is the void pointer. This 
offers programmers the ability to pass around pointers without care for the 
type.</p>
 <p>This pointer knows the address in memory that something is located, but it 
doesn’t know what is located there, so:</p>
-<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">void</span> <span 
class="n">myFunction</span><span class="p">(</span><span class="n">void</span> 
<span class="o">*</span><span class="n">ptr</span><span class="p">)</span>
-<span class="p">{</span>
-    <span class="n">ptr</span><span class="o">-&gt;</span><span 
class="n">var1</span> <span class="o">=</span> <span class="mi">1</span><span 
class="p">;</span>
-<span class="p">}</span>                                                       
                     
+<div class="highlight-c notranslate"><div 
class="highlight"><pre><span></span><span class="kt">void</span><span 
class="w"> </span><span class="nf">myFunction</span><span 
class="p">(</span><span class="kt">void</span><span class="w"> </span><span 
class="o">*</span><span class="n">ptr</span><span class="p">)</span><span 
class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="n">ptr</span><span 
class="o">-&gt;</span><span class="n">var1</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="mi">1</span><span 
class="p">;</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
 </pre></div>
 </div>
-<p>Will throw an error. However, you can cast the void pointer to the pointer 
of another type.</p>
-<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">void</span> <span 
class="n">myFunction</span><span class="p">(</span><span class="n">void</span> 
<span class="o">*</span><span class="n">ptr</span><span class="p">)</span>      
                                                                    <span 
class="p">{</span>                                                              
                  
-    <span class="n">myStruct</span> <span class="o">*</span><span 
class="nb">str</span> <span class="o">=</span> <span class="p">(</span><span 
class="n">myStruct</span> <span class="o">*</span><span class="p">)</span><span 
class="n">ptr</span><span class="p">;</span>
-    <span class="nb">str</span><span class="o">-&gt;</span><span 
class="n">var1</span> <span class="o">=</span> <span class="mi">1</span><span 
class="p">;</span>                                                              
 
-<span class="p">}</span>                                                       
                         
+<p>The above code will throw an error. However, you can cast the void pointer 
to the pointer of another type.</p>
+<div class="highlight-c notranslate"><div 
class="highlight"><pre><span></span><span class="kt">void</span><span 
class="w"> </span><span class="nf">myFunction</span><span 
class="p">(</span><span class="kt">void</span><span class="w"> </span><span 
class="o">*</span><span class="n">ptr</span><span class="p">){</span><span 
class="w"></span>
+<span class="w">    </span><span class="n">myStruct</span><span class="w"> 
</span><span class="o">*</span><span class="n">str</span><span class="w"> 
</span><span class="o">=</span><span class="w"> </span><span 
class="p">(</span><span class="n">myStruct</span><span class="w"> </span><span 
class="o">*</span><span class="p">)</span><span class="n">ptr</span><span 
class="p">;</span><span class="w"></span>
+<span class="w">    </span><span class="n">str</span><span 
class="o">-&gt;</span><span class="n">var1</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="mi">1</span><span 
class="p">;</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
 </pre></div>
 </div>
-<p>Will work. This opens opportunity for developers to create functions that 
are more versitile that if the developer needs know exactly what something was 
pointing to and code for all situations. However, developers need to be careful 
with this feature because it allows for some very strange behavior if the 
developer does not use them carefully.</p>
+<p>The code above will work.</p>
+<p>This opens opportunity for developers to create functions that are more 
versitile that if the developer needs know exactly what something was pointing 
to and code for all situations. However, developers need to be careful with 
this feature because it allows for some very strange behavior if the developer 
does not use them carefully.</p>
 <p>Postgres has designed a way to use the power of void pointers, but with 
certain precautions that make them safer to use.</p>
 </section>
 </section>
 <section id="how-postgres-uses-structs-and-pointers">
 <h2>How Postgres Uses Structs and Pointers<a class="headerlink" 
href="#how-postgres-uses-structs-and-pointers" title="Permalink to this 
heading"></a></h2>
 <p>Void pointers assume nothing about what the pointer is referencing. The 
Node struct on the other hand know about one field the <a 
href='https://github.com/postgres/postgres/blob/REL_11_17/src/include/nodes/nodes.h#L26'>enum
 NodeType</a>. Nearly all the postgres data structures used in the query 
processing engine start with this field.</p>
-<p>For example, here is the data structure that represents a fucntion call in 
the parser phase:</p>
-<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">typedef</span> <span 
class="n">struct</span> <span class="n">FuncCall</span>
-<span class="p">{</span>
-       <span class="n">NodeTag</span>          <span 
class="nb">type</span><span class="p">;</span>
-       <span class="n">List</span>        <span class="o">*</span><span 
class="n">funcname</span><span class="p">;</span>              <span 
class="o">/*</span> <span class="n">qualified</span> <span 
class="n">name</span> <span class="n">of</span> <span class="n">function</span> 
<span class="o">*/</span>
-       <span class="n">List</span>        <span class="o">*</span><span 
class="n">args</span><span class="p">;</span>                  <span 
class="o">/*</span> <span class="n">the</span> <span class="n">arguments</span> 
<span class="p">(</span><span class="nb">list</span> <span class="n">of</span> 
<span class="n">exprs</span><span class="p">)</span> <span class="o">*/</span>
-       <span class="n">List</span>        <span class="o">*</span><span 
class="n">agg_order</span><span class="p">;</span>             <span 
class="o">/*</span> <span class="n">ORDER</span> <span class="n">BY</span> 
<span class="p">(</span><span class="nb">list</span> <span class="n">of</span> 
<span class="n">SortBy</span><span class="p">)</span> <span class="o">*/</span>
-       <span class="n">Node</span>        <span class="o">*</span><span 
class="n">agg_filter</span><span class="p">;</span>            <span 
class="o">/*</span> <span class="n">FILTER</span> <span 
class="n">clause</span><span class="p">,</span> <span class="k">if</span> <span 
class="nb">any</span> <span class="o">*/</span>
-       <span class="n">struct</span> <span class="n">WindowDef</span> <span 
class="o">*</span><span class="n">over</span><span class="p">;</span>           
   <span class="o">/*</span> <span class="n">OVER</span> <span 
class="n">clause</span><span class="p">,</span> <span class="k">if</span> <span 
class="nb">any</span> <span class="o">*/</span>
-       <span class="nb">bool</span>            <span 
class="n">agg_within_group</span><span class="p">;</span> <span 
class="o">/*</span> <span class="n">ORDER</span> <span class="n">BY</span> 
<span class="n">appeared</span> <span class="ow">in</span> <span 
class="n">WITHIN</span> <span class="n">GROUP</span> <span class="o">*/</span>
-       <span class="nb">bool</span>            <span 
class="n">agg_star</span><span class="p">;</span>         <span 
class="o">/*</span> <span class="n">argument</span> <span class="n">was</span> 
<span class="n">really</span> <span class="s1">&#39;*&#39;</span> <span 
class="o">*/</span>
-       <span class="nb">bool</span>            <span 
class="n">agg_distinct</span><span class="p">;</span>     <span 
class="o">/*</span> <span class="n">arguments</span> <span 
class="n">were</span> <span class="n">labeled</span> <span 
class="n">DISTINCT</span> <span class="o">*/</span>
-       <span class="nb">bool</span>            <span 
class="n">func_variadic</span><span class="p">;</span>    <span 
class="o">/*</span> <span class="n">last</span> <span class="n">argument</span> 
<span class="n">was</span> <span class="n">labeled</span> <span 
class="n">VARIADIC</span> <span class="o">*/</span>
-       <span class="n">CoercionForm</span> <span 
class="n">funcformat</span><span class="p">;</span>   <span class="o">/*</span> 
<span class="n">how</span> <span class="n">to</span> <span 
class="n">display</span> <span class="n">this</span> <span 
class="n">node</span> <span class="o">*/</span>
-       <span class="nb">int</span>                     <span 
class="n">location</span><span class="p">;</span>         <span 
class="o">/*</span> <span class="n">token</span> <span 
class="n">location</span><span class="p">,</span> <span class="ow">or</span> 
<span class="o">-</span><span class="mi">1</span> <span class="k">if</span> 
<span class="n">unknown</span> <span class="o">*/</span>
-<span class="p">}</span> <span class="n">FuncCall</span><span 
class="p">;</span>
+<p>For example, here is the data structure that represents a function call in 
the parser phase:</p>
+<div class="highlight-c notranslate"><div 
class="highlight"><pre><span></span><span class="k">typedef</span><span 
class="w"> </span><span class="k">struct</span><span class="w"> </span><span 
class="nc">FuncCall</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">       </span><span class="n">NodeTag</span><span class="w">   
        </span><span class="n">type</span><span class="p">;</span><span 
class="w"></span>
+<span class="w">       </span><span class="n">List</span><span class="w">      
   </span><span class="o">*</span><span class="n">funcname</span><span 
class="p">;</span><span class="w">               </span><span class="cm">/* 
qualified name of function */</span><span class="w"></span>
+<span class="w">       </span><span class="n">List</span><span class="w">      
   </span><span class="o">*</span><span class="n">args</span><span 
class="p">;</span><span class="w">                   </span><span class="cm">/* 
the arguments (list of exprs) */</span><span class="w"></span>
+<span class="w">       </span><span class="n">List</span><span class="w">      
   </span><span class="o">*</span><span class="n">agg_order</span><span 
class="p">;</span><span class="w">              </span><span class="cm">/* 
ORDER BY (list of SortBy) */</span><span class="w"></span>
+<span class="w">       </span><span class="n">Node</span><span class="w">      
   </span><span class="o">*</span><span class="n">agg_filter</span><span 
class="p">;</span><span class="w">             </span><span class="cm">/* 
FILTER clause, if any */</span><span class="w"></span>
+<span class="w">       </span><span class="k">struct</span><span class="w"> 
</span><span class="nc">WindowDef</span><span class="w"> </span><span 
class="o">*</span><span class="n">over</span><span class="p">;</span><span 
class="w">                </span><span class="cm">/* OVER clause, if any 
*/</span><span class="w"></span>
+<span class="w">       </span><span class="kt">bool</span><span class="w">     
        </span><span class="n">agg_within_group</span><span 
class="p">;</span><span class="w">  </span><span class="cm">/* ORDER BY 
appeared in WITHIN GROUP */</span><span class="w"></span>
+<span class="w">       </span><span class="kt">bool</span><span class="w">     
        </span><span class="n">agg_star</span><span class="p">;</span><span 
class="w">          </span><span class="cm">/* argument was really &#39;*&#39; 
*/</span><span class="w"></span>
+<span class="w">       </span><span class="kt">bool</span><span class="w">     
        </span><span class="n">agg_distinct</span><span class="p">;</span><span 
class="w">      </span><span class="cm">/* arguments were labeled DISTINCT 
*/</span><span class="w"></span>
+<span class="w">       </span><span class="kt">bool</span><span class="w">     
        </span><span class="n">func_variadic</span><span 
class="p">;</span><span class="w">     </span><span class="cm">/* last argument 
was labeled VARIADIC */</span><span class="w"></span>
+<span class="w">       </span><span class="n">CoercionForm</span><span 
class="w"> </span><span class="n">funcformat</span><span 
class="p">;</span><span class="w">     </span><span class="cm">/* how to 
display this node */</span><span class="w"></span>
+<span class="w">       </span><span class="kt">int</span><span class="w">      
                </span><span class="n">location</span><span 
class="p">;</span><span class="w">          </span><span class="cm">/* token 
location, or -1 if unknown */</span><span class="w"></span>
+<span class="p">}</span><span class="w"> </span><span 
class="n">FuncCall</span><span class="p">;</span><span class="w"></span>
 </pre></div>
 </div>
 <p>and here is the data structure that represents a constant in the parser 
phase.</p>
-<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">typedef</span> <span 
class="n">struct</span> <span class="n">A_Const</span>
-<span class="p">{</span>
-       <span class="n">NodeTag</span>          <span 
class="nb">type</span><span class="p">;</span>
-       <span class="n">union</span> <span class="n">ValUnion</span> <span 
class="n">val</span><span class="p">;</span>
-       <span class="nb">bool</span>            <span 
class="n">isnull</span><span class="p">;</span>                   <span 
class="o">/*</span> <span class="n">SQL</span> <span class="n">NULL</span> 
<span class="n">constant</span> <span class="o">*/</span>
-       <span class="nb">int</span>                     <span 
class="n">location</span><span class="p">;</span>         <span 
class="o">/*</span> <span class="n">token</span> <span 
class="n">location</span><span class="p">,</span> <span class="ow">or</span> 
<span class="o">-</span><span class="mi">1</span> <span class="k">if</span> 
<span class="n">unknown</span> <span class="o">*/</span>
-<span class="p">}</span> <span class="n">A_Const</span><span class="p">;</span>
+<div class="highlight-c notranslate"><div 
class="highlight"><pre><span></span><span class="k">typedef</span><span 
class="w"> </span><span class="k">struct</span><span class="w"> </span><span 
class="nc">A_Const</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">       </span><span class="n">NodeTag</span><span class="w">   
        </span><span class="n">type</span><span class="p">;</span><span 
class="w"></span>
+<span class="w">       </span><span class="k">union</span><span class="w"> 
</span><span class="nc">ValUnion</span><span class="w"> </span><span 
class="n">val</span><span class="p">;</span><span class="w"></span>
+<span class="w">       </span><span class="kt">bool</span><span class="w">     
        </span><span class="n">isnull</span><span class="p">;</span><span 
class="w">                    </span><span class="cm">/* SQL NULL constant 
*/</span><span class="w"></span>
+<span class="w">       </span><span class="kt">int</span><span class="w">      
                </span><span class="n">location</span><span 
class="p">;</span><span class="w">          </span><span class="cm">/* token 
location, or -1 if unknown */</span><span class="w"></span>
+<span class="p">}</span><span class="w"> </span><span 
class="n">A_Const</span><span class="p">;</span><span class="w"></span>
 </pre></div>
 </div>
 <p>Given that each other these things a function can appear in a large 
combination of ways:</p>
@@ -195,21 +197,22 @@
 <span class="n">SELECT</span> <span class="n">function_call</span><span 
class="p">(),</span> <span class="mi">1</span><span class="p">;</span>
 </pre></div>
 </div>
-<p>Many parts of the code don’t need to know the specifics, but since each 
start with NodeTag, these functions can pass Node to each other and not have to 
care about the details it isn’t concerned with.</p>
-<p>For example the transformExpr function, which is what converts nodes such 
as these from parser nodes to their analyze node couterparts:</p>
+<p>Many parts of the code don’t need to know the specifics, but since each 
start with <code class="docutils literal notranslate"><span 
class="pre">NodeTag</span></code>, these functions can pass Node to each other 
and not have to care about the details it isn’t concerned with.</p>
+<p>For example the <code class="docutils literal notranslate"><span 
class="pre">transformExpr</span></code> function, which is what converts nodes 
such as these from parser nodes to their analyze node couterparts:</p>
 <div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">extern</span> <span 
class="n">Node</span> <span class="o">*</span><span 
class="n">transformExpr</span><span class="p">(</span><span 
class="n">ParseState</span> <span class="o">*</span><span 
class="n">pstate</span><span class="p">,</span> <span class="n">Node</span> 
<span class="o">*</span><span class="n">expr</span><span class="p">,</span> 
<span class="n">ParseExprKind</span> <span class=" [...]
 </pre></div>
 </div>
 <p>Can be used in a generic way, reducing the number of permutations of a 
function that needs to be created, when something is similar but not exact.</p>
-<p>The at points where the differences do matter, the NodeTag can be checked 
and the correct logic can be run:</p>
-<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span>   <span class="n">switch</span> <span 
class="p">(</span><span class="n">nodeTag</span><span class="p">(</span><span 
class="n">node</span><span class="p">))</span>
-       <span class="p">{</span>
-               <span class="k">case</span> <span 
class="n">T_FuncCall</span><span class="p">:</span>
-                       <span class="n">result</span> <span class="o">=</span> 
<span class="n">transformColumnRef</span><span class="p">(</span><span 
class="n">pstate</span><span class="p">,</span> <span class="p">(</span><span 
class="n">FuncCall</span> <span class="o">*</span><span class="p">)</span> 
<span class="n">node</span><span class="p">);</span>
-                       <span class="k">break</span><span class="p">;</span>
-               <span class="k">case</span> <span 
class="n">T_A_Const</span><span class="p">:</span>
-                       <span class="n">result</span> <span class="o">=</span> 
<span class="p">(</span><span class="n">Node</span> <span 
class="o">*</span><span class="p">)</span> <span 
class="n">make_const</span><span class="p">(</span><span 
class="n">pstate</span><span class="p">,</span> <span class="p">(</span><span 
class="n">A_Const</span> <span class="o">*</span><span class="p">)</span> <span 
class="n">node</span><span class="p">);</span>
-                       <span class="k">break</span><span class="p">;</span>
+<p>At the points where the differences do matter, the <code class="docutils 
literal notranslate"><span class="pre">NodeTag</span></code> can be checked and 
the correct logic can be run:</p>
+<div class="highlight-c notranslate"><div 
class="highlight"><pre><span></span><span class="w"> </span><span 
class="k">switch</span><span class="w"> </span><span class="p">(</span><span 
class="n">nodeTag</span><span class="p">(</span><span 
class="n">node</span><span class="p">))</span><span class="w"></span>
+<span class="w">       </span><span class="p">{</span><span class="w"></span>
+<span class="w">               </span><span class="k">case</span><span 
class="w"> </span><span class="no">T_FuncCall</span><span 
class="p">:</span><span class="w"></span>
+<span class="w">                       </span><span 
class="n">result</span><span class="w"> </span><span class="o">=</span><span 
class="w"> </span><span class="n">transformFuncCallRef</span><span 
class="p">(</span><span class="n">pstate</span><span class="p">,</span><span 
class="w"> </span><span class="p">(</span><span class="n">FuncCall</span><span 
class="w"> </span><span class="o">*</span><span class="p">)</span><span 
class="w"> </span><span class="n">node</span><span class="p">);</span><span 
class="w"></span>
+<span class="w">                       </span><span 
class="k">break</span><span class="p">;</span><span class="w"></span>
+<span class="w">               </span><span class="k">case</span><span 
class="w"> </span><span class="no">T_A_Const</span><span 
class="p">:</span><span class="w"></span>
+<span class="w">                       </span><span 
class="n">result</span><span class="w"> </span><span class="o">=</span><span 
class="w"> </span><span class="p">(</span><span class="n">Node</span><span 
class="w"> </span><span class="o">*</span><span class="p">)</span><span 
class="w"> </span><span class="n">make_const</span><span 
class="p">(</span><span class="n">pstate</span><span class="p">,</span><span 
class="w"> </span><span class="p">(</span><span class="n">A_Const</span><span 
class="w"> </span><span  [...]
+<span class="w">                       </span><span 
class="k">break</span><span class="p">;</span><span class="w"></span>
+<span class="w">       </span><span class="p">}</span><span class="w"></span>
 </pre></div>
 </div>
 </section>
diff --git a/age-dev-manual/postgres/query_processing.html 
b/age-dev-manual/postgres/query_processing.html
index 8b73cdb..4b5e6d8 100644
--- a/age-dev-manual/postgres/query_processing.html
+++ b/age-dev-manual/postgres/query_processing.html
@@ -23,7 +23,7 @@
     <link rel="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" />
     <link rel="next" title="Node (The Default Postgres Data Structure)" 
href="node.html" />
-    <link rel="prev" title="Overview" href="../intro/overview.html" /> 
+    <link rel="prev" title="Setup" href="../intro/setup.html" /> 
 </head>
 
 <body class="wy-body-for-nav"> 
@@ -45,6 +45,7 @@
               <p class="caption" role="heading"><span 
class="caption-text">Introduction</span></p>
 <ul>
 <li class="toctree-l1"><a class="reference internal" 
href="../intro/overview.html">Overview</a></li>
+<li class="toctree-l1"><a class="reference internal" 
href="../intro/setup.html">Setup</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Postgres 
Internals</span></p>
 <ul class="current">
@@ -119,7 +120,7 @@
            </div>
           </div>
           <footer><div class="rst-footer-buttons" role="navigation" 
aria-label="Footer">
-        <a href="../intro/overview.html" class="btn btn-neutral float-left" 
title="Overview" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" 
aria-hidden="true"></span> Previous</a>
+        <a href="../intro/setup.html" class="btn btn-neutral float-left" 
title="Setup" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" 
aria-hidden="true"></span> Previous</a>
         <a href="node.html" class="btn btn-neutral float-right" title="Node 
(The Default Postgres Data Structure)" accesskey="n" rel="next">Next <span 
class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
 
diff --git a/age-dev-manual/search.html b/age-dev-manual/search.html
index 5194c96..818a343 100644
--- a/age-dev-manual/search.html
+++ b/age-dev-manual/search.html
@@ -45,6 +45,7 @@
               <p class="caption" role="heading"><span 
class="caption-text">Introduction</span></p>
 <ul>
 <li class="toctree-l1"><a class="reference internal" 
href="intro/overview.html">Overview</a></li>
+<li class="toctree-l1"><a class="reference internal" 
href="intro/setup.html">Setup</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Postgres 
Internals</span></p>
 <ul>
diff --git a/age-dev-manual/searchindex.js b/age-dev-manual/searchindex.js
index 92da134..e913e58 100644
--- a/age-dev-manual/searchindex.js
+++ b/age-dev-manual/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"docnames": ["index", "intro/overview", "postgres/node", 
"postgres/query_processing"], "filenames": ["index.rst", "intro/overview.md", 
"postgres/node.md", "postgres/query_processing.md"], "titles": ["Apache 
AGE\u2019s documentation", "Overview", "Node (The Default Postgres Data 
Structure)", "Postgres Query Processing Stages"], "terms": {"overview": 0, 
"queri": [0, 2], "process": [0, 2], "stage": 0, "node": 0, "The": [0, 1, 3], 
"default": 0, "data": [0, 3], "structur": [0 [...]
\ No newline at end of file
+Search.setIndex({"docnames": ["index", "intro/overview", "intro/setup", 
"postgres/node", "postgres/query_processing"], "filenames": ["index.rst", 
"intro/overview.md", "intro/setup.md", "postgres/node.md", 
"postgres/query_processing.md"], "titles": ["Apache AGE\u2019s documentation", 
"Overview", "Setup", "Node (The Default Postgres Data Structure)", "Postgres 
Query Processing Stages"], "terms": {"overview": 0, "setup": 0, "queri": [0, 2, 
3], "process": [0, 2, 3], "stage": 0, "node": 0, "T [...]
\ No newline at end of file

Reply via email to