You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@age.apache.org by gi...@apache.org on 2022/10/26 04:27:02 UTC

[age-website] branch asf-staging updated: deploy: c76e717fd37fce856a29d2cad4cba93315b8399f

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 <Jo...@users.noreply.github.com>
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�?'g
d��{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