ramsql
ramsql copied to clipboard
Deadlock with multi-statement exec
If you do an exec call with multiple statements, it creates a deadlock. Any help debugging this would be appreciated.
(You can add this function to driver_test.go to see the failure)
` func TestBigBatch(t *testing.T) { log.UseTestLogger(t)
batch :=
`CREATE TABLE address (id BIGSERIAL PRIMARY KEY, street TEXT, street_number INT);
CREATE TABLE user_addresses (address_id INT, user_id INT);
INSERT INTO address (street, street_number) VALUES ('rue victor hugo', 32);
INSERT INTO address (street, street_number) VALUES ('boulevard de la république', 23);
INSERT INTO address (street, street_number) VALUES ('rue charles martel', 5);
INSERT INTO address (street, street_number) VALUES ('rue victoire', 323);
INSERT INTO address (street, street_number) VALUES ('boulevard de la liberté', 2);
INSERT INTO address (street, street_number) VALUES ('avenue des champs', 12);
INSERT INTO user_addresses (address_id, user_id) VALUES (2, 1);
INSERT INTO user_addresses (address_id, user_id) VALUES (4, 1);
INSERT INTO user_addresses (address_id, user_id) VALUES (2, 2);
INSERT INTO user_addresses (address_id, user_id) VALUES (2, 3);
INSERT INTO user_addresses (address_id, user_id) VALUES (4, 4);
INSERT INTO user_addresses (address_id, user_id) VALUES (4, 5);`
db, err := sql.Open("ramsql", "TestBigBatch")
if err != nil {
t.Fatalf("sql.Open : Error : %s\n", err)
}
defer db.Close()
_, err = db.Exec(batch)
if err != nil {
t.Fatalf("sql.Exec: Error: %s\n", err)
}
addresses, err := LoadUserAddresses(db, 1)
if err != nil {
t.Fatalf("Too bad! unexpected error: %s", err)
}
if len(addresses) != 2 {
t.Fatalf("Expected 2 addresses, got %d", len(addresses))
}
} `
Hi,
Thanks for the failing unit test, I'll look into that