Ejemplo de lenguaje Perl

Este ejemplo utiliza el siguiente nombre de archivo: ' Libenv.pm.

Código

Las clases de entorno y bibliotecas compartidas proporcionan información sobre el entorno y las bibliotecas asociadas a un AE. Este ejemplo toma un argumento, un entero. Si el entero es igual a 0, el AE emite el entorno que ve. Si el entero es igual a 1, el AE busca el entorno como biblioteca.
package Libenv;
use nzae::Ae;
use strict;
use autodie;
our @ISA = qw(nzae::Ae);
my $ae = Libenv->new();
$ae->run();
sub _run()
{
my $self = shift;
$self->iter();
}
sub iter()
{
#use while loop over library function getNext()
my $self = shift;
while ($self->getNext())
{
my @row = $self->getInputRow();
my $size = scalar(@row);
my $env;
if ($size > 0)
{
if ( $row[0] == 0 )
{
$env = $self->getEnvironment();
}
else
{
$env = $self->yieldSharedLibraries();
}
unless(defined $env)
{
$self->userError("Error fetching information");
}
my $limit = defined $row[1]? $row[1] : undef;
try
{
for my $key ( keys %$env )
{
$self->output($key, $env->{$key});
if ( defined $limit && $limit)
{
$limit--;
if ($limit == 0)
{
last;
}
}
}
}
catch
{
croak(nzae::Exceptions::AeInternalError->new(longmess("Error writing
output")));
};
}
else
{
$self->userError("Error fetching row");
}
}
}
1;

virtual

Despliegue el script:
$NZ_EXPORT_DIR/ae/utilities/bin/compile_ae --language perl --version 3 \
--template deploy Libenv.pm

Registro

Registra el ejemplo:
$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language perl --version 3 \
--template udtf --exe Libenv.pm --sig "lib_env(int4, int4)" \
--return "table(name varchar(1000), value varchar(1000))"
Dado un valor entero positivo, el segundo argumento actúa como límite del número de resultados devueltos. Se utiliza en lugar de la palabra clave LIMIT para salir limpiamente del AE cuando debe limitarse el número de resultados devueltos.

En ejecución

Tenga en cuenta que la salida de este ejemplo es específica del entorno. Por lo tanto, su resultado real se parecerá, pero no coincidirá, con el texto siguiente.
SELECT * FROM TABLE WITH FINAL(lib_env(1, 3));
NAME | VALUE
-----------------+---------------------------------------------------
LIBNZAEPARENT | /nz/data.1.0/base/317943/library/319587/host/libnzaeparent.so
LIBNZAEADAPTERS |
/nz/data.1.0/base/317943/library/319331/host/libnzaeadapters.so
LIBNZAECHILD | /nz/data.1.0/base/317943/library/319332/host/libnzaechild.so
(3 rows)
SELECT * FROM TABLE WITH FINAL (lib_env(0, 5));
NAME VALUE
------------------------------------+---------------
NZAE_RUNTIME_USER_QUERY | 1
NPS_PLATFORM | xs
NZAE_OUTPUT_COLUMNS | 1,1
NZAE_DEBUG_LEVEL | 0
NZAE_REMOTE_NAME_DATA_SLICE | 0
(5 rows)
Nota: Esta salida puede variar, ya que el nombre puede ir precedido de un nombre de base de datos con puntos que lo separan del nombre de la biblioteca. Por ejemplo, xxx..LIBNZAECHILD. Además, los números que aparecen en el nombre de la ruta de valores pueden ser diferentes y de la forma /nz/DATA/base/<dbOID>/library/<objectOID>/host/<libraryname>.so.

Se pueden añadir bibliotecas compartidas adicionales durante el paso de registro, utilizando la opción " --deps " junto con el nombre de la biblioteca.