Exemple en langage Fortran

Cet exemple utilise le nom de fichier suivant : " libenv.f.

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.
program logRunUdtf
call nzaeRun()
stop
end
subroutine nzaeHandleRequest(handle)
integer outputType, hasNext, isNull
hasNext = -1
outputType = -1
isNull = -1
c GET INPUT.
call nzaeGetNext(handle, hasNext)
if (hasNext .eq. 0) then
return
endif
c OUTPUT EITHER THE ENVIRONMENT OR THE LIBRARIES.
call nzaeGetInputInt32(handle, 0, outputType, isNull)
if (outputType .eq. 0) then
call outputEnvironment(handle)
else
call outputLibraries(handle)
endif
return
end
subroutine outputEnvironment(handle)
character(1000) name, value
integer hasNext
name = "init"
value = "init"
hasNext = -1
c OUTPUT THE FIRST VALUE.
call nzaeGetFirstEnvironmentVariable(handle, name, value)
call nzaeSetOutputString(handle, 0, name)
call nzaeSetOutputString(handle, 1, value)
call nzaeOutputResult(handle)
100 call nzaeGetNextEnvironmentVariable(handle, name, value, hasNext)
if (hasNext .eq. 0) then
return
endif
call nzaeSetOutputString(handle, 0, name)
call nzaeSetOutputString(handle, 1, value)
call nzaeOutputResult(handle)
goto 100
end
subroutine outputLibraries(handle)
character(1000) name, path
integer number, autoload, onLibrary
name = "init"
path = "init"
number = -1
autoload = -1
onLibrary = 0
c GET THE NUMBER OF SHARED LIBRARIES.
call nzaeGetNumberOfSharedLibraries(handle, number)
c GET SHARED LIBRARY INFO.
200 if (onLibrary .eq. number) then
return
endif
call nzaeGetSharedLibraryInfo
+ (handle, onLibrary, name, path, autoload)
onLibrary = onLibrary + 1
c OUTPUT THE NAME AND PATH.
call nzaeSetOutputString(handle, 0, name)
call nzaeSetOutputString(handle, 1, path)
call nzaeOutputResult(handle)
goto 200
end

Compilation

Utiliser la compilation standard :
$NZ_EXPORT_DIR/ae/utilities/bin/compile_ae --language fortran --version 3 \
--template compile libenv.f

Enregistrement

Enregistrer l'exemple :
$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language fortran --version 3 \
--template udtf --exe libenv --sig "lib_env(int4)" \
--return "table(name varchar(1000), value varchar(1000))"

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));
NAME | VALUE
----------------+--------------------------------------------------------
LIBNZAEADAPTERS | /nz/DATA/base/1/library/200245/host/libnzaeadapters.so
LIBNZAECHILD | /nz/DATA/base/1/library/200247/host/libnzaechild.so
LIBNZAEPARENT | /nz/DATA/base/1/library/200244/host/libnzaeparent.so
(3 rows)
SELECT * FROM TABLE WITH FINAL (lib_env(0)) LIMIT 5;
NAME | VALUE
-----------------------+-------------------------------------------------
NZAE_NZREP_VERSION | 6
NZREP_TEMP_FILE | /nz/tmp/nzrep_DYxBgF
NZREP_PARAMETER1 | 12
NZREP_PARAMETER0 | 11
NZAE_EXECUTABLE_PATH_RUN | /nz/export/ae/applications/system/admin/host/libenv
(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.