Skip to content

Commit 3522859

Browse files
committed
sql: use tuple struct for StatementResult::Begin
1 parent 630e0dc commit 3522859

File tree

8 files changed

+51
-41
lines changed

8 files changed

+51
-41
lines changed

src/bin/toysql.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ Transactions: {active_txns} active, {versions} total
174174
fn execute_sql(&mut self, statement: &str) -> Result<()> {
175175
use StatementResult::*;
176176
match self.client.execute(statement)? {
177-
Begin { state } => match state.read_only {
177+
Begin(state) => match state.read_only {
178178
true => println!("Began read-only transaction at version {}", state.version),
179179
false => println!("Began transaction {}", state.version),
180180
},

src/client.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ impl Client {
4444
};
4545
// Update the transaction state.
4646
match &result {
47-
StatementResult::Begin { state } => self.txn = Some(state.clone()),
47+
StatementResult::Begin(state) => self.txn = Some(state.clone()),
4848
StatementResult::Commit { .. } => self.txn = None,
4949
StatementResult::Rollback { .. } => self.txn = None,
5050
_ => {}

src/sql/engine/session.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ impl<'a, E: Engine<'a>> Session<'a, E> {
4646
};
4747
let state = txn.state().clone();
4848
self.txn = Some(txn);
49-
StatementResult::Begin { state }
49+
StatementResult::Begin(state)
5050
}
5151
ast::Statement::Commit => {
5252
let Some(txn) = self.txn.take() else {
@@ -125,7 +125,7 @@ impl<'a, E: Engine<'a>> Drop for Session<'a, E> {
125125
/// A session statement result. Sent across the wire to SQL clients.
126126
#[derive(Debug, PartialEq, Serialize, Deserialize)]
127127
pub enum StatementResult {
128-
Begin { state: mvcc::TransactionState },
128+
Begin(mvcc::TransactionState),
129129
Commit { version: mvcc::Version },
130130
Rollback { version: mvcc::Version },
131131
Explain(Plan),

src/sql/testscripts/transactions/begin

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ c1:[result,ops]> BEGIN
1111
---
1212
c1: set mvcc:NextVersion → 4 ["\x00" → "\x04"]
1313
c1: set mvcc:TxnActive(3) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x03" → ""]
14-
c1: Begin { state: TransactionState { version: 3, read_only: false, active: {} } }
14+
c1: Begin(TransactionState { version: 3, read_only: false, active: {} })
1515

1616
# Starting another transaction for c1 errors.
1717
c1:!> BEGIN
@@ -27,7 +27,7 @@ c2:[result,ops]> BEGIN
2727
c2: set mvcc:NextVersion → 5 ["\x00" → "\x05"]
2828
c2: set mvcc:TxnActiveSnapshot(4) → {3} ["\x02\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03"]
2929
c2: set mvcc:TxnActive(4) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x04" → ""]
30-
c2: Begin { state: TransactionState { version: 4, read_only: false, active: {3} } }
30+
c2: Begin(TransactionState { version: 4, read_only: false, active: {3} })
3131

3232
# A read-only transaction doesn't allocate a new version, and doesn't perform
3333
# any storage engine writes. It does capture an active set though, and it can't
@@ -36,7 +36,7 @@ c3:[result,ops]> BEGIN READ ONLY
3636
c3:!> INSERT INTO test VALUES (0, '')
3737
c3:> ROLLBACK
3838
---
39-
c3: Begin { state: TransactionState { version: 5, read_only: true, active: {3, 4} } }
39+
c3: Begin(TransactionState { version: 5, read_only: true, active: {3, 4} })
4040
c3: Error: invalid input: primary key 0 already exists
4141

4242
# c1 writes a value and commits.
@@ -51,7 +51,7 @@ c3:[result,ops]> BEGIN READ ONLY AS OF SYSTEM TIME 1
5151
c3:!> SELECT * FROM test
5252
c3:> ROLLBACK
5353
---
54-
c3: Begin { state: TransactionState { version: 1, read_only: true, active: {} } }
54+
c3: Begin(TransactionState { version: 1, read_only: true, active: {} })
5555
c3: Error: invalid input: table test does not exist
5656

5757
# It sees the table at version 2, but no rows. The row is visible
@@ -61,13 +61,13 @@ c3:[result,ops]> BEGIN READ ONLY AS OF SYSTEM TIME 2
6161
c3:> SELECT * FROM test
6262
c3:> ROLLBACK
6363
---
64-
c3: Begin { state: TransactionState { version: 2, read_only: true, active: {} } }
64+
c3: Begin(TransactionState { version: 2, read_only: true, active: {} })
6565

6666
c3:[result,ops]> BEGIN READ ONLY AS OF SYSTEM TIME 3
6767
c3:> SELECT * FROM test
6868
c3:> ROLLBACK
6969
---
70-
c3: Begin { state: TransactionState { version: 3, read_only: true, active: {} } }
70+
c3: Begin(TransactionState { version: 3, read_only: true, active: {} })
7171
c3: 0, ''
7272

7373
# At version 4, we inherit c2's active set which excludes c1, and still can't
@@ -76,5 +76,5 @@ c3:[result,ops]> BEGIN READ ONLY AS OF SYSTEM TIME 4
7676
c3:> SELECT * FROM test
7777
c3:> ROLLBACK
7878
---
79-
c3: Begin { state: TransactionState { version: 4, read_only: true, active: {3} } }
79+
c3: Begin(TransactionState { version: 4, read_only: true, active: {3} })
8080
c3: 0, ''

src/sql/testscripts/transactions/commit

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ ok
1111
---
1212
set mvcc:NextVersion → 3 ["\x00" → "\x03"]
1313
set mvcc:TxnActive(2) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x02" → ""]
14-
Begin { state: TransactionState { version: 2, read_only: false, active: {} } }
14+
Begin(TransactionState { version: 2, read_only: false, active: {} })
1515
set mvcc:TxnWrite(2, sql:Row(test, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x02test\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""]
1616
set mvcc:Version(sql:Row(test, 1), 2) → 1,'a' ["\x04\x02test\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x06\x02\x02\x02\x04\x01a"]
1717
set mvcc:TxnWrite(2, sql:Row(test, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x02test\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""]
@@ -39,7 +39,7 @@ c2:[ops,result]> COMMIT
3939
c2: set mvcc:NextVersion → 5 ["\x00" → "\x05"]
4040
c2: set mvcc:TxnActiveSnapshot(4) → {3} ["\x02\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03"]
4141
c2: set mvcc:TxnActive(4) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x04" → ""]
42-
c2: Begin { state: TransactionState { version: 4, read_only: false, active: {3} } }
42+
c2: Begin(TransactionState { version: 4, read_only: false, active: {3} })
4343
c2: delete mvcc:TxnActive(4) ["\x01\x00\x00\x00\x00\x00\x00\x00\x04"]
4444
c2: Commit { version: 4 }
4545

src/sql/testscripts/transactions/isolation

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ ok
3838
c4:[result]> BEGIN
3939
c4:> INSERT INTO test VALUES (4, 'd')
4040
---
41-
c4: Begin { state: TransactionState { version: 4, read_only: false, active: {2, 3} } }
41+
c4: Begin(TransactionState { version: 4, read_only: false, active: {2, 3} })
4242

4343
# Commit c2.
4444
c2:> COMMIT

src/sql/testscripts/transactions/rollback

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ ok
1111
---
1212
set mvcc:NextVersion → 3 ["\x00" → "\x03"]
1313
set mvcc:TxnActive(2) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x02" → ""]
14-
Begin { state: TransactionState { version: 2, read_only: false, active: {} } }
14+
Begin(TransactionState { version: 2, read_only: false, active: {} })
1515
set mvcc:TxnWrite(2, sql:Row(test, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x02test\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""]
1616
set mvcc:Version(sql:Row(test, 1), 2) → 1,'a' ["\x04\x02test\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x06\x02\x02\x02\x04\x01a"]
1717
set mvcc:TxnWrite(2, sql:Row(test, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x02test\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""]
@@ -41,7 +41,7 @@ c2:[ops,result]> ROLLBACK
4141
c2: set mvcc:NextVersion → 5 ["\x00" → "\x05"]
4242
c2: set mvcc:TxnActiveSnapshot(4) → {3} ["\x02\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03"]
4343
c2: set mvcc:TxnActive(4) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x04" → ""]
44-
c2: Begin { state: TransactionState { version: 4, read_only: false, active: {3} } }
44+
c2: Begin(TransactionState { version: 4, read_only: false, active: {3} })
4545
c2: delete mvcc:TxnActive(4) ["\x01\x00\x00\x00\x00\x00\x00\x00\x04"]
4646
c2: Rollback { version: 4 }
4747

tests/e2e/client.rs

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -244,9 +244,11 @@ fn execute_txn() -> Result<()> {
244244
// Committing a change in a txn should work
245245
assert_eq!(
246246
c.execute("BEGIN")?,
247-
StatementResult::Begin {
248-
state: mvcc::TransactionState { version: 2, read_only: false, active: BTreeSet::new() }
249-
}
247+
StatementResult::Begin(mvcc::TransactionState {
248+
version: 2,
249+
read_only: false,
250+
active: BTreeSet::new()
251+
})
250252
);
251253
assert_eq!(
252254
c.txn(),
@@ -264,9 +266,11 @@ fn execute_txn() -> Result<()> {
264266
// Rolling back a change in a txn should also work
265267
assert_eq!(
266268
c.execute("BEGIN")?,
267-
StatementResult::Begin {
268-
state: mvcc::TransactionState { version: 3, read_only: false, active: BTreeSet::new() }
269-
}
269+
StatementResult::Begin(mvcc::TransactionState {
270+
version: 3,
271+
read_only: false,
272+
active: BTreeSet::new()
273+
})
270274
);
271275
assert_eq!(
272276
c.txn(),
@@ -284,9 +288,11 @@ fn execute_txn() -> Result<()> {
284288
// Starting a read-only txn should block writes
285289
assert_eq!(
286290
c.execute("BEGIN READ ONLY")?,
287-
StatementResult::Begin {
288-
state: mvcc::TransactionState { version: 4, read_only: true, active: BTreeSet::new() }
289-
}
291+
StatementResult::Begin(mvcc::TransactionState {
292+
version: 4,
293+
read_only: true,
294+
active: BTreeSet::new()
295+
})
290296
);
291297
assert_eq!(
292298
c.txn(),
@@ -307,9 +313,11 @@ fn execute_txn() -> Result<()> {
307313
// block writes
308314
assert_eq!(
309315
c.execute("BEGIN READ ONLY AS OF SYSTEM TIME 2")?,
310-
StatementResult::Begin {
311-
state: mvcc::TransactionState { version: 2, read_only: true, active: BTreeSet::new() }
312-
},
316+
StatementResult::Begin(mvcc::TransactionState {
317+
version: 2,
318+
read_only: true,
319+
active: BTreeSet::new()
320+
}),
313321
);
314322
assert_eq!(
315323
c.txn(),
@@ -329,9 +337,11 @@ fn execute_txn() -> Result<()> {
329337
// A txn should still be usable after an error occurs
330338
assert_eq!(
331339
c.execute("BEGIN")?,
332-
StatementResult::Begin {
333-
state: mvcc::TransactionState { version: 4, read_only: false, active: BTreeSet::new() }
334-
},
340+
StatementResult::Begin(mvcc::TransactionState {
341+
version: 4,
342+
read_only: false,
343+
active: BTreeSet::new()
344+
})
335345
);
336346
c.execute("INSERT INTO genres VALUES (5, 'Horror')")?;
337347
assert_eq!(
@@ -369,19 +379,19 @@ fn execute_txn_concurrent() -> Result<()> {
369379
// Concurrent updates should throw a serialization failure on conflict.
370380
assert_eq!(
371381
a.execute("BEGIN")?,
372-
StatementResult::Begin {
373-
state: mvcc::TransactionState { version: 2, read_only: false, active: BTreeSet::new() }
374-
},
382+
StatementResult::Begin(mvcc::TransactionState {
383+
version: 2,
384+
read_only: false,
385+
active: BTreeSet::new()
386+
})
375387
);
376388
assert_eq!(
377389
b.execute("BEGIN")?,
378-
StatementResult::Begin {
379-
state: mvcc::TransactionState {
380-
version: 3,
381-
read_only: false,
382-
active: BTreeSet::from([2])
383-
}
384-
},
390+
StatementResult::Begin(mvcc::TransactionState {
391+
version: 3,
392+
read_only: false,
393+
active: BTreeSet::from([2])
394+
})
385395
);
386396

387397
assert_row(

0 commit comments

Comments
 (0)