mirror of
https://github.com/php/doc-es.git
synced 2026-03-25 16:02:13 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@330805 c90b9560-bf6c-de11-be94-00142212c4b1
235 lines
8.2 KiB
XML
235 lines
8.2 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: 656d1610af1a960d87c8b7056e54d0d4c75fb123 Maintainer: seros Status: ready -->
|
|
<!-- Reviewed: no -->
|
|
<refentry xml:id="function.sqlite-create-aggregate" xmlns="http://docbook.org/ns/docbook">
|
|
<refnamediv>
|
|
<refname>sqlite_create_aggregate</refname>
|
|
<refname>SQLiteDatabase::createAggregate</refname>
|
|
<refpurpose>Registrar FDU totalizadora para usarla en sentencias SQL</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsect1 role="description">
|
|
&reftitle.description;
|
|
<methodsynopsis>
|
|
<type>void</type><methodname>sqlite_create_aggregate</methodname>
|
|
<methodparam><type>resource</type><parameter>dbhandle</parameter></methodparam>
|
|
<methodparam><type>string</type><parameter>function_name</parameter></methodparam>
|
|
<methodparam><type>callable</type><parameter>step_func</parameter></methodparam>
|
|
<methodparam><type>callable</type><parameter>finalize_func</parameter></methodparam>
|
|
<methodparam choice="opt"><type>int</type><parameter>num_args</parameter><initializer>-1</initializer></methodparam>
|
|
</methodsynopsis>
|
|
<para>&style.oop; (method):</para>
|
|
<methodsynopsis>
|
|
<modifier>public</modifier> <type>void</type><methodname>SQLiteDatabase::createAggregate</methodname>
|
|
<methodparam><type>string</type><parameter>function_name</parameter></methodparam>
|
|
<methodparam><type>callable</type><parameter>step_func</parameter></methodparam>
|
|
<methodparam><type>callable</type><parameter>finalize_func</parameter></methodparam>
|
|
<methodparam choice="opt"><type>int</type><parameter>num_args</parameter><initializer>-1</initializer></methodparam>
|
|
</methodsynopsis>
|
|
<para>
|
|
<function>sqlite_create_aggregate</function> es similar a
|
|
<function>sqlite_create_function</function> excepto que registra
|
|
funciones que pueden ser usadas para calcular un resultado totalizador de todas las
|
|
filas de una consulta.
|
|
</para>
|
|
<para>
|
|
La diferencia principal entre esta función y
|
|
<function>sqlite_create_function</function> es que se necesitan dos
|
|
funciones para administrar la totalización; <parameter>step_func</parameter> es
|
|
llamada para cada fila del conjunto de resultados. La función de PHP debería
|
|
acumular el resultado y almacenarlo en un contexto totalizador.
|
|
Una vez que se han procesado todas las filas,
|
|
<parameter>finalize_func</parameter> será llamada y entonces debería
|
|
tomar los datos desde el contexto totalizador y devolver el resultado.
|
|
Las funciones de llamada de retorno deberían un tipo comprendido por SQLite (esto es, un
|
|
<link linkend="language.types.intro">tipo escalar</link>).
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="parameters">
|
|
&reftitle.parameters;
|
|
<para>
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><parameter>dbhandle</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
El recurso de Base de datos de SQLite; devuelto por <function>sqlite_open</function>
|
|
cuando se usa procedimentalmente. Este parámetro no es necesario
|
|
cuando se usa el método orientado a objetos.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><parameter>function_name</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
El nombre de la función utlizada en las sentencias SQL.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><parameter>step_func</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
Función de llamada de retorno llamada para cada fila del conjunto de resultados.
|
|
Los parámetros de la función son <literal>&$context, $value, ...</literal>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><parameter>finalize_func</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
Función de llamada de retorno para totalizar los datos "escalonados" de cada fila.
|
|
El parámero de la función es <literal>&$context</literal> y la función
|
|
debería devolver el resultado final de la totalización.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><parameter>num_args</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
Alusión al analizador de SQLite si la función de llamada de retorno acepta un
|
|
número predeterminado de argumentos.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="returnvalues">
|
|
&reftitle.returnvalues;
|
|
<para>
|
|
&return.void;
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="examples">
|
|
&reftitle.examples;
|
|
<para>
|
|
<example>
|
|
<title>Ejemplo de función totalizadora max_length</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$data = array(
|
|
'one',
|
|
'two',
|
|
'three',
|
|
'four',
|
|
'five',
|
|
'six',
|
|
'seven',
|
|
'eight',
|
|
'nine',
|
|
'ten',
|
|
);
|
|
$dbhandle = sqlite_open(':memory:');
|
|
sqlite_query($dbhandle, "CREATE TABLE strings(a)");
|
|
foreach ($data as $str) {
|
|
$str = sqlite_escape_string($str);
|
|
sqlite_query($dbhandle, "INSERT INTO strings VALUES ('$str')");
|
|
}
|
|
|
|
function max_len_step(&$context, $string)
|
|
{
|
|
if (strlen($string) > $context) {
|
|
$context = strlen($string);
|
|
}
|
|
}
|
|
|
|
function max_len_finalize(&$context)
|
|
{
|
|
return $context;
|
|
}
|
|
|
|
sqlite_create_aggregate($dbhandle, 'max_len', 'max_len_step', 'max_len_finalize');
|
|
|
|
var_dump(sqlite_array_query($dbhandle, 'SELECT max_len(a) from strings'));
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
En este ejemplo creamos una función totalizadora que
|
|
calculará la longitud de la cadena más larga en una de las columnas de la
|
|
tabla. Para cada fila, la función <literal>max_len_step</literal> es
|
|
llamada y se le pasa un parámetro <parameter>context</parameter>. El parámetro
|
|
context es como cualquier otra variable de PHP y es establecido para contener un array
|
|
o incluso un valor de un objeto. En este ejemplo, simplemente estamos usándolo para que contenga
|
|
la longitud máxima que hemos estado viendo; si el parámetro
|
|
<parameter>string</parameter> tiene una longitud mayor que el máximo
|
|
actual, actualizamos el contexto para que contenga esta nueva longitud máxima.
|
|
</para>
|
|
<para>
|
|
Después de que todas las filas se hayan procesado, SQLite llama a la
|
|
función <literal>max_len_finalize</literal> para determinar el resultado
|
|
total. Aquí, podríamos llevar a cabo algún tipo de cálculo basado en los
|
|
datos encontrados en <parameter>context</parameter>. Aunque en nuestro sencillo
|
|
ejemplo hemos ido calculando el resultado mientras la consulta progresaba, por lo que
|
|
simplemente necesitamos devolver el valor de contex.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
El ejemplo de arrbia no funcionará correctamente si la columna contiene datos
|
|
binarios. Échele un vistazo a la página del manual de
|
|
<function>sqlite_udf_decode_binary</function> para una explicación de por qué
|
|
esto es así, y un ejemplo de cómo hacerlo respecto a la codificación binaria.
|
|
</para>
|
|
</note>
|
|
<tip>
|
|
<para>
|
|
NO se recomienda almacenar una copia de los valores de context
|
|
y despúes procesarlos al final, ya que causaría que SQLite usara un montoón de
|
|
memoria para procesar la consulta - simplemente piense en cúanta memoria se necesitaría
|
|
si estuviesen almacenadas en memoria un millón de filas, cada una conteniendo una cadena de 32 bytes
|
|
de longitud.
|
|
</para>
|
|
</tip>
|
|
<tip>
|
|
<para>
|
|
Se puede usar <function>sqlite_create_function</function> y
|
|
<function>sqlite_create_aggregate</function> para sobrescribir las funciones SQL
|
|
nativas de SQLite.
|
|
</para>
|
|
</tip>
|
|
</refsect1>
|
|
|
|
<refsect1 role="seealso">
|
|
&reftitle.seealso;
|
|
<para>
|
|
<simplelist>
|
|
<member><function>sqlite_create_function</function></member>
|
|
<member><function>sqlite_udf_encode_binary</function></member>
|
|
<member><function>sqlite_udf_decode_binary</function></member>
|
|
</simplelist>
|
|
</para>
|
|
</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
|
|
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
|
|
-->
|