|
<< İçindekileri Görüntülemek İçin Tıklayın >> Yer: Teknik Kılavuzlar > Netsim System Agent Kurulum ve Yönetim Kılavuzu > 3. Komut satırı > 3.6 msql — komut satırı istemcisi |
msql, MQL betiklerini ve tek tek deyimleri çalışan bir ajana veren komut satırı
istemcisidir. İçinde motor yoktur: ajanın /ivedi oturum protokolüne (bkz. 5.4) WebSocket ile bağlanır,
betiğin metnini gönderir; sonuçları, motorun konsol yazılarını ve hataları aynı bağlantıdan geri alır. Veritabanı
kaydı, login ve rol tanımı, başlangıç betiği, IoT cihaz satırları, yükseltme betikleri — bu kılavuzda MQL ile yapılan
her iş msql ile ve hizmet ayaktayken yapılır.
msql.exe (Linux'ta msql) ajanın yanında, aynı dizinde durur ve o dizindeki
kitaplıkları (ICU) paylaşır; ajan dağıtımıyla birlikte kopyalanır. İki ön koşul vardır:
IVEDI işlemcisi (/ivedi yolu) etkin olmalıdır — dağıtım
conf'unda vardır.SYSDBA olmalıdır
(/ivedi kapısı). Bir veritabanı seçmek için login'in o veritabanında kullanıcı eşlemesi
(CREATE USER … FOR LOGIN) bulunmalıdır.msql [seçenekler] [veritabanı]| Bağlantı | Anlamı |
|---|---|
-h, --host <ad> | Ajanın adresi. Öndeğer localhost. |
-p, --port <n> | Kapı. Öndeğer 82. |
-U, --user <login> | MASTER login'i. Verilmezse IVD_USER ortam değişkeni, o da yoksa SYSDBA. |
-W, --password <parola> | Parola. Verilmezse IVD_PASSWORD ortam değişkeni; etkileşimli kipte sorulur, toplu kipte (-c / -f / stdin) zorunludur. Ortam değişkeni parolayı süreç listesinde ve kabuk geçmişinde göstermez. |
-d, --database <ad> | MASTER'da kayıtlı veritabanı; konumsal olarak da verilebilir. Verilmezse oturum MASTER'da açılır. |
--ssl | Bağlantı TLS ile (https / wss) kurulur. |
--json | Çerçeveler JSON taşır (öndeğer BSON). |
--lang <dil> | Motor iletilerinin dili (tr, en); verilmezse ajanın conf language'i. |
--timeout <sn> | Deyim süre sınırı, saniye; aşan deyim QUERY_CANCELED (SQLSTATE 57014) ile biter, oturum kullanılabilir kalır. 0 = sınırsız. |
| Girdi | Anlamı |
|---|---|
-c, --command <sql> | Deyim ya da betik metni. Tekrarlanabilir; girdiler sırayla koşar. |
-f, --file <dosya> | Betik dosyası (UTF-8; baştaki BOM atılır). Tekrarlanabilir. Standart giriş borulanmışsa betik oradan okunur. |
-D, --define <ad[=değer]> | Betiğe önişlemci tanımı (#define) geçirir. Tekrarlanabilir. |
--max-errors <n> | Betiğin durmadan önce hoş göreceği hata sayısı. Öndeğer 0 — ilk hatada durur. |
--stop-on-error | Hata veren bir -c / -f girdisinden sonraki girdiler koşmaz. |
--trace | Deyim çalıştırmak yerine ajanın SQL izleme olaylarını Ctrl+C'ye kadar yazar: her olay bir özet satırı, deyim metni, depolama motoruna giden SQL (->) ve hata (!!). |
--trace-filter <süzgeç> | İzleme süzgeci: login=, database=, kind=, minms= (virgül ya da boşlukla ayrılır). --trace'i de açar. |
--trace-count <n> | İzleme n olaydan sonra biter. |
| Çıktı | Anlamı |
|---|---|
-o, --output <dosya> | Sonuçlar ve motorun konsol yazıları dosyaya gider (UTF-8, BOM'lu). Hatalar dosyaya yazılmaz, standart hatada kalır. |
--format <biçim> | table (öndeğer) · expanded · csv · json; aşağıda. |
-q, --quiet | Bağlantı ve özet iletileri yazılmaz. |
--timing | Her girdiden sonra geçen süre yazılır. |
--stack-trace | Hata satırlarına sunucunun yerel yığın izi de eklenir (oturum open.stackTrace). Öndeğerde yalnız SQL çağrı yığını (At ... line) gelir; ajanın günlük düzeyi debug / diag ise iz istenmeden de gelir. |
--history <dosya> · --no-history | Etkileşimli kipin geçmiş dosyası (öndeğer ~/.msql_history) · geçmiş tutulmaz. |
-V, --version · --help | Sürüm · yardım. |
| Çıkış | Anlamı |
|---|---|
0 | Temiz koşu. |
1 | En az bir deyim hata verdi. |
2 | İstisna: bağlantı kurulamadı, dosya yok, geçersiz parametre. |
-o dosyası hata metinlerini içermez: hatalar ve uyarılar standart hataya yazılır.
Bir koşuyu betikten denetliyorsanız çıkış kodunu ve standart hatayı yakalayın; --max-errors
vermeyin ki ilk hatada dursun.
Ajanın debugMode anahtarı açık ve login DEBUGGER rolünde (ya da SYSDBA) ise msql oturumu kendi
deyimlerinin PSQL kodunu ayıklar (sözleşme: protokol belgesi §7.10). İstemci komutları etkileşimde ve -c ile
toplu kipte işlenir:
| Komut | Anlamı |
|---|---|
\debug on [all|uncaught] · \debug off | Hata ayıklamayı açar (istisnada durma kipiyle) / kapatır. \debug next bir sonraki deyimin ilk PSQL deyiminde durur; \debug exception none|all|uncaught istisnada durma kipini değiştirir; \debug status durumu ve durma noktalarını yazar. |
\break ŞEMA.AD:SATIR [if <koşul>] · \break :SATIR | Durma noktası: satır nesnenin CREATE metnine göre 1 tabanlı (motorun hata yığın izindeki methodline); :SATIR betik / EXECUTE BLOCK metnine göre. if koşulu PSQL ifadesidir, duran deyimin bağlamında TRUE ise durulur. Kapalıysa hata ayıklamayı açar. |
\breaks · \unbreak [ŞEMA.AD[:SATIR]] | Durma noktalarını listeler / kaldırır (parametresiz: hepsini). |
Deyim bir durağa gelince msql konumu yazar (-- debugger stopped: breakpoint at procedure APP.P line 4, istisnada
-- exception ... satırı) ve (dbg) istemine geçer; komutlar standart girdiden okunur, boş satır sonuncuyu
yineler: n üstünden adım, s içine, o dışına, c devam, q deyimi
sonlandır (DEBUG_TERMINATED), bt çağrı yığını, v [params|locals|returns|new|old|exception]
değişkenler, p ifade değer (v, new.x, v * 10 + a), b ŞEMA.AD:SATIR [if koşul] yeni durma
noktası, h yardım. Toplu kipte girdi biterse deyim kendiliğinden sürer. Hata ayıklama açıkken
Ctrl+C deyimi iptal etmez, bir sonraki PSQL deyiminde durdurur. Durak boyunca işlem ve kilitler
açık kalır, deyim süre sınırı askıdadır.
Sonuç kümeleri deyim deyim, hazır oldukça gelir. Motorun konsol yazıları (Console.PrintF,
#OUTPUT) komut koşarken ajanın standart çıktısına değil istemciye gelir ve sonuçlarla
birlikte ekrana ya da -o dosyasına yazılır. Biçimler (--format, etkileşimde
\f):
| Biçim | Görünüm |
|---|---|
table | psql benzeri: KOLON | KOLON başlığı, ------+------ ayıracı, satırlar, sonda (N rows). |
expanded | Her satır bir -[ RECORD n ]- başlığı ve altında ad | değer satırları (etkileşimde \x). |
csv | RFC 4180 tırnaklaması; NULL boş alan. |
json | Her sonuç kümesi bir nesne dizisi. |
Hatalar ve uyarılar standart hataya şu biçimde yazılır (renk yalnız standart hata bir uçbirimken; Windows
konsolunda ANSI yorumlaması msql tarafından açılır, NO_COLOR ortam değişkeni rengi her yerde kapatır).
Bütün metin UTF-8'dir: Windows konsolunda msql kod sayfasını her iki yönde UTF-8'e alır, yönlendirilmiş çıktı UTF-8
baytlarıdır (BOM yok):
ERROR: <ileti>
file: client:C:\kurulum\kayit.sql(12,5)
sqlState: 42601
WARNING: <ileti>
lineNum: 3, charPos: 1file: satırı betik dosyasından gelen bir deyimde yol, satır ve sütunu verir; -c ile verilen
metinde onun yerine lineNum / charPos yazılır.
-c, -f ve borulanmış stdin yoksa msql etkileşimli bir oturum açar: geçmişi,
tamamlaması ve çok satırlı düzenlemesi olan bir satır düzenleyici. Deyimler ; ile gönderilir; PSQL
gövdeleri (execute block, create procedure / function / trigger /
package / type / metacommand / sqlmacro / operator,
declare) kapanan END'e kadar bekletilir. SET TERM x; yalnız istemcinin
gönderme kuralını değiştirir, motora gitmez. Ctrl+C koşan deyimi iptal eder
(POST /ivedi/cancel); oturum açık kalır.
Satır başındaki \ad arg … satırları motorun meta-komutlarıdır ve sunucuda koşar:
\help listeler; \d [nesne], \dt, \dv, \df,
\dp, \dn, \l yerleşiktir, CREATE METACOMMAND ile yenileri
tanımlanır (SQL kılavuzu). İstemcinin kendisinde işlenenler:
| Komut | Ne yapar |
|---|---|
\q, \quit, exit, quit | Çıkış (exit / quit tek başına yazıldığında; sonda ; olabilir). |
\h, \help | İstemci komutlarının yardımı. |
\timing [on|off] | Deyim sürelerini göster. |
\x [on|off] | Genişletilmiş satır gösterimi (expanded). |
\f [biçim] | Çıktı biçimi: table | expanded | csv | json. |
\o [dosya] | Çıktıyı dosyaya yönlendir; dosyasız çağrı ekrana döndürür. |
\i dosya | Betik dosyasını çalıştır. |
\c [veritabanı] | Veritabanı değiştir (yeniden bağlanır). |
\e | Tamponu düzenleyicide aç ve çalıştır (EDITOR; yoksa Windows'ta notepad, Linux'ta vi). |
\trace [süzgeç] | SQL izleme olaylarını Ctrl+C'ye kadar yaz (login= database= kind= minms=); --trace ile aynı. |
msql betiğin metnini gönderir ve kaynak adı olarak client:<mutlak yol>
verir. Betikteki #include (ve ALTER DATABASE … SET STARTUP SCRIPT FROM FILE) bu ada göre,
yani istemcinin dosya sisteminde çözülür: ajan dosyayı aynı bağlantı üzerinden msql'den
ister. Kaynak açıkça da seçilebilir: #include 'client:<yol>' istemcinin,
#include 'server:<yol>' sunucunun dosya sistemidir; öneksiz bir yol, içinde bulunduğu dosyanın
kaynağını miras alır (istemciden gelen betiğin göreli include'ları istemciden, sunucudaki bir betiğinkiler
sunucudan). Çalışma zamanında açılan dosyalar bu kuralın dışındadır: öneksiz yolları her zaman
sunucunun yollarıdır (UPGRADE LEVEL … FROM '<paket>', EXPORT LEVEL … TO,
BACKUP TO, CREATE EXTERNAL TABLE). Seviye paketleri açık 'client:<yol>'
önekiyle istemci makinesinde kalabilir: UPGRADE LEVEL … FROM 'client:…' paketi msql'den
okur, EXPORT LEVEL … TO 'client:…' ona yazar.
İstemciden #include edilen dosya 4 MB'lık parçalarla okunur; dosya boyu sınırı yoktur, ajanın
belleğinde aynı anda bir parça durur. msql 16 MB'ı aşan bir -f betiğini de bu yoldan gönderir;
hata satırlarındaki dosya adı ve satır numarası değişmez.
-- Kurulum betigini calisan hizmete ver; sonuclar dosyaya, hatalar stderr'e
msql -U SYSDBA -W masterkey -f kurulum.sql -o kurulum.out.sql 2> kurulum.err
echo %ERRORLEVEL%
-- Parolayi ortam degiskeninden al, tek deyim kostur
set IVD_PASSWORD=masterkey
msql -U SYSDBA -c "select ivd$object_name from master.sys.ivd$objects where ivd$type = 'DATABASE' and ivd$object_id > 0"
-- Etkilesimli oturum, NETSIM veritabani secili
msql -U SYSDBA NETSIM
SYSDBA parolasi:
NETSIM=> \dt
NETSIM=> select count(*) from ns_firma;
NETSIM=> \help
NETSIM=> \q