DocumentDB SQL - Integrasi JavaScript
Saat ini JavaScript ada di mana-mana, dan tidak hanya di browser. DocumentDB merangkul JavaScript sebagai semacam T-SQL modern dan mendukung eksekusi transaksional logika JavaScript secara native, tepat di dalam mesin database. DocumentDB menyediakan model pemrograman untuk mengeksekusi logika aplikasi berbasis JavaScript langsung pada koleksi dalam hal prosedur dan pemicu yang tersimpan.
Mari kita lihat contoh di mana kita membuat prosedur penyimpanan sederhana. Berikut langkah-langkahnya -
Step 1 - Buat aplikasi konsol baru.
Step 2- Tambahkan .NET SDK dari NuGet. Kami menggunakan .NET SDK di sini, yang berarti bahwa kami akan menulis beberapa kode C # untuk membuat, menjalankan, dan kemudian menghapus prosedur tersimpan kami, tetapi prosedur tersimpan itu sendiri ditulis dalam JavaScript.
Step 3 - Klik kanan pada proyek di penjelajah Solusi.
Step 4 - Tambahkan file JavaScript baru untuk prosedur tersimpan dan beri nama HelloWorldStoreProce.js
Setiap prosedur yang disimpan hanyalah fungsi JavaScript jadi kami akan membuat fungsi baru dan tentu saja kami juga akan memberi nama fungsi ini HelloWorldStoreProce. Tidak masalah jika kita memberi nama pada fungsi tersebut. DocumentDB hanya akan merujuk ke prosedur tersimpan ini dengan Id yang kami berikan saat kami membuatnya.
function HelloWorldStoreProce() {
var context = getContext();
var response = context.getResponse();
response.setBody('Hello, and welcome to DocumentDB!');
}
Semua prosedur tersimpan yang dilakukan adalah mendapatkan objek respons dari konteks dan memanggilnya setBodymetode untuk mengembalikan string ke pemanggil. Dalam kode C #, kita akan membuat prosedur tersimpan, menjalankannya, dan kemudian menghapusnya.
Prosedur yang disimpan memiliki cakupan per koleksi, oleh karena itu kita memerlukan Tautan Otomatis koleksi untuk membuat prosedur tersimpan.
Step 5 - Kueri pertama untuk myfirstdb database dan kemudian untuk MyCollection koleksi.
Membuat prosedur tersimpan sama seperti membuat sumber daya lain di DocumentDB.
private async static Task SimpleStoredProcDemo() {
var endpoint = "https://azuredocdbdemo.documents.azure.com:443/";
var masterKey =
"BBhjI0gxdVPdDbS4diTjdloJq7Fp4L5RO/StTt6UtEufDM78qM2CtBZWbyVwFPSJIm8AcfDu2O+AfV T+TYUnBQ==";
using (var client = new DocumentClient(new Uri(endpoint), masterKey)) {
// Get database
Database database = client
.CreateDatabaseQuery("SELECT * FROM c WHERE c.id = 'myfirstdb'")
.AsEnumerable()
.First();
// Get collection
DocumentCollection collection = client
.CreateDocumentCollectionQuery(database.CollectionsLink, "SELECT * FROM
c WHERE c.id = 'MyCollection'")
.AsEnumerable()
.First();
// Create stored procedure
var sprocBody = File.ReadAllText(@"..\..\HelloWorldStoreProce.js");
var sprocDefinition = new StoredProcedure {
Id = "HelloWorldStoreProce",
Body = sprocBody
};
StoredProcedure sproc = await client.
CreateStoredProcedureAsync(collection.SelfLink, sprocDefinition);
Console.WriteLine("Created stored procedure {0} ({1})",
sproc.Id, sproc.ResourceId);
// Execute stored procedure
var result = await client.ExecuteStoredProcedureAsync
(sproc.SelfLink); Console.WriteLine("Executed stored procedure; response = {0}", result.Response); // Delete stored procedure await client.DeleteStoredProcedureAsync(sproc.SelfLink); Console.WriteLine("Deleted stored procedure {0} ({1})", sproc.Id, sproc.ResourceId); } }
Step 6 - Pertama-tama buat objek definisi dengan Id untuk sumber daya baru dan kemudian panggil salah satu metode Buat di DocumentClientobyek. Dalam kasus prosedur tersimpan, definisi menyertakan Id dan kode JavaScript sebenarnya yang ingin Anda kirimkan ke server.
Step 7 - Panggil File.ReadAllText untuk mengekstrak kode prosedur tersimpan dari file JS.
Step 8 - Tetapkan kode prosedur tersimpan ke properti tubuh objek definisi.
Sejauh menyangkut DocumentDB, Id yang kami tentukan di sini, dalam definisi, adalah nama prosedur tersimpan, terlepas dari apa yang sebenarnya kami beri nama untuk fungsi JavaScript.
Namun demikian, saat membuat prosedur tersimpan dan objek sisi server lainnya, disarankan agar kita memberi nama fungsi JavaScript dan nama fungsi tersebut cocok dengan Id yang telah kita tetapkan dalam definisi untuk DocumentDB.
Step 9 - Panggil CreateStoredProcedureAsync, melewati SelfLink Untuk MyCollectionkoleksi dan definisi prosedur tersimpan. Ini menciptakan prosedur tersimpan danResourceId DocumentDB yang ditugaskan padanya.
Step 10 - Panggil prosedur tersimpan. ExecuteStoredProcedureAsyncmengambil parameter tipe yang Anda setel ke tipe data yang diharapkan dari nilai yang dikembalikan oleh prosedur tersimpan, yang dapat Anda tentukan hanya sebagai objek jika Anda ingin objek dinamis dikembalikan. Itu adalah objek yang propertinya akan terikat pada waktu proses.
Dalam contoh ini kita tahu bahwa prosedur tersimpan kita hanya mengembalikan sebuah string dan kita memanggil ExecuteStoredProcedureAsync<string>.
Berikut implementasi lengkap file Program.cs.
using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.Documents.Linq;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DocumentDBStoreProce {
class Program {
private static void Main(string[] args) {
Task.Run(async () => {
await SimpleStoredProcDemo();
}).Wait();
}
private async static Task SimpleStoredProcDemo() {
var endpoint = "https://azuredocdbdemo.documents.azure.com:443/";
var masterKey =
"BBhjI0gxdVPdDbS4diTjdloJq7Fp4L5RO/StTt6UtEufDM78qM2CtBZWbyVwFPSJIm8AcfDu2O+AfV T+TYUnBQ==";
using (var client = new DocumentClient(new Uri(endpoint), masterKey)) {
// Get database
Database database = client
.CreateDatabaseQuery("SELECT * FROM c WHERE c.id = 'myfirstdb'")
.AsEnumerable()
.First();
// Get collection
DocumentCollection collection = client
.CreateDocumentCollectionQuery(database.CollectionsLink,
"SELECT * FROM c WHERE c.id = 'MyCollection'")
.AsEnumerable()
.First();
// Create stored procedure
var sprocBody = File.ReadAllText(@"..\..\HelloWorldStoreProce.js");
var sprocDefinition = new StoredProcedure {
Id = "HelloWorldStoreProce",
Body = sprocBody
};
StoredProcedure sproc = await client
.CreateStoredProcedureAsync(collection.SelfLink, sprocDefinition);
Console.WriteLine("Created stored procedure {0} ({1})", sproc
.Id, sproc.ResourceId);
// Execute stored procedure
var result = await client
.ExecuteStoredProcedureAsync<string>(sproc.SelfLink);
Console.WriteLine("Executed stored procedure; response = {0}",
result.Response);
// Delete stored procedure
await client.DeleteStoredProcedureAsync(sproc.SelfLink);
Console.WriteLine("Deleted stored procedure {0} ({1})",
sproc.Id, sproc.ResourceId);
}
}
}
}
Ketika kode di atas dijalankan, ini menghasilkan keluaran sebagai berikut.
Created stored procedure HelloWorldStoreProce (Ic8LAMEUVgACAAAAAAAAgA==)
Executed stored procedure; response = Hello, and welcome to DocumentDB!
Seperti yang terlihat pada keluaran di atas, properti respons memiliki "Halo, dan selamat datang di DocumentDB!" dikembalikan oleh prosedur tersimpan kami.