9.1 Paketler

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

Yer:  Teknik Kılavuzlar > IVEDI SQL Kullanıcı Kılavuzu > 9. Yerleşik kütüphane >

9.1 Paketler

9.1.1 Math — sayısal sınır sabitleri

Bu paket yalnızca sabit içerir, fonksiyonu yoktur; sabitler parantezsiz okunur (math.INT32_MAX).

SabitlerTip
INT8_MIN, INT8_MAX, UINT8_MAXinteger
INT16_MIN, INT16_MAX, UINT16_MAXinteger
INT32_MIN, INT32_MAXinteger
UINT32_MAX, INT64_MIN, INT64_MAXbigint
UINT64_MAX, INT128_MIN, INT128_MAXint128
UINT128_MAX, NUMBER_MIN, NUMBER_MAXnumber
NUMBER38_MIN, NUMBER38_MAXnumber(38)
DECIMAL_MIN, DECIMAL_MAXdecimal(18,2)
FLOAT_MIN, FLOAT_MAXfloat
DOUBLE_MIN, DOUBLE_MAXdouble

9.1.2 Console — süreç akışları

ÜyeNotlar
procedure Print(params args)
procedure PrintF(format string, params args){0}, {1} … yer tutucuları
function GetLine() returns stringuygulanmamış
Get/SetOutStream, Get/SetInStream, Get/SetErrorStreamStream

9.1.3 FileSystem — dosya işlemleri ve dosya akışı

Üye
function FileExists(Dir Directory, FileName string) returns boolean
function DeleteFile(Dir Directory, FileName string) returns boolean
function RenameFile(oldDir, oldFileName, newDir, newFileName) returns boolean
function MoveFile(oldDir, oldFileName, newDir, newFileName, overrd boolean = false) returns boolean

İç tip FileSystem.FileStream (Stream'den türer): alanlar Dir, FileName, mode, share; üyeler openFile(), openFile(Dir, FileName, mode, share), openTemp(). Sıralamalar: OpenMode (omRead, omWrite, omReadWrite), ShareMode (smExclusive, smRead, smWrite, smReadWrite, smDelete); öndeğerler omRead ve smExclusive.

9.1.4 Crypto

ÜyeDurum
base64_encode / base64_decodeçalışır (string/varbinary ve clob/blob aşırı yüklemeleri)
hex_encode / hex_decodeçalışır (aynı aşırı yüklemeler)
hash_crc32(data) returns bigintçalışır; imzasız 32-bit değer, bu yüzden bigint
hash_crc64(data) returns bigintçalışır; bugünkü gerçekleme CRC-32 değerini döndürür
hash(algo, len, data), hash_md5, hash_sha1, hash_sha2_224/256/384/512uygulanmamış
Dikkat

Kriptografik özet fonksiyonlarının hiçbiri uygulanmamıştır. Yalnızca CRC (bir sağlama toplamıdır, kriptografik değildir) ve kodlama/çözme çalışır. Parola özetleme ya da imza doğrulama için bu paket kullanılamaz.

9.1.5 WhatsApp — WhatsApp Business Cloud API istemcisi

Meta Graph API üzerinden mesaj gönderir. Asıl kullanım WhatsApp.Client tipidir:

execute block
as
  c WhatsApp.Client;
  id string;
begin
  --// anahtar CREDENTIAL'da: create credential wa type HTTP identity '<numara kimliği>' password '<anahtar>'
  c = WhatsApp.Client.FromCredential('wa');
  id = c.SendText('905551112233', 'Merhaba');
  id = c.SendTemplate('905551112233', 'hello_world', 'en_US');
  id = c.SendDocument('905551112233', 'https://.../fatura.pdf', 'fatura.pdf');
  c.MarkAsRead(id);
end;
ÜyeAçıklama
Client.FromCredential(ad) istemciyi bir TYPE HTTP credential'dan kurar: numara kimliği IDENTITY'den, apiVersion/baseUrl/timeoutSec etiketlerden gelir. Anahtar alana yalnızca credential:<ad> başvurusu olarak yazılır; gerçek anahtar istek anında çözülür, çağıranın credential üzerinde USAGE hakkı olmalıdır.
credential_info(ad)credential'ın gizli olmayan alanları (JSON); parola içermez
Client alanlarıaccessToken, phoneNumberId, businessAccountId, apiVersion (öndeğer v23.0), baseUrl, timeoutSec (30), maxDownloadBytes (100 MB); son isteğin lastStatus, lastResponse, lastRetryAfter ve lastMimeType değerleri
SendText, SendTemplate, SendImage, SendDocument, SendMediamesaj kimliğini (wamid...) döndürür
SendButtons(alıcı, metin, butonlar), SendList(alıcı, metin, buton, bölümler), SendLocation(alıcı, enlem, boylam, ad, adres), SendContacts(alıcı, kişiler), SendReaction(alıcı, wamid, emoji) etkileşimli butonlar ([{"id","title"}], 1–3), liste, konum, kişi kartı, tepki (boş emoji kaldırır)
son parametre replyTo Send* metotlarında isteğe bağlı: yanıtlanan mesajın wamid'i (context.message_id)
ListTemplates(maxCount), CreateTemplate(ad, dil, kategori, bileşenler), DeleteTemplate(ad) şablon yönetimi; businessAccountId (credential etiketi WABAID) gerekir. Ad [a-z0-9_], kategori MARKETING/UTILITY/AUTHENTICATION.
MarkAsRead(messageId), Post(govde json, replyTo)okundu bildirimi; herhangi bir gövdeyi gönderme
UploadMedia(fileName, mimeType, content Stream) medyayı yükler, medya kimliğini döndürür; akışın başından sonuna gönderilir, dosya belleğe alınmaz
DownloadMedia(mediaId) → blob, MediaInfo(mediaId), DeleteMedia(mediaId) indirme iki adımlıdır (bilgi + bağlantı); Meta'nın sha256 özeti doğrulanır, maxDownloadBytes aşılırsa indirmeden reddedilir; içerik türü lastMimeType'ta
BuildText, BuildTemplate, BuildMedia, BuildButtons, BuildList, BuildLocation, BuildContacts, BuildReaction, BuildRead, WithReply(gövde, replyTo) ağa çıkmaz, yalnızca istek gövdesini (json) üretir
MessageId(yanit), ErrorMessage(yanit), ErrorCode(yanit)yanıt okuyucuları
http_request(method, url, bearerToken, body, timeoutSec, out status, out retryAfter) alt düzey istek; GET, POST ya da DELETE; retryAfter yanıtın Retry-After başlığıdır (saniye; yoksa NULL)
http_upload(url, bearerToken, fileName, mimeType, content Stream, timeoutSec, out status), http_download(url, bearerToken, expectedSha256, timeoutSec, out status, out mimeType, out errorBody) alt düzey multipart yükleme ve ikili indirme (blob; özet uyuşmazlığı hatadır)
EnqueueText(credential, alıcı, metin), EnqueueTemplate(...), Enqueue(credential, gövde) giden kutusuna (ivd$whatsapp_outbox) yazar, kayıt kimliğini döndürür; credential o anda denetlenir
ProcessOutbox(batchSize = 50, maxAttempts = 5, baseDelaySec = 30, maxDelaySec = 3600) zamanı gelmiş bekleyen kayıtları gönderir ve işlenen kayıt sayısını döndürür: başarı SENT (wamid), geçici hata (ağ, 429, 5xx, Meta hız kodları; IsTransient) yeniden deneme (RetryDelay: Retry-After ya da 30 sn × 2n, en çok 1 saat), aksi FAILED. Her sonuç özerk işlemde yazılır; SQL depolu motorlarda özerk işlem bir kayıt noktasıdır. CancelOutbox(id) bekleyeni iptal eder.
OutboxJob Scheduler.Job alt tipi (alanlar batchSize, maxAttempts, baseDelaySec, maxDelaySec; OnExecute → ProcessOutbox). Scheduler.attachJob ile kaydedilir; veritabanının görev zamanlayıcısı açıkken (ALTER DATABASE … SET TASK SCHEDULER ON) iş zamanlayıcı sürecinde koşar. attachJob alanları saklamaz; yeniden kurulan tipte öndeğerler geçerlidir.
RecordEvent(eventKind, accountId, phoneNumberId, wamid, …, rawJson) webhook olayını (MESSAGE | STATUS) ivd$whatsapp_event tablosuna yazar; aynı (tür, wamid, durum) satırı varsa yazmaz ve NULL döndürür
--// dosyadan ya da tablodaki bir blob'dan medya yükleme
s Stream = Stream();
s.WriteRaw(icerik);                    --// icerik: blob / varbinary
mid = c.UploadMedia('fatura.pdf', 'application/pdf', s);
id = c.SendDocument('905551112233', mid, 'fatura.pdf');
b = c.DownloadMedia(mid);

Bir blob, yukarıdaki gibi Stream() + WriteRaw ile kopyalanarak ya da BlobStream(blob, omRead) ile kopyasız akışa alınır; dosya için FileSystem.FileStream doğrudan verilir.

Medya için mediaRef http:// ya da https:// ile başlıyorsa bağlantı, başlamıyorsa yüklenmiş medyanın kimliği sayılır. mediaType tam olarak image, document, audio, video ya da sticker yazılmalıdır.

Hatalar: WHATSAPP_NOT_CONFIGURED (anahtar ya da numara kimliği boş), WHATSAPP_INVALID_ARGUMENT (zorunlu argüman boş ya da tür geçersiz), WHATSAPP_API_ERROR (2xx dışı yanıt; ileti HTTP kodunu ve Meta'nın iletisini taşır).

Dikkat

TLS sertifikası her zaman doğrulanır ve yönlendirme izlenmez. Düz http yalnızca localhost için kabul edilir. Erişim anahtarı hiçbir günlük satırına ya da hata iletisine yazılmaz; anahtar kaynak koduna gömülmez, CREATE CREDENTIAL ile saklanır.

9.1.6 OS — makine, kullanıcı ve süreçler

Üye
GetDomainName(), GetComputerName(), GetUserName() → string
GetUserID(), GetGroupID() → integer; IsAdmin() → boolean
GetSystemGUID() → guid
GetOSType(), GetOSVersion() → string
GetLastErrorCode() → integer; GetStatusText(status) → string; RaiseLastOSError()
ErrorLevel() → integer: son #SHELL komutunun çıkış kodu (bkz. bölüm 10)
GetEnvironmentString(ad) → string; SetEnvironmentString(ad, değer) → boolean

İç tip OS.Command: alanlar Dir, Executable, Parameters, InStream, OutStream, ErrorStream; üyeler Run(), Wait(TimeoutMS), Terminate(ExitCode), GetExitCode(). Dir boş bırakılırsa Executable işletim sisteminin arama yolundan (PATH) bulunur. Firebird yedeği için OS.gbak (Command'dan türer) vardır: alanları (DatabaseFile, BackupFile, Restore, UserName, Password …) Run() sırasında gbak komut satırına çevrilir; gbak arama yolundan bulunur, Firebird'ün bin dizini PATH'te olmalıdır.

Not

OS.Command her iki platformda da çalışır. Kabuk çağrılmaz: Windows'ta CreateProcess, POSIX'te fork + execvp. Parameters POSIX'te motor tarafından bölünür: boşluk ve sekme ayırır, yalnız çift tırnak özeldir (açar/kapar, argümana girmez; a"b c"d tek argüman ab cd, "" boş argüman), tek tırnak ve ters bölü özel değildir. Windows'ta motor bölmez: "<Executable>" <Parameters> satırı olduğu gibi CreateProcess'e gider ve programın kendi çalışma zamanı Windows kuralıyla ayrıştırır. Joker genişletme, yönlendirme ve boru gibi kabuk özellikleri yoktur; gerekiyorsa kabuk açıkça çalıştırılır.

GetExitCode() sürecin çıkış kodunu verir. POSIX'te süreç bir sinyalle sonlandıysa çıkış kodu yoktur; o durumda kabukların kuralı uygulanır ve 128 + sinyal numarası döner, örneğin Terminate() sonrası 143 (128 + SIGTERM). POSIX'te execvp'nin her hatası (bulunamayan program dahil) 127 verir; Windows'ta bulunamayan program Run()'da hata fırlatır. Terminate(ExitCode)'un ExitCode parametresi Windows'ta TerminateProcess'e gider, POSIX'te karşılığı yoktur ve yok sayılır.

Not

GetUserID() ve GetGroupID() POSIX kimlikleridir ve Windows'ta -1 döner: Windows kimlikleri SID'dir, sayısal bir kullanıcı/grup kimliği kavramı yoktur. IsAdmin() her iki platformda çalışır (Windows'ta Administrators/Power Users üyeliği, POSIX'te etkin kullanıcının root olması).

Not

SetEnvironmentString ile yazılan bir değer GetEnvironmentString ile sağlıklı geri okunamaz.

9.1.7 Application — motor ve yapılandırma bilgisi

ÜyeNotlar
GetTitle(), GetVersion(), GetVersionDate()string; GetVersionDate bir derleme damgasıdır
GetStartTime()timestamp: sürecin başlangıç anı
GetLogFileName(), GetConfigFileName()string
GetConfigValue(ad)string
GetLogLevel()integer; salt okunur, SQL'den değiştirilemez
isDebugMode()boolean
GetCPUType()string
Get/SetOutStream, Get/SetInStream, Get/SetErrorStreamStream

9.1.8 DebugHelper

ÜyeDurum
procedure Assert(cond boolean, msg string = null)false ise ASSERT istisnası (yakalanabilir)
WriteDebugOut(msg), WriteDebugOutF(fmt, params)çalışır
WriteMemoryDump(fileName, flags), WriteProcessDump(fileName)çalışır
DumpObject(objectName, fileName, options)çalışır
GetCallStack(skipFirstN, depth, withParamValues)uygulanmamış

9.1.9 EventLog — geri alınamayan olay kaydı

EventLog.write(source, source_object_id, source_key, severity, event_type,
               result, message, extra = null, data = null)

Gövdesi kaydı in autonomous transaction do içinde yazar, yani çağıran geri alsa bile kayıt kalır. severity sıralaması (ivd$EventLogSeverity): Critical, Error, Warning, Information, Verbose. Kayıtlar ivd$event_log tablosundadır; zaman ve kullanıcı kimliği otomatik yazılır.

9.1.10 Scheduler — yinelenen PSQL işleri

Scheduler.Job tipinden türetip OnExecute() yordamını geçersiz kılarak bir iş tanımlanır; sonra:

Üye
attachJob(j Job) / detachJob(job_name)
enableJob(job_name) / disableJob(job_name)
startJob(job_name) / stopJob(job_name) / resetJob(job_name)
verifySchedule(schedule, out errorMsg) returns boolean
calcNextRuntime(in out runtime, firstRun, schedule, out errorMsg) returns boolean
jobCompleted(j Job, e Exception): koşucu her çalışmanın sonunda çağırır; sonucu ve bir sonraki zamanı ivd$scheduler_jobs'a yazar

Job alanları: job_name, job_type (varsayılan 'PSQL'), start_date, repeat_interval, schedule_limit, end_date, enabled, auto_disable ('N', 'A' her zaman, 'S' başarıda, 'F' hatada), auto_disable_after, comments, logging_level, execution_log_limit. Geçersiz zamanlama dizgisi invalid_job_schedule, bulunamayan iş job_not_found istisnası verir. Her işlem EventLog'a yazılır. Örnek zamanlama dizgisi: 'secondly; seconds=5,15,25,35,45,55'.

9.1.11 NET — e-posta ve TCP

Paketin kendi fonksiyonu yoktur; beş iç tip vardır.

Tipİçerik
NET.MailAddressmailAddr, friendlyName; kurucu MailAddress(mailAddr, friendlyName = null)
NET.MailAttachmentfileName, title, contentType, contentTransfer, charSet, contentDisposition, contentID, extraHeaders, content Stream
NET.MailMessageto/cc/bccRecipients, attachments, body (satır dizisi), fromAddr, subject, charSet ('UTF-8'), replyTo, receiptRecipient, priority (3), encoding (meDefault, meMIME, mePlainText)
NET.SMTPClienthost, port = 25, useSSL, timeout = 60, authType (auDefault, auLogin, auPlain, auPlainC, auCramMD5, auDigestMD5, auXOAUTH, auXOAUTH2; öndeğer auLogin); connect(), authenticate(user, pass), send(), send(msg), AddMessage(msg), disconnect()
NET.TCPClienthost, port, useSSL, zaman aşımları saniye cinsinden (sendtimeout ve recvtimeout öndeğer 60; bağlanma için connecttimeout öndeğer 10, 0 ise hizmetin yapılandırmasındaki değer kullanılır); connect(), connect(host, port, useSSL), Send(stream, len), Recv(stream, len), GetStream(), disconnect()
Sınır

Genel HTTP ve FTP istemci tipi yoktur. HTTP isteği yalnızca WhatsApp paketinin http_request/http_upload/http_download giriş noktalarıyla yapılabilir.

9.1.12 MessageQueue, Metadata, Utils

MessageQueue yalnızca bir zarf tipi bildirir (MessageQueue.Message: destination, messageText, MessageBody JSONType) ve yöntemi yoktur. Metadata paketi katalog okuyucusudur: Attribute, Attributes, AllAttributes, EffectiveAttribute, Description, Caption, ObjectInfo, Columns, Relations, Search, UpgradeReportText (bkz. 6.11). Utils paketi boştur; üyesi yoktur.