Exemplo de linguagem Perl
Este exemplo usa o seguinte nome de arquivo: ' Libenv.pm.
Código
As classes de ambiente e biblioteca compartilhada fornecem informações sobre o ambiente e as bibliotecas associadas a um AE. Esse exemplo recebe um argumento, um número inteiro. Se o número inteiro for igual a 0, o AE emitirá o ambiente que estiver vendo. Se o número inteiro for igual a 1, o AE procurará o ambiente como uma 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;Implementação
Implemente o script:
$NZ_EXPORT_DIR/ae/utilities/bin/compile_ae --language perl --version 3 \
--template deploy Libenv.pmRegistro
Registre o exemplo:
$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 um valor inteiro positivo, o segundo argumento atua como um limite para o número de resultados retornados. Isso é usado no lugar da palavra-chave LIMIT para sair do AE de forma limpa quando o número de resultados retornados precisa ser limitado.Executando
Observe que a saída desse exemplo é específica para o ambiente. Portanto, seu resultado real será semelhante, mas não igual, ao texto a seguir.
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)Observação: essa saída pode variar, pois o nome pode ser precedido por um nome de banco de dados com pontos separando-o do nome da biblioteca. Por exemplo,
xxx..LIBNZAECHILD. Além disso, os números exibidos no nome do caminho do valor podem ser diferentes e ter o formato: /nz/DATA/base/<dbOID>/library/<objectOID>/host/<libraryname>.so.Bibliotecas compartilhadas adicionais podem ser adicionadas durante a etapa de registro, usando a opção " --deps junto com o nome da biblioteca.