📄 db_fifo.sgml
字号:
<!-- <!DOCTYPE Book PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [ ]> --><chapter><title>Database FIFO interface</title><section> <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> <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> <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 the content (\n or \r characters must be escaped) of a BLOB value is restricted. </para></section><section> <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 format="linespecific">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 format="linespecific">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> <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. <section> <title><function moreinfo="none">SELECT</function> command</title> <para> This function implements SELECT DB directive. Its syntax is: <programlisting format="linespecific">:DB:reply_fifo_fileselect[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> <title><function moreinfo="none">INSERT</function> command</title> <para> This function implements INSERT DB directive - inserts one row in a table. Its syntax is: <programlisting format="linespecific">:DB:reply_fifo_fileinsertTABLE_NAME[EQUAL_CVP]+. </programlisting> </para> <para> Command returns nothing if success or, other way, an error message. </para> </section> <section> <title><function moreinfo="none">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 format="linespecific">:DB:reply_fifo_fileupdate[EQUAL_CVP]+.TABLE_NAME[CVP]*. </programlisting> </para> <para> Command returns nothing if success or, other way, an error message. </para> </section> <section> <title><function moreinfo="none">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 format="linespecific">:DB:reply_fifo_filedeleteTABLE_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> <title><function moreinfo="none">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 format="linespecific">:DB:reply_fifo_fileraw_query(ASCII)+ </programlisting> </para> <para> Command returns nothing if success or, other way, an error message. </para> </section> <section> <title> <function moreinfo="none">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 format="linespecific">:DB:reply_fifo_fileraw_query_res(ASCII)+ </programlisting> </para> <para> Command's output format is identical with the one from <function moreinfo="none">SELECT</function> command. </para> </section></section><section> <title>DB FIFO grammar</title> <programlisting format="linespecific">COLUMN=(alfa-numeric|'_')+GAP=' '|'\t'DEF_OP='='|'<'|'>'|'>='|'<='UNDEF_OP=(ASCII)+CAST_OP="int"|"double"|"string"|"date"|"blob"|"bitmap"INT_VAL=integer numberDOUBLE_VAL=float numberSTRING_VAL='"' ASCII* '"'DATE_VAL='<' YEAR '-' MONTH '-' DAY ' ' HOUR ':' MINS ':' SECS '>'BLOB_VAL=STRING_VALBITMAP_VAL=INT_VALNULL_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></chapter>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -