ctx.sql
ctx.sql menyediakan kemampuan eksekusi dan manajemen SQL, sering digunakan di RunJS (seperti JSBlock, event flow) untuk akses langsung ke database. Mendukung eksekusi SQL sementara, eksekusi template SQL yang sudah disimpan berdasarkan ID, parameter binding, variabel template ({{ctx.xxx}}), dan kontrol tipe hasil.
Skenario Penggunaan
Perhatian:
ctx.sqlmengakses database melalui APIflowSql, perlu memastikan user saat ini memiliki izin eksekusi data source yang sesuai.
Penjelasan Izin
Logika frontend untuk user umum dapat menggunakan ctx.sql.runById(uid, options); saat memerlukan SQL dinamis atau mengelola template, perlu memastikan role saat ini memiliki izin konfigurasi SQL.
Definisi Tipe
Method Umum
Catatan:
rundigunakan untuk debugging SQL, perlu izin konfigurasi;save,destroydigunakan untuk mengelola template SQL, perlu izin konfigurasi;runByIdterbuka untuk user umum, hanya dapat dieksekusi berdasarkan template yang sudah disimpan, tidak dapat melakukan debugging atau modifikasi SQL;- Saat ada perubahan template SQL, perlu memanggil
saveuntuk menyimpan.
Penjelasan Parameter
options run / runById
options save
Variabel Template SQL dan Parameter Binding
Variabel Template {{ctx.xxx}}
Di SQL dapat menggunakan {{ctx.xxx}} untuk mereferensikan variabel konteks, akan di-resolve menjadi nilai aktual sebelum eksekusi:
Sumber variabel yang dapat direferensikan sama dengan ctx.getVar() (seperti ctx.user.*, ctx.record.*, ctx.defineProperty kustom, dll.).
Parameter Binding
- Parameter: di SQL menggunakan
$name,bindmeneruskan objek{ name: value }
Contoh
Eksekusi SQL Sementara (Perlu Izin Konfigurasi SQL)
Menggunakan Variabel Template
Menyimpan Template dan Menggunakan Kembali
List Pagination (SQLResource)
Hubungan dengan ctx.resource, ctx.request
ctx.sql membungkus API flowSql, khusus untuk skenario SQL; ctx.request dapat memanggil API apa pun.
Hal yang Perlu Diperhatikan
- Gunakan parameter binding (
$name) bukan penggabungan string, untuk menghindari SQL injection - Saat
type: 'selectVar'mengembalikan nilai scalar, biasanya digunakan untukCOUNT,SUM, dll. - Variabel template
{{ctx.xxx}}di-resolve sebelum eksekusi, pastikan variabel yang sesuai sudah didefinisikan dalam konteks
Terkait
- ctx.resource: Resource data, SQLResource internal akan memanggil API
flowSql - ctx.initResource(): Inisialisasi SQLResource untuk skenario list pagination, dll.
- ctx.request(): HTTP request umum

