@@ -113,7 +113,6 @@ fn alter_column_set_not_null() {
113 table = "users"
113 table = "users"
114 column = "name"
114 column = "name"
115 up = "COALESCE(name, 'TEST_DEFAULT_VALUE')"
115 up = "COALESCE(name, 'TEST_DEFAULT_VALUE')"
118 [actions.changes]
117 [actions.changes]
119 nullable = false
118 nullable = false
@@ -159,6 +158,106 @@ fn alter_column_set_not_null() {
159 .query_one("SELECT name from users WHERE id = 4", &[])
158 .query_one("SELECT name from users WHERE id = 4", &[])
160 .unwrap();
159 .unwrap();
161 assert_eq!("Jane Doe", result.get::<_, &str>("name"));
160 assert_eq!("Jane Doe", result.get::<_, &str>("name"));
162+ // Ensure NULL can't be inserted using the new schema
163+ let result = new_db.simple_query("INSERT INTO users (id, name) VALUES (5, NULL)");
164+ assert!(result.is_err(), "expected insert to fail");
167+ test.after_completion(|db| {
168+ // Ensure NULL can't be inserted
169+ let result = db.simple_query("INSERT INTO users (id, name) VALUES (5, NULL)");
170+ assert!(result.is_err(), "expected insert to fail");
173+ test.after_abort(|db| {
174+ // Ensure NULL can be inserted
175+ let result = db.simple_query("INSERT INTO users (id, name) VALUES (5, NULL)");
176+ assert!(result.is_ok(), "expected insert to succeed");
183+fn alter_column_set_nullable() {
184+ let mut test = Test::new("Set column nullable");
186+ test.first_migration(
188+ name = "create_user_table"
191+ type = "create_table"
193+ primary_key = ["id"]
206+ test.second_migration(
208+ name = "set_name_nullable"
211+ type = "alter_column"
214+ down = "COALESCE(name, 'TEST_DEFAULT_VALUE')"
221+ test.after_first(|db| {
222+ // Insert a test user
225+ INSERT INTO users (id, name) VALUES
232+ test.intermediate(|old_db, new_db| {
233+ // Insert data using new schema and make sure the old schema gets correct values
235+ .simple_query("INSERT INTO users (id, name) VALUES (2, NULL)")
238+ .query_one("SELECT name from users WHERE id = 2", &[])
240+ assert_eq!("TEST_DEFAULT_VALUE", result.get::<_, &str>("name"));
242+ // Ensure NULL can't be inserted using the old schema
243+ let result = old_db.simple_query("INSERT INTO users (id, name) VALUES (3, NULL)");
244+ assert!(result.is_err(), "expected insert to fail");
246+ // Ensure NULL can be inserted using the new schema
247+ let result = new_db.simple_query("INSERT INTO users (id, name) VALUES (4, NULL)");
248+ assert!(result.is_ok(), "expected insert to succeed");
251+ test.after_completion(|db| {
252+ // Ensure NULL can be inserted
253+ let result = db.simple_query("INSERT INTO users (id, name) VALUES (5, NULL)");
254+ assert!(result.is_ok(), "expected insert to succeed");
257+ test.after_abort(|db| {
258+ // Ensure NULL can't be inserted
259+ let result = db.simple_query("INSERT INTO users (id, name) VALUES (5, NULL)");
260+ assert!(result.is_err(), "expected insert to fail");
164 test.run();
263 test.run();