Perl言語の例

この例では、次のファイル名を使用している: 'Libenv.pm

コード

環境クラスと共有ライブラリクラスは、AEに関連する環境とライブラリに関する情報を提供する。 この例では1つの引数、整数を取る。 整数が 0 の場合、AE は見た環境を出力する。 整数が1に等しい場合、AEはその環境をライブラリとして検索する。
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;

デプロイメント

スクリプトをデプロイする:
$NZ_EXPORT_DIR/ae/utilities/bin/compile_ae --language perl --version 3 \
--template deploy Libenv.pm

登録

例を登録する:
$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))"
正の整数値が与えられた場合、第2引数は返される結果の数の制限として機能する。 これはキーワード LIMIT の代わりに使用され、返される結果の数を制限する必要がある場合に、AE をきれいに終了する。

実行中

この例からの出力は環境固有のものであることに注意。 従って、実際の出力は以下のテキストに似ているが、一致はしない。
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)
注:データベース名の前にピリオドで区切られたライブラリ名があるため、この出力は異なる場合があります。 例えば、xxx..LIBNZAECHILDなどです。 また、バリューパス名に表示される数字は、異なる形式かもしれない: /nz/DATA/base/<dbOID>/library/<objectOID>/host/<libraryname>.so.

追加共有ライブラリーは、ライブラリー名とともに'--depsオプションを使用することで、登録ステップ中に追加することができる。