nvm I figured it out using `execute()` on a giant sql insert statement string ```ts let masiveInsert
nvm I figured it out using
execute() on a giant sql insert statement stringlet masiveInsert = "";
for (let i = 0; i < newBucketObjects.length; i++) {
const Key = newBucketObjects[i].Key;
const ETag = newBucketObjects[i].ETag;
let insert = `INSERT OR IGNORE INTO r2_objects_metadata (object_key, eTag) VALUES ('${Key}', '${ETag}');`;
masiveInsert += '\n';
masiveInsert += insert;
}
await db.exec(masiveInsert);A prepared SQL statement must contain only one statement . It's a useful kind of query that avoid one round trip.D1_ERROR: no such table: main.lists when a trigger is ran. Might be something to do with main., but I don't know where it's coming from. Here is the trigger declaration:const prepared = db.prepare("INSERT OR IGNORE INTO r2_objects_metadata (object_key, eTag) VALUES (?1, ?2)");
const queriesToRun = newBucketObjects.map(bucketObject => prepared.bind(bucketObject.Key, bucketObject.ETag));
await db.batch(queriesToRun);[[d1_databases]]
binding = "DB" # available in your Worker on env.DB
database_name = "prod-d1-tutorial"
database_id = "<unique-ID-for-your-database>"
[[d1_databases]]
binding = "DB2" # available in your Worker on env.DB
database_name = "prod-d1-tutorial-v2"
database_id = "<unique-ID-for-your-database>"To execute a transaction, please use the state.storage.transaction() API instead of the SQL BEGIN TRANSACTION or SAVEPOINT statements. The JavaScript API is safer because it will automatically roll back on exceptions, and because it interacts correctly with Durable Objects' automatic atomic write coalescing.BEGIN TRANSACTION;
INSERT INTO user (email, name) VALUES ("my@email.com", "name");
SELECT last_insert_rowid() INTO @lastUserId;
INSERT INTO oauth (provider, user_id) VALUES ("google", @lastUserId);
COMMIT;
SELECT @lastUserID🌀 Mapping SQL input into an array of statements
🌀 Parsing 180 statements
🌀 Executing on database (...):
✘ [ERROR] A request to the Cloudflare API (/accounts/.../d1/database/.../query) failed.
not authorized [code: 7500]sqlite3 f025eb6fc80fddcfe00b28c2b12457379be412d5d8d8fd306b42c59a9536d18c.sqlite .dump > data.sqlD1_ERROR: no such table: main.listsCREATE TRIGGER limit_user_lists
BEFORE INSERT ON list_member
FOR EACH ROW
BEGIN
SELECT (CASE
WHEN (SELECT COUNT(*)
FROM list_member lm
INNER JOIN lists l ON lm.listId = l.id
WHERE lm.userId = NEW.userId AND l.deteled = false) >= 20
THEN
RAISE(ABORT, 'User has reached the limit of 20 lists')
END);
END;