6 let mut test = Test::new("Add column");
10 name = "create_user_table"
27 test.second_migration(
29 name = "add_first_and_last_name_columns"
35 up = "(STRING_TO_ARRAY(name, ' '))[1]"
46 up = "(STRING_TO_ARRAY(name, ' '))[2]"
55 test.after_first(|db| {
56 // Insert some test users
59 INSERT INTO users (id, name) VALUES
67 test.intermediate(|old_db, new_db| {
68 // Check that the existing users have the new columns populated
69 let expected = vec![("John", "Doe"), ("Jane", "Doe")];
71 .query("SELECT first, last FROM users ORDER BY id", &[],)
74 .map(|row| (row.get("first"), row.get("last")))
77 // Insert data using old schema and make sure the new columns are populated
79 .simple_query("INSERT INTO users (id, name) VALUES (3, 'Test Testsson')")
81 let (first_name, last_name): (String, String) = new_db
82 .query_one("SELECT first, last from users WHERE id = 3", &[])
83 .map(|row| (row.get("first"), row.get("last")))
87 (first_name.as_ref(), last_name.as_ref())
91 test.after_completion(|db| {
92 let expected = vec![("John", "Doe"), ("Jane", "Doe"), ("Test", "Testsson")];
94 .query("SELECT first, last FROM users ORDER BY id", &[],)
97 .map(|row| (row.get("first"), row.get("last")))
101 test.after_abort(|db| {
102 let expected = vec![("John Doe"), ("Jane Doe"), ("Test Testsson")];
104 .query("SELECT name FROM users ORDER BY id", &[],)
107 .map(|row| row.get::<'_, _, String>("name"))
115fn add_column_nullable() {
116 let mut test = Test::new("Add nullable column");
118 test.first_migration(
120 name = "create_users_table"
123 type = "create_table"
133 test.second_migration(
135 name = "add_nullable_name_column"
147 test.after_first(|db| {
148 // Insert some test values
151 INSERT INTO users (id) VALUES (1), (2);
157 test.intermediate(|old_db, new_db| {
158 // Ensure existing data got updated
159 let expected: Vec<Option<String>> = vec![None, None];
161 .query("SELECT name FROM users ORDER BY id", &[],)
164 .map(|row| row.get::<_, Option<String>>("name"))
167 // Insert data using old schema and ensure new column is NULL
169 .simple_query("INSERT INTO users (id) VALUES (3)")
171 let name: Option<String> = new_db
172 .query_one("SELECT name from users WHERE id = 3", &[])
173 .map(|row| (row.get("name")))
175 assert_eq!(None, name);
177 // Ensure data can be inserted against new schema
179 .simple_query("INSERT INTO users (id, name) VALUES (4, 'Test Testsson'), (5, NULL)")
183 test.after_completion(|db| {
184 let expected: Vec<Option<String>> =
185 vec![None, None, None, Some("Test Testsson".to_string()), None];
186 let result: Vec<Option<String>> = db
187 .query("SELECT id, name FROM users ORDER BY id", &[])
190 .map(|row| row.get("name"))
193 assert_eq!(result, expected);
200fn add_column_with_default() {
201 let mut test = Test::new("Add column with default value");
203 test.first_migration(
205 name = "create_users_table"
208 type = "create_table"
218 test.second_migration(
220 name = "add_name_column_with_default"
230 default = "'DEFAULT'"
234 test.after_first(|db| {
235 // Insert some test values
236 db.simple_query("INSERT INTO users (id) VALUES (1), (2)")
240 test.intermediate(|old_db, new_db| {
241 // Ensure existing data got updated with defaults
242 let expected = vec!["DEFAULT".to_string(), "DEFAULT".to_string()];
244 .query("SELECT name FROM users ORDER BY id", &[],)
247 .map(|row| row.get::<_, String>("name"))
250 // Insert data using old schema and ensure new column gets the default value
252 .simple_query("INSERT INTO users (id) VALUES (3)")
254 let name: String = new_db
255 .query_one("SELECT name from users WHERE id = 3", &[])
256 .map(|row| row.get("name"))
258 assert_eq!("DEFAULT", name);
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list