123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
- <section id="db_fifo" xmlns:xi="http://www.w3.org/2001/XInclude">
- <sectioninfo>
- <revhistory>
- <revision>
- <revnumber>$Revision$</revnumber>
- <date>$Date$</date>
- </revision>
- </revhistory>
- </sectioninfo>
- <title>Database FIFO interface</title>
- <section id="db_fifo_intro">
- <title>Introduction</title>
- <para>
- <application>SER</application> offers to its module developers a common
- DataBase(DB) interface, disregarding the database implementation (mysql,
- dbtext or postgres) that lays beneath it.
- </para>
- <para>
- This feature is now extended and offered also to the
- <application>SER</application> users/administrators by DataBase
- <acronym>FIFO</acronym> Interface (or DB FIFO interface). So,
- DB FIFO interface is an extension of the internal DB interface through the
- FIFO server. Everybody from outside <application>SER</application> can
- operate SER's database (for adding/removing users, for manipulating
- aliases, access control wrights, etc) using the same FIFO commands
- without caring about the database type that's used by SER.
- </para>
- </section>
- <section id="advantages">
- <title>Advantages</title>
- <para>
- All external applications that need to work with SER's database (like
- <application>serctl</application> or <application>serweb</application>)
- can do so via DB FIFO interface without depending of a specific database
- driver. No modifications will be required when a new type of database
- will be added to <application>SER</application>.
- </para>
- <para>
- Also, this approach, prevents any kind of confusion between the database
- type used by <application>SER</application> and the one used by these
- external applications. They will use automatically the same database as
- <application>SER</application> is configure to use.
- </para>
- </section>
-
- <section id="limitations">
- <title>Limitations</title>
- <para>
- DB FIFO interface is restricted to the limitation of the internal DB
- interface.
- </para>
- <para>
- Also the size (can fit on only one line) and the content (\n or \r
- characters must be escaped) of a BLOB value is restricted.
- </para>
- </section>
- <section id="db_fifo_config">
- <title>Configuration</title>
- <para>
- FIFO server presents is required, so configure in your config file the FIFO
- file to be used by the <application>SER</application> FIFO server:
- <programlisting>
- fifo="/tmp/ser_fifo"
- </programlisting>
- To enable the DB FIFO interface, it's required to load at least one
- database module (available for the moment are mysql, dbtext and postgres).
- </para>
- <para>
- The database module that you want to use and the database configuration are
- configured via parameter <varname>fifo_db_url</varname>:
- <programlisting>
- fifo_db_url="mysql:mysql_url"
- fifo_db_url="dbtext:dbtext_url"
- </programlisting>
- The format of the database URL depends of the used database implementation
- (see the documentation for each DB type).
- </para>
- <para><emphasis>
- NOTE: be sure to load the module the is specified into fifo_db_url!
- </emphasis></para>
- <para>
- If no fifo_db_url is specified or no appropriate DB module found, the
- DB FIFO interface will be disabled.
- </para>
- </section>
- <section id="db_fifo_commands">
- <title>DB FIFO commands</title>
- <para>
- From FIFO point of view, all DB FIFO commands are mapped with the
- same name: <emphasis>DB</emphasis>. The first line of the command must
- contain the name of the DB command. Available are:
- <itemizedlist>
- <listitem>
- <para>SELECT</para>
- </listitem>
- <listitem>
- <para>UPDATE</para>
- </listitem>
- <listitem>
- <para>INSERT</para>
- </listitem>
- <listitem>
- <para>DELETE</para>
- </listitem>
- <listitem>
- <para>RAW_QUERY</para>
- </listitem>
- <listitem>
- <para>EAW_QUERY_RES</para>
- </listitem>
- </itemizedlist>
- The grammar used in the commands definition can be found in next
- section "DB FIFO grammar". The presence of the
- <varname>reply_fifo_file</varname> in the FIFO command is
- <emphasis>required</emphasis> for all commands.
- </para>
- <section>
- <title><function>SELECT</function> command</title>
- <para>
- This function implements SELECT DB directive. Its syntax is:
- <programlisting>
- :DB:reply_fifo_file
- select
- [COLUMN]*
- .
- TABLE_NAME
- [CVP]
- .
- </programlisting>
- If no CVP line is present, the whole table.will be returned. If no
- COLUMN line is given, all table columns will be found in the result.
- </para>
- <para>
- The result of the query will be return via reply_fifo_file in one
- raw per line format (only requested columns), the first line being
- the head of the table. The <emphasis>NULL</emphasis> values will be
- printed as "NULL".
- </para>
- </section>
- <section id="insert">
- <title><function>INSERT</function> command</title>
- <para>
- This function implements INSERT DB directive - inserts one row in
- a table. Its syntax is:
- <programlisting>
- :DB:reply_fifo_file
- insert
- TABLE_NAME
- [EQUAL_CVP]+
- .
- </programlisting>
- </para>
- <para>
- Command returns nothing if success or, other way, an error message.
- </para>
- </section>
- <section id="update">
- <title><function>UPDATE</function> command</title>
- <para>
- The function implements UPDATE DB directive - it is possible to
- modify one or more rows in a table. Its syntax is:
- <programlisting>
- :DB:reply_fifo_file
- update
- [EQUAL_CVP]+
- .
- TABLE_NAME
- [CVP]*
- .
- </programlisting>
- </para>
- <para>
- Command returns nothing if success or, other way, an error message.
- </para>
- </section>
- <section id="delete">
- <title><function>DELETE</function> command</title>
- <para>
- This function implements DELETE DB directive - it is possible to
- delete one or more rows from a table. Its syntax is:
- <programlisting>
- :DB:reply_fifo_file
- delete
- TABLE_NAME
- [CVP]*
- .
- </programlisting>
- If CVP list contain <emphasis>no lines, all rows will be
- deleted</emphasis> (table will be empty).
- </para>
- <para>
- Command returns nothing if success or, other way, an error message.
- </para>
- </section>
- <section id="raw_query">
- <title><function>RAW_QUERY</function> command</title>
- <para>
- This function sends a raw query directly to the database driver
- without trying to understand the command. This command <emphasis>MUST
- NOT</emphasis> generate any response.Otherwise, the database driver
- can block or desynchronize (depending of the driver).
- Its syntax is:
- <programlisting>
- :DB:reply_fifo_file
- raw_query
- (ASCII)+
- </programlisting>
- </para>
- <para>
- Command returns nothing if success or, other way, an error message.
- </para>
- </section>
- <section id="raw_query_res">
- <title>
- <function>RAW_QUERY_RES</function> command
- </title>
- <para>
- This function sends a raw query directly to the database driver without
- trying to understand the command. This command <emphasis>MUST
- </emphasis> generate an response (even if an empty one). Otherwise,
- the database driver can block or desynchronize (depending of the
- driver). Its syntax is:
- <programlisting>
- :DB:reply_fifo_file
- raw_query_res
- (ASCII)+
- </programlisting>
- </para>
- <para>
- Command's output format is identical with the one from
- <function>SELECT</function> command.
- </para>
- </section>
- </section>
- <section id="db_fifo_grammar">
- <title>DB FIFO grammar</title>
- <programlisting>
- <![CDATA[
- COLUMN=(alfa-numeric|'_')+
- GAP=' '|'\t'
- DEF_OP='='|'<'|'>'|'>='|'<='
- UNDEF_OP=(ASCII)+
- CAST_OP="int"|"double"|"string"|"date"|"blob"|"bitmap"
- INT_VAL=integer number
- DOUBLE_VAL=float number
- STRING_VAL='"' ASCII* '"'
- DATE_VAL='<' YEAR '-' MONTH '-' DAY ' ' HOUR ':' MINS ':' SECS '>'
- BLOB_VAL=STRING_VAL
- BITMAP_VAL=INT_VAL
- NULL_VAL="null"
- VALUE=('['CAST_OP']')?(INT_VAL|DOUBLE_VAL|STRING_VAL|DATE_VAL|
- BLOB_VAL|BITMAP_VAL|NULL_VAL)
- CVP(column-value-pair)=
- (COLUMN GAP* DEF_OP GAP* VALUE) | (COLUMN GAP+ UNDEF_OP GAP+ VALUE)
- EQUAL-CVP(column-equal-value-pair)=
- (COLUMN GAP* '=' GAP* VALUE)
- ]]>
- </programlisting>
- </section>
- </section>
|