This is an automated email from the ASF dual-hosted git repository.
joshinnis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-age-website.git
The following commit(s) were added to refs/heads/master by this push:
new 93c2d55 Added String Specific Comparison Operators
93c2d55 is described below
commit 93c2d553f5f2a1e25bf4767f82806f78b9bc5849
Author: Josh Innis <[email protected]>
AuthorDate: Fri Oct 22 06:23:35 2021 -0700
Added String Specific Comparison Operators
---
docs/index.rst | 2 +-
docs/intro/operators.md | 446 +++++++++++++++++++++++++++++++++++++++++++++++
docs/intro/precedence.md | 8 +-
3 files changed, 454 insertions(+), 2 deletions(-)
diff --git a/docs/index.rst b/docs/index.rst
index 02bd3de..109064c 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -12,7 +12,7 @@ Apache AGE's documentation
intro/cypher
intro/types
intro/comparability
- intro/precedence
+ intro/operators
intro/aggregation
.. toctree::
diff --git a/docs/intro/operators.md b/docs/intro/operators.md
new file mode 100644
index 0000000..06f1777
--- /dev/null
+++ b/docs/intro/operators.md
@@ -0,0 +1,446 @@
+# Operators
+
+## String Specific Comparison Operators
+
+### Data Setup
+
+```
+SELECT * FROM cypher('graph_name', $$
+CREATE (:Person {name: 'John'}),
+ (:Person {name: 'Jeff'}),
+ (:Person {name: 'Joan'}),
+ (:Person {name: 'Bill'})
+$$) AS (result agtype);
+```
+
+### Starts With
+
+Performs case-sensitive prefix searching on strings.
+
+```
+SELECT * FROM cypher('graph_name', $$
+ MATCH (v:Person)
+ WHERE v.name STARTS WITH "J"
+ RETURN v.name
+$$) AS (names agtype);
+```
+
+Results
+<table>
+ <thead>
+ <tr>
+ <td>names</td>
+ </tr>
+ </thead>
+ <tr>
+ <td>"John"</td>
+ </tr>
+ <tr>
+ <td>"Jeff"</td>
+ </tr>
+ <tr>
+ <td>"Joan"</td>
+ </tr>
+ <tr>
+ <td colspan="1">3 rows</td>
+ </tr>
+</table>
+
+### Contains
+
+Performs case-sensitive inclusion searching in strings.
+
+```
+SELECT * FROM cypher('graph_name', $$
+ MATCH (v:Person)
+ WHERE v.name CONTAINS "o"
+ RETURN v.name
+$$) AS (names agtype);
+```
+
+Results
+<table>
+ <thead>
+ <tr>
+ <td>names</td>
+ </tr>
+ </thead>
+ <tr>
+ <td>"John</td>
+ </tr>
+ <tr>
+ <td>"Joan</td>
+ </tr>
+ <tr>
+ <td colspan="1">2 rows</td>
+ </tr>
+</table>
+
+
+### Ends With
+
+Performs case-sensitive suffix searching on strings.
+
+```
+SELECT * FROM cypher('graph_name', $$
+ MATCH (v:Person)
+ WHERE v.name ENDS WITH "n"
+ RETURN v.name
+$$) AS (names agtype);
+```
+
+Results
+<table>
+ <thead>
+ <tr>
+ <td>names</td>
+ </tr>
+ </thead>
+ <tr>
+ <td>"John"</td>
+ </tr>
+ <tr>
+ <td>"Joan"</td>
+ </tr>
+ <tr>
+ <td colspan="1">2 rows</td>
+ </tr>
+</table>
+
+### Regular Expressions
+
+AGE supports the use of [POSIX regular
expressions](https://www.postgresql.org/docs/11/functions-matching.html#FUNCTIONS-POSIX-REGEXP)
using the =~ operator. By default =~ is case sensitve.
+
+
+#### Basic String Matching
+
+The =~ operator when no special characters are give, act like the = operator.
+
+```
+SELECT * FROM cypher('graph_name', $$
+ MATCH (v:Person)
+ WHERE v.name =~ 'John'
+ RETURN v.name
+$$) AS (names agtype);
+```
+
+Results
+<table>
+ <thead>
+ <tr>
+ <td>names</td>
+ </tr>
+ </thead>
+ <tr>
+ <td>"John"</td>
+ </tr>
+ <tr>
+ <td colspan="1">1 rows</td>
+ </tr>
+</table>
+
+#### Case insensitive search
+
+Adding (?i) at the beginning of the striong will make the comparison case
insensitive
+
+```
+SELECT * FROM cypher('graph_name', $$
+ MATCH (v:Person)
+ WHERE v.name =~ '(?i)JoHn'
+ RETURN v.name
+$$) AS (names agtype);
+```
+
+<table>
+ <thead>
+ <tr>
+ <td>names</td>
+ </tr>
+ </thead>
+ <tr>
+ <td>"John"</td>
+ </tr>
+ <tr>
+ <td colspan="1">1 rows</td>
+ </tr>
+</table>
+
+
+#### The . Wildcard
+
+The . operator acts as a wildcard to match any single character.
+
+```
+SELECT * FROM cypher('graph_name', $$
+ MATCH (v:Person)
+ WHERE v.name =~ 'Jo.n'
+ RETURN v.name
+$$) AS (names agtype);
+```
+
+<table>
+ <thead>
+ <tr>
+ <td>names</td>
+ </tr>
+ </thead>
+ <tr>
+ <td>"John"</td>
+ </tr>
+ <tr>
+ <td>"Joan"</td>
+ </tr>
+ <tr>
+ <td colspan="1">2 rows</td>
+ </tr>
+</table>
+
+#### The * Wildcard
+
+The * wildcard after a character will match to 0 or more of the previous
character
+
+```
+SELECT * FROM cypher('graph_name', $$
+ MATCH (v:Person)
+ WHERE v.name =~ 'Johz*n'
+ RETURN v.name
+$$) AS (names agtype);
+```
+
+<table>
+ <thead>
+ <tr>
+ <td>names</td>
+ </tr>
+ </thead>
+ <tr>
+ <td>"John"</td>
+ </tr>
+ <tr>
+ <td colspan="1">1 rows</td>
+ </tr>
+</table>
+
+
+#### The + Operator
+
+The + operator matches to 1 or more the previous character.
+
+```
+SELECT * FROM cypher('graph_name', $$
+ MATCH (v:Person)
+ WHERE v.name =~ 'Bil+'
+ RETURN v.name
+$$) AS (names agtype);
+```
+
+Results
+<table>
+ <thead>
+ <tr>
+ <td>names</td>
+ </tr>
+ </thead>
+ <tr>
+ <td>"Bill"</td>
+ </tr>
+ <tr>
+ <td colspan="1">1 row</td>
+ </tr>
+</table>
+
+#### The . and * wildcards together
+
+You can use the . and * wildcards together to represent the rest of a string.
+
+```
+SELECT * FROM cypher('graph_name', $$
+ MATCH (v:Person)
+ WHERE v.name =~ 'J.*'
+ RETURN v.name
+$$) AS (names agtype);
+```
+
+<table>
+ <thead>
+ <tr>
+ <td>names</td>
+ </tr>
+ </thead>
+ <tr>
+ <td>"John"</td>
+ </tr>
+ <tr>
+ <td>"Jeff"</td>
+ </tr>
+ <tr>
+ <td>"Joan"</td>
+ </tr>
+ <tr>
+ <td colspan="1">2 rows</td>
+ </tr>
+</table>
+
+
+## Operator Precedence
+
+Operator precedence in AGE is shown below:
+
+
+<table>
+ <tr>
+ <td>Precedence
+ </td>
+ <td>Operator
+ </td>
+ <td>
+ </td>
+ </tr>
+ <tr>
+ <td>1
+ </td>
+ <td>.
+ </td>
+ <td>Property Access
+ </td>
+ </tr>
+ <tr>
+ <td rowspan="2" >2
+ </td>
+ <td>[]
+ </td>
+ <td>Map and List Subscripting
+ </td>
+ </tr>
+ <tr>
+ <td>()
+ </td>
+ <td>Function Call
+ </td>
+ </tr>
+ <tr>
+ <td rowspan="4" >3
+ </td>
+ <td>STARTS WITH
+ </td>
+ <td>Case-sensitive prefix searching on strings
+ </td>
+ </tr>
+ <tr>
+ <td>ENDS WITH
+ </td>
+ <td>Case-sensitive suffix searching on strings
+ </td>
+ </tr>
+ <tr>
+ <td>CONTAINS
+ </td>
+ <td>Case-sensitive inclusion searching on strings
+ </td>
+ </tr>
+ <tr>
+ <td>=~
+ </td>
+ <td>Regular expression string matching
+ </td>
+ </tr>
+ <tr>
+ <td>4
+ </td>
+ <td>-
+ </td>
+ <td>Unary Minus
+ </td>
+ </tr>
+ <tr>
+ <td rowspan="3" >5
+ </td>
+ <td>IN
+ </td>
+ <td>Checking if an element exists in a list
+ </td>
+ </tr>
+ <tr>
+ <td>IS NULL
+ </td>
+ <td>Checking a value is NULL
+ </td>
+ </tr>
+ <tr>
+ <td>IS NOT NULL
+ </td>
+ <td>Checking a value is not NULL
+ </td>
+ </tr>
+ <tr>
+ <td>6
+ </td>
+ <td>^
+ </td>
+ <td>Exponentiation
+ </td>
+ </tr>
+ <tr>
+ <td>7
+ </td>
+ <td>* / %
+ </td>
+ <td>Multiplication, division and remainder
+ </td>
+ </tr>
+ <tr>
+ <td>8
+ </td>
+ <td>+ -
+ </td>
+ <td>Addition and Subtraction
+ </td>
+ </tr>
+ <tr>
+ <td rowspan="3" >9
+ </td>
+ <td>= <>
+ </td>
+ <td>For relational = and ≠ respectively
+ </td>
+ </tr>
+ <tr>
+ <td>< <=
+ </td>
+ <td>For relational < and ≤ respectively
+ </td>
+ </tr>
+ <tr>
+ <td>> >=
+ </td>
+ <td>For relational > and ≥ respectively
+ </td>
+ </tr>
+ <tr>
+ <td>10
+ </td>
+ <td>NOT
+ </td>
+ <td>Logical NOT
+ </td>
+ </tr>
+ <tr>
+ <td>11
+ </td>
+ <td>AND
+ </td>
+ <td>Logical AND
+ </td>
+ </tr>
+ <tr>
+ <td>12
+ </td>
+ <td>OR
+ </td>
+ <td>Logical OR
+ </td>
+ </tr>
+</table>
+
+
+
diff --git a/docs/intro/precedence.md b/docs/intro/precedence.md
index 6f91dd1..a7846f8 100644
--- a/docs/intro/precedence.md
+++ b/docs/intro/precedence.md
@@ -35,7 +35,7 @@ Operator precedence in AGE is shown below:
</td>
</tr>
<tr>
- <td rowspan="3" >3
+ <td rowspan="4" >3
</td>
<td>STARTS WITH
</td>
@@ -55,6 +55,12 @@ Operator precedence in AGE is shown below:
</td>
</tr>
<tr>
+ <td>=~
+ </td>
+ <td>Regular expression string matching
+ </td>
+ </tr>
+ <tr>
<td>4
</td>
<td>-