Exemple de langage Perl
Cet exemple utilise le nom de fichier suivant : " Libenv.pm.
Coder
Les classes d'environnement et de bibliothèques partagées fournissent des informations sur l'environnement et les bibliothèques associés à un AE. Cet exemple prend un argument, un entier. Si le nombre entier est égal à 0, l'AE produit l'environnement qu'il voit. Si le nombre entier est égal à 1, l'AE recherche l'environnement en tant que bibliothèque.
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;Déploiement
Déployer le script :
$NZ_EXPORT_DIR/ae/utilities/bin/compile_ae --language perl --version 3 \
--template deploy Libenv.pmEnregistrement
Enregistrer l'exemple :
$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))"Avec une valeur entière positive, le deuxième argument agit comme une limite au nombre de résultats renvoyés. Il est utilisé à la place du mot-clé LIMIT pour sortir proprement de l'AE lorsque le nombre de résultats renvoyés doit être limité.En cours d'exécution
Notez que les résultats de cet exemple sont spécifiques à l'environnement. Par conséquent, votre résultat ressemblera au texte suivant, mais ne lui correspondra pas.
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)Note : Ce résultat peut varier car le nom peut être précédé d'un nom de base de données avec des points le séparant du nom de la bibliothèque. Par exemple,
xxx..LIBNZAECHILD. De même, les nombres affichés dans le nom du chemin de valeur peuvent être différents et de la forme : /nz/DATA/base/<dbOID>/library/<objectOID>/host/<libraryname>.so.Des bibliothèques partagées supplémentaires peuvent être ajoutées lors de l'étape d'enregistrement, en utilisant l'option " --deps avec le nom de la bibliothèque.