8.10 Bağlam değişkenleri

<< İçindekileri Görüntülemek İçin Tıklayın >>

Yer:  Teknik Kılavuzlar > IVEDI SQL Kullanıcı Kılavuzu > 8. Yordamsal dil (PSQL) >

8.10 Bağlam değişkenleri

AdTipDeğer
CURRENT_CONNECTIONINTEGERBağlantı kimliği
CURRENT_TRANSACTIONINTEGERİşlem kimliği
CURRENT_DATEDATEİşlemin başlangıç tarihi
CURRENT_TIMETIME WITH TIME ZONEİşlemin başlangıç saati, oturumun saat diliminde (SET TIME ZONE)
CURRENT_TIMESTAMPTIMESTAMP WITH TIME ZONEİşlemin başlangıç anı, oturumun saat diliminde
LOCALTIME, LOCALTIMESTAMPTIME / TIMESTAMPAynı anın oturum dilimindeki duvar saati, dilimsiz (SQL:2011 6.32)
CURRENT_USER, USER, SESSION_USERnesne adıKullanıcı adı, yoksa 'NONE'
CURRENT_USER_IDINTEGERKullanıcı nesne kimliği
CURRENT_ROLEnesne adıRol, yoksa 'NONE'
ROW_COUNTINTEGER64Son deyimin etkilediği satır sayısı
INSERTING, UPDATING, DELETINGBOOLEANTetikleyici gövdesinde o anki olay
Dikkat

Bütün CURRENT_* tarih/saat değerleri işlemin başlangıç anıdır, deyimin değil. Deyim anı için SYSTimeStamp() fonksiyonu kullanılır (parantezli — o bir fonksiyondur, bağlam değişkeni değil). CURRENT_SCHEMA yoktur. SQL metnine çeviren motorlarda CURRENT_USER_ID ve ROW_COUNT bir uyarıyla olduğu gibi geçer.

8.10.1 Derleme zamanı sabitleri

Kaynak konumunu ve derleme bağlamını veren sabitler:

__FILE__            __FILE_FULL__       __LINE__            __CHARPOS__
__MAIN_FILE__       __MAIN_FILE_FULL__  __CURRENT_PATH__
__DATE__            __TIME__            __TIMESTAMP__
__METHOD__          __METHOD_DECL__     __METHOD_FULL__     __METHOD_LINE__
__TYPE__            __TYPE_FULL__

Platform makroları ön işlemcinin tanım listesinde her bağlantıda hazırdır: sunucu Windows'ta çalışıyorsa __WINDOWS__, Linux'ta __LINUX__ tanımlıdır (yalnız biri) ve __PLATFORM__ tırnaklı dizge sabiti olarak 'windows' / 'linux' verir. Platforma bağlı bir bağlantı dizgesi ya da dosya yolu böyle dallanır:

#ifdef __LINUX__
create database t storage engine odbc parameters 'Driver Name=PostgreSQL Unicode; ...';
#else
create database t storage engine odbc parameters 'Driver Name=PostgreSQL Unicode(x64); ...';
#endif

__IVEDI__ makrosu da motorun kendi tanımladıklarındandır, ama değeri o anki #MODE'dan gelir: #MODE EXECUTE'ta tanımlıdır, #MODE CONVERT TO <hedef> ve #MODE PRECOMPILE'da tanımsızdır. Yalnız IVEDI'de anlamı olan kod bununla işaretlenir: katalog geçişinde (EXECUTE) nesne kataloğa girer, yani seviye 3/4 eksiksiz kalır; çevrimde blok hiç derlenmez ve üretilen metinde hiç yoktur — işlevsel bir kod yoruma alınıp kapatılmış olmaz.

Üretim betiklerinde yalnız IVEDI'ye ait nesneler bu makroyla değil, ATTRIBUTES (IVEDI_ONLY = TRUE) ile yazılır (bkz. IVEDI_ONLY nesneler); hedefe göre değişen kod NATIVE_SQL ile. Üretim kodunda ne __IVEDI__ ne de DIALECT_* dalı bulunur.

Kip bir betiğin ortasında değişebilir ve makro o noktadan sonra doğru cevabı verir; bu yüzden tanım listesinde tutulmaz, kipten hesaplanır. #IFDEF, #IFNDEF ve #IF defined(...) aynı cevabı verir. Betikten #DEFINE __IVEDI__ ya da #UNDEF __IVEDI__ yazılamaz: ikisi de adıyla reddedilir.