| 1 | import db.sqlite |
| 2 | |
| 3 | enum Number { |
| 4 | zero |
| 5 | one |
| 6 | two |
| 7 | four = 4 |
| 8 | five |
| 9 | } |
| 10 | |
| 11 | enum RecordStatus as u8 { |
| 12 | created |
| 13 | running |
| 14 | finished |
| 15 | } |
| 16 | |
| 17 | struct Counter { |
| 18 | id int @[primary; sql: serial] |
| 19 | number Number |
| 20 | } |
| 21 | |
| 22 | struct Recording { |
| 23 | id string @[primary] |
| 24 | status RecordStatus |
| 25 | } |
| 26 | |
| 27 | fn test_orm_enum() { |
| 28 | db := sqlite.connect(':memory:') or { panic(err) } |
| 29 | sql db { |
| 30 | create table Counter |
| 31 | }! |
| 32 | |
| 33 | counter1 := Counter{ |
| 34 | number: .two |
| 35 | } |
| 36 | sql db { |
| 37 | insert counter1 into Counter |
| 38 | }! |
| 39 | |
| 40 | mut counters := sql db { |
| 41 | select from Counter |
| 42 | }! |
| 43 | |
| 44 | assert counters.first().number == counter1.number |
| 45 | |
| 46 | // test short enum syntax |
| 47 | sql db { |
| 48 | update Counter set number = .five where number == .two |
| 49 | }! |
| 50 | |
| 51 | counters = sql db { |
| 52 | select from Counter |
| 53 | }! |
| 54 | |
| 55 | assert counters.first().number == .five |
| 56 | } |
| 57 | |
| 58 | fn test_orm_u8_enum_update_from_selector_expr() { |
| 59 | db := sqlite.connect(':memory:') or { panic(err) } |
| 60 | sql db { |
| 61 | create table Recording |
| 62 | }! |
| 63 | |
| 64 | initial := Recording{ |
| 65 | id: 'record-1' |
| 66 | status: .created |
| 67 | } |
| 68 | sql db { |
| 69 | insert initial into Recording |
| 70 | }! |
| 71 | |
| 72 | update_data := Recording{ |
| 73 | id: initial.id |
| 74 | status: .finished |
| 75 | } |
| 76 | sql db { |
| 77 | update Recording set status = update_data.status where id == update_data.id |
| 78 | }! |
| 79 | |
| 80 | rows := sql db { |
| 81 | select from Recording where id == update_data.id |
| 82 | }! |
| 83 | |
| 84 | assert rows.len == 1 |
| 85 | assert rows[0].status == .finished |
| 86 | } |
| 87 | |