File: createfunction.xml

package info (click to toggle)
php-doc 20241205~git.dfcbb86%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 70,956 kB
  • sloc: xml: 968,269; php: 23,883; javascript: 671; sh: 177; makefile: 37
file content (183 lines) | stat: -rw-r--r-- 5,776 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
<?xml version="1.0" encoding="utf-8"?>
<refentry xml:id="pdo-sqlite.createfunction" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
 <refnamediv>
  <refname>Pdo\Sqlite::createFunction</refname>
  <refpurpose>
   Registers a user-defined function for use in SQL statements
  </refpurpose>
 </refnamediv>

 <refsect1 role="description">
  &reftitle.description;
  <methodsynopsis role="Pdo\\Sqlite">
   <modifier>public</modifier> <type>bool</type><methodname>Pdo\Sqlite::createFunction</methodname>
   <methodparam><type>string</type><parameter>function_name</parameter></methodparam>
   <methodparam><type>callable</type><parameter>callback</parameter></methodparam>
   <methodparam choice="opt"><type>int</type><parameter>num_args</parameter><initializer>-1</initializer></methodparam>
   <methodparam choice="opt"><type>int</type><parameter>flags</parameter><initializer>0</initializer></methodparam>
  </methodsynopsis>
  <simpara>
   This method allows PHP function to be registered with SQLite as a
   user-defined function, so that it can be called within SQL queries.
   The defined function can be used in any SQL query that allows function calls,
   for example <literal>SELECT</literal>, <literal>UPDATE</literal>, or triggers.
  </simpara>
  <tip>
   <simpara>
    By using this method it is possible to override native SQL functions.
   </simpara>
  </tip>
 </refsect1>

 <refsect1 role="parameters">
  &reftitle.parameters;
  <variablelist>
   <varlistentry>
    <term><parameter>function_name</parameter></term>
    <listitem>
     <simpara>
      The name of the function used in SQL statements.
     </simpara>
    </listitem>
   </varlistentry>
   <varlistentry>
    <term><parameter>callback</parameter></term>
    <listitem>
     <simpara>
      Callback function to handle the defined SQL function.
     </simpara>
     <note>
      <simpara>
       Callback functions should return a type understood by SQLite (i.e.
       <link linkend="language.types.intro">scalar type</link>).
      </simpara>
     </note>
     <para>
      This function need to be defined as:
      <methodsynopsis>
       <type>mixed</type><methodname><replaceable>callback</replaceable></methodname>
       <methodparam><type>mixed</type><parameter>value</parameter></methodparam>
       <methodparam rep="repeat"><type>mixed</type><parameter>values</parameter></methodparam>
      </methodsynopsis>
      <variablelist>
       <varlistentry>
        <term><parameter>value</parameter></term>
        <listitem>
         <para>
          The first argument passed to the SQL function.
         </para>
        </listitem>
       </varlistentry>
       <varlistentry>
        <term><parameter>values</parameter></term>
        <listitem>
         <para>
          Further arguments passed to the SQL function.
         </para>
        </listitem>
       </varlistentry>
      </variablelist>
     </para>
    </listitem>
   </varlistentry>
   <varlistentry>
    <term><parameter>num_args</parameter></term>
    <listitem>
     <simpara>
      The number of arguments that the SQL function takes.
      If this parameter is <literal>-1</literal>,
      then the SQL function may take any number of arguments.
     </simpara>
    </listitem>
   </varlistentry>
   <varlistentry>
    <term><parameter>flags</parameter></term>
    <listitem>
     <simpara>
      A bitmask of flags.
      Currently, only <constant>Pdo\Sqlite::DETERMINISTIC</constant> is supported,
      which specifies that the function always returns the same result given
      the same inputs within a single SQL statement.
     </simpara>
    </listitem>
   </varlistentry>
  </variablelist>
 </refsect1>

 <refsect1 role="returnvalues">
  &reftitle.returnvalues;
  <simpara>
   &return.success;
  </simpara>
 </refsect1>

 <refsect1 role="examples">
  &reftitle.examples;
  <example xml:id="pdo-sqlite.createfunction.example.basic">
   <title><methodname>Pdo\Sqlite::createFunction</methodname> example</title>
   <simpara>
    In this example, we have a function that calculates the SHA256 sum of a
    string, and then reverses it.  When the SQL statement executes, it
    returns the value of the filename transformed by our function.
    The data returned in <varname>$rows</varname> contains the processed result.
   </simpara>
   <simpara>
    The beauty of this technique is that there is no need to process the
    result using a &foreach; loop after the query.
   </simpara>
   <programlisting role="php">
<![CDATA[
<?php
function sha256_and_reverse($string)
{
    return strrev(hash('sha256', $string));
}

$db = new Pdo\Sqlite('sqlite::sqlitedb');
$db->sqliteCreateFunction('sha256rev', 'sha256_and_reverse', 1);
$rows = $db->query('SELECT sha256rev(filename) FROM files')->fetchAll();
?>
]]>
   </programlisting>
   <!-- TODO
   &example.outputs;
   <screen>
<![CDATA[
Code example
]]>
   </screen>
   -->
  </example>
 </refsect1>

 <refsect1 role="seealso">
  &reftitle.seealso;
  <simplelist>
   <member><methodname>Pdo\Sqlite::createAggregate</methodname></member>
   <member><methodname>Pdo\Sqlite::createCollation</methodname></member>
   <member><function>sqlite_create_function</function></member>
   <member><function>sqlite_create_aggregate</function></member>
  </simplelist>
 </refsect1>

</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->