I want to insert a new row and then get back the row I just inserted.
use serde::{Deserialize, Serialize};
use sqlx::{FromRow, mysql::MySqlPoolOptions};
use tokio;
#[derive(Debug, Deserialize, Serialize, FromRow)]
struct Session {
    id: i32,
    name: String,
}
#[tokio::main]
async fn main() {
    let pool = MySqlPoolOptions::new()
        .max_connections(10)
        .connect("mysql://me:password@localhost/time_tracker")
        .await
        .unwrap();
    let session: Session = sqlx::query_as("INSERT INTO sessions (name) VALUES (?) RETURNING *")
        .bind("Session name")
        .fetch_one(&pool)
        .await
        .unwrap();
    println!("{session:?}");
}
The table looks like this:
MariaDB [time_tracker]> DESCRIBE sessions;
| Field | Type | Null | Key | Default | Extra | 
|---|---|---|---|---|---|
| id | int(11) | NO | PRI | NULL | auto_increment | 
| name | varchar(255) | YES | NULL | ||
| start_time | datetime | YES | NULL | ||
| end_time | datetime | YES | NULL | ||
| pay_rate | decimal(10,2) | YES | NULL | 
But I get this error. If I change it to RETURNING name I get the same error.
thread 'main' panicked at src/main.rs:22:10:
called `Result::unwrap()` on an `Err` value: ColumnNotFound("id")
If I change it to this:
    let row = sqlx::query("INSERT INTO sessions (name) VALUES (?)")
        .bind("Session name")
        .fetch_one(&pool)
        .await
        .unwrap();
I get:
thread 'main' panicked at src/main.rs:22:10:
called `Result::unwrap()` on an `Err` value: RowNotFound
The query works just fine if I do it in MariaDB directly.
MariaDB [time_tracker]> INSERT INTO sessions (name) VALUES ("Session name") RETURNING *;
| id | name | start_time | end_time | pay_rate | 
|---|---|---|---|---|
| 32 | Session name | NULL | NULL | NULL | 
What am I doing wrong?