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 module defines a set of functions to manage integrity constraints
 : which are declared in the prolog of a module.
 : For example, it provides functions to activate or deactivate integrity constraints.
 :
 : <p>This module is part of <a href="../../html/xqddf.html">Zorba's XQuery Data
 : Definition Facility</a>. All the integrity constraints 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/collections/dml
 : @see http://www.zorba-xquery.com/modules/store/static/collections/ddl
 : @see http://www.zorba-xquery.com/modules/store/static/indexes/ddl
 : @see http://www.zorba-xquery.com/modules/store/static/indexes/dml
 : @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/integrity constraints/static
 :
 :)
module namespace icddl = "http://www.zorba-xquery.com/modules/store/static/integrity_constraints/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 integrity constraints with the given
 : QName is activated.
 :
 : @param $name The QName of the constraint that is being checked.
 :
 : @return true if the integrity constraint has is activated and false otherwise.
 :)
declare function icddl:is-activated-integrity-constraint(
  $name as xs:QName) as xs:boolean external;

(:~
 : The function returns a sequence of QNames representing the integrity 
 : constraints that are activated. The sequence will be empty if there are 
 : none.
 :
 : @return A sequence of QNames, one for each activated integrity constraint,
 :         or an empty sequence.
 :)
declare function icddl:activated-integrity-constraints() as xs:QName*  external;


(:~
 : The activate function is an updating function
 : that activates the integrity constraint identified by the expanded QName
 : $name in the dynamic context.
 :
 : @param $name The QName of the integrity constraint to activate.
 : @return The result of the function is an empty XDM instance and a
 :         pending update list that consists of a
 :         upd:activateIntegrityConstraint($name) update primitive.
 :
 : @error zerr:ZDDY0031 if available integrity constraints in the static context
 :        does not provide a mapping for the expanded QName $name.
 :)
declare updating function icddl:activate(
  $name as xs:QName)  external;

(:~
 : The deactivate function is an updating function that
 : deactivates the integrity constraint with the given QName.
 :
 : @param $name The QName of the integrity constraint to deactivate.
 :
 : @return The result of the function is an empty XDM instance and a
 :         pending update list which, once applied, deactivates the
 :         integrity constraint.
 :
 : @error zerr:ZDDY0032 if the integrity constraints is not declared in the
 :        the static context.
 : @error zerr:ZDDY0032 if the given integrity constraints is not activated.
 :)
declare updating function icddl:deactivate(
  $name as xs:QName)  external;

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

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