dba/databases  library module
URA

Summary

Replace resource.
Authors
  • Christian Grün, BaseX Team 2005-23, BSD License
Related documents
ViewDescriptionFormat
xqdocxqDoc xml file from the source modulexml
xqparsexqparse xml file from the source modulexml

Imports

This module is imported by 0 modules. It imports 2 modules.

(None)
imports
dba/databases
imports
dba/html

Variables

3.1 $dba:CAT

Summary
Top category
Type
Source ( 1 lines)
variable $dba:CAT := 'databases'

3.2 $dba:SUB

Summary
Sub category
Type
Source ( 1 lines)
variable $dba:SUB := 'database'

Functions

4.1 dba:db-replace

Arities: #3RA

Summary
Form for putting replacing a resource.
Signatures
dba:db-replace ( $name as xs:string, $resource as xs:string, $error as xs:string? ) as element(html)
Parameters
  • name as xs:string database
  • resource as xs:string resource
  • error as xs:string? error string
Return
  • element(html) page
Invoked by 0 functions from 0 modules
    Annotations (6)
    %rest:GET()
    %rest:path('/dba/db-replace')
    %rest:query-param('name','{$name}')
    %rest:query-param('resource','{$resource}')
    %rest:query-param('error','{$error}')
    %output:method('html')
    Source ( 31 lines)
    function dba:db-replace(
      $name      as xs:string,
      $resource  as xs:string,
      $error     as xs:string?
    ) as element(html) {
      html:wrap(map { 'header': ($dba:CAT, $name), 'error': $error },
        <tr>
          <td>
            <form action='db-replace' method='post' enctype='multipart/form-data'>
              <input type='hidden' name='name' value='{ $name }'/>
              <input type='hidden' name='resource' value='{ $resource }'/>
              <h2>{
                html:link('Databases', $dba:CAT), ' » ',
                html:link($name, $dba:SUB, map { 'name': $name }), ' » ',
                html:link($resource, $dba:SUB, map { 'name': $name, 'resource': $resource }), ' » ',
                html:button('db-replace', 'Replace')
              }</h2>
              <table>
                <tr>
                  <td>
                    <input type='file' name='file'/>
                    { html:focus('file') }
                    <div class='small'/>
                  </td>
                </tr>
              </table>
            </form>
          </td>
        </tr>
      )
    }

    4.2 dba:db-replace-post

    Arities: #3UR

    Summary
    Replaces a resource in the database.
    Signatures
    dba:db-replace-post ( $name as xs:string, $resource as xs:string, $file as map(*)? ) as empty-sequence
    Parameters
    • name as xs:string database
    • resource as xs:string resource
    • file as map(*)? file input
    Return
    • empty-sequence redirection
    Invoked by 0 functions from 0 modules
      Annotations (6)
      %updating()
      %rest:POST()
      %rest:path('/dba/db-replace')
      %rest:form-param('name','{$name}')
      %rest:form-param('resource','{$resource}')
      %rest:form-param('file','{$file}')
      Source ( 26 lines)
      function dba:db-replace-post(
        $name      as xs:string,
        $resource  as xs:string,
        $file      as map(*)?
      ) as empty-sequence() {
        try {
          let $key := map:keys($file)
          return if($key = '') then (
            error((), 'No input specified.')
          ) else (
            let $input := if(db:type($name, $resource) = 'xml') then (
              fetch:binary-doc($file($key))
            ) else (
              $file($key)
            )
            return db:put($name, $input, $resource),
            util:redirect($dba:SUB, map {
              'name': $name, 'resource': $resource, 'info': 'Resource was replaced.'
            })
          )
        } catch * {
          util:redirect('db-replace', map {
            'name': $name, 'resource': $resource, 'error': $err:description
          })
        }
      }

      Namespaces

      The following namespaces are defined:

      PrefixUri
      dbhttp://basex.org/modules/db
      dbadba/databases 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
      errhttp://www.w3.org/2005/xqt-errors
      fetchhttp://basex.org/modules/fetch
      htmldba/html
      maphttp://www.w3.org/2005/xpath-functions/map
      outputhttp://www.w3.org/2010/xslt-xquery-serialization
      resthttp://exquery.org/ns/restxq
      utildba/util
      xshttp://www.w3.org/2001/XMLSchema

      6 RestXQ

      Paths defined 2.

      PathMethodFunction
      /dba/db-replaceGETdba:db-replace#3
      /dba/db-replacePOSTdba:db-replace-post#3

      Source Code

      (:~
       : Replace resource.
       :
       : @author Christian Grün, BaseX Team 2005-23, BSD License
       :)
      module namespace dba = 'dba/databases';
      
      import module namespace html = 'dba/html' at '../../lib/html.xqm';
      import module namespace util = 'dba/util' at '../../lib/util.xqm';
      
      (:~ Top category :)
      declare variable $dba:CAT := 'databases';
      (:~ Sub category :)
      declare variable $dba:SUB := 'database';
      
      (:~
       : Form for putting replacing a resource.
       : @param  $name      database
       : @param  $resource  resource
       : @param  $error     error string
       : @return page
       :)
      declare
        %rest:GET
        %rest:path('/dba/db-replace')
        %rest:query-param('name',     '{$name}')
        %rest:query-param('resource', '{$resource}')
        %rest:query-param('error',    '{$error}')
        %output:method('html')
      function dba:db-replace(
        $name      as xs:string,
        $resource  as xs:string,
        $error     as xs:string?
      ) as element(html) {
        html:wrap(map { 'header': ($dba:CAT, $name), 'error': $error },
          <tr>
            <td>
              <form action='db-replace' method='post' enctype='multipart/form-data'>
                <input type='hidden' name='name' value='{ $name }'/>
                <input type='hidden' name='resource' value='{ $resource }'/>
                <h2>{
                  html:link('Databases', $dba:CAT), ' » ',
                  html:link($name, $dba:SUB, map { 'name': $name }), ' » ',
                  html:link($resource, $dba:SUB, map { 'name': $name, 'resource': $resource }), ' » ',
                  html:button('db-replace', 'Replace')
                }</h2>
                <table>
                  <tr>
                    <td>
                      <input type='file' name='file'/>
                      { html:focus('file') }
                      <div class='small'/>
                    </td>
                  </tr>
                </table>
              </form>
            </td>
          </tr>
        )
      };
      
      (:~
       : Replaces a resource in the database.
       : @param  $name      database
       : @param  $resource  resource
       : @param  $file      file input
       : @return redirection
       :)
      declare
        %updating
        %rest:POST
        %rest:path('/dba/db-replace')
        %rest:form-param('name',     '{$name}')
        %rest:form-param('resource', '{$resource}')
        %rest:form-param('file',     '{$file}')
      function dba:db-replace-post(
        $name      as xs:string,
        $resource  as xs:string,
        $file      as map(*)?
      ) as empty-sequence() {
        try {
          let $key := map:keys($file)
          return if($key = '') then (
            error((), 'No input specified.')
          ) else (
            let $input := if(db:type($name, $resource) = 'xml') then (
              fetch:binary-doc($file($key))
            ) else (
              $file($key)
            )
            return db:put($name, $input, $resource),
            util:redirect($dba:SUB, map {
              'name': $name, 'resource': $resource, 'info': 'Resource was replaced.'
            })
          )
        } catch * {
          util:redirect('db-replace', map {
            'name': $name, 'resource': $resource, 'error': $err:description
          })
        }
      };