Esempio di linguaggio Perl
Questo esempio utilizza il seguente nome di file: 'Libenv.pm.
Codice
Le classi ambiente e libreria condivisa forniscono informazioni sull'ambiente e sulle librerie associate a un AE. Questo esempio richiede un solo argomento, un numero intero. Se l'intero è uguale a 0, l'AE emette l'ambiente che vede. Se l'intero è uguale a 1, l'AE cerca l'ambiente come libreria.
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;Distribuzione
Distribuire lo script:
$NZ_EXPORT_DIR/ae/utilities/bin/compile_ae --language perl --version 3 \
--template deploy Libenv.pmRegistrazione
Registrare l'esempio:
$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))"Dato un valore intero positivo, il secondo argomento funge da limite al numero di risultati restituiti. Viene utilizzato al posto della parola chiave LIMIT per uscire dall'AE in modo pulito quando il numero di risultati restituiti deve essere limitato.In esecuzione
Si noti che l'output di questo esempio è specifico dell'ambiente. Pertanto, il risultato effettivo sarà simile, ma non uguale, al testo seguente.
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: Questo risultato potrebbe variare, poiché il nome potrebbe essere preceduto da un nome di database con periodi che lo separano dal nome della libreria. Ad esempio,
xxx..LIBNZAECHILD. Inoltre, i numeri visualizzati nel nome del percorso del valore potrebbero essere diversi e della forma: /nz/DATA/base/<dbOID>/library/<objectOID>/host/<libraryname>.so.È possibile aggiungere altre librerie condivise durante la fase di registrazione, utilizzando l'opzione '--deps insieme al nome della libreria.