ctx.sql
ctx.sql cung cấp khả năng thực thi và quản lý SQL, thường dùng trong RunJS (như JSBlock, luồng sự kiện) để truy cập database trực tiếp. Hỗ trợ thực thi SQL tạm thời, thực thi template SQL đã lưu theo ID, bind tham số, biến template ({{ctx.xxx}}) và điều khiển kiểu kết quả.
Kịch bản áp dụng
Lưu ý:
ctx.sqltruy cập database qua APIflowSql, cần đảm bảo user hiện tại có quyền thực thi của data source tương ứng.
Giải thích về quyền
Logic frontend hướng đến user thông thường có thể sử dụng ctx.sql.runById(uid, options); khi cần SQL động hoặc quản lý template, cần đảm bảo role hiện tại có quyền cấu hình SQL.
Định nghĩa kiểu
Phương thức thường dùng
Lưu ý:
rundùng để debug SQL, cần quyền cấu hình;save,destroydùng để quản lý template SQL, cần quyền cấu hình;runByIdmở cho user thông thường, chỉ có thể thực thi theo template đã lưu, không thể debug hoặc sửa SQL;- Khi template SQL có thay đổi, cần gọi
saveđể lưu.
Giải thích tham số
options của run / runById
options của save
Biến template SQL và bind tham số
Biến template {{ctx.xxx}}
Trong SQL có thể sử dụng {{ctx.xxx}} để tham chiếu biến ngữ cảnh, sẽ được parse thành giá trị thực trước khi thực thi:
Nguồn biến có thể tham chiếu giống với ctx.getVar() (như ctx.user.*, ctx.record.*, ctx.defineProperty tùy chỉnh, v.v.).
Bind tham số
- Tham số: Trong SQL dùng
$name,bindtruyền object{ name: value }
Ví dụ
Thực thi SQL tạm thời (cần quyền cấu hình SQL)
Sử dụng biến template
Lưu template và tái sử dụng
List phân trang (SQLResource)
Quan hệ với ctx.resource, ctx.request
ctx.sql đóng gói API flowSql, chuyên dụng cho kịch bản SQL; ctx.request có thể gọi bất kỳ API nào.
Lưu ý
- Sử dụng bind tham số (
$name) thay vì nối chuỗi, tránh SQL injection - Khi
type: 'selectVar'trả về giá trị scalar, thường dùng choCOUNT,SUM, v.v. - Biến template
{{ctx.xxx}}được parse trước khi thực thi, đảm bảo biến tương ứng đã được định nghĩa trong ngữ cảnh
Liên quan
- ctx.resource: Resource dữ liệu, SQLResource nội bộ sẽ gọi API
flowSql - ctx.initResource(): Khởi tạo SQLResource cho list phân trang, v.v.
- ctx.request(): HTTP request thông dụng

