<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia at 2016-03-25
 | 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="20160325" />
    <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>

                          
        

          
            </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: 2016-03-25</li>
                      
                
                    
                 <li id="projectVersion" class="pull-right">Version: 0.8.8-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/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;                    2016
                        <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>
