Batch Operations
Run multiple SQL statements in a single round-trip. Batch operations are transactional — if any statement fails, all are rolled back.
Basic batch
Section titled “Basic batch”const results = await sdk.db.batch([ { sql: 'INSERT INTO orders (id, user_id, total) VALUES (?, ?, ?)', params: [orderId, userId, total] }, { sql: 'UPDATE inventory SET stock = stock - ? WHERE product_id = ?', params: [quantity, productId] }, { sql: 'INSERT INTO audit_log (action, entity_id, user_id, created_at) VALUES (?, ?, ?, ?)', params: ['order_created', orderId, userId, Date.now()] }])results is an array — one entry per statement, each with { results: T[] }.
Mixed read/write
Section titled “Mixed read/write”const [newPost, _updated] = await sdk.db.batch([ { sql: 'INSERT INTO posts (id, title) VALUES (?, ?) RETURNING *', params: [newId, title] }, { sql: 'UPDATE users SET post_count = post_count + 1 WHERE id = ?', params: [userId] }])
const post = newPost.results[0]Bulk insert
Section titled “Bulk insert”const items = [ { id: '1', name: 'Item A', price: 10 }, { id: '2', name: 'Item B', price: 20 }, { id: '3', name: 'Item C', price: 30 },]
await sdk.db.batch( items.map(item => ({ sql: 'INSERT INTO products (id, name, price) VALUES (?, ?, ?)', params: [item.id, item.name, item.price] })))Error handling
Section titled “Error handling”try { await sdk.db.batch([ { sql: 'INSERT INTO orders ...', params: [...] }, { sql: 'UPDATE inventory ...', params: [...] }, ])} catch (err) { // If any statement throws, the entire batch is rolled back console.error('Batch failed, all changes rolled back:', err)}