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
endCompilation
Utiliser la compilation standard :
$NZ_EXPORT_DIR/ae/utilities/bin/compile_ae --language fortran --version 3 \
--template compile libenv.fEnregistrement
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.