In XSQL, when an XML file is processed it evaluates its validity and creates a DOM
structure. This DOM structure should contain an xSQL script type root node.
1 Access to DBStudio Tool
To run examples and become comfortable with the language, the user can use the Axional DBStudio tool
.
- Connect to operating system and select the DBStudio tool.
- Select a database.

2 Main Function Body (Script)
In XSQL, the declaration of a function is included within the tag XSQL-script and the body of the function within the tag body.
<xsql-script> <body> <println>Hello world</println> </body> </xsql-script>
Hello world
3 Arguments
Arguments are within tag args. An argument is visible in a function through its own tag name.
<xsql-script> <args> <arg name='p_name' /> </args> <body> <println>Hello world <p_name /></println> </body> </xsql-script>
4 Functions
Frequently, for organization and code structure reasons, the content of code can be split up into different subroutines. These can be nested inside the same function, but they must be declared before using.
<xsql-script> <body> <function name='f_md5'> <args> <arg name='p_text' /> </args> <body> <return><crypt.digest.md5><p_text /></crypt.digest.md5></return> </body> </function> <println>MD5:<f_md5>A text</f_md5></println> </body> </xsql-script>
MD5:352AEC79F1EE5D5DE48EF7B0F14AC4A2
The same function can include other functions.
5 Calls to External Scripts
The application contains different scripts that can be used globally by different programs.
- If files are being used as a program base, script code is declared in a document with a specific name.
- If dictionaries are being used as a program base, a script entry called (wic_xsql_scripts) will be created.
The tag <call name='script' > is used in the same cases, as the loader which resolves the need to load an XML file with the indicated name or by accessing a wic_xsql_scripts entry.
In order to call the function when we have an f_md5.xml file or equivalent in the database, the following applies:
<xsql-script> <body> <println>MD5:<call name='f_md5'>A text</call></println> </body> </xsql-script>
MD5:352AEC79F1EE5D5DE48EF7B0F14AC4A2
6 Script Output
Scripts generate standard (stdout) outputs and (stderr) errors to the device predetermined by the person initiating.
- For scripts initiated from
WEB Application
, the output is addressed to the server log. - For scripts initiated from
DBStudio
services,SOAP
orREST
, the output is redirected to memory streams to be returned as an execution result.Service scripts
In this last case, the streams are limited to 1MB, so if the user attempts to issue output above this limit, the program will be interrupted. This measure is a form of protection against badly designed programs or loops causing memory usage that would compromise the system.
6.1 Example from DBStudio
If the following script is executed from DBStudio
utility, it will be stopped by the interpreter for memory abuse in output streams, producing an exception similar to the one shown in the example.
<xsql-script> <body> <while> <expr> <true /> </expr> <do> <println>This produces a lot of messages to stdout</println> </do> </while> </body> </xsql-script>
Trace:
<STACKTRACE>
error : java.lang.RuntimeException: exceeded content-length limit of 1048576 bytes
server : 192.168.10.14 (web1)
calltree : <embed>
function : <embed>
date : Thu May 25 07:53:19 CEST 2017
jobid : 301
user : pcc
dbms : demo_rdmaint2
dict :
tag : println
line : 15
code :
<do>
<println>this is a long message to stdout</println>
</do>
cause :
deister.webstudio.core.xsql.script.XSQLScriptException: java.lang.RuntimeException: exceeded content-length limit of 1048576 bytes