xquery version "3.0";

(:
 : Copyright 2006-2009 The FLWOR Foundation.
 :
 : Licensed 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.
:)

(:~
 : This modules defines a set of functions for managing indexes which are
 : declared in the prolog of a module.
 :
 : <p>This module is part of <a href="../../html/xqddf.html">Zorba's XQuery Data
 : Definition Facility</a>. All the indexes managed by this module
 : have to be pre-declared in the prolog of a module. Please refer to the
 : <a href="../../html/data_lifecycle.html">general documentation</a>
 : for more information and examples.</p>
 :
 : @see <a href="../../html/data_lifecycle.html">Data Lifecycle</a>
 : @see <a href="../../html/xqddf.html">XQuery Data Definition Facility</a>
 : @see http://www.zorba-xquery.com/modules/store/static/indexes/dml
 : @see http://www.zorba-xquery.com/modules/store/static/collections/dml
 : @see http://www.zorba-xquery.com/modules/store/static/collections/ddl
 : @see http://www.zorba-xquery.com/modules/store/static/integrity_constraints/ddl
 : @see http://www.zorba-xquery.com/modules/store/static/integrity_constraints/dml
 : @see <a href="www.zorba-xquery.com_errors.html">http://www.zorba-xquery.com/errors</a>
 :
 : @author Nicolae Brinza, Matthias Brantner, David Graf, Till Westmann, Markos Zaharioudakis
 :
 : @project store/indexes/static
 :
 :)
module namespace iddl = "http://www.zorba-xquery.com/modules/store/static/indexes/ddl";

declare namespace zerr = "http://www.zorba-xquery.com/errors";
declare namespace ver = "http://www.zorba-xquery.com/options/versioning";
declare option ver:module-version "2.0";

(:~
 : The function returns true if an index with the given QName is available.
 : (i.e. has been created).
 :
 : @param $name The QName of the index that is being checked.
 :
 : @return true if the index is available and false otherwise.
 :)
declare function iddl:is-available-index($name as xs:QName) as xs:boolean external;

(:~
 : The function returns a sequence of QNames representing the indexes that are
 : available. The sequence will be empty if there are no indexes.
 :
 : @return A sequence of QNames, one for each available index, or an empty
 : sequence if none are.
 :)
declare function iddl:available-indexes() as xs:QName* external;

(:~
 : The create function is an updating function which creates the
 : index with the given expanded QName and populates the index with its
 : values.
 :
 : @param $name The QName of the index to create.
 :
 : @return The result of the function is an empty XDM instance and a pending
 :         update list which, once applied, creates the index with the given
 :         name.
 :
 : @error zerr:ZDDY0021 if the expanded QName of $name is not equal  
 :        to the name of any resource in the statically known indexes.
 : @error zerr:ZDDY0022 if the index with the given name is already created.
 :)
declare updating function iddl:create(
  $name as xs:QName)  external;

(:~
 : The delete function is an updating function that deletes
 : the index with the given expanded QName.
 :
 : @param $name The QName of the index to delete.
 :
 : @return The result of the function is an empty XDM instance and a pending
 :         update list which, once applied, deletes the index with the given name.
 :
 : @error zerr:ZDDY0009 If available indexes does not provide a mapping for
 :        the expanded QName $name.
 :
 :)
declare updating function iddl:delete(
  $name as xs:QName)  external;

(:~
 : The function returns true if a index with the given
 : QName is declared in the prolog of the static context.
 :
 : @param $name The QName of the index that is being checked.
 :
 : @return true if the index is declared or false otherwise.
 :)
declare function iddl:is-declared-index(
  $name as xs:QName) as xs:boolean  external;

(:~
 : The function returns a sequence of QNames representing the indexes that have
 : been declared in the prolog of the static context.
 :
 : @return A sequence of QNames, one for each created collection, or an emtpy sequence.
 :)
declare function iddl:declared-indexes() as xs:QName*  external;