<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia at 2015-11-24
 | Rendered using Apache Maven Fluido Skin 1.3.0
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="Date-Revision-yyyymmdd" content="20151124" />
    <meta http-equiv="Content-Language" content="en" />
    <title>AsterixDB &#x2013; AsterixDB Temporal Functions: Allens Relations</title>
    <link rel="stylesheet" href="../css/apache-maven-fluido-1.3.0.min.css" />
    <link rel="stylesheet" href="../css/site.css" />
    <link rel="stylesheet" href="../css/print.css" media="print" />

      
    <script type="text/javascript" src="../js/apache-maven-fluido-1.3.0.min.js"></script>

                          
        
<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

        ga('create', 'UA-41536543-1', 'uci.edu');
        ga('send', 'pageview');</script>
          
            </head>
        <body class="topBarDisabled">
          
                
                    
    
        <div class="container-fluid">
          <div id="banner">
        <div class="pull-left">
                                    <a href="http://asterixdb.apache.org/" id="bannerLeft">
                                                                                                <img src="../images/asterixlogo.png"  alt="AsterixDB"/>
                </a>
                      </div>
        <div class="pull-right">  </div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
                
                    
                  <li id="publishDate">Last Published: 2015-11-24</li>
                      
                
                    
                 <li id="projectVersion" class="pull-right">Version: 0.8.7-incubating</li>
      
                                            <li class="divider pull-right">|</li>
                        
    <li class="pull-right">              <a href="../index.html" title="Documentation Home">
        Documentation Home</a>
  </li>

                        </ul>
      </div>

            
      <div class="row-fluid">
        <div id="leftColumn" class="span3">
          <div class="well sidebar-nav">
                
                    
                <ul class="nav nav-list">
                    <li class="nav-header">Documentation</li>
                                
      <li>
    
                          <a href="../install.html" title="Installing and Managing AsterixDB using Managix">
          <i class="none"></i>
        Installing and Managing AsterixDB using Managix</a>
            </li>
                  
      <li>
    
                          <a href="../yarn.html" title="Deploying AsterixDB using YARN">
          <i class="none"></i>
        Deploying AsterixDB using YARN</a>
            </li>
                  
      <li>
    
                          <a href="../aql/primer.html" title="AsterixDB 101: An ADM and AQL Primer">
          <i class="none"></i>
        AsterixDB 101: An ADM and AQL Primer</a>
            </li>
                  
      <li>
    
                          <a href="../aql/primer-sql-like.html" title="AsterixDB 101: An ADM and AQL Primer (For SQL Fans)">
          <i class="none"></i>
        AsterixDB 101: An ADM and AQL Primer (For SQL Fans)</a>
            </li>
                  
      <li>
    
                          <a href="../aql/js-sdk.html" title="AsterixDB Javascript SDK">
          <i class="none"></i>
        AsterixDB Javascript SDK</a>
            </li>
                  
      <li>
    
                          <a href="../aql/datamodel.html" title="Asterix Data Model (ADM)">
          <i class="none"></i>
        Asterix Data Model (ADM)</a>
            </li>
                  
      <li>
    
                          <a href="../aql/manual.html" title="Asterix Query Language (AQL)">
          <i class="none"></i>
        Asterix Query Language (AQL)</a>
            </li>
                  
      <li>
    
                          <a href="../aql/functions.html" title="AQL Functions">
          <i class="none"></i>
        AQL Functions</a>
            </li>
                  
      <li class="active">
    
            <a href="#"><i class="none"></i>AQL Allen's Relations Functions</a>
          </li>
                  
      <li>
    
                          <a href="../aql/similarity.html" title="AQL Support of Similarity Queries">
          <i class="none"></i>
        AQL Support of Similarity Queries</a>
            </li>
                  
      <li>
    
                          <a href="../aql/externaldata.html" title="Accessing External Data">
          <i class="none"></i>
        Accessing External Data</a>
            </li>
                  
      <li>
    
                          <a href="../feeds/tutorial.html" title="Support for Data Ingestion in AsterixDB">
          <i class="none"></i>
        Support for Data Ingestion in AsterixDB</a>
            </li>
                  
      <li>
    
                          <a href="../udf.html" title="Support for User Defined Functions in AsterixDB">
          <i class="none"></i>
        Support for User Defined Functions in AsterixDB</a>
            </li>
                  
      <li>
    
                          <a href="../aql/filters.html" title="Filter-Based LSM Index Acceleration">
          <i class="none"></i>
        Filter-Based LSM Index Acceleration</a>
            </li>
                  
      <li>
    
                          <a href="../api.html" title="HTTP API to AsterixDB">
          <i class="none"></i>
        HTTP API to AsterixDB</a>
            </li>
            </ul>
                
                    
                
          <hr class="divider" />

           <div id="poweredBy">
                            <div class="clear"></div>
                            <div class="clear"></div>
                            <div class="clear"></div>
                                                                                                                         <a href="https://code.google.com/p/hyracks/" title="Hyracks" class="builtBy">
        <img class="builtBy"  alt="Hyracks" src="../images/hyrax_ts.png"    />
      </a>
                      </div>
          </div>
        </div>
        
                
        <div id="bodyColumn"  class="span9" >
                                  
            <!-- ! Licensed to the Apache Software Foundation (ASF) under one
 ! or more contributor license agreements.  See the NOTICE file
 ! distributed with this work for additional information
 ! regarding copyright ownership.  The ASF licenses this file
 ! to you under the Apache License, Version 2.0 (the
 ! "License"); you may not use this file except in compliance
 ! with the License.  You may obtain a copy of the License at
 !
 !   http://www.apache.org/licenses/LICENSE-2.0
 !
 ! Unless required by applicable law or agreed to in writing,
 ! software distributed under the License is distributed on an
 ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ! KIND, either express or implied.  See the License for the
 ! specific language governing permissions and limitations
 ! under the License.
 ! --><h1>AsterixDB Temporal Functions: Allen&#x2019;s Relations</h1>
<div class="section">
<h2><a name="Table_of_Contents"></a><a name="toc" id="toc">Table of Contents</a></h2>

<ul>
  
<li><a href="#AboutAllensRelations">About Allen&#x2019;s Relations</a></li>
  
<li><a href="#AllensRelatonsFunctions">Allen&#x2019;s Relations Functions</a></li>
</ul></div>
<div class="section">
<h2><a name="About_Allens_Relations_Back_to_TOC"></a><a name="AboutAllensRelations" id="AboutAllensRelations">About Allen&#x2019;s Relations</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2>
<p>AsterixDB supports Allen&#x2019;s relations over interval types. Allen&#x2019;s relations are also called Allen&#x2019;s interval algebra. There are totally 13 base relations described by this algebra, and all of them are supported in AsterixDB (note that <tt>interval-equals</tt> is supported by the <tt>=</tt> comparison symbol so there is no extra function for it). </p>
<p>A detailed description of Allen&#x2019;s relations can be found from its <a class="externalLink" href="http://en.wikipedia.org/wiki/Allen&apos;s_interval_algebra">wikipedia entry</a>. </p></div>
<div class="section">
<h2><a name="Allens_Relations_Functions_Back_to_TOC"></a><a name="AllensRelatonsFunctions" id="AllensRelatonsFunctions">Allen&#x2019;s Relations Functions</a> <font size="4"><a href="#toc">[Back to TOC]</a></font></h2>
<div class="section">
<h3><a name="interval-before_interval-after"></a>interval-before, interval-after</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>interval-before(interval1, interval2)
interval-after(interval1, interval2)
</pre></div></div></li>
  
<li>
<p>These two functions check whether an interval happens before/after another interval. </p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>interval1</tt>, <tt>interval2</tt>: two intervals to be compared</li>
  </ul></li>
  
<li>
<p>Return Value:</p>
<p>A <tt>boolean</tt> value. Specifically, <tt>interval-before(interval1, interval2)</tt> is true if and only if <tt>interval1.end &lt; interval2.start</tt>, and <tt>interval-after(interval1, interval2)</tt> is true if and only if <tt>interval1.start &gt; interval2.end</tt>. If any of the two inputs is <tt>null</tt>, <tt>null</tt> is returned.</p></li>
  
<li>
<p>Examples:</p>
  
<div class="source">
<div class="source">
<pre>let $itv1 := interval-from-date(&quot;2000-01-01&quot;, &quot;2005-01-01&quot;)
let $itv2 := interval-from-date(&quot;2005-05-01&quot;, &quot;2012-09-09&quot;)
return {&quot;interval-before&quot;: interval-before($itv1, $itv2), &quot;interval-after&quot;: interval-after($itv2, $itv1)}
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;interval-before&quot;: true, &quot;interval-after&quot;: true }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="interval-covers_interval-covered-by"></a>interval-covers, interval-covered-by</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>interval-covers(interval1, interval2)
interval-covered-by(interval1, interval2)
</pre></div></div></li>
  
<li>
<p>These two functions check whether one interval covers the other interval.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>interval1</tt>, <tt>interval2</tt>: two intervals to be compared</li>
  </ul></li>
  
<li>
<p>Return Value:</p>
<p>A <tt>boolean</tt> value. Specifically, <tt>interval-covers(interval1, interval2)</tt> is true if and only if</p>
  
<div class="source">
<div class="source">
<pre>interval1.start &lt;= interval2.start
AND interval1.end &gt;= interval2.end
</pre></div></div>
<p><tt>interval-covered-by(interval1, interval2)</tt> is true if and only if</p>
  
<div class="source">
<div class="source">
<pre>interval2.start &lt;= interval1.start
AND interval2.end &gt;= interval1.end
</pre></div></div>
<p>For both functions, if any of the two inputs is <tt>null</tt>, <tt>null</tt> is returned.</p></li>
  
<li>
<p>Examples:</p>
  
<div class="source">
<div class="source">
<pre>let $itv1 := interval-from-date(&quot;2000-01-01&quot;, &quot;2005-01-01&quot;)
let $itv2 := interval-from-date(&quot;2000-03-01&quot;, &quot;2004-09-09&quot;)
let $itv3 := interval-from-date(&quot;2006-08-01&quot;, &quot;2007-03-01&quot;)
let $itv4 := interval-from-date(&quot;2004-09-10&quot;, &quot;2012-08-01&quot;)
return {&quot;interval-covers&quot;: interval-covers($itv1, $itv2), &quot;interval-covered-by&quot;: interval-covered-by($itv3, $itv4)}
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;interval-covers&quot;: true, &quot;interval-covered-by&quot;: true }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="interval-overlaps_interval-overlapped-by"></a>interval-overlaps, interval-overlapped-by</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>interval-overlaps(interval1, interval2)
interval-overlapped-by(interval1, interval2)
</pre></div></div></li>
  
<li>
<p>These functions check whether two intervals overlap with each other.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>interval1</tt>, <tt>interval2</tt>: two intervals to be compared</li>
  </ul></li>
  
<li>
<p>Return Value:</p>
<p>A <tt>boolean</tt> value. Specifically, <tt>interval-overlaps(interval1, interval2)</tt> is true if and only if</p>
  
<div class="source">
<div class="source">
<pre>interval1.start &lt; interval2.start
AND interval2.end &gt; interval1.end
AND interval1.end &gt; interval2.start
</pre></div></div>
<p><tt>interval-overlapped-by(interval1, interval2)</tt> is true if and only if</p>
  
<div class="source">
<div class="source">
<pre>interval2.start &lt; interval1.start
AND interval1.end &gt; interval2.end
AND interval2.end &gt; interval1.start
</pre></div></div>
<p>For all these functions, if any of the two inputs is <tt>null</tt>, <tt>null</tt> is returned.</p>
<p>Note that <tt>interval-overlaps</tt> and <tt>interval-overlapped-by</tt> are following the Allen&#x2019;s relations on the definition of overlap.</p></li>
  
<li>
<p>Examples:</p>
  
<div class="source">
<div class="source">
<pre>let $itv1 := interval-from-date(&quot;2000-01-01&quot;, &quot;2005-01-01&quot;)
let $itv2 := interval-from-date(&quot;2004-05-01&quot;, &quot;2012-09-09&quot;)
let $itv3 := interval-from-date(&quot;2006-08-01&quot;, &quot;2007-03-01&quot;)
let $itv4 := interval-from-date(&quot;2004-09-10&quot;, &quot;2006-12-31&quot;)
return {&quot;overlaps&quot;: interval-overlaps($itv1, $itv2), 
        &quot;overlapped-by&quot;: interval-overlapped-by($itv3, $itv4)}
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;overlaps&quot;: true, &quot;overlapped-by&quot;: true }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="interval-overlapping"></a>interval-overlapping</h3>
<p>Note that <tt>interval-overlapping</tt> is not an Allen&#x2019;s Relation, but syntactic sugar we added for the case that the intersect of two intervals is not empty. Basically this function returns true if any of these functions return true: <tt>interval-overlaps</tt>, <tt>interval-overlapped-by</tt>, <tt>interval-covers</tt>, or <tt>interval-covered-by</tt>.</p>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>interval-overlapping(interval1, interval2)
</pre></div></div></li>
  
<li>
<p>This functions check whether two intervals share any points with each other. </p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>interval1</tt>, <tt>interval2</tt>: two intervals to be compared</li>
  </ul></li>
  
<li>
<p>Return Value:</p>
<p>A <tt>boolean</tt> value. Specifically, <tt>interval-overlapping(interval1, interval2)</tt> is true if</p>
  
<div class="source">
<div class="source">
<pre>(interval2.start &gt;= interval1.start
AND interval2.start &lt; interval1.end)
OR
(interval2.end &gt; interval1.start
AND interval2.end &lt;= interval1.end)
</pre></div></div>
<p>If any of the two inputs is <tt>null</tt>, <tt>null</tt> is returned.</p></li>
  
<li>
<p>Examples:</p>
  
<div class="source">
<div class="source">
<pre>let $itv1 := interval-from-date(&quot;2000-01-01&quot;, &quot;2005-01-01&quot;)
let $itv2 := interval-from-date(&quot;2004-05-01&quot;, &quot;2012-09-09&quot;)
let $itv3 := interval-from-date(&quot;2006-08-01&quot;, &quot;2007-03-01&quot;)
let $itv4 := interval-from-date(&quot;2004-09-10&quot;, &quot;2006-12-31&quot;)
return {&quot;overlapping1&quot;: interval-overlapping($itv1, $itv2), 
        &quot;overlapping2&quot;: interval-overlapping($itv3, $itv4)}
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;overlapping1&quot;: true, &quot;overlapping2&quot;: true }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="interval-meets_interval-met-by"></a>interval-meets, interval-met-by</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>interval-meets(interval1, interval2)
interval-met-by(interval1, interval2)
</pre></div></div></li>
  
<li>
<p>These two functions check whether an interval meets with another interval. </p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>interval1</tt>, <tt>interval2</tt>: two intervals to be compared</li>
  </ul></li>
  
<li>
<p>Return Value:</p>
<p>A <tt>boolean</tt> value. Specifically, <tt>interval-meets(interval1, interval2)</tt> is true if and only if <tt>interval1.end = interval2.start</tt>, and <tt>interval-met-by(interval1, interval2)</tt> is true if and only if <tt>interval1.start = interval2.end</tt>. If any of the two inputs is <tt>null</tt>, <tt>null</tt> is returned.</p></li>
  
<li>
<p>Examples:</p>
  
<div class="source">
<div class="source">
<pre>let $itv1 := interval-from-date(&quot;2000-01-01&quot;, &quot;2005-01-01&quot;)
let $itv2 := interval-from-date(&quot;2005-01-01&quot;, &quot;2012-09-09&quot;)
let $itv3 := interval-from-date(&quot;2006-08-01&quot;, &quot;2007-03-01&quot;)
let $itv4 := interval-from-date(&quot;2004-09-10&quot;, &quot;2006-08-01&quot;)
return {&quot;meets&quot;: interval-meets($itv1, $itv2), &quot;metby&quot;: interval-met-by($itv3, $itv4)}
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;meets&quot;: true, &quot;metby&quot;: true }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="interval-starts_interval-started-by"></a>interval-starts, interval-started-by</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>interval-starts(interval1, interval2)
interval-started-by(interval1, interval2)
</pre></div></div></li>
  
<li>
<p>These two functions check whether one interval starts with the other interval.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>interval1</tt>, <tt>interval2</tt>: two intervals to be compared</li>
  </ul></li>
  
<li>
<p>Return Value:</p>
<p>A <tt>boolean</tt> value. Specifically, <tt>interval-starts(interval1, interval2)</tt> returns true if and only if</p>
  
<div class="source">
<div class="source">
<pre>interval1.start = interval2.start
AND interval1.end &lt;= interval2.end
</pre></div></div>
<p><tt>interval-started-by(interval1, interval2)</tt> returns true if and only if</p>
  
<div class="source">
<div class="source">
<pre>interval1.start = interval2.start
AND interval2.end &lt;= interval1.end
</pre></div></div>
<p>For both functions, if any of the two inputs is <tt>null</tt>, <tt>null</tt> is returned.</p></li>
  
<li>
<p>Examples:</p>
  
<div class="source">
<div class="source">
<pre>let $itv1 := interval-from-date(&quot;2000-01-01&quot;, &quot;2005-01-01&quot;)
let $itv2 := interval-from-date(&quot;2000-01-01&quot;, &quot;2012-09-09&quot;)
let $itv3 := interval-from-date(&quot;2006-08-01&quot;, &quot;2007-03-01&quot;)
let $itv4 := interval-from-date(&quot;2006-08-01&quot;, &quot;2006-08-01&quot;)
return {&quot;interval-starts&quot;: interval-starts($itv1, $itv2), &quot;interval-started-by&quot;: interval-started-by($itv3, $itv4)}
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;interval-starts&quot;: true, &quot;interval-started-by&quot;: true }
</pre></div></div></li>
</ul></div>
<div class="section">
<h3><a name="interval-ends_interval-ended-by"></a>interval-ends, interval-ended-by</h3>

<ul>
  
<li>
<p>Syntax:</p>
  
<div class="source">
<div class="source">
<pre>interval-ends(interval1, interval2)
interval-ended-by(interval1, interval2)
</pre></div></div></li>
  
<li>
<p>These two functions check whether one interval ends with the other interval.</p></li>
  
<li>Arguments:
  
<ul>
    
<li><tt>interval1</tt>, <tt>interval2</tt>: two intervals to be compared</li>
  </ul></li>
  
<li>
<p>Return Value:</p>
<p>A <tt>boolean</tt> value. Specifically, <tt>interval-ends(interval1, interval2)</tt> returns true if and only if</p>
  
<div class="source">
<div class="source">
<pre>interval1.end = interval2.end
AND interval1.start &gt;= interval2.start
</pre></div></div>
<p><tt>interval-ended-by(interval1, interval2)</tt> returns true if and only if</p>
  
<div class="source">
<div class="source">
<pre>interval2.end = interval1.end
AND interval2.start &gt;= interval1.start
</pre></div></div>
<p>For both functions, if any of the two inputs is <tt>null</tt>, <tt>null</tt> is returned.</p></li>
  
<li>
<p>Examples:</p>
  
<div class="source">
<div class="source">
<pre>let $itv1 := interval-from-date(&quot;2000-01-01&quot;, &quot;2005-01-01&quot;)
let $itv2 := interval-from-date(&quot;1998-01-01&quot;, &quot;2005-01-01&quot;)
let $itv3 := interval-from-date(&quot;2006-08-01&quot;, &quot;2007-03-01&quot;)
let $itv4 := interval-from-date(&quot;2006-09-10&quot;, &quot;2007-03-01&quot;)
return {&quot;interval-ends&quot;: interval-ends($itv1, $itv2), &quot;interval-ended-by&quot;: interval-ended-by($itv3, $itv4) }
</pre></div></div></li>
  
<li>
<p>The expected result is:</p>
  
<div class="source">
<div class="source">
<pre>{ &quot;interval-ends&quot;: true, &quot;interval-ended-by&quot;: true }
</pre></div></div></li>
</ul></div></div>
                  </div>
            </div>
          </div>

    <hr/>

    <footer>
            <div class="container-fluid">
              <div class="row span12">Copyright &copy;                    2015
                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
            All Rights Reserved.      
                    
      </div>

                                                                  <?xml version="1.0" encoding="UTF-8"?>
<div class="row-fluid">Apache AsterixDB, AsterixDB, Apache, the Apache
        feather logo, and the Apache AsterixDB project logo are either
        registered trademarks or trademarks of The Apache Software
        Foundation in the United States and other countries.
        All other marks mentioned may be trademarks or registered
        trademarks of their respective owners.</div>
                  
        
                </div>
    </footer>
  </body>
</html>
