Skip to content

DDL and Insertion

db.execute(sql) works for both DDL (CREATE TABLE, DROP TABLE) and DML that returns no rows (INSERT, UPDATE, DELETE). It returns Result<int, DbError> — unwrap or handle the error, and on success the int is the number of affected rows, useful for confirming the operation produced the expected effect.

For multi-line DDL, use the block literal ```sql ... ``` — the same as a heredoc string, but with SQL syntax highlighting in the editor.

Creates the products table, inserts three rows, and verifies the return of execute.

02-create-and-insert.zolo
// Feature: Database — `db.execute(sql)` for DDL and DML

// Syntax: `db.execute("...").unwrap()` — returns Result<int, DbError>;

//         the int is the number of affected rows.

// When to use: create schema, populate tables, any SQL that does not

// return rows.


use std::Database

let db = Database.open("sqlite://:memory:").unwrap()
defer db.close()

db.execute(```sql
  CREATE TABLE products (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    price REAL
  )
```).unwrap()

let inserted = db.execute("INSERT INTO products (id, name, price) VALUES (1, 'Widget', 9.99)").unwrap()
print("inserted: {inserted}")
// expected: inserted: 1


db.execute(sql"INSERT INTO products (id, name, price) VALUES (2, 'Gadget', 19.99)").unwrap()
db.execute(sql"INSERT INTO products (id, name, price) VALUES (3, 'Doohickey', 4.99)").unwrap()
print("3 products inserted")
// expected: 3 products inserted

Requires the Zolo CLI/host — open in the playground or run locally.

Challenge

Add a fourth product and then run an UPDATE that changes the price of all items with price < 10. How many rows were affected?

See also

enespt-br