mirror of
https://github.com/php/doc-es.git
synced 2026-03-26 08:22:08 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@334774 c90b9560-bf6c-de11-be94-00142212c4b1
263 lines
8.7 KiB
XML
263 lines
8.7 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: 14af302c9c0e561fa6f9cdd956268758ba9a89c5 Maintainer: seros Status: ready -->
|
|
<!-- Reviewed: no -->
|
|
<refentry xml:id="pdo.sqlitecreateaggregate" xmlns="http://docbook.org/ns/docbook">
|
|
<refnamediv>
|
|
<refname>PDO::sqliteCreateAggregate</refname>
|
|
<refpurpose>
|
|
Registra una función acumuladora definida por el usuario para usarla en sentencias SQL
|
|
</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsect1 role="description">
|
|
&reftitle.description;
|
|
<methodsynopsis>
|
|
<modifier>public</modifier> <type>bool</type><methodname>PDO::sqliteCreateAggregate</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></methodparam>
|
|
</methodsynopsis>
|
|
&warn.experimental.func;
|
|
<para>
|
|
Estemétodo es similar a <xref linkend="pdo.sqlitecreatefunction"
|
|
/>, excepto que registra funciones que pueden ser usadas para calcular un
|
|
resultado acumulado a través de todas las filas de una consulta.
|
|
</para>
|
|
<para>
|
|
La diferencia clave entre este método y <xref
|
|
linkend="pdo.sqlitecreatefunction" /> es que son necesarias dos
|
|
funciones para administrar la acumulación.
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="parameters">
|
|
&reftitle.parameters;
|
|
<para>
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><parameter>function_name</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
El nombre de la función usado en las sentencias SQL.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><parameter>step_func</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
Una función de llamada de retorno para cada fila del conjunto de resultados. La
|
|
función de PHP debería acumular el resultado y almacenarlo en el contexto de la
|
|
acumulación.
|
|
</para>
|
|
<para>
|
|
Esta función necesita ser definida como:
|
|
<methodsynopsis>
|
|
<type>mixed</type><methodname><replaceable>step</replaceable></methodname>
|
|
<methodparam><type>mixed</type><parameter>context</parameter></methodparam>
|
|
<methodparam><type>int</type><parameter>rownumber</parameter></methodparam>
|
|
<methodparam><type>mixed</type><parameter>value1</parameter></methodparam>
|
|
<methodparam choice="opt"><type>mixed</type><parameter>value2</parameter></methodparam>
|
|
<methodparam choice="opt"><type>mixed</type><parameter>..</parameter></methodparam>
|
|
</methodsynopsis>
|
|
</para>
|
|
<para>
|
|
<varname>context</varname> será &null; para la primera fila; en
|
|
filas subsiguientes tendrá el valor que fue devuelto anteriormente
|
|
desde la función 'step'; se debería usar esto para mantener el estado de
|
|
la acumulación.
|
|
</para>
|
|
<para>
|
|
<varname>rownumber</varname> contendrá el número de fila actual.
|
|
</para>
|
|
<para>
|
|
El valor devuelto por esta función se empleará como el
|
|
argumento para <parameter>context</parameter> en la siguiente llamada del "step" o
|
|
funciones finalizadorasf.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><parameter>finalize_func</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
Función de llamada de retorno para acumular los datos usados en "step" desde cada fila.
|
|
Una vez que todas las fila han sido procesadasOnce, se invocará a esta función
|
|
y debería tomar los datos del contexto de la acumulación y
|
|
devolver el resultado. Las funciones de llamada de retorno deberían devolver un tipo
|
|
comprendido por SQLite (esto es, <link
|
|
linkend="language.types.intro">del tipo escalar</link>).
|
|
</para>
|
|
<para>
|
|
Esta función necesita ser definida como:
|
|
<methodsynopsis>
|
|
<type>mixed</type><methodname><replaceable>fini</replaceable></methodname>
|
|
<methodparam><type>mixed</type><parameter>context</parameter></methodparam>
|
|
<methodparam><type>int</type><parameter>rownumber</parameter></methodparam>
|
|
</methodsynopsis>
|
|
</para>
|
|
<para>
|
|
<varname>context</varname> contendrá el valor de retorno de cada última
|
|
llamada a la función 'step'.
|
|
</para>
|
|
<para>
|
|
<varname>rownumber</varname> contendrá el número de filas sobre las que
|
|
se realiza la acumulación.
|
|
</para>
|
|
<para>
|
|
El valor devuelto por esta función será utilizado como valor de retorno de
|
|
la acumulación.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><parameter>num_args</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
Una sugerencia para el 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.success;
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="examples">
|
|
&reftitle.examples;
|
|
<para>
|
|
<example>
|
|
<title>Ejemplo de función acumuladora max_length</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$datos = array(
|
|
'one',
|
|
'two',
|
|
'three',
|
|
'four',
|
|
'five',
|
|
'six',
|
|
'seven',
|
|
'eight',
|
|
'nine',
|
|
'ten',
|
|
);
|
|
$bd = new PDO('sqlite::memory:');
|
|
$bd->exec("CREATE TABLE strings(a)");
|
|
$insert = $bd->prepare('INSERT INTO strings VALUES (?)');
|
|
foreach ($datos as $str) {
|
|
$insert->execute(array($str));
|
|
}
|
|
$insert = null;
|
|
|
|
function max_len_step(&$context, $rownumber, $string)
|
|
{
|
|
if (strlen($string) > $context) {
|
|
$context = strlen($string);
|
|
}
|
|
return $context;
|
|
}
|
|
|
|
function max_len_finalize(&$context, $rownumber)
|
|
{
|
|
return $context;
|
|
}
|
|
|
|
$bd->sqliteCreateAggregate('max_len', 'max_len_step', 'max_len_finalize');
|
|
|
|
var_dump($bd->query('SELECT max_len(a) from strings')->fetchAll());
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
En este ejemplo, se crea una función acumuladora que calculará
|
|
la longitud de la cadena más larga de las columnas de la
|
|
tabla. Para cada fila, la función <literal>max_len_step</literal> se
|
|
invoca y se le pasa un parámetro <parameter>context</parameter>. El parámetro
|
|
'context' es como otra variables cualquiera de PHP y se establece para contener un array
|
|
o incluso un valor de un objeto. En este ejemplo, se usa simplemente para que contenga
|
|
la longitud máxima que se ha visto hasta aquí; si
|
|
<parameter>string</parameter> tiene una longitud mayor que el máximo
|
|
actual, se actualiza el contexto para que contenga esta nueva longitud máxima.
|
|
</para>
|
|
<para>
|
|
Después de haber procesado todas las filas, SQLite llama a la
|
|
función <literal>max_len_finalize</literal> para determinar el resultado
|
|
acumulado. Aquí, se podría realizar algún tipo de cálcula basado en los
|
|
datos encontrados en <parameter>context</parameter>; aunque, en este sencillo
|
|
ejemplo se ha calculado el resultado mientras la consulta progresaba, necesitando
|
|
así devolver simplemente el valor de 'context'.
|
|
</para>
|
|
<tip>
|
|
<para>
|
|
NO se recomienda almacenar una copia de los valores de 'context'
|
|
y luego procesarlos al final, ya que causariá que SQLite utilizara mucha
|
|
memoria para procesar la consulta; piense simplemente cúanta memoria sería necesaria
|
|
si estuvieran almacenadas en ella un millón de filas, cada una conteniendo una cadena
|
|
de 32 bytes de longitud.
|
|
</para>
|
|
</tip>
|
|
<tip>
|
|
<para>
|
|
Se puede usar <xref linkend="pdo.sqlitecreatefunction" /> y
|
|
<xref linkend="pdo.sqlitecreateaggregate" /> para invalidar funciones SQL
|
|
nativas de SQLite.
|
|
</para>
|
|
</tip>
|
|
<note>
|
|
<para>
|
|
Este método no está disponible con el controlador SQLite2.
|
|
Use la API de sqlite de estilo antiguo en su lugar.
|
|
</para>
|
|
</note>
|
|
|
|
</refsect1>
|
|
|
|
|
|
<refsect1 role="seealso">
|
|
&reftitle.seealso;
|
|
<para>
|
|
<simplelist>
|
|
<member><xref linkend="pdo.sqlitecreatefunction" /></member>
|
|
<member><function>sqlite_create_function</function></member>
|
|
<member><function>sqlite_create_aggregate</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
|
|
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
|
|
-->
|