diff --git a/src/sql/mod.rs b/src/sql/mod.rs index 46cc2058..2cd3dfcc 100644 --- a/src/sql/mod.rs +++ b/src/sql/mod.rs @@ -72,15 +72,16 @@ pub mod parser; pub mod planner; pub mod types; +/// SQL tests are implemented as goldenscripts under src/sql/testscripts. #[cfg(test)] mod tests { use super::engine::{Catalog as _, Session}; use super::parser::Parser; - use super::planner::{Node, Plan, OPTIMIZERS}; + use super::planner::{Plan, OPTIMIZERS}; use crate::encoding::format::{self, Formatter as _}; use crate::sql::engine::{Engine, Local, StatementResult}; use crate::sql::planner::{Planner, Scope}; - use crate::storage::engine::test::{self, Emit, Mirror, Operation}; + use crate::storage::engine::test as testengine; use crate::storage::{self, Engine as _}; use crossbeam::channel::Receiver; @@ -92,24 +93,25 @@ mod tests { use test_each_file::test_each_path; // Run goldenscript tests in src/sql/testscripts. - test_each_path! { in "src/sql/testscripts/optimizer" as optimizer => test_goldenscript } + test_each_path! { in "src/sql/testscripts/expressions" as expressions => test_goldenscript_expr } + test_each_path! { in "src/sql/testscripts/optimizers" as optimizers => test_goldenscript } test_each_path! { in "src/sql/testscripts/queries" as queries => test_goldenscript } test_each_path! { in "src/sql/testscripts/schema" as schema => test_goldenscript } test_each_path! { in "src/sql/testscripts/transactions" as transactions => test_goldenscript } test_each_path! { in "src/sql/testscripts/writes" as writes => test_goldenscript } - test_each_path! { in "src/sql/testscripts/expressions" as expressions => test_goldenscript_expr } /// Runs SQL goldenscripts. fn test_goldenscript(path: &std::path::Path) { - // Since the runner's Session can't reference an Engine in the same - // struct, borrow the engine. Use both a BitCask and a Memory engine, - // and mirror operations across them. Emit engine operations to op_rx. + // The runner's Session can't borrow from an Engine in the same struct, + // so pass an engine reference. Use both BitCask and Memory engines and + // mirror operations across them. Emit engine operations to op_rx. let (op_tx, op_rx) = crossbeam::channel::unbounded(); let tempdir = tempfile::TempDir::with_prefix("toydb").expect("tempdir failed"); let bitcask = storage::BitCask::new(tempdir.path().join("bitcask")).expect("bitcask failed"); let memory = storage::Memory::new(); - let engine = Local::new(Emit::new(Mirror::new(bitcask, memory), op_tx)); + let engine = + Local::new(testengine::Emit::new(testengine::Mirror::new(bitcask, memory), op_tx)); let mut runner = SQLRunner::new(&engine, op_rx); goldenscript::run(&mut runner, path).expect("goldenscript failed") @@ -124,13 +126,14 @@ mod tests { struct SQLRunner<'a> { engine: &'a TestEngine, sessions: HashMap>, - op_rx: Receiver, + op_rx: Receiver, } - type TestEngine = Local>>; + type TestEngine = + Local>>; impl<'a> SQLRunner<'a> { - fn new(engine: &'a TestEngine, op_rx: Receiver) -> Self { + fn new(engine: &'a TestEngine, op_rx: Receiver) -> Self { Self { engine, sessions: HashMap::new(), op_rx } } } @@ -139,7 +142,7 @@ mod tests { fn run(&mut self, command: &goldenscript::Command) -> Result> { let mut output = String::new(); - // Obtain a session for the command prefix. + // Obtain a session based on the command prefix ("" if none). let prefix = command.prefix.clone().unwrap_or_default(); let session = self.sessions.entry(prefix).or_insert_with(|| self.engine.session()); @@ -151,12 +154,9 @@ mod tests { let mut engine = self.engine.mvcc.engine.lock().expect("mutex failed"); let mut iter = engine.scan(..); while let Some((key, value)) = iter.next().transpose()? { - writeln!( - output, - "{} [{}]", - format::MVCC::::key_value(&key, &value), - format::Raw::key_value(&key, &value) - )?; + let fmtkv = format::MVCC::::key_value(&key, &value); + let rawkv = format::Raw::key_value(&key, &value); + writeln!(output, "{fmtkv} [{rawkv}]",)?; } return Ok(output); } @@ -175,56 +175,71 @@ mod tests { .map(|t| session.with_txn(true, |txn| txn.must_get_table(&t))) .try_collect()? }; - return Ok(schemas.into_iter().map(|s| s.to_string()).join("\n")); + return Ok(schemas.into_iter().join("\n")); } // Otherwise, fall through to SQL execution. _ => {} } - // The entire command is the statement to execute. There are no args. + // The entire command is the SQL statement. There are no args. if !command.args.is_empty() { - return Err("expressions should be given as a command with no args".into()); + return Err("SQL statements should be given as a command with no args".into()); } let input = &command.name; let mut tags = command.tags.clone(); - // Execute the statement. - let result = session.execute(input)?; + // Output the plan if requested. + if tags.remove("plan") { + let ast = Parser::new(input).parse()?; + let plan = + session.with_txn(true, |txn| Planner::new(txn).build(ast)?.optimize())?; + writeln!(output, "{plan}")?; + } - // Output optimizations if requested. + // Output plan optimizations if requested. if tags.remove("opt") { if tags.contains("plan") { - return Err("no point using both plan and opt".into()); + return Err("using both plan and opt is redundant".into()); } let ast = Parser::new(input).parse()?; let plan = session.with_txn(true, |txn| Planner::new(txn).build(ast))?; let Plan::Select(mut root) = plan else { return Err("can only use opt with SELECT plans".into()); }; - - let fmtplan = |name, node: &Node| format!("{name}:\n{node}").replace('\n', "\n "); - writeln!(output, "{}", fmtplan("Initial", &root))?; + writeln!(output, "{}", format!("Initial:\n{root}").replace('\n', "\n "))?; for (name, optimizer) in OPTIMIZERS { - let old = root.clone(); + let prev = root.clone(); root = optimizer(root)?; - if root != old { - writeln!(output, "{}", fmtplan(name, &root))?; + if root != prev { + writeln!(output, "{}", format!("{name}:\n{root}").replace('\n', "\n "))?; } } } - // Output the plan if requested. - if tags.remove("plan") { - let query = format!("EXPLAIN {input}"); - let StatementResult::Explain(plan) = session.execute(&query)? else { - return Err("unexpected explain response".into()); - }; - writeln!(output, "{plan}")?; + // Execute the statement. + let result = session.execute(input)?; + + // Output engine ops if requested. + if tags.remove("ops") { + while let Ok(op) = self.op_rx.try_recv() { + match op { + testengine::Operation::Delete { key } => { + let fmtkey = format::MVCC::::key(&key); + let rawkey = format::Raw::key(&key); + writeln!(output, "delete {fmtkey} [{rawkey}]")?; + } + testengine::Operation::Flush => writeln!(output, "flush")?, + testengine::Operation::Set { key, value } => { + let fmtkv = format::MVCC::::key_value(&key, &value); + let rawkv = format::Raw::key_value(&key, &value); + writeln!(output, "set {fmtkv} [{rawkv}]")?; + } + } + } } // Output the result if requested. SELECT results are always output. - let show_result = tags.remove("result"); match result { StatementResult::Select { columns, rows } => { if tags.remove("header") { @@ -234,37 +249,10 @@ mod tests { writeln!(output, "{}", row.into_iter().join(", "))?; } } - StatementResult::Begin { state } if show_result => { - let version = state.version; - let kind = if state.read_only { "read-only" } else { "read-write" }; - let active = state.active.iter().join(","); - writeln!(output, "v{version} {kind} active={{{active}}}")?; - } - result if show_result => writeln!(output, "{result:?}")?, + result if tags.remove("result") => writeln!(output, "{result:?}")?, _ => {} } - // Output engine ops if requested. - if tags.remove("ops") { - while let Ok(op) = self.op_rx.try_recv() { - match op { - Operation::Delete { key } => writeln!( - output, - "storage delete {} [{}]", - format::MVCC::::key(&key), - format::Raw::key(&key), - )?, - Operation::Flush => writeln!(output, "storage flush")?, - Operation::Set { key, value } => writeln!( - output, - "storage set {} [{}]", - format::MVCC::::key_value(&key, &value), - format::Raw::key_value(&key, &value), - )?, - } - } - } - // Reject unknown tags. if let Some(tag) = tags.iter().next() { return Err(format!("unknown tag {tag}").into()); @@ -280,14 +268,16 @@ mod tests { } } - /// A test runner for expressions specifically. Evaluates expressions to - /// values, and can optionally emit the expression tree. + /// A test runner for expressions. Evaluates expressions to values, and + /// optionally emits the expression tree. struct ExpressionRunner; type Catalog<'a> = as Engine<'a>>::Transaction; impl goldenscript::Runner for ExpressionRunner { fn run(&mut self, command: &goldenscript::Command) -> Result> { + let mut output = String::new(); + // The entire command is the expression to evaluate. There are no args. if !command.args.is_empty() { return Err("expressions should be given as a command with no args".into()); @@ -301,30 +291,31 @@ mod tests { if let Some(next) = parser.lexer.next().transpose()? { return Err(format!("unconsumed token {next}").into()); } - let mut expr = Planner::::build_expression(ast, &Scope::new())?; - - // If requested, convert the expression to conjunctive normal form. - if tags.remove("cnf") { - expr = expr.into_cnf(); - tags.insert("expr".to_string()); // imply expr - } + let expr = Planner::::build_expression(ast, &Scope::new())?; // Evaluate the expression. - let mut output = String::new(); let value = expr.evaluate(None)?; - write!(output, "{value:?}")?; + write!(output, "{value}")?; - // If requested, dump the parsed expression. + // If requested, convert the expression to conjunctive normal form + // and dump it. Assert that it produces the same result. + if tags.remove("cnf") { + let cnf = expr.clone().into_cnf(); + assert_eq!(value, cnf.evaluate(None)?, "CNF result differs"); + write!(output, " ← {}", cnf.format_constant())?; + } + + // If requested, debug-dump the parsed expression. if tags.remove("expr") { - write!(output, " ← {}", expr.format(&Node::Nothing { columns: vec![] }))?; + write!(output, " ← {:?}", expr)?; } + writeln!(output)?; // Reject unknown tags. if let Some(tag) = tags.iter().next() { return Err(format!("unknown tag {tag}").into()); } - writeln!(output)?; Ok(output) } } diff --git a/src/sql/testscripts/expressions/cnf b/src/sql/testscripts/expressions/cnf index 81fc6cb2..197ad035 100644 --- a/src/sql/testscripts/expressions/cnf +++ b/src/sql/testscripts/expressions/cnf @@ -3,28 +3,28 @@ # Noop for non-boolean expressions. [cnf]> 1 + 2 --- -Integer(3) ← 1 + 2 +3 ← 1 + 2 # Applies De Morgan's laws. [cnf]> NOT (TRUE AND FALSE) --- -Boolean(true) ← NOT TRUE OR NOT FALSE +TRUE ← NOT TRUE OR NOT FALSE [cnf]> NOT (TRUE OR FALSE) --- -Boolean(false) ← NOT TRUE AND NOT FALSE +FALSE ← NOT TRUE AND NOT FALSE # NOTs are pushed into the expression. [cnf]> NOT (TRUE AND TRUE AND TRUE OR TRUE) --- -Boolean(false) ← (NOT TRUE OR NOT TRUE OR NOT TRUE) AND NOT TRUE +FALSE ← (NOT TRUE OR NOT TRUE OR NOT TRUE) AND NOT TRUE # ORs are converted to ANDs by the distributive law. [cnf]> (TRUE AND FALSE) OR (FALSE AND TRUE) --- -Boolean(false) ← (TRUE OR FALSE) AND (TRUE OR TRUE) AND (FALSE OR FALSE) AND (FALSE OR TRUE) +FALSE ← (TRUE OR FALSE) AND (TRUE OR TRUE) AND (FALSE OR FALSE) AND (FALSE OR TRUE) # This is also true when combined with De Morgan's laws. [cnf]> NOT ((TRUE OR FALSE) AND (TRUE OR FALSE)) --- -Boolean(false) ← (NOT TRUE OR NOT TRUE) AND (NOT TRUE OR NOT FALSE) AND (NOT FALSE OR NOT TRUE) AND (NOT FALSE OR NOT FALSE) +FALSE ← (NOT TRUE OR NOT TRUE) AND (NOT TRUE OR NOT FALSE) AND (NOT FALSE OR NOT TRUE) AND (NOT FALSE OR NOT FALSE) diff --git a/src/sql/testscripts/expressions/func b/src/sql/testscripts/expressions/func index 95932943..7a4a2370 100644 --- a/src/sql/testscripts/expressions/func +++ b/src/sql/testscripts/expressions/func @@ -4,13 +4,13 @@ > sqrt(1) > SQRT(1) --- -Float(1.0) -Float(1.0) +1.0 +1.0 # A space is allowed around the arguments. > sqrt ( 1 ) --- -Float(1.0) +1.0 # Wrong number of arguments errors. !> sqrt() diff --git a/src/sql/testscripts/expressions/func_sqrt b/src/sql/testscripts/expressions/func_sqrt index 7c27e004..41bbe254 100644 --- a/src/sql/testscripts/expressions/func_sqrt +++ b/src/sql/testscripts/expressions/func_sqrt @@ -4,27 +4,27 @@ [expr]> sqrt(2) [expr]> sqrt(100) --- -Float(1.4142135623730951) ← sqrt(2) -Float(10.0) ← sqrt(100) +1.4142135623730951 ← SquareRoot(Constant(Integer(2))) +10.0 ← SquareRoot(Constant(Integer(100))) # Negative integers error, but 0 is valid. !> sqrt(-1) > sqrt(0) --- Error: invalid input: can't take negative square root -Float(0.0) +0.0 # Floats work. > sqrt(3.14) > sqrt(100.0) --- -Float(1.772004514666935) -Float(10.0) +1.772004514666935 +10.0 # Negative floats work, but return NAN. > sqrt(-1.0) --- -Float(NaN) +NaN # Test various special float values. > sqrt(-0.0) @@ -33,16 +33,16 @@ Float(NaN) > sqrt(INFINITY) > sqrt(-INFINITY) --- -Float(-0.0) -Float(0.0) -Float(NaN) -Float(inf) -Float(NaN) +-0.0 +0.0 +NaN +inf +NaN # NULL is passed through. > sqrt(NULL) --- -Null +NULL # Strings and booleans error. !> sqrt(TRUE) diff --git a/src/sql/testscripts/expressions/literals b/src/sql/testscripts/expressions/literals index a9cfa6cc..f4ace330 100644 --- a/src/sql/testscripts/expressions/literals +++ b/src/sql/testscripts/expressions/literals @@ -7,36 +7,36 @@ null infinity nan --- -Boolean(true) -Boolean(false) -Null -Float(inf) -Float(NaN) +TRUE +FALSE +NULL +inf +NaN # Constants are case-insensitive. NULL NaN --- -Null -Float(NaN) +NULL +NaN # Integers. 3 314 03 --- -Integer(3) -Integer(314) -Integer(3) +3 +314 +3 # Floats with decimal points. 3.72 3. 3.0 --- -Float(3.72) -Float(3.0) -Float(3.0) +3.72 +3.0 +3.0 # Negative or explicit positive numbers are parsed as prefix operators. [expr]> -3 @@ -44,17 +44,17 @@ Float(3.0) [expr]> -3.14 [expr]> +3.14 --- -Integer(-3) ← -3 -Integer(3) ← 3 -Float(-3.14) ← -3.14 -Float(3.14) ← 3.14 +-3 ← Negate(Constant(Integer(3))) +3 ← Identity(Constant(Integer(3))) +-3.14 ← Negate(Constant(Float(3.14))) +3.14 ← Identity(Constant(Float(3.14))) # Floats with exponents. 3.14e3 2.718E-2 --- -Float(3140.0) -Float(0.02718) +3140.0 +0.02718 # Integer overflow/underflow. > 9223372036854775807 @@ -62,9 +62,9 @@ Float(0.02718) > -9223372036854775807 !> -9223372036854775808 --- -Integer(9223372036854775807) +9223372036854775807 Error: invalid input: number too large to fit in target type -Integer(-9223372036854775807) +-9223372036854775807 Error: invalid input: number too large to fit in target type # Float overflow/underflow. @@ -73,10 +73,10 @@ Error: invalid input: number too large to fit in target type > -1.23456789012345e308 > -1e309 --- -Float(1.23456789012345e308) -Float(inf) -Float(-1.23456789012345e308) -Float(-inf) +1.23456789012345e308 +inf +-1.23456789012345e308 +-inf # Float precision. > 1.23456789012345e-307 @@ -85,20 +85,20 @@ Float(-inf) > 0.12345678901234567890 > 1e-325 --- -Float(1.23456789012345e-307) -Float(-1.23456789012345e-307) -Float(1e-323) -Float(0.12345678901234568) -Float(0.0) +1.23456789012345e-307 +-1.23456789012345e-307 +1e-323 +0.12345678901234568 +0.0 # Strings, using single quotes. Only '' is supported as an escape sequence. > 'Hi! 👋' > 'Has ''single'' and "double" quotes' > 'Try \n newlines and \t tabs' --- -String("Hi! 👋") -String("Has 'single' and \"double\" quotes") -String("Try \\n newlines and \\t tabs") +'Hi! 👋' +'Has \'single\' and \"double\" quotes' +'Try \\n newlines and \\t tabs' # Double quotes are identifiers, not string literals. This fails to evaluate as # a constant expression. diff --git a/src/sql/testscripts/expressions/op_compare_equal b/src/sql/testscripts/expressions/op_compare_equal index d434d679..8528553a 100644 --- a/src/sql/testscripts/expressions/op_compare_equal +++ b/src/sql/testscripts/expressions/op_compare_equal @@ -5,32 +5,32 @@ > TRUE = FALSE > FALSE = TRUE --- -Boolean(true) -Boolean(false) -Boolean(false) +TRUE +FALSE +FALSE # Integers. > 1 = 1 > 1 = 2 --- -Boolean(true) -Boolean(false) +TRUE +FALSE # Floats. > 3.14 = 3.14 > 3.14 = 2.718 --- -Boolean(true) -Boolean(false) +TRUE +FALSE # Float special values. > 0.0 = -0.0 > INFINITY = INFINITY > NAN = NAN --- -Boolean(true) -Boolean(true) -Boolean(false) +TRUE +TRUE +FALSE # Mixed integers and floats. > 3.0 = 3 @@ -38,10 +38,10 @@ Boolean(false) > 3 = 3.01 > -0.0 = 0 --- -Boolean(true) -Boolean(false) -Boolean(false) -Boolean(true) +TRUE +FALSE +FALSE +TRUE # Strings. > 'abc' = 'abc' @@ -51,12 +51,12 @@ Boolean(true) > '😀' = '😀' > '😀' = '🙁' --- -Boolean(true) -Boolean(false) -Boolean(false) -Boolean(false) -Boolean(true) -Boolean(false) +TRUE +FALSE +FALSE +FALSE +TRUE +FALSE # NULLs. > 1 = NULL @@ -67,13 +67,13 @@ Boolean(false) > NAN = NULL > INFINITY = NULL --- -Null -Null -Null -Null -Null -Null -Null +NULL +NULL +NULL +NULL +NULL +NULL +NULL # Type mismatches. !> true = 1 diff --git a/src/sql/testscripts/expressions/op_compare_greater b/src/sql/testscripts/expressions/op_compare_greater index 3feb5466..00eeb01e 100644 --- a/src/sql/testscripts/expressions/op_compare_greater +++ b/src/sql/testscripts/expressions/op_compare_greater @@ -6,10 +6,10 @@ > TRUE > TRUE > FALSE > FALSE --- -Boolean(true) -Boolean(false) -Boolean(false) -Boolean(false) +TRUE +FALSE +FALSE +FALSE # Integers. > 3 > 2 @@ -18,11 +18,11 @@ Boolean(false) > -1 > 0 > 0 > -1 --- -Boolean(true) -Boolean(false) -Boolean(false) -Boolean(false) -Boolean(true) +TRUE +FALSE +FALSE +FALSE +TRUE # Floats. > 3.14 > 3.13 @@ -30,10 +30,10 @@ Boolean(true) > 3.14 > 3.15 > 0.0 > -0.0 --- -Boolean(true) -Boolean(false) -Boolean(false) -Boolean(false) +TRUE +FALSE +FALSE +FALSE # Float special values. > INFINITY > 1e300 @@ -44,13 +44,13 @@ Boolean(false) > INFINITY > NAN > NAN > 0.0 --- -Boolean(true) -Boolean(false) -Boolean(true) -Boolean(false) -Boolean(false) -Boolean(false) -Boolean(false) +TRUE +FALSE +TRUE +FALSE +FALSE +FALSE +FALSE # Mixed integer/float values. > 3 > 3.0 @@ -58,10 +58,10 @@ Boolean(false) > 3 > 3.1 > 0 > -0.0 --- -Boolean(false) -Boolean(true) -Boolean(false) -Boolean(false) +FALSE +TRUE +FALSE +FALSE # Strings. > 'abc' > 'abc' @@ -69,19 +69,19 @@ Boolean(false) > 'abc' > 'ab' > 'b' > 'abc' --- -Boolean(false) -Boolean(true) -Boolean(true) -Boolean(true) +FALSE +TRUE +TRUE +TRUE # Empty strings. > '' > '' > 'a' > '' > '' > 'a' --- -Boolean(false) -Boolean(true) -Boolean(false) +FALSE +TRUE +FALSE # String case comparisons. > 'a' > 'B' @@ -89,19 +89,19 @@ Boolean(false) > 'A' > 'b' > 'Z' > 'b' --- -Boolean(true) -Boolean(true) -Boolean(false) -Boolean(false) +TRUE +TRUE +FALSE +FALSE # Unicode strings. > '🙁' > '😀' > '😀' > '😀' > '😀' > '🙁' --- -Boolean(true) -Boolean(false) -Boolean(false) +TRUE +FALSE +FALSE # NULLs. > TRUE > NULL @@ -115,16 +115,16 @@ Boolean(false) > NULL > NULL > NULL > NAN --- -Null -Null -Null -Null -Null -Null -Null -Null -Null -Null +NULL +NULL +NULL +NULL +NULL +NULL +NULL +NULL +NULL +NULL # Type conflicts. !> TRUE > 1 diff --git a/src/sql/testscripts/expressions/op_compare_greater_equal b/src/sql/testscripts/expressions/op_compare_greater_equal index e89ef89f..64335ce7 100644 --- a/src/sql/testscripts/expressions/op_compare_greater_equal +++ b/src/sql/testscripts/expressions/op_compare_greater_equal @@ -6,22 +6,22 @@ [expr]> 0 >= 0 [expr]> 0 >= -1 --- -Boolean(false) ← 0 > 1 OR 0 = 1 -Boolean(true) ← 0 > 0 OR 0 = 0 -Boolean(true) ← 0 > -1 OR 0 = -1 +FALSE ← Or(GreaterThan(Constant(Integer(0)), Constant(Integer(1))), Equal(Constant(Integer(0)), Constant(Integer(1)))) +TRUE ← Or(GreaterThan(Constant(Integer(0)), Constant(Integer(0))), Equal(Constant(Integer(0)), Constant(Integer(0)))) +TRUE ← Or(GreaterThan(Constant(Integer(0)), Negate(Constant(Integer(1)))), Equal(Constant(Integer(0)), Negate(Constant(Integer(1))))) [expr]> -0.0 >= 0.0 [expr]> INFINITY >= INFINITY [expr]> NAN >= NAN --- -Boolean(true) ← -0.0 > 0.0 OR -0.0 = 0.0 -Boolean(true) ← inf > inf OR inf = inf -Boolean(false) ← NaN > NaN OR NaN = NaN +TRUE ← Or(GreaterThan(Negate(Constant(Float(0.0))), Constant(Float(0.0))), Equal(Negate(Constant(Float(0.0))), Constant(Float(0.0)))) +TRUE ← Or(GreaterThan(Constant(Float(inf)), Constant(Float(inf))), Equal(Constant(Float(inf)), Constant(Float(inf)))) +FALSE ← Or(GreaterThan(Constant(Float(NaN)), Constant(Float(NaN))), Equal(Constant(Float(NaN)), Constant(Float(NaN)))) [expr]> NULL >= 1 [expr]> NULL >= NAN [expr]> NULL >= NULL --- -Null ← NULL > 1 OR NULL = 1 -Null ← NULL > NaN OR NULL = NaN -Null ← NULL > NULL OR NULL = NULL +NULL ← Or(GreaterThan(Constant(Null), Constant(Integer(1))), Equal(Constant(Null), Constant(Integer(1)))) +NULL ← Or(GreaterThan(Constant(Null), Constant(Float(NaN))), Equal(Constant(Null), Constant(Float(NaN)))) +NULL ← Or(GreaterThan(Constant(Null), Constant(Null)), Equal(Constant(Null), Constant(Null))) diff --git a/src/sql/testscripts/expressions/op_compare_is_nan b/src/sql/testscripts/expressions/op_compare_is_nan index 18d9eed5..84456368 100644 --- a/src/sql/testscripts/expressions/op_compare_is_nan +++ b/src/sql/testscripts/expressions/op_compare_is_nan @@ -4,9 +4,9 @@ > NAN IS NAN > NULL IS NAN --- -Boolean(false) -Boolean(true) -Null +FALSE +TRUE +NULL !> FALSE IS NAN !> 0 IS NAN diff --git a/src/sql/testscripts/expressions/op_compare_is_null b/src/sql/testscripts/expressions/op_compare_is_null index 5e73c0a4..408729e4 100644 --- a/src/sql/testscripts/expressions/op_compare_is_null +++ b/src/sql/testscripts/expressions/op_compare_is_null @@ -8,10 +8,10 @@ > NAN IS NULL > NULL IS NULL --- -Boolean(false) -Boolean(false) -Boolean(false) -Boolean(false) -Boolean(false) -Boolean(false) -Boolean(true) +FALSE +FALSE +FALSE +FALSE +FALSE +FALSE +TRUE diff --git a/src/sql/testscripts/expressions/op_compare_lesser b/src/sql/testscripts/expressions/op_compare_lesser index 5f3ae0cc..170f9581 100644 --- a/src/sql/testscripts/expressions/op_compare_lesser +++ b/src/sql/testscripts/expressions/op_compare_lesser @@ -6,10 +6,10 @@ > TRUE < TRUE > FALSE < FALSE --- -Boolean(true) -Boolean(false) -Boolean(false) -Boolean(false) +TRUE +FALSE +FALSE +FALSE # Integers. > 3 < 2 @@ -18,11 +18,11 @@ Boolean(false) > -1 < 0 > 0 < -1 --- -Boolean(false) -Boolean(false) -Boolean(true) -Boolean(true) -Boolean(false) +FALSE +FALSE +TRUE +TRUE +FALSE # Floats. > 3.14 < 3.13 @@ -30,10 +30,10 @@ Boolean(false) > 3.14 < 3.15 > -0.0 < 0.0 --- -Boolean(false) -Boolean(false) -Boolean(true) -Boolean(false) +FALSE +FALSE +TRUE +FALSE # Float special values. > 1e300 < INFINITY @@ -44,13 +44,13 @@ Boolean(false) > INFINITY < NAN > 0.0 < NAN --- -Boolean(true) -Boolean(false) -Boolean(true) -Boolean(false) -Boolean(false) -Boolean(false) -Boolean(false) +TRUE +FALSE +TRUE +FALSE +FALSE +FALSE +FALSE # Mixed integer/float values. > 3 < 2.9 @@ -58,10 +58,10 @@ Boolean(false) > 3 < 3.1 > -0.0 < 0 --- -Boolean(false) -Boolean(false) -Boolean(true) -Boolean(false) +FALSE +FALSE +TRUE +FALSE # Strings. > 'abc' < 'abc' @@ -69,19 +69,19 @@ Boolean(false) > 'ab' < 'abc' > 'abc' < 'b' --- -Boolean(false) -Boolean(true) -Boolean(true) -Boolean(true) +FALSE +TRUE +TRUE +TRUE # Empty strings. > '' < '' > '' < 'a' > 'a' < '' --- -Boolean(false) -Boolean(true) -Boolean(false) +FALSE +TRUE +FALSE # String case comparisons. > 'B' < 'a' @@ -89,19 +89,19 @@ Boolean(false) > 'B' < 'A' > 'B' < 'Z' --- -Boolean(true) -Boolean(true) -Boolean(false) -Boolean(true) +TRUE +TRUE +FALSE +TRUE # Unicode strings. > '😀' < '🙁' > '😀' < '😀' > '🙁' < '😀' --- -Boolean(true) -Boolean(false) -Boolean(false) +TRUE +FALSE +FALSE # NULLs. > TRUE < NULL @@ -115,16 +115,16 @@ Boolean(false) > NULL < NULL > NULL < NAN --- -Null -Null -Null -Null -Null -Null -Null -Null -Null -Null +NULL +NULL +NULL +NULL +NULL +NULL +NULL +NULL +NULL +NULL # Type conflicts. !> TRUE < 1 diff --git a/src/sql/testscripts/expressions/op_compare_lesser_equal b/src/sql/testscripts/expressions/op_compare_lesser_equal index 55fd4fc9..67b9f81f 100644 --- a/src/sql/testscripts/expressions/op_compare_lesser_equal +++ b/src/sql/testscripts/expressions/op_compare_lesser_equal @@ -6,22 +6,22 @@ [expr]> 0 <= 0 [expr]> -1 <= 0 --- -Boolean(false) ← 1 < 0 OR 1 = 0 -Boolean(true) ← 0 < 0 OR 0 = 0 -Boolean(true) ← -1 < 0 OR -1 = 0 +FALSE ← Or(LessThan(Constant(Integer(1)), Constant(Integer(0))), Equal(Constant(Integer(1)), Constant(Integer(0)))) +TRUE ← Or(LessThan(Constant(Integer(0)), Constant(Integer(0))), Equal(Constant(Integer(0)), Constant(Integer(0)))) +TRUE ← Or(LessThan(Negate(Constant(Integer(1))), Constant(Integer(0))), Equal(Negate(Constant(Integer(1))), Constant(Integer(0)))) [expr]> 0.0 <= -0.0 [expr]> INFINITY <= INFINITY [expr]> NAN <= NAN --- -Boolean(true) ← 0.0 < -0.0 OR 0.0 = -0.0 -Boolean(true) ← inf < inf OR inf = inf -Boolean(false) ← NaN < NaN OR NaN = NaN +TRUE ← Or(LessThan(Constant(Float(0.0)), Negate(Constant(Float(0.0)))), Equal(Constant(Float(0.0)), Negate(Constant(Float(0.0))))) +TRUE ← Or(LessThan(Constant(Float(inf)), Constant(Float(inf))), Equal(Constant(Float(inf)), Constant(Float(inf)))) +FALSE ← Or(LessThan(Constant(Float(NaN)), Constant(Float(NaN))), Equal(Constant(Float(NaN)), Constant(Float(NaN)))) [expr]> NULL <= 1 [expr]> NULL <= NAN [expr]> NULL <= NULL --- -Null ← NULL < 1 OR NULL = 1 -Null ← NULL < NaN OR NULL = NaN -Null ← NULL < NULL OR NULL = NULL +NULL ← Or(LessThan(Constant(Null), Constant(Integer(1))), Equal(Constant(Null), Constant(Integer(1)))) +NULL ← Or(LessThan(Constant(Null), Constant(Float(NaN))), Equal(Constant(Null), Constant(Float(NaN)))) +NULL ← Or(LessThan(Constant(Null), Constant(Null)), Equal(Constant(Null), Constant(Null))) diff --git a/src/sql/testscripts/expressions/op_compare_not_equal b/src/sql/testscripts/expressions/op_compare_not_equal index e4ae468c..4c5b178d 100644 --- a/src/sql/testscripts/expressions/op_compare_not_equal +++ b/src/sql/testscripts/expressions/op_compare_not_equal @@ -6,20 +6,20 @@ [expr]> 1 != 3 [expr]> 1 != NULL --- -Boolean(false) ← NOT 1 = 1 -Boolean(true) ← NOT 1 = 3 -Null ← NOT 1 = NULL +FALSE ← Not(Equal(Constant(Integer(1)), Constant(Integer(1)))) +TRUE ← Not(Equal(Constant(Integer(1)), Constant(Integer(3)))) +NULL ← Not(Equal(Constant(Integer(1)), Constant(Null))) [expr]> 3.0 != 3 [expr]> 0.0 != -0.0 --- -Boolean(false) ← NOT 3.0 = 3 -Boolean(false) ← NOT 0.0 = -0.0 +FALSE ← Not(Equal(Constant(Float(3.0)), Constant(Integer(3)))) +FALSE ← Not(Equal(Constant(Float(0.0)), Negate(Constant(Float(0.0))))) [expr]> NAN != NAN [expr]> INFINITY != INFINITY [expr]> NULL != NULL --- -Boolean(true) ← NOT NaN = NaN -Boolean(false) ← NOT inf = inf -Null ← NOT NULL = NULL +TRUE ← Not(Equal(Constant(Float(NaN)), Constant(Float(NaN)))) +FALSE ← Not(Equal(Constant(Float(inf)), Constant(Float(inf)))) +NULL ← Not(Equal(Constant(Null), Constant(Null))) diff --git a/src/sql/testscripts/expressions/op_logic_and b/src/sql/testscripts/expressions/op_logic_and index e88550a1..aadcea27 100644 --- a/src/sql/testscripts/expressions/op_logic_and +++ b/src/sql/testscripts/expressions/op_logic_and @@ -6,10 +6,10 @@ > FALSE AND TRUE > FALSE AND FALSE --- -Boolean(true) -Boolean(false) -Boolean(false) -Boolean(false) +TRUE +FALSE +FALSE +FALSE # Trinary logic. > TRUE AND NULL @@ -18,11 +18,11 @@ Boolean(false) > NULL AND FALSE > NULL AND NULL --- -Null -Null -Boolean(false) -Boolean(false) -Null +NULL +NULL +FALSE +FALSE +NULL # Non-booleans. !> 1 AND TRUE diff --git a/src/sql/testscripts/expressions/op_logic_not b/src/sql/testscripts/expressions/op_logic_not index b146ab68..6e1e176f 100644 --- a/src/sql/testscripts/expressions/op_logic_not +++ b/src/sql/testscripts/expressions/op_logic_not @@ -4,9 +4,9 @@ > NOT FALSE > NOT NULL --- -Boolean(false) -Boolean(true) -Null +FALSE +TRUE +NULL # Non-booleans. !> NOT 1 diff --git a/src/sql/testscripts/expressions/op_logic_or b/src/sql/testscripts/expressions/op_logic_or index ec3a4d6d..2dd5ea66 100644 --- a/src/sql/testscripts/expressions/op_logic_or +++ b/src/sql/testscripts/expressions/op_logic_or @@ -6,10 +6,10 @@ > FALSE OR TRUE > FALSE OR FALSE --- -Boolean(true) -Boolean(true) -Boolean(true) -Boolean(false) +TRUE +TRUE +TRUE +FALSE # Trinary logic. > TRUE OR NULL @@ -18,11 +18,11 @@ Boolean(false) > NULL OR FALSE > NULL OR NULL --- -Boolean(true) -Boolean(true) -Null -Null -Null +TRUE +TRUE +NULL +NULL +NULL # Non-booleans. !> 1 OR TRUE diff --git a/src/sql/testscripts/expressions/op_math_add b/src/sql/testscripts/expressions/op_math_add index c07df565..782111f4 100644 --- a/src/sql/testscripts/expressions/op_math_add +++ b/src/sql/testscripts/expressions/op_math_add @@ -5,16 +5,16 @@ [expr]> 1 + -3 [expr]> 1 + -2 + 3 --- -Integer(3) ← 1 + 2 -Integer(-2) ← 1 + -3 -Integer(2) ← 1 + -2 + 3 +3 ← Add(Constant(Integer(1)), Constant(Integer(2))) +-2 ← Add(Constant(Integer(1)), Negate(Constant(Integer(3)))) +2 ← Add(Add(Constant(Integer(1)), Negate(Constant(Integer(2)))), Constant(Integer(3))) # Simple float addition. [expr]> 3.1 + 2.71 [expr]> 3.1 + -2.71 --- -Float(5.8100000000000005) ← 3.1 + 2.71 -Float(0.3900000000000001) ← 3.1 + -2.71 +5.8100000000000005 ← Add(Constant(Float(3.1)), Constant(Float(2.71))) +0.3900000000000001 ← Add(Constant(Float(3.1)), Negate(Constant(Float(2.71)))) # Combined int/float addition yields floats. > 3.72 + 1 @@ -22,19 +22,19 @@ Float(0.3900000000000001) ← 3.1 + -2.71 > 1 + 3.0 > -1 + 3.72 --- -Float(4.720000000000001) -Float(4.720000000000001) -Float(4.0) -Float(2.72) +4.720000000000001 +4.720000000000001 +4.0 +2.72 # Addition with nulls yields null. > 1 + NULL > NULL + 3.14 > NULL + NULL --- -Null -Null -Null +NULL +NULL +NULL # Addition with infinity and NaN. > 1 + INFINITY @@ -44,12 +44,12 @@ Null > 3.14 + -NAN > INFINITY + NAN --- -Float(inf) -Float(-inf) -Float(inf) -Float(NaN) -Float(NaN) -Float(NaN) +inf +-inf +inf +NaN +NaN +NaN # Overflow and underflow. !> 9223372036854775807 + 1 @@ -59,8 +59,8 @@ Float(NaN) --- Error: invalid input: integer overflow Error: invalid input: integer overflow -Float(9.223372036854776e18) -Float(inf) +9.223372036854776e18 +inf # Bools and strings error. !> TRUE + FALSE diff --git a/src/sql/testscripts/expressions/op_math_divide b/src/sql/testscripts/expressions/op_math_divide index da7a31f6..f8ad93c4 100644 --- a/src/sql/testscripts/expressions/op_math_divide +++ b/src/sql/testscripts/expressions/op_math_divide @@ -5,16 +5,16 @@ [expr]> 8 / 3 [expr]> 8 / -3 --- -Integer(3) ← 9 / 3 -Integer(2) ← 8 / 3 -Integer(-2) ← 8 / -3 +3 ← Divide(Constant(Integer(9)), Constant(Integer(3))) +2 ← Divide(Constant(Integer(8)), Constant(Integer(3))) +-2 ← Divide(Constant(Integer(8)), Negate(Constant(Integer(3)))) # Floats. [expr]> 4.16 / 3.2 [expr]> 4.16 / -3.2 --- -Float(1.3) ← 4.16 / 3.2 -Float(-1.3) ← 4.16 / -3.2 +1.3 ← Divide(Constant(Float(4.16)), Constant(Float(3.2))) +-1.3 ← Divide(Constant(Float(4.16)), Negate(Constant(Float(3.2)))) # Mixed always yields floats. > 3 / 1.2 @@ -22,10 +22,10 @@ Float(-1.3) ← 4.16 / -3.2 > 9.0 / 3 > 0.0 / 1 --- -Float(2.5) -Float(0.39999999999999997) -Float(3.0) -Float(0.0) +2.5 +0.39999999999999997 +3.0 +0.0 # Division by zero errors for integers, yields infinity or nan for floats. !> 1 / 0 @@ -39,10 +39,10 @@ Float(0.0) Error: invalid input: can't divide by zero Error: invalid input: can't divide by zero Error: invalid input: can't divide by zero -Float(inf) -Float(NaN) -Float(-inf) -Float(-inf) +inf +NaN +-inf +-inf # Division with NULL always yields NULL. > 1 / NULL @@ -52,12 +52,12 @@ Float(-inf) > NULL / NULL > NULL / 0 --- -Null -Null -Null -Null -Null -Null +NULL +NULL +NULL +NULL +NULL +NULL # Division by infinity. > 3.14 / INFINITY @@ -69,14 +69,14 @@ Null > INFINITY / INFINITY > -INFINITY / -INFINITY --- -Float(0.0) -Float(-0.0) -Float(-0.0) -Float(inf) -Float(0.0) -Float(inf) -Float(NaN) -Float(NaN) +0.0 +-0.0 +-0.0 +inf +0.0 +inf +NaN +NaN # Division by NaN. > 1 / NAN @@ -84,10 +84,10 @@ Float(NaN) > NAN / NAN > NAN / 0 --- -Float(NaN) -Float(NaN) -Float(NaN) -Float(NaN) +NaN +NaN +NaN +NaN # Bools and strings error. !> TRUE / FALSE diff --git a/src/sql/testscripts/expressions/op_math_exponentiate b/src/sql/testscripts/expressions/op_math_exponentiate index 22df2abd..b1ac915e 100644 --- a/src/sql/testscripts/expressions/op_math_exponentiate +++ b/src/sql/testscripts/expressions/op_math_exponentiate @@ -6,24 +6,24 @@ [expr]> 0 ^ 2 [expr]> 9 ^ -3 --- -Integer(8) ← 2 ^ 3 -Integer(1) ← 2 ^ 0 -Integer(0) ← 0 ^ 2 -Float(0.0013717421124828531) ← 9 ^ -3 +8 ← Exponentiate(Constant(Integer(2)), Constant(Integer(3))) +1 ← Exponentiate(Constant(Integer(2)), Constant(Integer(0))) +0 ← Exponentiate(Constant(Integer(0)), Constant(Integer(2))) +0.0013717421124828531 ← Exponentiate(Constant(Integer(9)), Negate(Constant(Integer(3)))) # Floats. [expr]> 6.25 ^ 0.5 [expr]> 6.25 ^ 3.14 --- -Float(2.5) ← 6.25 ^ 0.5 -Float(315.5464179407336) ← 6.25 ^ 3.14 +2.5 ← Exponentiate(Constant(Float(6.25)), Constant(Float(0.5))) +315.5464179407336 ← Exponentiate(Constant(Float(6.25)), Constant(Float(3.14))) # Mixed. > 6.25 ^ 2 > 9 ^ 0.5 --- -Float(39.0625) -Float(3.0) +39.0625 +3.0 # Overflow and underflow. !> 2 ^ 10000000000 @@ -32,7 +32,7 @@ Float(3.0) --- Error: invalid input: integer overflow Error: invalid input: integer overflow -Float(inf) +inf # Nulls. > 1 ^ NULL @@ -41,11 +41,11 @@ Float(inf) > NULL ^ 3.14 > NULL ^ NULL --- -Null -Null -Null -Null -Null +NULL +NULL +NULL +NULL +NULL # Infinity and NaN. > 2 ^ INFINITY @@ -56,13 +56,13 @@ Null > NAN ^ 2 > NAN ^ NAN --- -Float(inf) -Float(inf) -Float(inf) -Float(0.0) -Float(NaN) -Float(NaN) -Float(NaN) +inf +inf +inf +0.0 +NaN +NaN +NaN # Bools and strings. !> TRUE ^ FALSE diff --git a/src/sql/testscripts/expressions/op_math_factorial b/src/sql/testscripts/expressions/op_math_factorial index e7e49bc6..9079bc6a 100644 --- a/src/sql/testscripts/expressions/op_math_factorial +++ b/src/sql/testscripts/expressions/op_math_factorial @@ -3,7 +3,7 @@ # Integer works. [expr]> 3! --- -Integer(6) ← 3! +6 ← Factorial(Constant(Integer(3))) # But float, bool, and string fails. !> 3.14! @@ -21,7 +21,7 @@ Error: invalid input: can't take factorial of 'a' !> INFINITY! !> NAN! --- -Null +NULL Error: invalid input: can't take factorial of inf Error: invalid input: can't take factorial of NaN @@ -29,8 +29,8 @@ Error: invalid input: can't take factorial of NaN [expr]> 3!! [expr]> 2!!!!!! --- -Integer(720) ← 3!! -Integer(2) ← 2!!!!!! +720 ← Factorial(Factorial(Constant(Integer(3)))) +2 ← Factorial(Factorial(Factorial(Factorial(Factorial(Factorial(Constant(Integer(2)))))))) # Overflow. [expr]!> 3!!! diff --git a/src/sql/testscripts/expressions/op_math_identity b/src/sql/testscripts/expressions/op_math_identity index dea1f135..2aa25a71 100644 --- a/src/sql/testscripts/expressions/op_math_identity +++ b/src/sql/testscripts/expressions/op_math_identity @@ -4,22 +4,22 @@ [expr]> +1 [expr]> +3.14 --- -Integer(1) ← 1 -Float(3.14) ← 3.14 +1 ← Identity(Constant(Integer(1))) +3.14 ← Identity(Constant(Float(3.14))) # NULL, infinity and NaN. > +NULL > +INFINITY > +NAN --- -Null -Float(inf) -Float(NaN) +NULL +inf +NaN # Multiple applications work. [expr]> +++1 --- -Integer(1) ← 1 +1 ← Identity(Identity(Identity(Constant(Integer(1))))) # Bool and string fails. !> +TRUE diff --git a/src/sql/testscripts/expressions/op_math_multiply b/src/sql/testscripts/expressions/op_math_multiply index 0b61d087..7b388e19 100644 --- a/src/sql/testscripts/expressions/op_math_multiply +++ b/src/sql/testscripts/expressions/op_math_multiply @@ -4,22 +4,22 @@ [expr]> 2 * 3 [expr]> 2 * -3 --- -Integer(6) ← 2 * 3 -Integer(-6) ← 2 * -3 +6 ← Multiply(Constant(Integer(2)), Constant(Integer(3))) +-6 ← Multiply(Constant(Integer(2)), Negate(Constant(Integer(3)))) # Float. [expr]> 3.14 * 2.71 [expr]> 3.14 * -2.71 --- -Float(8.5094) ← 3.14 * 2.71 -Float(-8.5094) ← 3.14 * -2.71 +8.5094 ← Multiply(Constant(Float(3.14)), Constant(Float(2.71))) +-8.5094 ← Multiply(Constant(Float(3.14)), Negate(Constant(Float(2.71)))) # Mixed. > 3.14 * 2 > -2 * 3.14 --- -Float(6.28) -Float(-6.28) +6.28 +-6.28 # Integer and float overflow, underflow, and precision loss. !> 9223372036854775807 * 2 @@ -29,8 +29,8 @@ Float(-6.28) --- Error: invalid input: integer overflow Error: invalid input: integer overflow -Float(inf) -Float(1.8446744073709552e19) +inf +1.8446744073709552e19 # NULLs always yield NULL. @@ -38,9 +38,9 @@ Float(1.8446744073709552e19) > NULL * 3.14 > NULL * NULL --- -Null -Null -Null +NULL +NULL +NULL # Infinity. > 2 * INFINITY @@ -49,11 +49,11 @@ Null > INFINITY * INFINITY > INFINITY * -INFINITY --- -Float(inf) -Float(-inf) -Float(-inf) -Float(inf) -Float(-inf) +inf +-inf +-inf +inf +-inf # NaN. > 2 * NAN @@ -61,10 +61,10 @@ Float(-inf) > INFINITY * NAN > NAN * NAN --- -Float(NaN) -Float(NaN) -Float(NaN) -Float(NaN) +NaN +NaN +NaN +NaN # Bools and strings. !> TRUE * FALSE diff --git a/src/sql/testscripts/expressions/op_math_negate b/src/sql/testscripts/expressions/op_math_negate index 5b925b89..38ad4395 100644 --- a/src/sql/testscripts/expressions/op_math_negate +++ b/src/sql/testscripts/expressions/op_math_negate @@ -4,24 +4,24 @@ [expr]> -1 [expr]> -3.14 --- -Integer(-1) ← -1 -Float(-3.14) ← -3.14 +-1 ← Negate(Constant(Integer(1))) +-3.14 ← Negate(Constant(Float(3.14))) # NULL, infinity and NaN. > -NULL > -INFINITY > -NAN --- -Null -Float(-inf) -Float(NaN) +NULL +-inf +NaN # Multiple applications work. [expr]> ---1 [expr]> ----1 --- -Integer(-1) ← ---1 -Integer(1) ← ----1 +-1 ← Negate(Negate(Negate(Constant(Integer(1))))) +1 ← Negate(Negate(Negate(Negate(Constant(Integer(1)))))) # Bool and string fails. !> -TRUE diff --git a/src/sql/testscripts/expressions/op_math_remainder b/src/sql/testscripts/expressions/op_math_remainder index c7a4866f..fcbb44cf 100644 --- a/src/sql/testscripts/expressions/op_math_remainder +++ b/src/sql/testscripts/expressions/op_math_remainder @@ -8,32 +8,32 @@ [expr]> -5 % 3 [expr]> 5 % -3 --- -Integer(2) ← 5 % 3 -Integer(-2) ← -5 % 3 -Integer(2) ← 5 % -3 +2 ← Remainder(Constant(Integer(5)), Constant(Integer(3))) +-2 ← Remainder(Negate(Constant(Integer(5))), Constant(Integer(3))) +2 ← Remainder(Constant(Integer(5)), Negate(Constant(Integer(3)))) # Floats. [expr]> 6.28 % 2.2 [expr]> 6.28 % -2.2 --- -Float(1.88) ← 6.28 % 2.2 -Float(1.88) ← 6.28 % -2.2 +1.88 ← Remainder(Constant(Float(6.28)), Constant(Float(2.2))) +1.88 ← Remainder(Constant(Float(6.28)), Negate(Constant(Float(2.2)))) # Mixed. > 3.15 % 2 > 6 % 3.15 > 3.15 % -2 --- -Float(1.15) -Float(2.85) -Float(1.15) +1.15 +2.85 +1.15 # Division by zero. !> 7 % 0 > 6.28 % 0.0 --- Error: invalid input: can't divide by zero -Float(NaN) +NaN # NULLs. > 1 % NULL @@ -41,10 +41,10 @@ Float(NaN) > 3.14 % NULL > NULL % NULL --- -Null -Null -Null -Null +NULL +NULL +NULL +NULL # Infinity and NaN. > INFINITY % 7 @@ -55,13 +55,13 @@ Null > NAN % 7 > NAN % NAN --- -Float(NaN) -Float(7.0) -Float(7.0) -Float(NaN) -Float(NaN) -Float(NaN) -Float(NaN) +NaN +7.0 +7.0 +NaN +NaN +NaN +NaN # Bools and strings. !> TRUE % FALSE diff --git a/src/sql/testscripts/expressions/op_math_subtract b/src/sql/testscripts/expressions/op_math_subtract index c5545caa..14b3e076 100644 --- a/src/sql/testscripts/expressions/op_math_subtract +++ b/src/sql/testscripts/expressions/op_math_subtract @@ -5,16 +5,16 @@ [expr]> 2 - 3 [expr]> 1 - -3 - 2 --- -Integer(1) ← 2 - 1 -Integer(-1) ← 2 - 3 -Integer(2) ← 1 - -3 - 2 +1 ← Subtract(Constant(Integer(2)), Constant(Integer(1))) +-1 ← Subtract(Constant(Integer(2)), Constant(Integer(3))) +2 ← Subtract(Subtract(Constant(Integer(1)), Negate(Constant(Integer(3)))), Constant(Integer(2))) # Simple float subtraction. [expr]> 3.1 - 2.71 [expr]> 3.1 - -2.71 --- -Float(0.3900000000000001) ← 3.1 - 2.71 -Float(5.8100000000000005) ← 3.1 - -2.71 +0.3900000000000001 ← Subtract(Constant(Float(3.1)), Constant(Float(2.71))) +5.8100000000000005 ← Subtract(Constant(Float(3.1)), Negate(Constant(Float(2.71)))) # Combined int/float subtraction yields floats. > 3.72 - 1 @@ -22,19 +22,19 @@ Float(5.8100000000000005) ← 3.1 - -2.71 > 1 - 3.0 > -1 - 3.72 --- -Float(2.72) -Float(-2.72) -Float(-2.0) -Float(-4.720000000000001) +2.72 +-2.72 +-2.0 +-4.720000000000001 # Subtraction with nulls yields null. > 1 - NULL > NULL - 3.14 > NULL - NULL --- -Null -Null -Null +NULL +NULL +NULL # Subtraction with infinity and NaN. > 1 - INFINITY @@ -44,12 +44,12 @@ Null > 3.14 - -NAN > INFINITY - NAN --- -Float(-inf) -Float(-inf) -Float(inf) -Float(NaN) -Float(NaN) -Float(NaN) +-inf +-inf +inf +NaN +NaN +NaN # Overflow and underflow. !> 9223372036854775807 - -1 @@ -59,8 +59,8 @@ Float(NaN) --- Error: invalid input: integer overflow Error: invalid input: integer overflow -Float(9.223372036854776e18) -Float(-inf) +9.223372036854776e18 +-inf # Bools and strings error. !> TRUE - FALSE diff --git a/src/sql/testscripts/expressions/op_precedence b/src/sql/testscripts/expressions/op_precedence index 7106b478..6d6e9c89 100644 --- a/src/sql/testscripts/expressions/op_precedence +++ b/src/sql/testscripts/expressions/op_precedence @@ -23,26 +23,26 @@ > 2 + 3! > (2 + 3)! --- -Integer(5) -Integer(9) -Integer(1) -Integer(-3) -Integer(8) -Integer(120) +5 +9 +1 +-3 +8 +120 # Prefix -. > -3 ^ 2 > -(3 ^ 2) --- -Integer(9) -Integer(-9) +9 +-9 # Postfix !. > 2 ^ 3! > (2 ^ 3)! --- -Integer(64) -Integer(40320) +64 +40320 # ^, which is also left-associative. > 2 ^ 3 ^ 2 @@ -54,14 +54,14 @@ Integer(40320) > 2 ^ 5 % 2 > 2 ^ (5 % 2) --- -Integer(512) -Integer(64) -Integer(32) -Integer(4096) -Integer(8) -Integer(4) -Integer(0) -Integer(2) +512 +64 +32 +4096 +8 +4 +0 +2 # * > 3 * 4 / 2 @@ -73,14 +73,14 @@ Integer(2) > 1 - 2 * 3 > (1 - 2) * 3 --- -Integer(6) -Integer(6) -Integer(0) -Integer(3) -Integer(7) -Integer(9) -Integer(-5) -Integer(-3) +6 +6 +0 +3 +7 +9 +-5 +-3 # / > 4 / 2 * 3 @@ -92,14 +92,14 @@ Integer(-3) > 4 - 2 / 2 > (4 - 2) / 2 --- -Integer(6) -Integer(0) -Integer(2) -Integer(8) -Integer(4) -Integer(3) -Integer(3) -Integer(1) +6 +0 +2 +8 +4 +3 +3 +1 # % > 4 % 3 * 3 @@ -111,14 +111,14 @@ Integer(1) > 8 - 5 % 3 > (8 - 5) % 3 --- -Integer(3) -Integer(4) -Integer(1) -Integer(0) -Integer(3) -Integer(0) -Integer(6) -Integer(0) +3 +4 +1 +0 +3 +0 +6 +0 # + > 1 + 2 - 3 @@ -132,15 +132,15 @@ Integer(0) > 1 + 2 <= 2 !> 1 + (2 <= 2) --- -Integer(0) -Integer(0) -Boolean(true) +0 +0 +TRUE Error: invalid input: can't add 1 and FALSE -Boolean(true) +TRUE Error: invalid input: can't add 1 and TRUE -Boolean(false) +FALSE Error: invalid input: can't add 1 and FALSE -Boolean(false) +FALSE Error: invalid input: can't add 1 and TRUE # - @@ -155,15 +155,15 @@ Error: invalid input: can't add 1 and TRUE > 2 - 1 <= 2 !> 2 - (1 <= 2) --- -Integer(2) -Integer(0) -Boolean(false) +2 +0 +FALSE Error: invalid input: can't subtract 2 and FALSE -Boolean(false) +FALSE Error: invalid input: can't subtract 2 and FALSE -Boolean(true) +TRUE Error: invalid input: can't subtract 2 and TRUE -Boolean(true) +TRUE Error: invalid input: can't subtract 2 and TRUE # > @@ -184,21 +184,21 @@ Error: invalid input: can't subtract 2 and TRUE > 5 > 3 IS NULL !> 5 > (3 IS NULL) --- -Boolean(false) +FALSE Error: invalid input: can't compare 3 and TRUE -Boolean(true) +TRUE Error: invalid input: can't compare 3 and TRUE -Boolean(false) +FALSE Error: invalid input: can't compare 3 and TRUE -Boolean(true) +TRUE Error: invalid input: can't compare 3 and TRUE -Boolean(true) +TRUE Error: invalid input: can't compare 3 and TRUE -Boolean(false) +FALSE Error: invalid input: can't compare 3 and TRUE Error: invalid input: can't LIKE TRUE and 'abc' Error: invalid input: can't LIKE 3 and 'abc' -Boolean(false) +FALSE Error: invalid input: can't compare 5 and FALSE # >= @@ -219,21 +219,21 @@ Error: invalid input: can't compare 5 and FALSE > 5 >= 3 IS NULL !> 5 >= (3 IS NULL) --- -Boolean(false) +FALSE Error: invalid input: can't compare 3 and TRUE -Boolean(true) +TRUE Error: invalid input: can't compare 3 and TRUE -Boolean(false) +FALSE Error: invalid input: can't compare 3 and TRUE -Boolean(true) +TRUE Error: invalid input: can't compare 3 and TRUE -Boolean(true) +TRUE Error: invalid input: can't compare 3 and TRUE -Boolean(false) +FALSE Error: invalid input: can't compare 3 and TRUE Error: invalid input: can't LIKE TRUE and 'abc' Error: invalid input: can't LIKE 3 and 'abc' -Boolean(false) +FALSE Error: invalid input: can't compare 5 and FALSE # < @@ -254,21 +254,21 @@ Error: invalid input: can't compare 5 and FALSE > 5 < 3 IS NULL !> 5 < (3 IS NULL) --- -Boolean(true) +TRUE Error: invalid input: can't compare 3 and TRUE -Boolean(true) +TRUE Error: invalid input: can't compare 3 and TRUE -Boolean(false) +FALSE Error: invalid input: can't compare 3 and TRUE -Boolean(false) +FALSE Error: invalid input: can't compare 3 and TRUE -Boolean(false) +FALSE Error: invalid input: can't compare 3 and TRUE -Boolean(true) +TRUE Error: invalid input: can't compare 3 and TRUE Error: invalid input: can't LIKE FALSE and 'abc' Error: invalid input: can't LIKE 3 and 'abc' -Boolean(false) +FALSE Error: invalid input: can't compare 5 and FALSE # <= @@ -289,21 +289,21 @@ Error: invalid input: can't compare 5 and FALSE > 5 <= 3 IS NULL !> 5 <= (3 IS NULL) --- -Boolean(true) +TRUE Error: invalid input: can't compare 3 and TRUE -Boolean(true) +TRUE Error: invalid input: can't compare 3 and TRUE -Boolean(false) +FALSE Error: invalid input: can't compare 3 and TRUE -Boolean(false) +FALSE Error: invalid input: can't compare 3 and TRUE -Boolean(false) +FALSE Error: invalid input: can't compare 3 and TRUE -Boolean(true) +TRUE Error: invalid input: can't compare 3 and TRUE Error: invalid input: can't LIKE FALSE and 'abc' Error: invalid input: can't LIKE 3 and 'abc' -Boolean(false) +FALSE Error: invalid input: can't compare 5 and FALSE # = @@ -316,13 +316,13 @@ Error: invalid input: can't compare 5 and FALSE > NOT 1 = 1 !> (NOT 1) = 1 --- -Boolean(true) +TRUE Error: invalid input: can't compare 1 and FALSE Error: invalid input: can't LIKE TRUE and 'abc' Error: invalid input: can't LIKE 1 and 'abc' -Boolean(true) +TRUE Error: invalid input: can't compare 1 and TRUE -Boolean(false) +FALSE Error: invalid input: can't NOT 1 # != @@ -335,13 +335,13 @@ Error: invalid input: can't NOT 1 > NOT 1 != 1 !> (NOT 1) != 1 --- -Boolean(false) +FALSE Error: invalid input: can't compare 1 and FALSE Error: invalid input: can't LIKE FALSE and 'abc' Error: invalid input: can't LIKE 1 and 'abc' -Boolean(true) +TRUE Error: invalid input: can't compare 1 and TRUE -Boolean(true) +TRUE Error: invalid input: can't NOT 1 # LIKE @@ -350,45 +350,45 @@ Error: invalid input: can't NOT 1 > NOT 'abc' LIKE 'abc' !> (NOT 'abc') LIKE 'abc' --- -Boolean(true) +TRUE Error: invalid input: can't LIKE 'abc' and TRUE -Boolean(false) +FALSE Error: invalid input: can't NOT 'abc' # IS NULL > NOT NULL IS NULL > (NOT NULL) IS NULL --- -Boolean(false) -Boolean(true) +FALSE +TRUE # IS NOT NULL > NOT NULL IS NOT NULL > (NOT NULL) IS NOT NULL --- -Boolean(true) -Boolean(false) +TRUE +FALSE # IS NAN > NOT NAN IS NAN !> (NOT NAN) IS NAN --- -Boolean(false) +FALSE Error: invalid input: can't NOT NaN # IS NOT NAN > NOT NAN IS NOT NAN !> (NOT NAN) IS NOT NAN --- -Boolean(true) +TRUE Error: invalid input: can't NOT NaN # NOT. > NOT TRUE AND FALSE > NOT (TRUE AND FALSE) --- -Boolean(false) -Boolean(true) +FALSE +TRUE # AND > FALSE AND TRUE OR TRUE @@ -396,9 +396,9 @@ Boolean(true) > TRUE OR TRUE AND FALSE > (TRUE OR TRUE) AND FALSE --- -Boolean(true) -Boolean(false) -Boolean(true) -Boolean(false) +TRUE +FALSE +TRUE +FALSE # OR has the lowest precedence, so nothing to test. diff --git a/src/sql/testscripts/expressions/op_string_like b/src/sql/testscripts/expressions/op_string_like index 8a25e640..039233d6 100644 --- a/src/sql/testscripts/expressions/op_string_like +++ b/src/sql/testscripts/expressions/op_string_like @@ -6,10 +6,10 @@ > 'abcde' LIKE '%cde' > 'abcde' LIKE '%' --- -Boolean(true) -Boolean(true) -Boolean(true) -Boolean(true) +TRUE +TRUE +TRUE +TRUE # Multi-character mismatches. > 'abcde' LIKE 'a%f' @@ -17,10 +17,10 @@ Boolean(true) > 'abcde' LIKE 'b%' > 'abcde' LIKE '%d' --- -Boolean(false) -Boolean(false) -Boolean(false) -Boolean(false) +FALSE +FALSE +FALSE +FALSE # Multi-character wildcards match 0 characters. > 'abcde' LIKE 'abc%de' @@ -28,28 +28,28 @@ Boolean(false) > 'abcde' LIKE 'abcde%' > '' LIKE '%' --- -Boolean(true) -Boolean(true) -Boolean(true) -Boolean(true) +TRUE +TRUE +TRUE +TRUE # Single-character matches. > 'abcde' LIKE 'ab_de' > 'abcde' LIKE '_bcde' > 'abcde' LIKE 'abcd_' --- -Boolean(true) -Boolean(true) -Boolean(true) +TRUE +TRUE +TRUE # Single-character mismatches. > 'abcde' LIKE 'ab_e' > 'abcde' LIKE 'abc_' > 'abcde' LIKE '_bcd' --- -Boolean(false) -Boolean(false) -Boolean(false) +FALSE +FALSE +FALSE # Single-character wildcards require at least one match. > 'abcde' LIKE 'abc_de' @@ -57,26 +57,26 @@ Boolean(false) > 'abcde' LIKE 'abcde_' > '' LIKE '_' --- -Boolean(false) -Boolean(false) -Boolean(false) -Boolean(false) +FALSE +FALSE +FALSE +FALSE # Exact matches. Submatches are not sufficient. > 'abcde' LIKE 'abcde' > 'abcde' LIKE 'abc' > 'abcde' LIKE 'abcdef' --- -Boolean(true) -Boolean(false) -Boolean(false) +TRUE +FALSE +FALSE # Patterns are case-sensitive. > 'abcde' LIKE 'ABCDE' > 'abcde' LIKE 'A%' --- -Boolean(false) -Boolean(false) +FALSE +FALSE # Wildcards can be mixed and used multiple times, and % can match nothing. > 'abcde' LIKE 'a%c%e' @@ -85,11 +85,11 @@ Boolean(false) > 'abcde' LIKE 'a___e' > 'abcdefghijklmno' LIKE 'a_c%f%i_kl%m_o' --- -Boolean(true) -Boolean(true) -Boolean(true) -Boolean(true) -Boolean(true) +TRUE +TRUE +TRUE +TRUE +TRUE # NULLs. > NULL LIKE '%' @@ -97,17 +97,17 @@ Boolean(true) > 'abc' LIKE NULL > NULL LIKE NULL --- -Null -Null -Null -Null +NULL +NULL +NULL +NULL # * and ? are not valid patterns. > 'abcde' LIKE 'a*e' > 'abcde' LIKE 'ab?de' --- -Boolean(false) -Boolean(false) +FALSE +FALSE # Fails with non-strings. !> 'abc' LIKE 1 diff --git a/src/sql/testscripts/optimizer/fold_constants b/src/sql/testscripts/optimizers/fold_constants similarity index 100% rename from src/sql/testscripts/optimizer/fold_constants rename to src/sql/testscripts/optimizers/fold_constants diff --git a/src/sql/testscripts/optimizer/index_lookup b/src/sql/testscripts/optimizers/index_lookup similarity index 100% rename from src/sql/testscripts/optimizer/index_lookup rename to src/sql/testscripts/optimizers/index_lookup diff --git a/src/sql/testscripts/optimizer/join_type b/src/sql/testscripts/optimizers/join_type similarity index 100% rename from src/sql/testscripts/optimizer/join_type rename to src/sql/testscripts/optimizers/join_type diff --git a/src/sql/testscripts/optimizer/push_filters b/src/sql/testscripts/optimizers/push_filters similarity index 100% rename from src/sql/testscripts/optimizer/push_filters rename to src/sql/testscripts/optimizers/push_filters diff --git a/src/sql/testscripts/optimizer/short_circuit b/src/sql/testscripts/optimizers/short_circuit similarity index 100% rename from src/sql/testscripts/optimizer/short_circuit rename to src/sql/testscripts/optimizers/short_circuit diff --git a/src/sql/testscripts/schema/create_table b/src/sql/testscripts/schema/create_table index c150180e..497f0531 100644 --- a/src/sql/testscripts/schema/create_table +++ b/src/sql/testscripts/schema/create_table @@ -5,13 +5,13 @@ [plan,result,ops]> CREATE TABLE test (id INTEGER PRIMARY KEY) --- CreateTable: test +set mvcc:NextVersion → 2 ["\x00" → "\x02"] +set mvcc:TxnActive(1) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x01" → ""] +set mvcc:TxnWrite(1, sql:Table(test)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xfftest\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Table(test), 1) → CREATE TABLE test ( id INTEGER PRIMARY KEY ) ["\x04\x00\xfftest\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" → "\x01\x10\x04test\x00\x01\x02id\x01\x00\x00\x01\x00\x00"] +delete mvcc:TxnWrite(1, sql:Table(test)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xfftest\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnActive(1) ["\x01\x00\x00\x00\x00\x00\x00\x00\x01"] CreateTable { name: "test" } -storage set mvcc:NextVersion → 2 ["\x00" → "\x02"] -storage set mvcc:TxnActive(1) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x01" → ""] -storage set mvcc:TxnWrite(1, sql:Table(test)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xfftest\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Table(test), 1) → CREATE TABLE test ( id INTEGER PRIMARY KEY ) ["\x04\x00\xfftest\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" → "\x01\x10\x04test\x00\x01\x02id\x01\x00\x00\x01\x00\x00"] -storage delete mvcc:TxnWrite(1, sql:Table(test)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xfftest\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnActive(1) ["\x01\x00\x00\x00\x00\x00\x00\x00\x01"] dump --- diff --git a/src/sql/testscripts/schema/create_table_index b/src/sql/testscripts/schema/create_table_index index af17a794..326cafcd 100644 --- a/src/sql/testscripts/schema/create_table_index +++ b/src/sql/testscripts/schema/create_table_index @@ -2,12 +2,12 @@ # separate index). [ops]> CREATE TABLE indexed (id INTEGER PRIMARY KEY, "index" INTEGER INDEX) --- -storage set mvcc:NextVersion → 2 ["\x00" → "\x02"] -storage set mvcc:TxnActive(1) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x01" → ""] -storage set mvcc:TxnWrite(1, sql:Table(indexed)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xffindexed\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Table(indexed), 1) → CREATE TABLE indexed ( id INTEGER PRIMARY KEY, "index" INTEGER DEFAULT NULL INDEX ) ["\x04\x00\xffindexed\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" → "\x01 \x07indexed\x00\x02\x02id\x01\x00\x00\x01\x00\x00\x05index\x01\x01\x01\x00\x00\x01\x00"] -storage delete mvcc:TxnWrite(1, sql:Table(indexed)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xffindexed\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnActive(1) ["\x01\x00\x00\x00\x00\x00\x00\x00\x01"] +set mvcc:NextVersion → 2 ["\x00" → "\x02"] +set mvcc:TxnActive(1) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x01" → ""] +set mvcc:TxnWrite(1, sql:Table(indexed)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xffindexed\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Table(indexed), 1) → CREATE TABLE indexed ( id INTEGER PRIMARY KEY, "index" INTEGER DEFAULT NULL INDEX ) ["\x04\x00\xffindexed\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" → "\x01 \x07indexed\x00\x02\x02id\x01\x00\x00\x01\x00\x00\x05index\x01\x01\x01\x00\x00\x01\x00"] +delete mvcc:TxnWrite(1, sql:Table(indexed)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xffindexed\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnActive(1) ["\x01\x00\x00\x00\x00\x00\x00\x00\x01"] schema --- diff --git a/src/sql/testscripts/schema/create_table_reference b/src/sql/testscripts/schema/create_table_reference index 7986f4be..87075091 100644 --- a/src/sql/testscripts/schema/create_table_reference +++ b/src/sql/testscripts/schema/create_table_reference @@ -15,12 +15,12 @@ ok # indexes, but only a single schema entity. [ops]> CREATE TABLE name (id INT PRIMARY KEY, ref_id INT REFERENCES "ref", sref_id STRING REFERENCES sref) --- -storage set mvcc:NextVersion → 6 ["\x00" → "\x06"] -storage set mvcc:TxnActive(5) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x05" → ""] -storage set mvcc:TxnWrite(5, sql:Table(name)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x00\xffname\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Table(name), 5) → CREATE TABLE name ( id INTEGER PRIMARY KEY, ref_id INTEGER DEFAULT NULL INDEX REFERENCES ref, sref_id STRING DEFAULT NULL INDEX REFERENCES sref ) ["\x04\x00\xffname\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x016\x04name\x00\x03\x02id\x01\x00\x00\x01\x00\x00\x06ref_id\x01\x01\x01\x00\x00\x01\x01\x03ref\x07sref_id\x03\x01\x01\x00\x00\x01\x01\x04sref"] -storage delete mvcc:TxnWrite(5, sql:Table(name)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x00\xffname\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnActive(5) ["\x01\x00\x00\x00\x00\x00\x00\x00\x05"] +set mvcc:NextVersion → 6 ["\x00" → "\x06"] +set mvcc:TxnActive(5) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x05" → ""] +set mvcc:TxnWrite(5, sql:Table(name)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x00\xffname\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Table(name), 5) → CREATE TABLE name ( id INTEGER PRIMARY KEY, ref_id INTEGER DEFAULT NULL INDEX REFERENCES ref, sref_id STRING DEFAULT NULL INDEX REFERENCES sref ) ["\x04\x00\xffname\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x016\x04name\x00\x03\x02id\x01\x00\x00\x01\x00\x00\x06ref_id\x01\x01\x01\x00\x00\x01\x01\x03ref\x07sref_id\x03\x01\x01\x00\x00\x01\x01\x04sref"] +delete mvcc:TxnWrite(5, sql:Table(name)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x00\xffname\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnActive(5) ["\x01\x00\x00\x00\x00\x00\x00\x00\x05"] schema name --- diff --git a/src/sql/testscripts/schema/create_table_transaction b/src/sql/testscripts/schema/create_table_transaction index 9a234d5e..8737f234 100644 --- a/src/sql/testscripts/schema/create_table_transaction +++ b/src/sql/testscripts/schema/create_table_transaction @@ -3,8 +3,8 @@ > BEGIN [ops]> CREATE TABLE name (id INT PRIMARY KEY, value STRING) --- -storage set mvcc:TxnWrite(1, sql:Table(name)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xffname\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Table(name), 1) → CREATE TABLE name ( id INTEGER PRIMARY KEY, value STRING DEFAULT NULL ) ["\x04\x00\xffname\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" → "\x01\x1d\x04name\x00\x02\x02id\x01\x00\x00\x01\x00\x00\x05value\x03\x01\x01\x00\x00\x00\x00"] +set mvcc:TxnWrite(1, sql:Table(name)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xffname\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Table(name), 1) → CREATE TABLE name ( id INTEGER PRIMARY KEY, value STRING DEFAULT NULL ) ["\x04\x00\xffname\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" → "\x01\x1d\x04name\x00\x02\x02id\x01\x00\x00\x01\x00\x00\x05value\x03\x01\x01\x00\x00\x00\x00"] schema name --- @@ -23,9 +23,9 @@ mvcc:Version(sql:Table(name), 1) → CREATE TABLE name ( id INTEGER PRIMARY KEY, # Rolling it back undoes it. [ops]> ROLLBACK --- -storage delete mvcc:Version(sql:Table(name), 1) ["\x04\x00\xffname\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"] -storage delete mvcc:TxnWrite(1, sql:Table(name)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xffname\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnActive(1) ["\x01\x00\x00\x00\x00\x00\x00\x00\x01"] +delete mvcc:Version(sql:Table(name), 1) ["\x04\x00\xffname\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"] +delete mvcc:TxnWrite(1, sql:Table(name)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xffname\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnActive(1) ["\x01\x00\x00\x00\x00\x00\x00\x00\x01"] dump --- @@ -36,8 +36,8 @@ mvcc:NextVersion → 2 ["\x00" → "\x02"] > CREATE TABLE name (id INT PRIMARY KEY, value STRING) [ops]> COMMIT --- -storage delete mvcc:TxnWrite(2, sql:Table(name)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x00\xffname\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnActive(2) ["\x01\x00\x00\x00\x00\x00\x00\x00\x02"] +delete mvcc:TxnWrite(2, sql:Table(name)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x00\xffname\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnActive(2) ["\x01\x00\x00\x00\x00\x00\x00\x00\x02"] dump --- diff --git a/src/sql/testscripts/schema/create_table_unique b/src/sql/testscripts/schema/create_table_unique index 9844d9fb..e2082225 100644 --- a/src/sql/testscripts/schema/create_table_unique +++ b/src/sql/testscripts/schema/create_table_unique @@ -2,12 +2,12 @@ # separate index). [ops]> CREATE TABLE indexed (id INTEGER PRIMARY KEY, "index" INTEGER UNIQUE) --- -storage set mvcc:NextVersion → 2 ["\x00" → "\x02"] -storage set mvcc:TxnActive(1) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x01" → ""] -storage set mvcc:TxnWrite(1, sql:Table(indexed)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xffindexed\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Table(indexed), 1) → CREATE TABLE indexed ( id INTEGER PRIMARY KEY, "index" INTEGER DEFAULT NULL UNIQUE INDEX ) ["\x04\x00\xffindexed\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" → "\x01 \x07indexed\x00\x02\x02id\x01\x00\x00\x01\x00\x00\x05index\x01\x01\x01\x00\x01\x01\x00"] -storage delete mvcc:TxnWrite(1, sql:Table(indexed)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xffindexed\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnActive(1) ["\x01\x00\x00\x00\x00\x00\x00\x00\x01"] +set mvcc:NextVersion → 2 ["\x00" → "\x02"] +set mvcc:TxnActive(1) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x01" → ""] +set mvcc:TxnWrite(1, sql:Table(indexed)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xffindexed\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Table(indexed), 1) → CREATE TABLE indexed ( id INTEGER PRIMARY KEY, "index" INTEGER DEFAULT NULL UNIQUE INDEX ) ["\x04\x00\xffindexed\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" → "\x01 \x07indexed\x00\x02\x02id\x01\x00\x00\x01\x00\x00\x05index\x01\x01\x01\x00\x01\x01\x00"] +delete mvcc:TxnWrite(1, sql:Table(indexed)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xffindexed\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnActive(1) ["\x01\x00\x00\x00\x00\x00\x00\x00\x01"] # The column gets an implicit secondary index marker. schema diff --git a/src/sql/testscripts/schema/drop_table b/src/sql/testscripts/schema/drop_table index 8bcd434c..96dfe25b 100644 --- a/src/sql/testscripts/schema/drop_table +++ b/src/sql/testscripts/schema/drop_table @@ -10,19 +10,19 @@ ok [plan,result,ops]> DROP TABLE name --- DropTable: name +set mvcc:NextVersion → 4 ["\x00" → "\x04"] +set mvcc:TxnActive(3) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x03" → ""] +set mvcc:TxnWrite(3, sql:Table(name)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\xffname\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Table(name), 3) → None ["\x04\x00\xffname\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] +set mvcc:TxnWrite(3, sql:Row(name, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 1), 3) → None ["\x04\x02name\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\x03" → "\x00"] +set mvcc:TxnWrite(3, sql:Row(name, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 2), 3) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] +delete mvcc:TxnWrite(3, sql:Table(name)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\xffname\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(3, sql:Row(name, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(3, sql:Row(name, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnActive(3) ["\x01\x00\x00\x00\x00\x00\x00\x00\x03"] DropTable { name: "name", existed: true } -storage set mvcc:NextVersion → 4 ["\x00" → "\x04"] -storage set mvcc:TxnActive(3) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x03" → ""] -storage set mvcc:TxnWrite(3, sql:Table(name)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\xffname\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Table(name), 3) → None ["\x04\x00\xffname\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] -storage set mvcc:TxnWrite(3, sql:Row(name, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 1), 3) → None ["\x04\x02name\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\x03" → "\x00"] -storage set mvcc:TxnWrite(3, sql:Row(name, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 2), 3) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] -storage delete mvcc:TxnWrite(3, sql:Table(name)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\xffname\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(3, sql:Row(name, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(3, sql:Row(name, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnActive(3) ["\x01\x00\x00\x00\x00\x00\x00\x00\x03"] schema --- @@ -45,10 +45,10 @@ Error: invalid input: table name does not exist [result,ops]> DROP TABLE IF EXISTS name --- +set mvcc:NextVersion → 6 ["\x00" → "\x06"] +set mvcc:TxnActive(5) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x05" → ""] +delete mvcc:TxnActive(5) ["\x01\x00\x00\x00\x00\x00\x00\x00\x05"] DropTable { name: "name", existed: false } -storage set mvcc:NextVersion → 6 ["\x00" → "\x06"] -storage set mvcc:TxnActive(5) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x05" → ""] -storage delete mvcc:TxnActive(5) ["\x01\x00\x00\x00\x00\x00\x00\x00\x05"] # No table or multiple tables errors. !> DROP TABLE diff --git a/src/sql/testscripts/schema/drop_table_index b/src/sql/testscripts/schema/drop_table_index index 13e6c59b..d996871e 100644 --- a/src/sql/testscripts/schema/drop_table_index +++ b/src/sql/testscripts/schema/drop_table_index @@ -42,45 +42,45 @@ mvcc:Version(sql:Row(ref, 2), 2) → 2,'b' ["\x04\x02ref\x00\xff\x00\xff\x02\x80 [ops]> DROP TABLE name > DROP TABLE ref --- -storage set mvcc:NextVersion → 9 ["\x00" → "\t"] -storage set mvcc:TxnActive(8) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x08" → ""] -storage set mvcc:TxnWrite(8, sql:Table(name)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x00\xffname\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Table(name), 8) → None ["\x04\x00\xffname\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] -storage set mvcc:TxnWrite(8, sql:Row(name, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 1), 8) → None ["\x04\x02name\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\x08" → "\x00"] -storage set mvcc:TxnWrite(8, sql:Row(name, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 2), 8) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] -storage set mvcc:TxnWrite(8, sql:Row(name, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 3), 8) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] -storage set mvcc:TxnWrite(8, sql:Row(name, 4)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 4), 8) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] -storage set mvcc:TxnWrite(8, sql:Index(name.unique, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.unique, 1), 8) → None ["\x04\x01name\x00\xff\x00\xffunique\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\x08" → "\x00"] -storage set mvcc:TxnWrite(8, sql:Index(name.unique, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.unique, 2), 8) → None ["\x04\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] -storage set mvcc:TxnWrite(8, sql:Index(name.unique, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.unique, 3), 8) → None ["\x04\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] -storage set mvcc:TxnWrite(8, sql:Index(name.unique, 4)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.unique, 4), 8) → None ["\x04\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] -storage set mvcc:TxnWrite(8, sql:Index(name.ref_id, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.ref_id, NULL), 8) → None ["\x04\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] -storage set mvcc:TxnWrite(8, sql:Index(name.ref_id, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.ref_id, 1), 8) → None ["\x04\x01name\x00\xff\x00\xffref_id\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\x08" → "\x00"] -storage set mvcc:TxnWrite(8, sql:Index(name.ref_id, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.ref_id, 2), 8) → None ["\x04\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] -storage delete mvcc:TxnWrite(8, sql:Table(name)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x00\xffname\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(name.ref_id, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(name.ref_id, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(name.ref_id, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(name.unique, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(name.unique, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(name.unique, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(name.unique, 4)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Row(name, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Row(name, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Row(name, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Row(name, 4)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00"] -storage delete mvcc:TxnActive(8) ["\x01\x00\x00\x00\x00\x00\x00\x00\x08"] +set mvcc:NextVersion → 9 ["\x00" → "\t"] +set mvcc:TxnActive(8) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x08" → ""] +set mvcc:TxnWrite(8, sql:Table(name)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x00\xffname\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Table(name), 8) → None ["\x04\x00\xffname\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] +set mvcc:TxnWrite(8, sql:Row(name, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 1), 8) → None ["\x04\x02name\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\x08" → "\x00"] +set mvcc:TxnWrite(8, sql:Row(name, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 2), 8) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] +set mvcc:TxnWrite(8, sql:Row(name, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 3), 8) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] +set mvcc:TxnWrite(8, sql:Row(name, 4)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 4), 8) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] +set mvcc:TxnWrite(8, sql:Index(name.unique, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(name.unique, 1), 8) → None ["\x04\x01name\x00\xff\x00\xffunique\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\x08" → "\x00"] +set mvcc:TxnWrite(8, sql:Index(name.unique, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Index(name.unique, 2), 8) → None ["\x04\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] +set mvcc:TxnWrite(8, sql:Index(name.unique, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] +set mvcc:Version(sql:Index(name.unique, 3), 8) → None ["\x04\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] +set mvcc:TxnWrite(8, sql:Index(name.unique, 4)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00" → ""] +set mvcc:Version(sql:Index(name.unique, 4), 8) → None ["\x04\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] +set mvcc:TxnWrite(8, sql:Index(name.ref_id, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(name.ref_id, NULL), 8) → None ["\x04\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] +set mvcc:TxnWrite(8, sql:Index(name.ref_id, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(name.ref_id, 1), 8) → None ["\x04\x01name\x00\xff\x00\xffref_id\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\x08" → "\x00"] +set mvcc:TxnWrite(8, sql:Index(name.ref_id, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Index(name.ref_id, 2), 8) → None ["\x04\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] +delete mvcc:TxnWrite(8, sql:Table(name)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x00\xffname\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(name.ref_id, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(name.ref_id, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(name.ref_id, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(name.unique, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(name.unique, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(name.unique, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(name.unique, 4)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00"] +delete mvcc:TxnWrite(8, sql:Row(name, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(8, sql:Row(name, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnWrite(8, sql:Row(name, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] +delete mvcc:TxnWrite(8, sql:Row(name, 4)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00"] +delete mvcc:TxnActive(8) ["\x01\x00\x00\x00\x00\x00\x00\x00\x08"] dump --- diff --git a/src/sql/testscripts/schema/drop_table_transaction b/src/sql/testscripts/schema/drop_table_transaction index b965112f..1e0b466f 100644 --- a/src/sql/testscripts/schema/drop_table_transaction +++ b/src/sql/testscripts/schema/drop_table_transaction @@ -16,12 +16,12 @@ mvcc:Version(sql:Row(name, 2), 2) → 2,'b' ["\x04\x02name\x00\xff\x00\xff\x02\x > BEGIN [ops]> DROP TABLE name --- -storage set mvcc:TxnWrite(3, sql:Table(name)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\xffname\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Table(name), 3) → None ["\x04\x00\xffname\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] -storage set mvcc:TxnWrite(3, sql:Row(name, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 1), 3) → None ["\x04\x02name\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\x03" → "\x00"] -storage set mvcc:TxnWrite(3, sql:Row(name, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 2), 3) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] +set mvcc:TxnWrite(3, sql:Table(name)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\xffname\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Table(name), 3) → None ["\x04\x00\xffname\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] +set mvcc:TxnWrite(3, sql:Row(name, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 1), 3) → None ["\x04\x02name\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\x03" → "\x00"] +set mvcc:TxnWrite(3, sql:Row(name, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 2), 3) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] schema --- @@ -44,13 +44,13 @@ mvcc:Version(sql:Row(name, 2), 3) → None ["\x04\x02name\x00\xff\x00\xff\x02\x8 # Rolling it back undoes it. [ops]> ROLLBACK --- -storage delete mvcc:Version(sql:Table(name), 3) ["\x04\x00\xffname\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03"] -storage delete mvcc:TxnWrite(3, sql:Table(name)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\xffname\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:Version(sql:Row(name, 1), 3) ["\x04\x02name\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\x03"] -storage delete mvcc:TxnWrite(3, sql:Row(name, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:Version(sql:Row(name, 2), 3) ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03"] -storage delete mvcc:TxnWrite(3, sql:Row(name, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnActive(3) ["\x01\x00\x00\x00\x00\x00\x00\x00\x03"] +delete mvcc:Version(sql:Table(name), 3) ["\x04\x00\xffname\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03"] +delete mvcc:TxnWrite(3, sql:Table(name)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\xffname\x00\xff\x00\xff\x00\x00"] +delete mvcc:Version(sql:Row(name, 1), 3) ["\x04\x02name\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\x03"] +delete mvcc:TxnWrite(3, sql:Row(name, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:Version(sql:Row(name, 2), 3) ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03"] +delete mvcc:TxnWrite(3, sql:Row(name, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnActive(3) ["\x01\x00\x00\x00\x00\x00\x00\x00\x03"] dump --- @@ -64,10 +64,10 @@ mvcc:Version(sql:Row(name, 2), 2) → 2,'b' ["\x04\x02name\x00\xff\x00\xff\x02\x > DROP TABLE name [ops]> COMMIT --- -storage delete mvcc:TxnWrite(4, sql:Table(name)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x00\xffname\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(4, sql:Row(name, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(4, sql:Row(name, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnActive(4) ["\x01\x00\x00\x00\x00\x00\x00\x00\x04"] +delete mvcc:TxnWrite(4, sql:Table(name)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x00\xffname\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(4, sql:Row(name, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(4, sql:Row(name, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnActive(4) ["\x01\x00\x00\x00\x00\x00\x00\x00\x04"] dump --- diff --git a/src/sql/testscripts/transactions/begin b/src/sql/testscripts/transactions/begin index 61001bfd..579cfb44 100644 --- a/src/sql/testscripts/transactions/begin +++ b/src/sql/testscripts/transactions/begin @@ -9,9 +9,9 @@ ok # record for itself. c1:[result,ops]> BEGIN --- -c1: v3 read-write active={} -c1: storage set mvcc:NextVersion → 4 ["\x00" → "\x04"] -c1: storage set mvcc:TxnActive(3) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x03" → ""] +c1: set mvcc:NextVersion → 4 ["\x00" → "\x04"] +c1: set mvcc:TxnActive(3) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x03" → ""] +c1: Begin { state: TransactionState { version: 3, read_only: false, active: {} } } # Starting another transaction for c1 errors. c1:!> BEGIN @@ -24,10 +24,10 @@ c1: Error: invalid input: already in a transaction # its active set. The active snapshot is persisted to storage. c2:[result,ops]> BEGIN --- -c2: v4 read-write active={3} -c2: storage set mvcc:NextVersion → 5 ["\x00" → "\x05"] -c2: storage set mvcc:TxnActiveSnapshot(4) → {3} ["\x02\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03"] -c2: storage set mvcc:TxnActive(4) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x04" → ""] +c2: set mvcc:NextVersion → 5 ["\x00" → "\x05"] +c2: set mvcc:TxnActiveSnapshot(4) → {3} ["\x02\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03"] +c2: set mvcc:TxnActive(4) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x04" → ""] +c2: Begin { state: TransactionState { version: 4, read_only: false, active: {3} } } # A read-only transaction doesn't allocate a new version, and doesn't perform # 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 c3:!> INSERT INTO test VALUES (0, '') c3:> ROLLBACK --- -c3: v5 read-only active={3,4} +c3: Begin { state: TransactionState { version: 5, read_only: true, active: {3, 4} } } c3: Error: invalid input: primary key 0 already exists # c1 writes a value and commits. @@ -51,7 +51,7 @@ c3:[result,ops]> BEGIN READ ONLY AS OF SYSTEM TIME 1 c3:!> SELECT * FROM test c3:> ROLLBACK --- -c3: v1 read-only active={} +c3: Begin { state: TransactionState { version: 1, read_only: true, active: {} } } c3: Error: invalid input: table test does not exist # 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 c3:> SELECT * FROM test c3:> ROLLBACK --- -c3: v2 read-only active={} +c3: Begin { state: TransactionState { version: 2, read_only: true, active: {} } } c3:[result,ops]> BEGIN READ ONLY AS OF SYSTEM TIME 3 c3:> SELECT * FROM test c3:> ROLLBACK --- -c3: v3 read-only active={} +c3: Begin { state: TransactionState { version: 3, read_only: true, active: {} } } c3: 0, '' # 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 c3:> SELECT * FROM test c3:> ROLLBACK --- -c3: v4 read-only active={3} +c3: Begin { state: TransactionState { version: 4, read_only: true, active: {3} } } c3: 0, '' diff --git a/src/sql/testscripts/transactions/commit b/src/sql/testscripts/transactions/commit index a102d5f8..889bea3e 100644 --- a/src/sql/testscripts/transactions/commit +++ b/src/sql/testscripts/transactions/commit @@ -9,18 +9,18 @@ ok [ops,result]> INSERT INTO test VALUES (1, 'a'), (2, 'b') [ops,result]> COMMIT --- -v2 read-write active={} -storage set mvcc:NextVersion → 3 ["\x00" → "\x03"] -storage set mvcc:TxnActive(2) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x02" → ""] +set mvcc:NextVersion → 3 ["\x00" → "\x03"] +set mvcc:TxnActive(2) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x02" → ""] +Begin { state: TransactionState { version: 2, read_only: false, active: {} } } +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" → ""] +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"] +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" → ""] +set mvcc:Version(sql:Row(test, 2), 2) → 2,'b' ["\x04\x02test\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x06\x02\x02\x04\x04\x01b"] Insert { count: 2 } -storage 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" → ""] -storage 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"] -storage 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" → ""] -storage set mvcc:Version(sql:Row(test, 2), 2) → 2,'b' ["\x04\x02test\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x06\x02\x02\x04\x04\x01b"] +delete 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"] +delete 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"] +delete mvcc:TxnActive(2) ["\x01\x00\x00\x00\x00\x00\x00\x00\x02"] Commit { version: 2 } -storage delete 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"] -storage delete 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"] -storage delete mvcc:TxnActive(2) ["\x01\x00\x00\x00\x00\x00\x00\x00\x02"] # A later transaction can see its writes. c1:> SELECT * FROM test @@ -36,12 +36,12 @@ ok c2:[ops,result]> BEGIN c2:[ops,result]> COMMIT --- -c2: v4 read-write active={3} -c2: storage set mvcc:NextVersion → 5 ["\x00" → "\x05"] -c2: storage set mvcc:TxnActiveSnapshot(4) → {3} ["\x02\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03"] -c2: storage set mvcc:TxnActive(4) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x04" → ""] +c2: set mvcc:NextVersion → 5 ["\x00" → "\x05"] +c2: set mvcc:TxnActiveSnapshot(4) → {3} ["\x02\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03"] +c2: set mvcc:TxnActive(4) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x04" → ""] +c2: Begin { state: TransactionState { version: 4, read_only: false, active: {3} } } +c2: delete mvcc:TxnActive(4) ["\x01\x00\x00\x00\x00\x00\x00\x00\x04"] c2: Commit { version: 4 } -c2: storage delete mvcc:TxnActive(4) ["\x01\x00\x00\x00\x00\x00\x00\x00\x04"] # Commit errors when there's no open transaction. !> COMMIT diff --git a/src/sql/testscripts/transactions/isolation b/src/sql/testscripts/transactions/isolation index edfd7e3b..395bca9d 100644 --- a/src/sql/testscripts/transactions/isolation +++ b/src/sql/testscripts/transactions/isolation @@ -38,7 +38,7 @@ ok c4:[result]> BEGIN c4:> INSERT INTO test VALUES (4, 'd') --- -c4: v4 read-write active={2,3} +c4: Begin { state: TransactionState { version: 4, read_only: false, active: {2, 3} } } # Commit c2. c2:> COMMIT diff --git a/src/sql/testscripts/transactions/rollback b/src/sql/testscripts/transactions/rollback index 9282d89e..3d6e32f2 100644 --- a/src/sql/testscripts/transactions/rollback +++ b/src/sql/testscripts/transactions/rollback @@ -9,20 +9,20 @@ ok [ops,result]> INSERT INTO test VALUES (1, 'a'), (2, 'b') [ops,result]> ROLLBACK --- -v2 read-write active={} -storage set mvcc:NextVersion → 3 ["\x00" → "\x03"] -storage set mvcc:TxnActive(2) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x02" → ""] +set mvcc:NextVersion → 3 ["\x00" → "\x03"] +set mvcc:TxnActive(2) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x02" → ""] +Begin { state: TransactionState { version: 2, read_only: false, active: {} } } +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" → ""] +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"] +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" → ""] +set mvcc:Version(sql:Row(test, 2), 2) → 2,'b' ["\x04\x02test\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x06\x02\x02\x04\x04\x01b"] Insert { count: 2 } -storage 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" → ""] -storage 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"] -storage 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" → ""] -storage set mvcc:Version(sql:Row(test, 2), 2) → 2,'b' ["\x04\x02test\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x06\x02\x02\x04\x04\x01b"] +delete mvcc:Version(sql:Row(test, 1), 2) ["\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"] +delete 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"] +delete mvcc:Version(sql:Row(test, 2), 2) ["\x04\x02test\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02"] +delete 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"] +delete mvcc:TxnActive(2) ["\x01\x00\x00\x00\x00\x00\x00\x00\x02"] Rollback { version: 2 } -storage delete mvcc:Version(sql:Row(test, 1), 2) ["\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"] -storage delete 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"] -storage delete mvcc:Version(sql:Row(test, 2), 2) ["\x04\x02test\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02"] -storage delete 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"] -storage delete mvcc:TxnActive(2) ["\x01\x00\x00\x00\x00\x00\x00\x00\x02"] # A later transaction can't see its writes. c1:> SELECT * FROM test @@ -38,12 +38,12 @@ ok c2:[ops,result]> BEGIN c2:[ops,result]> ROLLBACK --- -c2: v4 read-write active={3} -c2: storage set mvcc:NextVersion → 5 ["\x00" → "\x05"] -c2: storage set mvcc:TxnActiveSnapshot(4) → {3} ["\x02\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03"] -c2: storage set mvcc:TxnActive(4) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x04" → ""] +c2: set mvcc:NextVersion → 5 ["\x00" → "\x05"] +c2: set mvcc:TxnActiveSnapshot(4) → {3} ["\x02\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03"] +c2: set mvcc:TxnActive(4) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x04" → ""] +c2: Begin { state: TransactionState { version: 4, read_only: false, active: {3} } } +c2: delete mvcc:TxnActive(4) ["\x01\x00\x00\x00\x00\x00\x00\x00\x04"] c2: Rollback { version: 4 } -c2: storage delete mvcc:TxnActive(4) ["\x01\x00\x00\x00\x00\x00\x00\x00\x04"] # Rollback errors when there's no open transaction. !> ROLLBACK diff --git a/src/sql/testscripts/transactions/schema b/src/sql/testscripts/transactions/schema index 917df1d6..0de46c17 100644 --- a/src/sql/testscripts/transactions/schema +++ b/src/sql/testscripts/transactions/schema @@ -4,8 +4,8 @@ c1:> BEGIN c1:[ops]> CREATE TABLE test (id INT PRIMARY KEY, value STRING) c1:> SELECT * FROM test --- -c1: storage set mvcc:TxnWrite(1, sql:Table(test)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xfftest\x00\xff\x00\xff\x00\x00" → ""] -c1: storage set mvcc:Version(sql:Table(test), 1) → CREATE TABLE test ( id INTEGER PRIMARY KEY, value STRING DEFAULT NULL ) ["\x04\x00\xfftest\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" → "\x01\x1d\x04test\x00\x02\x02id\x01\x00\x00\x01\x00\x00\x05value\x03\x01\x01\x00\x00\x00\x00"] +c1: set mvcc:TxnWrite(1, sql:Table(test)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xfftest\x00\xff\x00\xff\x00\x00" → ""] +c1: set mvcc:Version(sql:Table(test), 1) → CREATE TABLE test ( id INTEGER PRIMARY KEY, value STRING DEFAULT NULL ) ["\x04\x00\xfftest\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" → "\x01\x1d\x04test\x00\x02\x02id\x01\x00\x00\x01\x00\x00\x05value\x03\x01\x01\x00\x00\x00\x00"] # A concurrent transaction can't see the uncommitted table. c2:!> SELECT * FROM test @@ -15,9 +15,9 @@ c2: Error: invalid input: table test does not exist # Rolling back the transaction removes the table. c1:[ops]> ROLLBACK --- -c1: storage delete mvcc:Version(sql:Table(test), 1) ["\x04\x00\xfftest\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"] -c1: storage delete mvcc:TxnWrite(1, sql:Table(test)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xfftest\x00\xff\x00\xff\x00\x00"] -c1: storage delete mvcc:TxnActive(1) ["\x01\x00\x00\x00\x00\x00\x00\x00\x01"] +c1: delete mvcc:Version(sql:Table(test), 1) ["\x04\x00\xfftest\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"] +c1: delete mvcc:TxnWrite(1, sql:Table(test)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\xfftest\x00\xff\x00\xff\x00\x00"] +c1: delete mvcc:TxnActive(1) ["\x01\x00\x00\x00\x00\x00\x00\x00\x01"] c1:!> SELECT * FROM test c2:!> SELECT * FROM test @@ -29,8 +29,8 @@ c2: Error: invalid input: table test does not exist c1:> BEGIN c1:[ops]> CREATE TABLE test (id INT PRIMARY KEY, value STRING) --- -c1: storage set mvcc:TxnWrite(2, sql:Table(test)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x00\xfftest\x00\xff\x00\xff\x00\x00" → ""] -c1: storage set mvcc:Version(sql:Table(test), 2) → CREATE TABLE test ( id INTEGER PRIMARY KEY, value STRING DEFAULT NULL ) ["\x04\x00\xfftest\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x1d\x04test\x00\x02\x02id\x01\x00\x00\x01\x00\x00\x05value\x03\x01\x01\x00\x00\x00\x00"] +c1: set mvcc:TxnWrite(2, sql:Table(test)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x00\xfftest\x00\xff\x00\xff\x00\x00" → ""] +c1: set mvcc:Version(sql:Table(test), 2) → CREATE TABLE test ( id INTEGER PRIMARY KEY, value STRING DEFAULT NULL ) ["\x04\x00\xfftest\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x1d\x04test\x00\x02\x02id\x01\x00\x00\x01\x00\x00\x05value\x03\x01\x01\x00\x00\x00\x00"] c2:!> SELECT * FROM test --- @@ -38,8 +38,8 @@ c2: Error: invalid input: table test does not exist c1:[ops]> COMMIT --- -c1: storage delete mvcc:TxnWrite(2, sql:Table(test)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x00\xfftest\x00\xff\x00\xff\x00\x00"] -c1: storage delete mvcc:TxnActive(2) ["\x01\x00\x00\x00\x00\x00\x00\x00\x02"] +c1: delete mvcc:TxnWrite(2, sql:Table(test)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x00\xfftest\x00\xff\x00\xff\x00\x00"] +c1: delete mvcc:TxnActive(2) ["\x01\x00\x00\x00\x00\x00\x00\x00\x02"] c2:> SELECT * FROM test --- diff --git a/src/sql/testscripts/writes/delete b/src/sql/testscripts/writes/delete index e1549ab8..a3df52ca 100644 --- a/src/sql/testscripts/writes/delete +++ b/src/sql/testscripts/writes/delete @@ -13,12 +13,12 @@ ok --- Delete: name └─ Scan: name -storage set mvcc:TxnWrite(3, sql:Row(name, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 1), 3) → None ["\x04\x02name\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\x03" → "\x00"] -storage set mvcc:TxnWrite(3, sql:Row(name, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 2), 3) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] -storage set mvcc:TxnWrite(3, sql:Row(name, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 3), 3) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] +set mvcc:TxnWrite(3, sql:Row(name, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 1), 3) → None ["\x04\x02name\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\x03" → "\x00"] +set mvcc:TxnWrite(3, sql:Row(name, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 2), 3) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] +set mvcc:TxnWrite(3, sql:Row(name, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 3), 3) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] > SELECT * FROM name > ROLLBACK @@ -39,18 +39,18 @@ Error: invalid input: unexpected token , # Deleting in an implicit transaction works, and deletes. [ops]> DELETE FROM name --- -storage set mvcc:NextVersion → 6 ["\x00" → "\x06"] -storage set mvcc:TxnActive(5) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x05" → ""] -storage set mvcc:TxnWrite(5, sql:Row(name, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 1), 5) → None ["\x04\x02name\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\x05" → "\x00"] -storage set mvcc:TxnWrite(5, sql:Row(name, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 2), 5) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x00"] -storage set mvcc:TxnWrite(5, sql:Row(name, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 3), 5) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x00"] -storage delete mvcc:TxnWrite(5, sql:Row(name, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(5, sql:Row(name, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnWrite(5, sql:Row(name, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] -storage delete mvcc:TxnActive(5) ["\x01\x00\x00\x00\x00\x00\x00\x00\x05"] +set mvcc:NextVersion → 6 ["\x00" → "\x06"] +set mvcc:TxnActive(5) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x05" → ""] +set mvcc:TxnWrite(5, sql:Row(name, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 1), 5) → None ["\x04\x02name\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\x05" → "\x00"] +set mvcc:TxnWrite(5, sql:Row(name, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 2), 5) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x00"] +set mvcc:TxnWrite(5, sql:Row(name, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 3), 5) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x00"] +delete mvcc:TxnWrite(5, sql:Row(name, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(5, sql:Row(name, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnWrite(5, sql:Row(name, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] +delete mvcc:TxnActive(5) ["\x01\x00\x00\x00\x00\x00\x00\x00\x05"] > SELECT * FROM name --- diff --git a/src/sql/testscripts/writes/delete_index b/src/sql/testscripts/writes/delete_index index 534ca962..30e15b56 100644 --- a/src/sql/testscripts/writes/delete_index +++ b/src/sql/testscripts/writes/delete_index @@ -20,21 +20,21 @@ ok # DELETE updates the secondary indexes. [ops]> DELETE FROM name WHERE id = 4 --- -storage set mvcc:NextVersion → 10 ["\x00" → "\n"] -storage set mvcc:TxnActive(9) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\t" → ""] -storage set mvcc:TxnWrite(9, sql:Index(name.index, 8)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01name\x00\xff\x00\xffindex\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x08\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.index, 8), 9) → None ["\x04\x01name\x00\xff\x00\xffindex\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x00"] -storage set mvcc:TxnWrite(9, sql:Index(name.unique, 'baz')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x04baz\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.unique, 'baz'), 9) → None ["\x04\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x04baz\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x00"] -storage set mvcc:TxnWrite(9, sql:Index(name.ref_id, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.ref_id, 2), 9) → 3 ["\x04\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x03\x01\x02\x06"] -storage set mvcc:TxnWrite(9, sql:Row(name, 4)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 4), 9) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x00"] -storage delete mvcc:TxnWrite(9, sql:Index(name.index, 8)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01name\x00\xff\x00\xffindex\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x08\x00\x00"] -storage delete mvcc:TxnWrite(9, sql:Index(name.ref_id, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnWrite(9, sql:Index(name.unique, 'baz')) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x04baz\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(9, sql:Row(name, 4)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00"] -storage delete mvcc:TxnActive(9) ["\x01\x00\x00\x00\x00\x00\x00\x00\t"] +set mvcc:NextVersion → 10 ["\x00" → "\n"] +set mvcc:TxnActive(9) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\t" → ""] +set mvcc:TxnWrite(9, sql:Index(name.index, 8)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01name\x00\xff\x00\xffindex\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x08\x00\x00" → ""] +set mvcc:Version(sql:Index(name.index, 8), 9) → None ["\x04\x01name\x00\xff\x00\xffindex\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x00"] +set mvcc:TxnWrite(9, sql:Index(name.unique, 'baz')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x04baz\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(name.unique, 'baz'), 9) → None ["\x04\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x04baz\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x00"] +set mvcc:TxnWrite(9, sql:Index(name.ref_id, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Index(name.ref_id, 2), 9) → 3 ["\x04\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x03\x01\x02\x06"] +set mvcc:TxnWrite(9, sql:Row(name, 4)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 4), 9) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x00"] +delete mvcc:TxnWrite(9, sql:Index(name.index, 8)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01name\x00\xff\x00\xffindex\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x08\x00\x00"] +delete mvcc:TxnWrite(9, sql:Index(name.ref_id, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnWrite(9, sql:Index(name.unique, 'baz')) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01name\x00\xff\x00\xffunique\x00\xff\x00\xff\x04baz\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(9, sql:Row(name, 4)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00"] +delete mvcc:TxnActive(9) ["\x01\x00\x00\x00\x00\x00\x00\x00\t"] # Dump the final state. > SELECT * FROM name diff --git a/src/sql/testscripts/writes/delete_reference b/src/sql/testscripts/writes/delete_reference index 63afdae1..aaa757c0 100644 --- a/src/sql/testscripts/writes/delete_reference +++ b/src/sql/testscripts/writes/delete_reference @@ -36,12 +36,12 @@ Error: invalid input: row referenced by name.id=1 # DELETE of an unreferenced row succeeds. [ops]> DELETE FROM ref WHERE id = 3 --- -storage set mvcc:NextVersion → 14 ["\x00" → "\x0e"] -storage set mvcc:TxnActive(13) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\r" → ""] -storage set mvcc:TxnWrite(13, sql:Row(ref, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x02ref\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] -storage set mvcc:Version(sql:Row(ref, 3), 13) → None ["\x04\x02ref\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x00"] -storage delete mvcc:TxnWrite(13, sql:Row(ref, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x02ref\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] -storage delete mvcc:TxnActive(13) ["\x01\x00\x00\x00\x00\x00\x00\x00\r"] +set mvcc:NextVersion → 14 ["\x00" → "\x0e"] +set mvcc:TxnActive(13) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\r" → ""] +set mvcc:TxnWrite(13, sql:Row(ref, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x02ref\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] +set mvcc:Version(sql:Row(ref, 3), 13) → None ["\x04\x02ref\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x00"] +delete mvcc:TxnWrite(13, sql:Row(ref, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x02ref\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] +delete mvcc:TxnActive(13) ["\x01\x00\x00\x00\x00\x00\x00\x00\r"] > SELECT * FROM ref --- @@ -51,26 +51,26 @@ storage delete mvcc:TxnActive(13) ["\x01\x00\x00\x00\x00\x00\x00\x00\r"] # DELETE in the source table succeeds. It also removes the index entries. [ops]> DELETE FROM name WHERE id = 2 OR id = 3 --- -storage set mvcc:NextVersion → 15 ["\x00" → "\x0f"] -storage set mvcc:TxnActive(14) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x0e" → ""] -storage set mvcc:TxnWrite(14, sql:Index(name.ref_id, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.ref_id, NULL), 14) → None ["\x04\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x00"] -storage set mvcc:TxnWrite(14, sql:Index(name.sref_id, 'b')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01name\x00\xff\x00\xffsref_id\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.sref_id, 'b'), 14) → 3 ["\x04\x01name\x00\xff\x00\xffsref_id\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\x03\x01\x02\x06"] -storage set mvcc:TxnWrite(14, sql:Row(name, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 2), 14) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x00"] -storage set mvcc:TxnWrite(14, sql:Index(name.ref_id, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.ref_id, 2), 14) → 4 ["\x04\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\x03\x01\x02\x08"] -storage set mvcc:TxnWrite(14, sql:Index(name.sref_id, 'b')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01name\x00\xff\x00\xffsref_id\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.sref_id, 'b'), 14) → None ["\x04\x01name\x00\xff\x00\xffsref_id\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x00"] -storage set mvcc:TxnWrite(14, sql:Row(name, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 3), 14) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x00"] -storage delete mvcc:TxnWrite(14, sql:Index(name.ref_id, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(14, sql:Index(name.ref_id, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnWrite(14, sql:Index(name.sref_id, 'b')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01name\x00\xff\x00\xffsref_id\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(14, sql:Row(name, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnWrite(14, sql:Row(name, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] -storage delete mvcc:TxnActive(14) ["\x01\x00\x00\x00\x00\x00\x00\x00\x0e"] +set mvcc:NextVersion → 15 ["\x00" → "\x0f"] +set mvcc:TxnActive(14) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x0e" → ""] +set mvcc:TxnWrite(14, sql:Index(name.ref_id, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(name.ref_id, NULL), 14) → None ["\x04\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x00"] +set mvcc:TxnWrite(14, sql:Index(name.sref_id, 'b')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01name\x00\xff\x00\xffsref_id\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(name.sref_id, 'b'), 14) → 3 ["\x04\x01name\x00\xff\x00\xffsref_id\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\x03\x01\x02\x06"] +set mvcc:TxnWrite(14, sql:Row(name, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 2), 14) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x00"] +set mvcc:TxnWrite(14, sql:Index(name.ref_id, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Index(name.ref_id, 2), 14) → 4 ["\x04\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\x03\x01\x02\x08"] +set mvcc:TxnWrite(14, sql:Index(name.sref_id, 'b')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01name\x00\xff\x00\xffsref_id\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(name.sref_id, 'b'), 14) → None ["\x04\x01name\x00\xff\x00\xffsref_id\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x00"] +set mvcc:TxnWrite(14, sql:Row(name, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 3), 14) → None ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x00"] +delete mvcc:TxnWrite(14, sql:Index(name.ref_id, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(14, sql:Index(name.ref_id, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01name\x00\xff\x00\xffref_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnWrite(14, sql:Index(name.sref_id, 'b')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01name\x00\xff\x00\xffsref_id\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(14, sql:Row(name, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnWrite(14, sql:Row(name, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] +delete mvcc:TxnActive(14) ["\x01\x00\x00\x00\x00\x00\x00\x00\x0e"] # DELETE of a no-longer-referenced row succeeds. > DELETE FROM sref WHERE id = 'b' diff --git a/src/sql/testscripts/writes/insert b/src/sql/testscripts/writes/insert index 54235d09..0131928c 100644 --- a/src/sql/testscripts/writes/insert +++ b/src/sql/testscripts/writes/insert @@ -9,32 +9,32 @@ ok --- Insert: name └─ Values: 1, 'a' +set mvcc:NextVersion → 3 ["\x00" → "\x03"] +set mvcc:TxnActive(2) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x02" → ""] +set mvcc:TxnWrite(2, sql:Row(name, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 1), 2) → 1,'a' ["\x04\x02name\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"] +delete mvcc:TxnWrite(2, sql:Row(name, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnActive(2) ["\x01\x00\x00\x00\x00\x00\x00\x00\x02"] Insert { count: 1 } -storage set mvcc:NextVersion → 3 ["\x00" → "\x03"] -storage set mvcc:TxnActive(2) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x02" → ""] -storage set mvcc:TxnWrite(2, sql:Row(name, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 1), 2) → 1,'a' ["\x04\x02name\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"] -storage delete mvcc:TxnWrite(2, sql:Row(name, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnActive(2) ["\x01\x00\x00\x00\x00\x00\x00\x00\x02"] # It can also write multiple rows. [plan,result,ops]> INSERT INTO name VALUES (2, 'b'), (3, 'c'), (4, 'd') --- Insert: name └─ Values: 3 rows +set mvcc:NextVersion → 4 ["\x00" → "\x04"] +set mvcc:TxnActive(3) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x03" → ""] +set mvcc:TxnWrite(3, sql:Row(name, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 2), 3) → 2,'b' ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x06\x02\x02\x04\x04\x01b"] +set mvcc:TxnWrite(3, sql:Row(name, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 3), 3) → 3,'c' ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x06\x02\x02\x06\x04\x01c"] +set mvcc:TxnWrite(3, sql:Row(name, 4)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 4), 3) → 4,'d' ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x06\x02\x02\x08\x04\x01d"] +delete mvcc:TxnWrite(3, sql:Row(name, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnWrite(3, sql:Row(name, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] +delete mvcc:TxnWrite(3, sql:Row(name, 4)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00"] +delete mvcc:TxnActive(3) ["\x01\x00\x00\x00\x00\x00\x00\x00\x03"] Insert { count: 3 } -storage set mvcc:NextVersion → 4 ["\x00" → "\x04"] -storage set mvcc:TxnActive(3) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x03" → ""] -storage set mvcc:TxnWrite(3, sql:Row(name, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 2), 3) → 2,'b' ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x06\x02\x02\x04\x04\x01b"] -storage set mvcc:TxnWrite(3, sql:Row(name, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 3), 3) → 3,'c' ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x06\x02\x02\x06\x04\x01c"] -storage set mvcc:TxnWrite(3, sql:Row(name, 4)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 4), 3) → 4,'d' ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x06\x02\x02\x08\x04\x01d"] -storage delete mvcc:TxnWrite(3, sql:Row(name, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnWrite(3, sql:Row(name, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] -storage delete mvcc:TxnWrite(3, sql:Row(name, 4)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00"] -storage delete mvcc:TxnActive(3) ["\x01\x00\x00\x00\x00\x00\x00\x00\x03"] > SELECT * FROM name --- diff --git a/src/sql/testscripts/writes/insert_index b/src/sql/testscripts/writes/insert_index index e0abf4a7..380b7c68 100644 --- a/src/sql/testscripts/writes/insert_index +++ b/src/sql/testscripts/writes/insert_index @@ -13,298 +13,298 @@ ok # An INSERT writes to all indexes. [ops]> INSERT INTO "index" VALUES (1, TRUE, 7, 3.14, 'foo') --- -storage set mvcc:NextVersion → 3 ["\x00" → "\x03"] -storage set mvcc:TxnActive(2) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x02" → ""] -storage set mvcc:TxnWrite(2, sql:Row(index, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 1), 2) → 1,TRUE,7,3.14,'foo' ["\x04\x02index\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\x15\x05\x02\x02\x01\x01\x02\x0e\x03\x1f\x85\xebQ\xb8\x1e\t@\x04\x03foo"] -storage set mvcc:TxnWrite(2, sql:Index(index.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, TRUE), 2) → 1 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(2, sql:Index(index.int, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, 7), 2) → 1 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(2, sql:Index(index.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, 3.14), 2) → 1 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(2, sql:Index(index.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, 'foo'), 2) → 1 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x03\x01\x02\x02"] -storage delete mvcc:TxnWrite(2, sql:Index(index.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] -storage delete mvcc:TxnWrite(2, sql:Index(index.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] -storage delete mvcc:TxnWrite(2, sql:Index(index.int, 7)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00"] -storage delete mvcc:TxnWrite(2, sql:Index(index.string, 'foo')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(2, sql:Row(index, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnActive(2) ["\x01\x00\x00\x00\x00\x00\x00\x00\x02"] +set mvcc:NextVersion → 3 ["\x00" → "\x03"] +set mvcc:TxnActive(2) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x02" → ""] +set mvcc:TxnWrite(2, sql:Row(index, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 1), 2) → 1,TRUE,7,3.14,'foo' ["\x04\x02index\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\x15\x05\x02\x02\x01\x01\x02\x0e\x03\x1f\x85\xebQ\xb8\x1e\t@\x04\x03foo"] +set mvcc:TxnWrite(2, sql:Index(index.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, TRUE), 2) → 1 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(2, sql:Index(index.int, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, 7), 2) → 1 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(2, sql:Index(index.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, 3.14), 2) → 1 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(2, sql:Index(index.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, 'foo'), 2) → 1 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x03\x01\x02\x02"] +delete mvcc:TxnWrite(2, sql:Index(index.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] +delete mvcc:TxnWrite(2, sql:Index(index.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] +delete mvcc:TxnWrite(2, sql:Index(index.int, 7)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00"] +delete mvcc:TxnWrite(2, sql:Index(index.string, 'foo')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(2, sql:Row(index, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnActive(2) ["\x01\x00\x00\x00\x00\x00\x00\x00\x02"] # Another insert with the same values adds to the index entries. [ops]> INSERT INTO "index" VALUES (2, TRUE, 7, 3.14, 'foo') --- -storage set mvcc:NextVersion → 4 ["\x00" → "\x04"] -storage set mvcc:TxnActive(3) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x03" → ""] -storage set mvcc:TxnWrite(3, sql:Row(index, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 2), 3) → 2,TRUE,7,3.14,'foo' ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x15\x05\x02\x04\x01\x01\x02\x0e\x03\x1f\x85\xebQ\xb8\x1e\t@\x04\x03foo"] -storage set mvcc:TxnWrite(3, sql:Index(index.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, TRUE), 3) → 1,2 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x05\x02\x02\x02\x02\x04"] -storage set mvcc:TxnWrite(3, sql:Index(index.int, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, 7), 3) → 1,2 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x05\x02\x02\x02\x02\x04"] -storage set mvcc:TxnWrite(3, sql:Index(index.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, 3.14), 3) → 1,2 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x05\x02\x02\x02\x02\x04"] -storage set mvcc:TxnWrite(3, sql:Index(index.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, 'foo'), 3) → 1,2 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x05\x02\x02\x02\x02\x04"] -storage delete mvcc:TxnWrite(3, sql:Index(index.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] -storage delete mvcc:TxnWrite(3, sql:Index(index.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] -storage delete mvcc:TxnWrite(3, sql:Index(index.int, 7)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00"] -storage delete mvcc:TxnWrite(3, sql:Index(index.string, 'foo')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(3, sql:Row(index, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnActive(3) ["\x01\x00\x00\x00\x00\x00\x00\x00\x03"] +set mvcc:NextVersion → 4 ["\x00" → "\x04"] +set mvcc:TxnActive(3) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x03" → ""] +set mvcc:TxnWrite(3, sql:Row(index, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 2), 3) → 2,TRUE,7,3.14,'foo' ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x15\x05\x02\x04\x01\x01\x02\x0e\x03\x1f\x85\xebQ\xb8\x1e\t@\x04\x03foo"] +set mvcc:TxnWrite(3, sql:Index(index.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, TRUE), 3) → 1,2 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x05\x02\x02\x02\x02\x04"] +set mvcc:TxnWrite(3, sql:Index(index.int, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, 7), 3) → 1,2 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x05\x02\x02\x02\x02\x04"] +set mvcc:TxnWrite(3, sql:Index(index.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, 3.14), 3) → 1,2 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x05\x02\x02\x02\x02\x04"] +set mvcc:TxnWrite(3, sql:Index(index.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, 'foo'), 3) → 1,2 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x05\x02\x02\x02\x02\x04"] +delete mvcc:TxnWrite(3, sql:Index(index.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] +delete mvcc:TxnWrite(3, sql:Index(index.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] +delete mvcc:TxnWrite(3, sql:Index(index.int, 7)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00"] +delete mvcc:TxnWrite(3, sql:Index(index.string, 'foo')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(3, sql:Row(index, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnActive(3) ["\x01\x00\x00\x00\x00\x00\x00\x00\x03"] # An insert with different values writes new index entries. [ops]> INSERT INTO "index" VALUES (3, FALSE, 0, 2.718, '') --- -storage set mvcc:NextVersion → 5 ["\x00" → "\x05"] -storage set mvcc:TxnActive(4) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x04" → ""] -storage set mvcc:TxnWrite(4, sql:Row(index, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 3), 4) → 3,FALSE,0,2.718,'' ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x12\x05\x02\x06\x01\x00\x02\x00\x03X9\xb4\xc8v\xbe\x05@\x04\x00"] -storage set mvcc:TxnWrite(4, sql:Index(index.bool, FALSE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, FALSE), 4) → 3 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03\x01\x02\x06"] -storage set mvcc:TxnWrite(4, sql:Index(index.int, 0)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, 0), 4) → 3 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03\x01\x02\x06"] -storage set mvcc:TxnWrite(4, sql:Index(index.float, 2.718)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, 2.718), 4) → 3 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03\x01\x02\x06"] -storage set mvcc:TxnWrite(4, sql:Index(index.string, '')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, ''), 4) → 3 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03\x01\x02\x06"] -storage delete mvcc:TxnWrite(4, sql:Index(index.bool, FALSE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(4, sql:Index(index.float, 2.718)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00"] -storage delete mvcc:TxnWrite(4, sql:Index(index.int, 0)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(4, sql:Index(index.string, '')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(4, sql:Row(index, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] -storage delete mvcc:TxnActive(4) ["\x01\x00\x00\x00\x00\x00\x00\x00\x04"] +set mvcc:NextVersion → 5 ["\x00" → "\x05"] +set mvcc:TxnActive(4) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x04" → ""] +set mvcc:TxnWrite(4, sql:Row(index, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 3), 4) → 3,FALSE,0,2.718,'' ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x12\x05\x02\x06\x01\x00\x02\x00\x03X9\xb4\xc8v\xbe\x05@\x04\x00"] +set mvcc:TxnWrite(4, sql:Index(index.bool, FALSE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, FALSE), 4) → 3 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03\x01\x02\x06"] +set mvcc:TxnWrite(4, sql:Index(index.int, 0)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, 0), 4) → 3 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03\x01\x02\x06"] +set mvcc:TxnWrite(4, sql:Index(index.float, 2.718)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, 2.718), 4) → 3 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03\x01\x02\x06"] +set mvcc:TxnWrite(4, sql:Index(index.string, '')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, ''), 4) → 3 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03\x01\x02\x06"] +delete mvcc:TxnWrite(4, sql:Index(index.bool, FALSE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00"] +delete mvcc:TxnWrite(4, sql:Index(index.float, 2.718)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00"] +delete mvcc:TxnWrite(4, sql:Index(index.int, 0)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(4, sql:Index(index.string, '')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(4, sql:Row(index, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] +delete mvcc:TxnActive(4) ["\x01\x00\x00\x00\x00\x00\x00\x00\x04"] # Inserts with NULLS adds NULL entries. These are used for IS NULL queries. [ops]> INSERT INTO "index" VALUES (4), (5) --- -storage set mvcc:NextVersion → 6 ["\x00" → "\x06"] -storage set mvcc:TxnActive(5) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x05" → ""] -storage set mvcc:TxnWrite(5, sql:Row(index, 4)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 4), 5) → 4,NULL,NULL,NULL,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x07\x05\x02\x08\x00\x00\x00\x00"] -storage set mvcc:TxnWrite(5, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, NULL), 5) → 4 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x03\x01\x02\x08"] -storage set mvcc:TxnWrite(5, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, NULL), 5) → 4 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x03\x01\x02\x08"] -storage set mvcc:TxnWrite(5, sql:Index(index.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, NULL), 5) → 4 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x03\x01\x02\x08"] -storage set mvcc:TxnWrite(5, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, NULL), 5) → 4 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x03\x01\x02\x08"] -storage set mvcc:TxnWrite(5, sql:Row(index, 5)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x05\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 5), 5) → 5,NULL,NULL,NULL,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x07\x05\x02\n\x00\x00\x00\x00"] -storage set mvcc:TxnWrite(5, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, NULL), 5) → 4,5 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x05\x02\x02\x08\x02\n"] -storage set mvcc:TxnWrite(5, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, NULL), 5) → 4,5 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x05\x02\x02\x08\x02\n"] -storage set mvcc:TxnWrite(5, sql:Index(index.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, NULL), 5) → 4,5 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x05\x02\x02\x08\x02\n"] -storage set mvcc:TxnWrite(5, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, NULL), 5) → 4,5 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x05\x02\x02\x08\x02\n"] -storage delete mvcc:TxnWrite(5, sql:Index(index.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(5, sql:Index(index.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(5, sql:Index(index.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(5, sql:Index(index.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(5, sql:Row(index, 4)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00"] -storage delete mvcc:TxnWrite(5, sql:Row(index, 5)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x05\x00\x00"] -storage delete mvcc:TxnActive(5) ["\x01\x00\x00\x00\x00\x00\x00\x00\x05"] +set mvcc:NextVersion → 6 ["\x00" → "\x06"] +set mvcc:TxnActive(5) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x05" → ""] +set mvcc:TxnWrite(5, sql:Row(index, 4)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 4), 5) → 4,NULL,NULL,NULL,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x07\x05\x02\x08\x00\x00\x00\x00"] +set mvcc:TxnWrite(5, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, NULL), 5) → 4 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x03\x01\x02\x08"] +set mvcc:TxnWrite(5, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, NULL), 5) → 4 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x03\x01\x02\x08"] +set mvcc:TxnWrite(5, sql:Index(index.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, NULL), 5) → 4 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x03\x01\x02\x08"] +set mvcc:TxnWrite(5, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, NULL), 5) → 4 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x03\x01\x02\x08"] +set mvcc:TxnWrite(5, sql:Row(index, 5)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x05\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 5), 5) → 5,NULL,NULL,NULL,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x07\x05\x02\n\x00\x00\x00\x00"] +set mvcc:TxnWrite(5, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, NULL), 5) → 4,5 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x05\x02\x02\x08\x02\n"] +set mvcc:TxnWrite(5, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, NULL), 5) → 4,5 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x05\x02\x02\x08\x02\n"] +set mvcc:TxnWrite(5, sql:Index(index.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, NULL), 5) → 4,5 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x05\x02\x02\x08\x02\n"] +set mvcc:TxnWrite(5, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, NULL), 5) → 4,5 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05" → "\x01\x05\x02\x02\x08\x02\n"] +delete mvcc:TxnWrite(5, sql:Index(index.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(5, sql:Index(index.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(5, sql:Index(index.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(5, sql:Index(index.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(5, sql:Row(index, 4)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00"] +delete mvcc:TxnWrite(5, sql:Row(index, 5)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x05\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x05\x00\x00"] +delete mvcc:TxnActive(5) ["\x01\x00\x00\x00\x00\x00\x00\x00\x05"] # Float NaNs are considered equal and indexed. [ops]> INSERT INTO "index" (id, "float") VALUES (6, NAN), (7, NAN) --- -storage set mvcc:NextVersion → 7 ["\x00" → "\x07"] -storage set mvcc:TxnActive(6) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x06" → ""] -storage set mvcc:TxnWrite(6, sql:Row(index, 6)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x06\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 6), 6) → 6,NULL,NULL,NaN,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x0f\x05\x02\x0c\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf8\x7f\x00"] -storage set mvcc:TxnWrite(6, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, NULL), 6) → 4,5,6 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x07\x03\x02\x08\x02\n\x02\x0c"] -storage set mvcc:TxnWrite(6, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, NULL), 6) → 4,5,6 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x07\x03\x02\x08\x02\n\x02\x0c"] -storage set mvcc:TxnWrite(6, sql:Index(index.float, NaN)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, NaN), 6) → 6 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x03\x01\x02\x0c"] -storage set mvcc:TxnWrite(6, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, NULL), 6) → 4,5,6 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x07\x03\x02\x08\x02\n\x02\x0c"] -storage set mvcc:TxnWrite(6, sql:Row(index, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 7), 6) → 7,NULL,NULL,NaN,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x0f\x05\x02\x0e\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf8\x7f\x00"] -storage set mvcc:TxnWrite(6, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, NULL), 6) → 4,5,6,7 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\t\x04\x02\x08\x02\n\x02\x0c\x02\x0e"] -storage set mvcc:TxnWrite(6, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, NULL), 6) → 4,5,6,7 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\t\x04\x02\x08\x02\n\x02\x0c\x02\x0e"] -storage set mvcc:TxnWrite(6, sql:Index(index.float, NaN)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, NaN), 6) → 6,7 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x05\x02\x02\x0c\x02\x0e"] -storage set mvcc:TxnWrite(6, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, NULL), 6) → 4,5,6,7 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\t\x04\x02\x08\x02\n\x02\x0c\x02\x0e"] -storage delete mvcc:TxnWrite(6, sql:Index(index.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(6, sql:Index(index.float, NaN)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(6, sql:Index(index.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(6, sql:Index(index.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(6, sql:Row(index, 6)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x06\x00\x00"] -storage delete mvcc:TxnWrite(6, sql:Row(index, 7)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00"] -storage delete mvcc:TxnActive(6) ["\x01\x00\x00\x00\x00\x00\x00\x00\x06"] +set mvcc:NextVersion → 7 ["\x00" → "\x07"] +set mvcc:TxnActive(6) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x06" → ""] +set mvcc:TxnWrite(6, sql:Row(index, 6)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x06\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 6), 6) → 6,NULL,NULL,NaN,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x0f\x05\x02\x0c\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf8\x7f\x00"] +set mvcc:TxnWrite(6, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, NULL), 6) → 4,5,6 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x07\x03\x02\x08\x02\n\x02\x0c"] +set mvcc:TxnWrite(6, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, NULL), 6) → 4,5,6 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x07\x03\x02\x08\x02\n\x02\x0c"] +set mvcc:TxnWrite(6, sql:Index(index.float, NaN)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, NaN), 6) → 6 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x03\x01\x02\x0c"] +set mvcc:TxnWrite(6, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, NULL), 6) → 4,5,6 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x07\x03\x02\x08\x02\n\x02\x0c"] +set mvcc:TxnWrite(6, sql:Row(index, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 7), 6) → 7,NULL,NULL,NaN,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x0f\x05\x02\x0e\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf8\x7f\x00"] +set mvcc:TxnWrite(6, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, NULL), 6) → 4,5,6,7 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\t\x04\x02\x08\x02\n\x02\x0c\x02\x0e"] +set mvcc:TxnWrite(6, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, NULL), 6) → 4,5,6,7 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\t\x04\x02\x08\x02\n\x02\x0c\x02\x0e"] +set mvcc:TxnWrite(6, sql:Index(index.float, NaN)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, NaN), 6) → 6,7 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x05\x02\x02\x0c\x02\x0e"] +set mvcc:TxnWrite(6, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, NULL), 6) → 4,5,6,7 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\t\x04\x02\x08\x02\n\x02\x0c\x02\x0e"] +delete mvcc:TxnWrite(6, sql:Index(index.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(6, sql:Index(index.float, NaN)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(6, sql:Index(index.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(6, sql:Index(index.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(6, sql:Row(index, 6)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x06\x00\x00"] +delete mvcc:TxnWrite(6, sql:Row(index, 7)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00"] +delete mvcc:TxnActive(6) ["\x01\x00\x00\x00\x00\x00\x00\x00\x06"] # Float 0.0 and -0.0 are normalized as 0.0 and indexed as such. [ops]> INSERT INTO "index" (id, "float") VALUES (8, -0.0), (9, 0.0) --- -storage set mvcc:NextVersion → 8 ["\x00" → "\x08"] -storage set mvcc:TxnActive(7) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x07" → ""] -storage set mvcc:TxnWrite(7, sql:Row(index, 8)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x08\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 8), 7) → 8,NULL,NULL,0.0,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x0f\x05\x02\x10\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00"] -storage set mvcc:TxnWrite(7, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, NULL), 7) → 4,5,6,7,8 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x0b\x05\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10"] -storage set mvcc:TxnWrite(7, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, NULL), 7) → 4,5,6,7,8 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x0b\x05\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10"] -storage set mvcc:TxnWrite(7, sql:Index(index.float, 0.0)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, 0.0), 7) → 8 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x03\x01\x02\x10"] -storage set mvcc:TxnWrite(7, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, NULL), 7) → 4,5,6,7,8 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x0b\x05\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10"] -storage set mvcc:TxnWrite(7, sql:Row(index, 9)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\t\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 9), 7) → 9,NULL,NULL,0.0,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x0f\x05\x02\x12\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00"] -storage set mvcc:TxnWrite(7, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, NULL), 7) → 4,5,6,7,8,9 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\r\x06\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12"] -storage set mvcc:TxnWrite(7, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, NULL), 7) → 4,5,6,7,8,9 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\r\x06\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12"] -storage set mvcc:TxnWrite(7, sql:Index(index.float, 0.0)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, 0.0), 7) → 8,9 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x05\x02\x02\x10\x02\x12"] -storage set mvcc:TxnWrite(7, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, NULL), 7) → 4,5,6,7,8,9 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\r\x06\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12"] -storage delete mvcc:TxnWrite(7, sql:Index(index.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(7, sql:Index(index.float, 0.0)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(7, sql:Index(index.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(7, sql:Index(index.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(7, sql:Row(index, 8)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x08\x00\x00"] -storage delete mvcc:TxnWrite(7, sql:Row(index, 9)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\t\x00\x00"] -storage delete mvcc:TxnActive(7) ["\x01\x00\x00\x00\x00\x00\x00\x00\x07"] +set mvcc:NextVersion → 8 ["\x00" → "\x08"] +set mvcc:TxnActive(7) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x07" → ""] +set mvcc:TxnWrite(7, sql:Row(index, 8)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x08\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 8), 7) → 8,NULL,NULL,0.0,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x0f\x05\x02\x10\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00"] +set mvcc:TxnWrite(7, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, NULL), 7) → 4,5,6,7,8 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x0b\x05\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10"] +set mvcc:TxnWrite(7, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, NULL), 7) → 4,5,6,7,8 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x0b\x05\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10"] +set mvcc:TxnWrite(7, sql:Index(index.float, 0.0)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, 0.0), 7) → 8 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x03\x01\x02\x10"] +set mvcc:TxnWrite(7, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, NULL), 7) → 4,5,6,7,8 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x0b\x05\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10"] +set mvcc:TxnWrite(7, sql:Row(index, 9)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\t\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 9), 7) → 9,NULL,NULL,0.0,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x0f\x05\x02\x12\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00"] +set mvcc:TxnWrite(7, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, NULL), 7) → 4,5,6,7,8,9 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\r\x06\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12"] +set mvcc:TxnWrite(7, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, NULL), 7) → 4,5,6,7,8,9 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\r\x06\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12"] +set mvcc:TxnWrite(7, sql:Index(index.float, 0.0)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, 0.0), 7) → 8,9 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x05\x02\x02\x10\x02\x12"] +set mvcc:TxnWrite(7, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, NULL), 7) → 4,5,6,7,8,9 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\r\x06\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12"] +delete mvcc:TxnWrite(7, sql:Index(index.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(7, sql:Index(index.float, 0.0)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(7, sql:Index(index.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(7, sql:Index(index.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(7, sql:Row(index, 8)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x08\x00\x00"] +delete mvcc:TxnWrite(7, sql:Row(index, 9)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\t\x00\x00"] +delete mvcc:TxnActive(7) ["\x01\x00\x00\x00\x00\x00\x00\x00\x07"] # Float INFINITY is also indexed. [ops]> INSERT INTO "index" (id, "float") VALUES (10, -INFINITY), (11, INFINITY) --- -storage set mvcc:NextVersion → 9 ["\x00" → "\t"] -storage set mvcc:TxnActive(8) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x08" → ""] -storage set mvcc:TxnWrite(8, sql:Row(index, 10)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\n\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 10), 8) → 10,NULL,NULL,-inf,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x0f\x05\x02\x14\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf0\xff\x00"] -storage set mvcc:TxnWrite(8, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, NULL), 8) → 4,5,6,7,8,9,10 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x0f\x07\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14"] -storage set mvcc:TxnWrite(8, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, NULL), 8) → 4,5,6,7,8,9,10 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x0f\x07\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14"] -storage set mvcc:TxnWrite(8, sql:Index(index.float, -inf)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x00\xff\x0f\xff\xff\xff\xff\xff\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, -inf), 8) → 10 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x00\xff\x0f\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x14"] -storage set mvcc:TxnWrite(8, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, NULL), 8) → 4,5,6,7,8,9,10 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x0f\x07\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14"] -storage set mvcc:TxnWrite(8, sql:Row(index, 11)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0b\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 11), 8) → 11,NULL,NULL,inf,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x0f\x05\x02\x16\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf0\x7f\x00"] -storage set mvcc:TxnWrite(8, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, NULL), 8) → 4,5,6,7,8,9,10,11 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x11\x08\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16"] -storage set mvcc:TxnWrite(8, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, NULL), 8) → 4,5,6,7,8,9,10,11 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x11\x08\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16"] -storage set mvcc:TxnWrite(8, sql:Index(index.float, inf)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, inf), 8) → 11 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x16"] -storage set mvcc:TxnWrite(8, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, NULL), 8) → 4,5,6,7,8,9,10,11 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x11\x08\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16"] -storage delete mvcc:TxnWrite(8, sql:Index(index.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(index.float, -inf)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x00\xff\x0f\xff\xff\xff\xff\xff\xff\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(index.float, inf)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(index.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(index.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Row(index, 10)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\n\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Row(index, 11)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0b\x00\x00"] -storage delete mvcc:TxnActive(8) ["\x01\x00\x00\x00\x00\x00\x00\x00\x08"] +set mvcc:NextVersion → 9 ["\x00" → "\t"] +set mvcc:TxnActive(8) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x08" → ""] +set mvcc:TxnWrite(8, sql:Row(index, 10)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\n\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 10), 8) → 10,NULL,NULL,-inf,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x0f\x05\x02\x14\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf0\xff\x00"] +set mvcc:TxnWrite(8, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, NULL), 8) → 4,5,6,7,8,9,10 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x0f\x07\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14"] +set mvcc:TxnWrite(8, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, NULL), 8) → 4,5,6,7,8,9,10 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x0f\x07\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14"] +set mvcc:TxnWrite(8, sql:Index(index.float, -inf)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x00\xff\x0f\xff\xff\xff\xff\xff\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, -inf), 8) → 10 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x00\xff\x0f\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x14"] +set mvcc:TxnWrite(8, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, NULL), 8) → 4,5,6,7,8,9,10 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x0f\x07\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14"] +set mvcc:TxnWrite(8, sql:Row(index, 11)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0b\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 11), 8) → 11,NULL,NULL,inf,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x0f\x05\x02\x16\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf0\x7f\x00"] +set mvcc:TxnWrite(8, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, NULL), 8) → 4,5,6,7,8,9,10,11 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x11\x08\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16"] +set mvcc:TxnWrite(8, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, NULL), 8) → 4,5,6,7,8,9,10,11 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x11\x08\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16"] +set mvcc:TxnWrite(8, sql:Index(index.float, inf)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, inf), 8) → 11 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x16"] +set mvcc:TxnWrite(8, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, NULL), 8) → 4,5,6,7,8,9,10,11 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x11\x08\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16"] +delete mvcc:TxnWrite(8, sql:Index(index.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(index.float, -inf)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x00\xff\x0f\xff\xff\xff\xff\xff\xff\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(index.float, inf)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(index.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(index.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(8, sql:Row(index, 10)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\n\x00\x00"] +delete mvcc:TxnWrite(8, sql:Row(index, 11)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0b\x00\x00"] +delete mvcc:TxnActive(8) ["\x01\x00\x00\x00\x00\x00\x00\x00\x08"] [ops]> INSERT INTO "index" (id, "float") VALUES (12, -INFINITY), (13, INFINITY) --- -storage set mvcc:NextVersion → 10 ["\x00" → "\n"] -storage set mvcc:TxnActive(9) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\t" → ""] -storage set mvcc:TxnWrite(9, sql:Row(index, 12)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0c\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 12), 9) → 12,NULL,NULL,-inf,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x0f\x05\x02\x18\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf0\xff\x00"] -storage set mvcc:TxnWrite(9, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, NULL), 9) → 4,5,6,7,8,9,10,11,12 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x13\t\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18"] -storage set mvcc:TxnWrite(9, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, NULL), 9) → 4,5,6,7,8,9,10,11,12 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x13\t\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18"] -storage set mvcc:TxnWrite(9, sql:Index(index.float, -inf)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x00\xff\x0f\xff\xff\xff\xff\xff\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, -inf), 9) → 10,12 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x00\xff\x0f\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x05\x02\x02\x14\x02\x18"] -storage set mvcc:TxnWrite(9, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, NULL), 9) → 4,5,6,7,8,9,10,11,12 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x13\t\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18"] -storage set mvcc:TxnWrite(9, sql:Row(index, 13)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\r\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 13), 9) → 13,NULL,NULL,inf,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\r\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x0f\x05\x02\x1a\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf0\x7f\x00"] -storage set mvcc:TxnWrite(9, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, NULL), 9) → 4,5,6,7,8,9,10,11,12,13 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x15\n\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a"] -storage set mvcc:TxnWrite(9, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, NULL), 9) → 4,5,6,7,8,9,10,11,12,13 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x15\n\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a"] -storage set mvcc:TxnWrite(9, sql:Index(index.float, inf)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, inf), 9) → 11,13 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x05\x02\x02\x16\x02\x1a"] -storage set mvcc:TxnWrite(9, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, NULL), 9) → 4,5,6,7,8,9,10,11,12,13 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x15\n\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a"] -storage delete mvcc:TxnWrite(9, sql:Index(index.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(9, sql:Index(index.float, -inf)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x00\xff\x0f\xff\xff\xff\xff\xff\xff\x00\x00"] -storage delete mvcc:TxnWrite(9, sql:Index(index.float, inf)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(9, sql:Index(index.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(9, sql:Index(index.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(9, sql:Row(index, 12)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0c\x00\x00"] -storage delete mvcc:TxnWrite(9, sql:Row(index, 13)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\r\x00\x00"] -storage delete mvcc:TxnActive(9) ["\x01\x00\x00\x00\x00\x00\x00\x00\t"] +set mvcc:NextVersion → 10 ["\x00" → "\n"] +set mvcc:TxnActive(9) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\t" → ""] +set mvcc:TxnWrite(9, sql:Row(index, 12)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0c\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 12), 9) → 12,NULL,NULL,-inf,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x0f\x05\x02\x18\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf0\xff\x00"] +set mvcc:TxnWrite(9, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, NULL), 9) → 4,5,6,7,8,9,10,11,12 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x13\t\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18"] +set mvcc:TxnWrite(9, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, NULL), 9) → 4,5,6,7,8,9,10,11,12 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x13\t\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18"] +set mvcc:TxnWrite(9, sql:Index(index.float, -inf)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x00\xff\x0f\xff\xff\xff\xff\xff\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, -inf), 9) → 10,12 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x00\xff\x0f\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x05\x02\x02\x14\x02\x18"] +set mvcc:TxnWrite(9, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, NULL), 9) → 4,5,6,7,8,9,10,11,12 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x13\t\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18"] +set mvcc:TxnWrite(9, sql:Row(index, 13)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\r\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 13), 9) → 13,NULL,NULL,inf,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\r\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x0f\x05\x02\x1a\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf0\x7f\x00"] +set mvcc:TxnWrite(9, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, NULL), 9) → 4,5,6,7,8,9,10,11,12,13 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x15\n\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a"] +set mvcc:TxnWrite(9, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, NULL), 9) → 4,5,6,7,8,9,10,11,12,13 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x15\n\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a"] +set mvcc:TxnWrite(9, sql:Index(index.float, inf)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, inf), 9) → 11,13 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x05\x02\x02\x16\x02\x1a"] +set mvcc:TxnWrite(9, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, NULL), 9) → 4,5,6,7,8,9,10,11,12,13 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x15\n\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a"] +delete mvcc:TxnWrite(9, sql:Index(index.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(9, sql:Index(index.float, -inf)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x00\xff\x0f\xff\xff\xff\xff\xff\xff\x00\x00"] +delete mvcc:TxnWrite(9, sql:Index(index.float, inf)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(9, sql:Index(index.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(9, sql:Index(index.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(9, sql:Row(index, 12)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0c\x00\x00"] +delete mvcc:TxnWrite(9, sql:Row(index, 13)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\r\x00\x00"] +delete mvcc:TxnActive(9) ["\x01\x00\x00\x00\x00\x00\x00\x00\t"] # Empty strings are considered equal. [ops]> INSERT INTO "index" (id, "string") VALUES (14, ''), (15, '') --- -storage set mvcc:NextVersion → 11 ["\x00" → "\x0b"] -storage set mvcc:TxnActive(10) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\n" → ""] -storage set mvcc:TxnWrite(10, sql:Row(index, 14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0e\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 14), 10) → 14,NULL,NULL,NULL,'' ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x08\x05\x02\x1c\x00\x00\x00\x04\x00"] -storage set mvcc:TxnWrite(10, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, NULL), 10) → 4,5,6,7,8,9,10,11,12,13,14 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x17\x0b\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a\x02\x1c"] -storage set mvcc:TxnWrite(10, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, NULL), 10) → 4,5,6,7,8,9,10,11,12,13,14 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x17\x0b\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a\x02\x1c"] -storage set mvcc:TxnWrite(10, sql:Index(index.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, NULL), 10) → 4,5,14 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x07\x03\x02\x08\x02\n\x02\x1c"] -storage set mvcc:TxnWrite(10, sql:Index(index.string, '')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, ''), 10) → 3,14 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x05\x02\x02\x06\x02\x1c"] -storage set mvcc:TxnWrite(10, sql:Row(index, 15)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0f\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 15), 10) → 15,NULL,NULL,NULL,'' ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x08\x05\x02\x1e\x00\x00\x00\x04\x00"] -storage set mvcc:TxnWrite(10, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, NULL), 10) → 4,5,6,7,8,9,10,11,12,13,14,15 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x19\x0c\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a\x02\x1c\x02\x1e"] -storage set mvcc:TxnWrite(10, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, NULL), 10) → 4,5,6,7,8,9,10,11,12,13,14,15 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x19\x0c\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a\x02\x1c\x02\x1e"] -storage set mvcc:TxnWrite(10, sql:Index(index.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, NULL), 10) → 4,5,14,15 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\t\x04\x02\x08\x02\n\x02\x1c\x02\x1e"] -storage set mvcc:TxnWrite(10, sql:Index(index.string, '')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, ''), 10) → 3,14,15 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x07\x03\x02\x06\x02\x1c\x02\x1e"] -storage delete mvcc:TxnWrite(10, sql:Index(index.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(10, sql:Index(index.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(10, sql:Index(index.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(10, sql:Index(index.string, '')) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(10, sql:Row(index, 14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0e\x00\x00"] -storage delete mvcc:TxnWrite(10, sql:Row(index, 15)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0f\x00\x00"] -storage delete mvcc:TxnActive(10) ["\x01\x00\x00\x00\x00\x00\x00\x00\n"] +set mvcc:NextVersion → 11 ["\x00" → "\x0b"] +set mvcc:TxnActive(10) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\n" → ""] +set mvcc:TxnWrite(10, sql:Row(index, 14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0e\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 14), 10) → 14,NULL,NULL,NULL,'' ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x08\x05\x02\x1c\x00\x00\x00\x04\x00"] +set mvcc:TxnWrite(10, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, NULL), 10) → 4,5,6,7,8,9,10,11,12,13,14 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x17\x0b\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a\x02\x1c"] +set mvcc:TxnWrite(10, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, NULL), 10) → 4,5,6,7,8,9,10,11,12,13,14 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x17\x0b\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a\x02\x1c"] +set mvcc:TxnWrite(10, sql:Index(index.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, NULL), 10) → 4,5,14 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x07\x03\x02\x08\x02\n\x02\x1c"] +set mvcc:TxnWrite(10, sql:Index(index.string, '')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, ''), 10) → 3,14 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x05\x02\x02\x06\x02\x1c"] +set mvcc:TxnWrite(10, sql:Row(index, 15)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0f\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 15), 10) → 15,NULL,NULL,NULL,'' ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x08\x05\x02\x1e\x00\x00\x00\x04\x00"] +set mvcc:TxnWrite(10, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, NULL), 10) → 4,5,6,7,8,9,10,11,12,13,14,15 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x19\x0c\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a\x02\x1c\x02\x1e"] +set mvcc:TxnWrite(10, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, NULL), 10) → 4,5,6,7,8,9,10,11,12,13,14,15 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x19\x0c\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a\x02\x1c\x02\x1e"] +set mvcc:TxnWrite(10, sql:Index(index.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, NULL), 10) → 4,5,14,15 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\t\x04\x02\x08\x02\n\x02\x1c\x02\x1e"] +set mvcc:TxnWrite(10, sql:Index(index.string, '')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, ''), 10) → 3,14,15 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x07\x03\x02\x06\x02\x1c\x02\x1e"] +delete mvcc:TxnWrite(10, sql:Index(index.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(10, sql:Index(index.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(10, sql:Index(index.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(10, sql:Index(index.string, '')) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(10, sql:Row(index, 14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0e\x00\x00"] +delete mvcc:TxnWrite(10, sql:Row(index, 15)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0f\x00\x00"] +delete mvcc:TxnActive(10) ["\x01\x00\x00\x00\x00\x00\x00\x00\n"] # Case differences are not considered equal [ops]> INSERT INTO "index" (id, "string") VALUES (16, 'case'), (17, 'CaSe') --- -storage set mvcc:NextVersion → 12 ["\x00" → "\x0c"] -storage set mvcc:TxnActive(11) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x0b" → ""] -storage set mvcc:TxnWrite(11, sql:Row(index, 16)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x10\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 16), 11) → 16,NULL,NULL,NULL,'case' ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x0c\x05\x02 \x00\x00\x00\x04\x04case"] -storage set mvcc:TxnWrite(11, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, NULL), 11) → 4,5,6,7,8,9,10,11,12,13,14,15,16 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x1b\r\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a\x02\x1c\x02\x1e\x02 "] -storage set mvcc:TxnWrite(11, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, NULL), 11) → 4,5,6,7,8,9,10,11,12,13,14,15,16 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x1b\r\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a\x02\x1c\x02\x1e\x02 "] -storage set mvcc:TxnWrite(11, sql:Index(index.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, NULL), 11) → 4,5,14,15,16 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x0b\x05\x02\x08\x02\n\x02\x1c\x02\x1e\x02 "] -storage set mvcc:TxnWrite(11, sql:Index(index.string, 'case')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04case\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, 'case'), 11) → 16 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04case\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x03\x01\x02 "] -storage set mvcc:TxnWrite(11, sql:Row(index, 17)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x11\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 17), 11) → 17,NULL,NULL,NULL,'CaSe' ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x0c\x05\x02\"\x00\x00\x00\x04\x04CaSe"] -storage set mvcc:TxnWrite(11, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, NULL), 11) → 4,5,6,7,8,9,10,11,12,13,14,15,16,17 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x1d\x0e\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a\x02\x1c\x02\x1e\x02 \x02\""] -storage set mvcc:TxnWrite(11, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, NULL), 11) → 4,5,6,7,8,9,10,11,12,13,14,15,16,17 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x1d\x0e\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a\x02\x1c\x02\x1e\x02 \x02\""] -storage set mvcc:TxnWrite(11, sql:Index(index.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, NULL), 11) → 4,5,14,15,16,17 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\r\x06\x02\x08\x02\n\x02\x1c\x02\x1e\x02 \x02\""] -storage set mvcc:TxnWrite(11, sql:Index(index.string, 'CaSe')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04CaSe\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, 'CaSe'), 11) → 17 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04CaSe\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x03\x01\x02\""] -storage delete mvcc:TxnWrite(11, sql:Index(index.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(11, sql:Index(index.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(11, sql:Index(index.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(11, sql:Index(index.string, 'CaSe')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04CaSe\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(11, sql:Index(index.string, 'case')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04case\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(11, sql:Row(index, 16)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x10\x00\x00"] -storage delete mvcc:TxnWrite(11, sql:Row(index, 17)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x11\x00\x00"] -storage delete mvcc:TxnActive(11) ["\x01\x00\x00\x00\x00\x00\x00\x00\x0b"] +set mvcc:NextVersion → 12 ["\x00" → "\x0c"] +set mvcc:TxnActive(11) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x0b" → ""] +set mvcc:TxnWrite(11, sql:Row(index, 16)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x10\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 16), 11) → 16,NULL,NULL,NULL,'case' ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x0c\x05\x02 \x00\x00\x00\x04\x04case"] +set mvcc:TxnWrite(11, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, NULL), 11) → 4,5,6,7,8,9,10,11,12,13,14,15,16 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x1b\r\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a\x02\x1c\x02\x1e\x02 "] +set mvcc:TxnWrite(11, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, NULL), 11) → 4,5,6,7,8,9,10,11,12,13,14,15,16 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x1b\r\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a\x02\x1c\x02\x1e\x02 "] +set mvcc:TxnWrite(11, sql:Index(index.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, NULL), 11) → 4,5,14,15,16 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x0b\x05\x02\x08\x02\n\x02\x1c\x02\x1e\x02 "] +set mvcc:TxnWrite(11, sql:Index(index.string, 'case')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04case\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, 'case'), 11) → 16 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04case\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x03\x01\x02 "] +set mvcc:TxnWrite(11, sql:Row(index, 17)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x11\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 17), 11) → 17,NULL,NULL,NULL,'CaSe' ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x0c\x05\x02\"\x00\x00\x00\x04\x04CaSe"] +set mvcc:TxnWrite(11, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, NULL), 11) → 4,5,6,7,8,9,10,11,12,13,14,15,16,17 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x1d\x0e\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a\x02\x1c\x02\x1e\x02 \x02\""] +set mvcc:TxnWrite(11, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, NULL), 11) → 4,5,6,7,8,9,10,11,12,13,14,15,16,17 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x1d\x0e\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1a\x02\x1c\x02\x1e\x02 \x02\""] +set mvcc:TxnWrite(11, sql:Index(index.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, NULL), 11) → 4,5,14,15,16,17 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\r\x06\x02\x08\x02\n\x02\x1c\x02\x1e\x02 \x02\""] +set mvcc:TxnWrite(11, sql:Index(index.string, 'CaSe')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04CaSe\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, 'CaSe'), 11) → 17 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04CaSe\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x03\x01\x02\""] +delete mvcc:TxnWrite(11, sql:Index(index.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(11, sql:Index(index.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(11, sql:Index(index.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(11, sql:Index(index.string, 'CaSe')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04CaSe\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(11, sql:Index(index.string, 'case')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04case\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(11, sql:Row(index, 16)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x10\x00\x00"] +delete mvcc:TxnWrite(11, sql:Row(index, 17)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x11\x00\x00"] +delete mvcc:TxnActive(11) ["\x01\x00\x00\x00\x00\x00\x00\x00\x0b"] diff --git a/src/sql/testscripts/writes/insert_reference b/src/sql/testscripts/writes/insert_reference index f2c4656b..556ef6ee 100644 --- a/src/sql/testscripts/writes/insert_reference +++ b/src/sql/testscripts/writes/insert_reference @@ -26,24 +26,24 @@ ok # INSERTs with existing references work, and update the index entries. [ops]> INSERT INTO name VALUES (1, true, 1, 3.14, 'foo') --- -storage set mvcc:NextVersion → 11 ["\x00" → "\x0b"] -storage set mvcc:TxnActive(10) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\n" → ""] -storage set mvcc:TxnWrite(10, sql:Row(name, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 1), 10) → 1,TRUE,1,3.14,'foo' ["\x04\x02name\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\n" → "\x01\x15\x05\x02\x02\x01\x01\x02\x02\x03\x1f\x85\xebQ\xb8\x1e\t@\x04\x03foo"] -storage set mvcc:TxnWrite(10, sql:Index(name.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.bool, TRUE), 10) → 1 ["\x04\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(10, sql:Index(name.int, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.int, 1), 10) → 1 ["\x04\x01name\x00\xff\x00\xffint\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\n" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(10, sql:Index(name.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.float, 3.14), 10) → 1 ["\x04\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(10, sql:Index(name.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.string, 'foo'), 10) → 1 ["\x04\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x03\x01\x02\x02"] -storage delete mvcc:TxnWrite(10, sql:Index(name.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] -storage delete mvcc:TxnWrite(10, sql:Index(name.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] -storage delete mvcc:TxnWrite(10, sql:Index(name.int, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(10, sql:Index(name.string, 'foo')) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(10, sql:Row(name, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnActive(10) ["\x01\x00\x00\x00\x00\x00\x00\x00\n"] +set mvcc:NextVersion → 11 ["\x00" → "\x0b"] +set mvcc:TxnActive(10) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\n" → ""] +set mvcc:TxnWrite(10, sql:Row(name, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 1), 10) → 1,TRUE,1,3.14,'foo' ["\x04\x02name\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\n" → "\x01\x15\x05\x02\x02\x01\x01\x02\x02\x03\x1f\x85\xebQ\xb8\x1e\t@\x04\x03foo"] +set mvcc:TxnWrite(10, sql:Index(name.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(name.bool, TRUE), 10) → 1 ["\x04\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(10, sql:Index(name.int, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(name.int, 1), 10) → 1 ["\x04\x01name\x00\xff\x00\xffint\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\n" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(10, sql:Index(name.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] +set mvcc:Version(sql:Index(name.float, 3.14), 10) → 1 ["\x04\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(10, sql:Index(name.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(name.string, 'foo'), 10) → 1 ["\x04\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x03\x01\x02\x02"] +delete mvcc:TxnWrite(10, sql:Index(name.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] +delete mvcc:TxnWrite(10, sql:Index(name.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] +delete mvcc:TxnWrite(10, sql:Index(name.int, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(10, sql:Index(name.string, 'foo')) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(10, sql:Row(name, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnActive(10) ["\x01\x00\x00\x00\x00\x00\x00\x00\n"] # INSERTs error on missing references. !> INSERT INTO name (id, "bool") VALUES (2, FALSE) @@ -59,24 +59,24 @@ Error: invalid input: reference 'bar' not in table string # -0.0 is equivalent to 0.0. [ops]> INSERT INTO name (id, "float") VALUES (2, -0.0) --- -storage set mvcc:NextVersion → 16 ["\x00" → "\x10"] -storage set mvcc:TxnActive(15) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x0f" → ""] -storage set mvcc:TxnWrite(15, sql:Row(name, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 2), 15) → 2,NULL,NULL,0.0,NULL ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f" → "\x01\x0f\x05\x02\x04\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00"] -storage set mvcc:TxnWrite(15, sql:Index(name.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.bool, NULL), 15) → 2 ["\x04\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f" → "\x01\x03\x01\x02\x04"] -storage set mvcc:TxnWrite(15, sql:Index(name.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.int, NULL), 15) → 2 ["\x04\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f" → "\x01\x03\x01\x02\x04"] -storage set mvcc:TxnWrite(15, sql:Index(name.float, 0.0)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.float, 0.0), 15) → 2 ["\x04\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f" → "\x01\x03\x01\x02\x04"] -storage set mvcc:TxnWrite(15, sql:Index(name.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.string, NULL), 15) → 2 ["\x04\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f" → "\x01\x03\x01\x02\x04"] -storage delete mvcc:TxnWrite(15, sql:Index(name.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(15, sql:Index(name.float, 0.0)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(15, sql:Index(name.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(15, sql:Index(name.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(15, sql:Row(name, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnActive(15) ["\x01\x00\x00\x00\x00\x00\x00\x00\x0f"] +set mvcc:NextVersion → 16 ["\x00" → "\x10"] +set mvcc:TxnActive(15) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x0f" → ""] +set mvcc:TxnWrite(15, sql:Row(name, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 2), 15) → 2,NULL,NULL,0.0,NULL ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f" → "\x01\x0f\x05\x02\x04\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00"] +set mvcc:TxnWrite(15, sql:Index(name.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(name.bool, NULL), 15) → 2 ["\x04\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f" → "\x01\x03\x01\x02\x04"] +set mvcc:TxnWrite(15, sql:Index(name.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(name.int, NULL), 15) → 2 ["\x04\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f" → "\x01\x03\x01\x02\x04"] +set mvcc:TxnWrite(15, sql:Index(name.float, 0.0)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(name.float, 0.0), 15) → 2 ["\x04\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f" → "\x01\x03\x01\x02\x04"] +set mvcc:TxnWrite(15, sql:Index(name.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(name.string, NULL), 15) → 2 ["\x04\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f" → "\x01\x03\x01\x02\x04"] +delete mvcc:TxnWrite(15, sql:Index(name.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(15, sql:Index(name.float, 0.0)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(15, sql:Index(name.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(15, sql:Index(name.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(15, sql:Row(name, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnActive(15) ["\x01\x00\x00\x00\x00\x00\x00\x00\x0f"] # NaN is not valid as a missing reference marker. !> INSERT INTO name (id, "float") VALUES (3, NAN) @@ -118,39 +118,39 @@ ok [ops]> INSERT INTO self VALUES (1, 1) --- -storage set mvcc:NextVersion → 23 ["\x00" → "\x17"] -storage set mvcc:TxnActive(22) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x16" → ""] -storage set mvcc:TxnWrite(22, sql:Row(self, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(self, 1), 22) → 1,1 ["\x04\x02self\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\x16" → "\x01\x05\x02\x02\x02\x02\x02"] -storage set mvcc:TxnWrite(22, sql:Index(self.self_id, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(self.self_id, 1), 22) → 1 ["\x04\x01self\x00\xff\x00\xffself_id\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\x16" → "\x01\x03\x01\x02\x02"] -storage delete mvcc:TxnWrite(22, sql:Index(self.self_id, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(22, sql:Row(self, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnActive(22) ["\x01\x00\x00\x00\x00\x00\x00\x00\x16"] +set mvcc:NextVersion → 23 ["\x00" → "\x17"] +set mvcc:TxnActive(22) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x16" → ""] +set mvcc:TxnWrite(22, sql:Row(self, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(self, 1), 22) → 1,1 ["\x04\x02self\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\x16" → "\x01\x05\x02\x02\x02\x02\x02"] +set mvcc:TxnWrite(22, sql:Index(self.self_id, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(self.self_id, 1), 22) → 1 ["\x04\x01self\x00\xff\x00\xffself_id\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\x16" → "\x01\x03\x01\x02\x02"] +delete mvcc:TxnWrite(22, sql:Index(self.self_id, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(22, sql:Row(self, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnActive(22) ["\x01\x00\x00\x00\x00\x00\x00\x00\x16"] [ops]> INSERT INTO self VALUES (2, 1) --- -storage set mvcc:NextVersion → 24 ["\x00" → "\x18"] -storage set mvcc:TxnActive(23) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x17" → ""] -storage set mvcc:TxnWrite(23, sql:Row(self, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(self, 2), 23) → 2,1 ["\x04\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17" → "\x01\x05\x02\x02\x04\x02\x02"] -storage set mvcc:TxnWrite(23, sql:Index(self.self_id, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(self.self_id, 1), 23) → 1,2 ["\x04\x01self\x00\xff\x00\xffself_id\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\x17" → "\x01\x05\x02\x02\x02\x02\x04"] -storage delete mvcc:TxnWrite(23, sql:Index(self.self_id, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(23, sql:Row(self, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnActive(23) ["\x01\x00\x00\x00\x00\x00\x00\x00\x17"] +set mvcc:NextVersion → 24 ["\x00" → "\x18"] +set mvcc:TxnActive(23) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x17" → ""] +set mvcc:TxnWrite(23, sql:Row(self, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(self, 2), 23) → 2,1 ["\x04\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17" → "\x01\x05\x02\x02\x04\x02\x02"] +set mvcc:TxnWrite(23, sql:Index(self.self_id, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(self.self_id, 1), 23) → 1,2 ["\x04\x01self\x00\xff\x00\xffself_id\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\x17" → "\x01\x05\x02\x02\x02\x02\x04"] +delete mvcc:TxnWrite(23, sql:Index(self.self_id, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(23, sql:Row(self, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnActive(23) ["\x01\x00\x00\x00\x00\x00\x00\x00\x17"] [ops]> INSERT INTO self VALUES (3, NULL) --- -storage set mvcc:NextVersion → 25 ["\x00" → "\x19"] -storage set mvcc:TxnActive(24) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x18" → ""] -storage set mvcc:TxnWrite(24, sql:Row(self, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] -storage set mvcc:Version(sql:Row(self, 3), 24) → 3,NULL ["\x04\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18" → "\x01\x04\x02\x02\x06\x00"] -storage set mvcc:TxnWrite(24, sql:Index(self.self_id, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(self.self_id, NULL), 24) → 3 ["\x04\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18" → "\x01\x03\x01\x02\x06"] -storage delete mvcc:TxnWrite(24, sql:Index(self.self_id, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(24, sql:Row(self, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] -storage delete mvcc:TxnActive(24) ["\x01\x00\x00\x00\x00\x00\x00\x00\x18"] +set mvcc:NextVersion → 25 ["\x00" → "\x19"] +set mvcc:TxnActive(24) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x18" → ""] +set mvcc:TxnWrite(24, sql:Row(self, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] +set mvcc:Version(sql:Row(self, 3), 24) → 3,NULL ["\x04\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18" → "\x01\x04\x02\x02\x06\x00"] +set mvcc:TxnWrite(24, sql:Index(self.self_id, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(self.self_id, NULL), 24) → 3 ["\x04\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18" → "\x01\x03\x01\x02\x06"] +delete mvcc:TxnWrite(24, sql:Index(self.self_id, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(24, sql:Row(self, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] +delete mvcc:TxnActive(24) ["\x01\x00\x00\x00\x00\x00\x00\x00\x18"] !> INSERT INTO self VALUES (4, 9) --- diff --git a/src/sql/testscripts/writes/insert_unique b/src/sql/testscripts/writes/insert_unique index a350bf57..badc0c9e 100644 --- a/src/sql/testscripts/writes/insert_unique +++ b/src/sql/testscripts/writes/insert_unique @@ -13,24 +13,24 @@ ok # An INSERT writes to all indexes. [ops]> INSERT INTO "unique" VALUES (1, TRUE, 7, 3.14, 'foo') --- -storage set mvcc:NextVersion → 3 ["\x00" → "\x03"] -storage set mvcc:TxnActive(2) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x02" → ""] -storage set mvcc:TxnWrite(2, sql:Row(unique, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 1), 2) → 1,TRUE,7,3.14,'foo' ["\x04\x02unique\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\x15\x05\x02\x02\x01\x01\x02\x0e\x03\x1f\x85\xebQ\xb8\x1e\t@\x04\x03foo"] -storage set mvcc:TxnWrite(2, sql:Index(unique.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.bool, TRUE), 2) → 1 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(2, sql:Index(unique.int, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.int, 7), 2) → 1 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(2, sql:Index(unique.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, 3.14), 2) → 1 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(2, sql:Index(unique.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, 'foo'), 2) → 1 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x03\x01\x02\x02"] -storage delete mvcc:TxnWrite(2, sql:Index(unique.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] -storage delete mvcc:TxnWrite(2, sql:Index(unique.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] -storage delete mvcc:TxnWrite(2, sql:Index(unique.int, 7)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00"] -storage delete mvcc:TxnWrite(2, sql:Index(unique.string, 'foo')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(2, sql:Row(unique, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnActive(2) ["\x01\x00\x00\x00\x00\x00\x00\x00\x02"] +set mvcc:NextVersion → 3 ["\x00" → "\x03"] +set mvcc:TxnActive(2) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x02" → ""] +set mvcc:TxnWrite(2, sql:Row(unique, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 1), 2) → 1,TRUE,7,3.14,'foo' ["\x04\x02unique\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\x15\x05\x02\x02\x01\x01\x02\x0e\x03\x1f\x85\xebQ\xb8\x1e\t@\x04\x03foo"] +set mvcc:TxnWrite(2, sql:Index(unique.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.bool, TRUE), 2) → 1 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(2, sql:Index(unique.int, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.int, 7), 2) → 1 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(2, sql:Index(unique.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, 3.14), 2) → 1 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(2, sql:Index(unique.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, 'foo'), 2) → 1 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" → "\x01\x03\x01\x02\x02"] +delete mvcc:TxnWrite(2, sql:Index(unique.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] +delete mvcc:TxnWrite(2, sql:Index(unique.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] +delete mvcc:TxnWrite(2, sql:Index(unique.int, 7)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00"] +delete mvcc:TxnWrite(2, sql:Index(unique.string, 'foo')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(2, sql:Row(unique, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x02\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnActive(2) ["\x01\x00\x00\x00\x00\x00\x00\x00\x02"] # Another insert with the same values errors for all indexes. !> INSERT INTO "unique" (id, "bool") VALUES (2, TRUE) @@ -46,132 +46,132 @@ Error: invalid input: value 'foo' already in unique column string # An insert with different values writes new index entries. [ops]> INSERT INTO "unique" VALUES (3, FALSE, 0, 2.718, 'bar') --- -storage set mvcc:NextVersion → 8 ["\x00" → "\x08"] -storage set mvcc:TxnActive(7) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x07" → ""] -storage set mvcc:TxnWrite(7, sql:Row(unique, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 3), 7) → 3,FALSE,0,2.718,'bar' ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x15\x05\x02\x06\x01\x00\x02\x00\x03X9\xb4\xc8v\xbe\x05@\x04\x03bar"] -storage set mvcc:TxnWrite(7, sql:Index(unique.bool, FALSE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.bool, FALSE), 7) → 3 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x03\x01\x02\x06"] -storage set mvcc:TxnWrite(7, sql:Index(unique.int, 0)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.int, 0), 7) → 3 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x03\x01\x02\x06"] -storage set mvcc:TxnWrite(7, sql:Index(unique.float, 2.718)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, 2.718), 7) → 3 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x03\x01\x02\x06"] -storage set mvcc:TxnWrite(7, sql:Index(unique.string, 'bar')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04bar\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, 'bar'), 7) → 3 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04bar\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x03\x01\x02\x06"] -storage delete mvcc:TxnWrite(7, sql:Index(unique.bool, FALSE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(7, sql:Index(unique.float, 2.718)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00"] -storage delete mvcc:TxnWrite(7, sql:Index(unique.int, 0)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(7, sql:Index(unique.string, 'bar')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04bar\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(7, sql:Row(unique, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] -storage delete mvcc:TxnActive(7) ["\x01\x00\x00\x00\x00\x00\x00\x00\x07"] +set mvcc:NextVersion → 8 ["\x00" → "\x08"] +set mvcc:TxnActive(7) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x07" → ""] +set mvcc:TxnWrite(7, sql:Row(unique, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 3), 7) → 3,FALSE,0,2.718,'bar' ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x15\x05\x02\x06\x01\x00\x02\x00\x03X9\xb4\xc8v\xbe\x05@\x04\x03bar"] +set mvcc:TxnWrite(7, sql:Index(unique.bool, FALSE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.bool, FALSE), 7) → 3 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x03\x01\x02\x06"] +set mvcc:TxnWrite(7, sql:Index(unique.int, 0)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.int, 0), 7) → 3 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x03\x01\x02\x06"] +set mvcc:TxnWrite(7, sql:Index(unique.float, 2.718)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, 2.718), 7) → 3 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x03\x01\x02\x06"] +set mvcc:TxnWrite(7, sql:Index(unique.string, 'bar')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04bar\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, 'bar'), 7) → 3 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04bar\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x03\x01\x02\x06"] +delete mvcc:TxnWrite(7, sql:Index(unique.bool, FALSE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00"] +delete mvcc:TxnWrite(7, sql:Index(unique.float, 2.718)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00"] +delete mvcc:TxnWrite(7, sql:Index(unique.int, 0)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(7, sql:Index(unique.string, 'bar')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04bar\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(7, sql:Row(unique, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] +delete mvcc:TxnActive(7) ["\x01\x00\x00\x00\x00\x00\x00\x00\x07"] # Inserts with NULLS adds NULL entries. Duplicates are allowed [ops]> INSERT INTO "unique" VALUES (4) --- -storage set mvcc:NextVersion → 9 ["\x00" → "\t"] -storage set mvcc:TxnActive(8) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x08" → ""] -storage set mvcc:TxnWrite(8, sql:Row(unique, 4)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 4), 8) → 4,NULL,NULL,NULL,NULL ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x07\x05\x02\x08\x00\x00\x00\x00"] -storage set mvcc:TxnWrite(8, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.bool, NULL), 8) → 4 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x08"] -storage set mvcc:TxnWrite(8, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.int, NULL), 8) → 4 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x08"] -storage set mvcc:TxnWrite(8, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, NULL), 8) → 4 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x08"] -storage set mvcc:TxnWrite(8, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, NULL), 8) → 4 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x08"] -storage delete mvcc:TxnWrite(8, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(unique.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(unique.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Row(unique, 4)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00"] -storage delete mvcc:TxnActive(8) ["\x01\x00\x00\x00\x00\x00\x00\x00\x08"] +set mvcc:NextVersion → 9 ["\x00" → "\t"] +set mvcc:TxnActive(8) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x08" → ""] +set mvcc:TxnWrite(8, sql:Row(unique, 4)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 4), 8) → 4,NULL,NULL,NULL,NULL ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x07\x05\x02\x08\x00\x00\x00\x00"] +set mvcc:TxnWrite(8, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.bool, NULL), 8) → 4 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x08"] +set mvcc:TxnWrite(8, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.int, NULL), 8) → 4 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x08"] +set mvcc:TxnWrite(8, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, NULL), 8) → 4 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x08"] +set mvcc:TxnWrite(8, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, NULL), 8) → 4 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x08"] +delete mvcc:TxnWrite(8, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(unique.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(unique.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(8, sql:Row(unique, 4)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x04\x00\x00"] +delete mvcc:TxnActive(8) ["\x01\x00\x00\x00\x00\x00\x00\x00\x08"] [ops]> INSERT INTO "unique" VALUES (5) --- -storage set mvcc:NextVersion → 10 ["\x00" → "\n"] -storage set mvcc:TxnActive(9) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\t" → ""] -storage set mvcc:TxnWrite(9, sql:Row(unique, 5)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x05\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 5), 9) → 5,NULL,NULL,NULL,NULL ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x07\x05\x02\n\x00\x00\x00\x00"] -storage set mvcc:TxnWrite(9, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.bool, NULL), 9) → 4,5 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x05\x02\x02\x08\x02\n"] -storage set mvcc:TxnWrite(9, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.int, NULL), 9) → 4,5 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x05\x02\x02\x08\x02\n"] -storage set mvcc:TxnWrite(9, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, NULL), 9) → 4,5 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x05\x02\x02\x08\x02\n"] -storage set mvcc:TxnWrite(9, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, NULL), 9) → 4,5 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x05\x02\x02\x08\x02\n"] -storage delete mvcc:TxnWrite(9, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(9, sql:Index(unique.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(9, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(9, sql:Index(unique.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(9, sql:Row(unique, 5)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x05\x00\x00"] -storage delete mvcc:TxnActive(9) ["\x01\x00\x00\x00\x00\x00\x00\x00\t"] +set mvcc:NextVersion → 10 ["\x00" → "\n"] +set mvcc:TxnActive(9) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\t" → ""] +set mvcc:TxnWrite(9, sql:Row(unique, 5)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x05\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 5), 9) → 5,NULL,NULL,NULL,NULL ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x07\x05\x02\n\x00\x00\x00\x00"] +set mvcc:TxnWrite(9, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.bool, NULL), 9) → 4,5 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x05\x02\x02\x08\x02\n"] +set mvcc:TxnWrite(9, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.int, NULL), 9) → 4,5 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x05\x02\x02\x08\x02\n"] +set mvcc:TxnWrite(9, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, NULL), 9) → 4,5 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x05\x02\x02\x08\x02\n"] +set mvcc:TxnWrite(9, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, NULL), 9) → 4,5 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\t" → "\x01\x05\x02\x02\x08\x02\n"] +delete mvcc:TxnWrite(9, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(9, sql:Index(unique.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(9, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(9, sql:Index(unique.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(9, sql:Row(unique, 5)) ["\x03\x00\x00\x00\x00\x00\x00\x00\t\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x05\x00\x00"] +delete mvcc:TxnActive(9) ["\x01\x00\x00\x00\x00\x00\x00\x00\t"] # Float NaNs are considered different and allowed. [ops]> INSERT INTO "unique" (id, "float") VALUES (6, NAN) --- -storage set mvcc:NextVersion → 11 ["\x00" → "\x0b"] -storage set mvcc:TxnActive(10) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\n" → ""] -storage set mvcc:TxnWrite(10, sql:Row(unique, 6)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x06\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 6), 10) → 6,NULL,NULL,NaN,NULL ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x0f\x05\x02\x0c\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf8\x7f\x00"] -storage set mvcc:TxnWrite(10, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.bool, NULL), 10) → 4,5,6 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x07\x03\x02\x08\x02\n\x02\x0c"] -storage set mvcc:TxnWrite(10, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.int, NULL), 10) → 4,5,6 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x07\x03\x02\x08\x02\n\x02\x0c"] -storage set mvcc:TxnWrite(10, sql:Index(unique.float, NaN)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, NaN), 10) → 6 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x03\x01\x02\x0c"] -storage set mvcc:TxnWrite(10, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, NULL), 10) → 4,5,6 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x07\x03\x02\x08\x02\n\x02\x0c"] -storage delete mvcc:TxnWrite(10, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(10, sql:Index(unique.float, NaN)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(10, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(10, sql:Index(unique.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(10, sql:Row(unique, 6)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x06\x00\x00"] -storage delete mvcc:TxnActive(10) ["\x01\x00\x00\x00\x00\x00\x00\x00\n"] +set mvcc:NextVersion → 11 ["\x00" → "\x0b"] +set mvcc:TxnActive(10) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\n" → ""] +set mvcc:TxnWrite(10, sql:Row(unique, 6)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x06\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 6), 10) → 6,NULL,NULL,NaN,NULL ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x0f\x05\x02\x0c\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf8\x7f\x00"] +set mvcc:TxnWrite(10, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.bool, NULL), 10) → 4,5,6 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x07\x03\x02\x08\x02\n\x02\x0c"] +set mvcc:TxnWrite(10, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.int, NULL), 10) → 4,5,6 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x07\x03\x02\x08\x02\n\x02\x0c"] +set mvcc:TxnWrite(10, sql:Index(unique.float, NaN)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, NaN), 10) → 6 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x03\x01\x02\x0c"] +set mvcc:TxnWrite(10, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, NULL), 10) → 4,5,6 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" → "\x01\x07\x03\x02\x08\x02\n\x02\x0c"] +delete mvcc:TxnWrite(10, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(10, sql:Index(unique.float, NaN)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(10, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(10, sql:Index(unique.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(10, sql:Row(unique, 6)) ["\x03\x00\x00\x00\x00\x00\x00\x00\n\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x06\x00\x00"] +delete mvcc:TxnActive(10) ["\x01\x00\x00\x00\x00\x00\x00\x00\n"] [ops]> INSERT INTO "unique" (id, "float") VALUES (7, NAN) --- -storage set mvcc:NextVersion → 12 ["\x00" → "\x0c"] -storage set mvcc:TxnActive(11) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x0b" → ""] -storage set mvcc:TxnWrite(11, sql:Row(unique, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 7), 11) → 7,NULL,NULL,NaN,NULL ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x0f\x05\x02\x0e\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf8\x7f\x00"] -storage set mvcc:TxnWrite(11, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.bool, NULL), 11) → 4,5,6,7 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\t\x04\x02\x08\x02\n\x02\x0c\x02\x0e"] -storage set mvcc:TxnWrite(11, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.int, NULL), 11) → 4,5,6,7 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\t\x04\x02\x08\x02\n\x02\x0c\x02\x0e"] -storage set mvcc:TxnWrite(11, sql:Index(unique.float, NaN)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, NaN), 11) → 6,7 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x05\x02\x02\x0c\x02\x0e"] -storage set mvcc:TxnWrite(11, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, NULL), 11) → 4,5,6,7 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\t\x04\x02\x08\x02\n\x02\x0c\x02\x0e"] -storage delete mvcc:TxnWrite(11, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(11, sql:Index(unique.float, NaN)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(11, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(11, sql:Index(unique.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(11, sql:Row(unique, 7)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00"] -storage delete mvcc:TxnActive(11) ["\x01\x00\x00\x00\x00\x00\x00\x00\x0b"] +set mvcc:NextVersion → 12 ["\x00" → "\x0c"] +set mvcc:TxnActive(11) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x0b" → ""] +set mvcc:TxnWrite(11, sql:Row(unique, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 7), 11) → 7,NULL,NULL,NaN,NULL ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x0f\x05\x02\x0e\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf8\x7f\x00"] +set mvcc:TxnWrite(11, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.bool, NULL), 11) → 4,5,6,7 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\t\x04\x02\x08\x02\n\x02\x0c\x02\x0e"] +set mvcc:TxnWrite(11, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.int, NULL), 11) → 4,5,6,7 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\t\x04\x02\x08\x02\n\x02\x0c\x02\x0e"] +set mvcc:TxnWrite(11, sql:Index(unique.float, NaN)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, NaN), 11) → 6,7 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x05\x02\x02\x0c\x02\x0e"] +set mvcc:TxnWrite(11, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, NULL), 11) → 4,5,6,7 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\t\x04\x02\x08\x02\n\x02\x0c\x02\x0e"] +delete mvcc:TxnWrite(11, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(11, sql:Index(unique.float, NaN)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(11, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(11, sql:Index(unique.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(11, sql:Row(unique, 7)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00"] +delete mvcc:TxnActive(11) ["\x01\x00\x00\x00\x00\x00\x00\x00\x0b"] # Float 0.0 and -0.0 are considered equal. [ops]> INSERT INTO "unique" (id, "float") VALUES (8, -0.0) --- -storage set mvcc:NextVersion → 13 ["\x00" → "\r"] -storage set mvcc:TxnActive(12) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x0c" → ""] -storage set mvcc:TxnWrite(12, sql:Row(unique, 8)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x08\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 8), 12) → 8,NULL,NULL,0.0,NULL ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c" → "\x01\x0f\x05\x02\x10\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00"] -storage set mvcc:TxnWrite(12, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.bool, NULL), 12) → 4,5,6,7,8 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c" → "\x01\x0b\x05\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10"] -storage set mvcc:TxnWrite(12, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.int, NULL), 12) → 4,5,6,7,8 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c" → "\x01\x0b\x05\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10"] -storage set mvcc:TxnWrite(12, sql:Index(unique.float, 0.0)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, 0.0), 12) → 8 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c" → "\x01\x03\x01\x02\x10"] -storage set mvcc:TxnWrite(12, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, NULL), 12) → 4,5,6,7,8 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c" → "\x01\x0b\x05\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10"] -storage delete mvcc:TxnWrite(12, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(12, sql:Index(unique.float, 0.0)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(12, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(12, sql:Index(unique.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(12, sql:Row(unique, 8)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x08\x00\x00"] -storage delete mvcc:TxnActive(12) ["\x01\x00\x00\x00\x00\x00\x00\x00\x0c"] +set mvcc:NextVersion → 13 ["\x00" → "\r"] +set mvcc:TxnActive(12) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x0c" → ""] +set mvcc:TxnWrite(12, sql:Row(unique, 8)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x08\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 8), 12) → 8,NULL,NULL,0.0,NULL ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c" → "\x01\x0f\x05\x02\x10\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00"] +set mvcc:TxnWrite(12, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.bool, NULL), 12) → 4,5,6,7,8 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c" → "\x01\x0b\x05\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10"] +set mvcc:TxnWrite(12, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.int, NULL), 12) → 4,5,6,7,8 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c" → "\x01\x0b\x05\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10"] +set mvcc:TxnWrite(12, sql:Index(unique.float, 0.0)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, 0.0), 12) → 8 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c" → "\x01\x03\x01\x02\x10"] +set mvcc:TxnWrite(12, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, NULL), 12) → 4,5,6,7,8 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c" → "\x01\x0b\x05\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10"] +delete mvcc:TxnWrite(12, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(12, sql:Index(unique.float, 0.0)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(12, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(12, sql:Index(unique.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(12, sql:Row(unique, 8)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0c\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x08\x00\x00"] +delete mvcc:TxnActive(12) ["\x01\x00\x00\x00\x00\x00\x00\x00\x0c"] !> INSERT INTO "unique" (id, "float") VALUES (9, 0.0) --- @@ -180,24 +180,24 @@ Error: invalid input: value 0.0 already in unique column float # Float INFINITY is also unique. [ops]> INSERT INTO "unique" (id, "float") VALUES (10, INFINITY) --- -storage set mvcc:NextVersion → 15 ["\x00" → "\x0f"] -storage set mvcc:TxnActive(14) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x0e" → ""] -storage set mvcc:TxnWrite(14, sql:Row(unique, 10)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\n\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 10), 14) → 10,NULL,NULL,inf,NULL ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\x0f\x05\x02\x14\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf0\x7f\x00"] -storage set mvcc:TxnWrite(14, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.bool, NULL), 14) → 4,5,6,7,8,10 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\r\x06\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x14"] -storage set mvcc:TxnWrite(14, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.int, NULL), 14) → 4,5,6,7,8,10 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\r\x06\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x14"] -storage set mvcc:TxnWrite(14, sql:Index(unique.float, inf)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, inf), 14) → 10 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\x03\x01\x02\x14"] -storage set mvcc:TxnWrite(14, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, NULL), 14) → 4,5,6,7,8,10 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\r\x06\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x14"] -storage delete mvcc:TxnWrite(14, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(14, sql:Index(unique.float, inf)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(14, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(14, sql:Index(unique.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(14, sql:Row(unique, 10)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\n\x00\x00"] -storage delete mvcc:TxnActive(14) ["\x01\x00\x00\x00\x00\x00\x00\x00\x0e"] +set mvcc:NextVersion → 15 ["\x00" → "\x0f"] +set mvcc:TxnActive(14) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x0e" → ""] +set mvcc:TxnWrite(14, sql:Row(unique, 10)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\n\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 10), 14) → 10,NULL,NULL,inf,NULL ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\x0f\x05\x02\x14\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf0\x7f\x00"] +set mvcc:TxnWrite(14, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.bool, NULL), 14) → 4,5,6,7,8,10 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\r\x06\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x14"] +set mvcc:TxnWrite(14, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.int, NULL), 14) → 4,5,6,7,8,10 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\r\x06\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x14"] +set mvcc:TxnWrite(14, sql:Index(unique.float, inf)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, inf), 14) → 10 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\x03\x01\x02\x14"] +set mvcc:TxnWrite(14, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, NULL), 14) → 4,5,6,7,8,10 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\r\x06\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x14"] +delete mvcc:TxnWrite(14, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(14, sql:Index(unique.float, inf)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(14, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(14, sql:Index(unique.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(14, sql:Row(unique, 10)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\n\x00\x00"] +delete mvcc:TxnActive(14) ["\x01\x00\x00\x00\x00\x00\x00\x00\x0e"] !> INSERT INTO "unique" (id, "float") VALUES (11, INFINITY) --- @@ -206,24 +206,24 @@ Error: invalid input: value inf already in unique column float # Empty strings are considered equal. [ops]> INSERT INTO "unique" (id, "string") VALUES (11, '') --- -storage set mvcc:NextVersion → 17 ["\x00" → "\x11"] -storage set mvcc:TxnActive(16) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x10" → ""] -storage set mvcc:TxnWrite(16, sql:Row(unique, 11)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0b\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 11), 16) → 11,NULL,NULL,NULL,'' ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10" → "\x01\x08\x05\x02\x16\x00\x00\x00\x04\x00"] -storage set mvcc:TxnWrite(16, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.bool, NULL), 16) → 4,5,6,7,8,10,11 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10" → "\x01\x0f\x07\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x14\x02\x16"] -storage set mvcc:TxnWrite(16, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.int, NULL), 16) → 4,5,6,7,8,10,11 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10" → "\x01\x0f\x07\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x14\x02\x16"] -storage set mvcc:TxnWrite(16, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, NULL), 16) → 4,5,11 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10" → "\x01\x07\x03\x02\x08\x02\n\x02\x16"] -storage set mvcc:TxnWrite(16, sql:Index(unique.string, '')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, ''), 16) → 11 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10" → "\x01\x03\x01\x02\x16"] -storage delete mvcc:TxnWrite(16, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(16, sql:Index(unique.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(16, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(16, sql:Index(unique.string, '')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(16, sql:Row(unique, 11)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0b\x00\x00"] -storage delete mvcc:TxnActive(16) ["\x01\x00\x00\x00\x00\x00\x00\x00\x10"] +set mvcc:NextVersion → 17 ["\x00" → "\x11"] +set mvcc:TxnActive(16) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x10" → ""] +set mvcc:TxnWrite(16, sql:Row(unique, 11)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0b\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 11), 16) → 11,NULL,NULL,NULL,'' ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10" → "\x01\x08\x05\x02\x16\x00\x00\x00\x04\x00"] +set mvcc:TxnWrite(16, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.bool, NULL), 16) → 4,5,6,7,8,10,11 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10" → "\x01\x0f\x07\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x14\x02\x16"] +set mvcc:TxnWrite(16, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.int, NULL), 16) → 4,5,6,7,8,10,11 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10" → "\x01\x0f\x07\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x14\x02\x16"] +set mvcc:TxnWrite(16, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, NULL), 16) → 4,5,11 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10" → "\x01\x07\x03\x02\x08\x02\n\x02\x16"] +set mvcc:TxnWrite(16, sql:Index(unique.string, '')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, ''), 16) → 11 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10" → "\x01\x03\x01\x02\x16"] +delete mvcc:TxnWrite(16, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(16, sql:Index(unique.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(16, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(16, sql:Index(unique.string, '')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(16, sql:Row(unique, 11)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x10\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0b\x00\x00"] +delete mvcc:TxnActive(16) ["\x01\x00\x00\x00\x00\x00\x00\x00\x10"] !> INSERT INTO "unique" (id, "string") VALUES (12, '') --- @@ -232,42 +232,42 @@ Error: invalid input: value '' already in unique column string # Case differences are not considered equal. [ops]> INSERT INTO "unique" (id, "string") VALUES (12, 'case') --- -storage set mvcc:NextVersion → 19 ["\x00" → "\x13"] -storage set mvcc:TxnActive(18) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x12" → ""] -storage set mvcc:TxnWrite(18, sql:Row(unique, 12)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0c\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 12), 18) → 12,NULL,NULL,NULL,'case' ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12" → "\x01\x0c\x05\x02\x18\x00\x00\x00\x04\x04case"] -storage set mvcc:TxnWrite(18, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.bool, NULL), 18) → 4,5,6,7,8,10,11,12 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12" → "\x01\x11\x08\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x14\x02\x16\x02\x18"] -storage set mvcc:TxnWrite(18, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.int, NULL), 18) → 4,5,6,7,8,10,11,12 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12" → "\x01\x11\x08\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x14\x02\x16\x02\x18"] -storage set mvcc:TxnWrite(18, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, NULL), 18) → 4,5,11,12 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12" → "\x01\t\x04\x02\x08\x02\n\x02\x16\x02\x18"] -storage set mvcc:TxnWrite(18, sql:Index(unique.string, 'case')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04case\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, 'case'), 18) → 12 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04case\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12" → "\x01\x03\x01\x02\x18"] -storage delete mvcc:TxnWrite(18, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(18, sql:Index(unique.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(18, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(18, sql:Index(unique.string, 'case')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04case\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(18, sql:Row(unique, 12)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0c\x00\x00"] -storage delete mvcc:TxnActive(18) ["\x01\x00\x00\x00\x00\x00\x00\x00\x12"] +set mvcc:NextVersion → 19 ["\x00" → "\x13"] +set mvcc:TxnActive(18) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x12" → ""] +set mvcc:TxnWrite(18, sql:Row(unique, 12)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0c\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 12), 18) → 12,NULL,NULL,NULL,'case' ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12" → "\x01\x0c\x05\x02\x18\x00\x00\x00\x04\x04case"] +set mvcc:TxnWrite(18, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.bool, NULL), 18) → 4,5,6,7,8,10,11,12 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12" → "\x01\x11\x08\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x14\x02\x16\x02\x18"] +set mvcc:TxnWrite(18, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.int, NULL), 18) → 4,5,6,7,8,10,11,12 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12" → "\x01\x11\x08\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x14\x02\x16\x02\x18"] +set mvcc:TxnWrite(18, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, NULL), 18) → 4,5,11,12 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12" → "\x01\t\x04\x02\x08\x02\n\x02\x16\x02\x18"] +set mvcc:TxnWrite(18, sql:Index(unique.string, 'case')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04case\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, 'case'), 18) → 12 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04case\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12" → "\x01\x03\x01\x02\x18"] +delete mvcc:TxnWrite(18, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(18, sql:Index(unique.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(18, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(18, sql:Index(unique.string, 'case')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04case\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(18, sql:Row(unique, 12)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x0c\x00\x00"] +delete mvcc:TxnActive(18) ["\x01\x00\x00\x00\x00\x00\x00\x00\x12"] [ops]> INSERT INTO "unique" (id, "string") VALUES (13, 'CaSe') --- -storage set mvcc:NextVersion → 20 ["\x00" → "\x14"] -storage set mvcc:TxnActive(19) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x13" → ""] -storage set mvcc:TxnWrite(19, sql:Row(unique, 13)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\r\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 13), 19) → 13,NULL,NULL,NULL,'CaSe' ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\r\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13" → "\x01\x0c\x05\x02\x1a\x00\x00\x00\x04\x04CaSe"] -storage set mvcc:TxnWrite(19, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.bool, NULL), 19) → 4,5,6,7,8,10,11,12,13 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13" → "\x01\x13\t\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x14\x02\x16\x02\x18\x02\x1a"] -storage set mvcc:TxnWrite(19, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.int, NULL), 19) → 4,5,6,7,8,10,11,12,13 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13" → "\x01\x13\t\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x14\x02\x16\x02\x18\x02\x1a"] -storage set mvcc:TxnWrite(19, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, NULL), 19) → 4,5,11,12,13 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13" → "\x01\x0b\x05\x02\x08\x02\n\x02\x16\x02\x18\x02\x1a"] -storage set mvcc:TxnWrite(19, sql:Index(unique.string, 'CaSe')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04CaSe\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, 'CaSe'), 19) → 13 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04CaSe\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13" → "\x01\x03\x01\x02\x1a"] -storage delete mvcc:TxnWrite(19, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(19, sql:Index(unique.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(19, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(19, sql:Index(unique.string, 'CaSe')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04CaSe\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(19, sql:Row(unique, 13)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\r\x00\x00"] -storage delete mvcc:TxnActive(19) ["\x01\x00\x00\x00\x00\x00\x00\x00\x13"] +set mvcc:NextVersion → 20 ["\x00" → "\x14"] +set mvcc:TxnActive(19) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x13" → ""] +set mvcc:TxnWrite(19, sql:Row(unique, 13)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\r\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 13), 19) → 13,NULL,NULL,NULL,'CaSe' ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\r\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13" → "\x01\x0c\x05\x02\x1a\x00\x00\x00\x04\x04CaSe"] +set mvcc:TxnWrite(19, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.bool, NULL), 19) → 4,5,6,7,8,10,11,12,13 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13" → "\x01\x13\t\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x14\x02\x16\x02\x18\x02\x1a"] +set mvcc:TxnWrite(19, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.int, NULL), 19) → 4,5,6,7,8,10,11,12,13 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13" → "\x01\x13\t\x02\x08\x02\n\x02\x0c\x02\x0e\x02\x10\x02\x14\x02\x16\x02\x18\x02\x1a"] +set mvcc:TxnWrite(19, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, NULL), 19) → 4,5,11,12,13 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13" → "\x01\x0b\x05\x02\x08\x02\n\x02\x16\x02\x18\x02\x1a"] +set mvcc:TxnWrite(19, sql:Index(unique.string, 'CaSe')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04CaSe\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, 'CaSe'), 19) → 13 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04CaSe\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13" → "\x01\x03\x01\x02\x1a"] +delete mvcc:TxnWrite(19, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(19, sql:Index(unique.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(19, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(19, sql:Index(unique.string, 'CaSe')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04CaSe\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(19, sql:Row(unique, 13)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x13\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\r\x00\x00"] +delete mvcc:TxnActive(19) ["\x01\x00\x00\x00\x00\x00\x00\x00\x13"] diff --git a/src/sql/testscripts/writes/update b/src/sql/testscripts/writes/update index 92ea2d78..dde929d1 100644 --- a/src/sql/testscripts/writes/update +++ b/src/sql/testscripts/writes/update @@ -10,16 +10,16 @@ ok --- Update: name (value='foo') └─ Scan: name +set mvcc:NextVersion → 4 ["\x00" → "\x04"] +set mvcc:TxnActive(3) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x03" → ""] +set mvcc:TxnWrite(3, sql:Row(name, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 1), 3) → 1,'foo' ["\x04\x02name\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\x03" → "\x01\x08\x02\x02\x02\x04\x03foo"] +set mvcc:TxnWrite(3, sql:Row(name, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 2), 3) → 2,'foo' ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x08\x02\x02\x04\x04\x03foo"] +delete mvcc:TxnWrite(3, sql:Row(name, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(3, sql:Row(name, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnActive(3) ["\x01\x00\x00\x00\x00\x00\x00\x00\x03"] Update { count: 2 } -storage set mvcc:NextVersion → 4 ["\x00" → "\x04"] -storage set mvcc:TxnActive(3) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x03" → ""] -storage set mvcc:TxnWrite(3, sql:Row(name, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 1), 3) → 1,'foo' ["\x04\x02name\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\x03" → "\x01\x08\x02\x02\x02\x04\x03foo"] -storage set mvcc:TxnWrite(3, sql:Row(name, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 2), 3) → 2,'foo' ["\x04\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x08\x02\x02\x04\x04\x03foo"] -storage delete mvcc:TxnWrite(3, sql:Row(name, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(3, sql:Row(name, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnActive(3) ["\x01\x00\x00\x00\x00\x00\x00\x00\x03"] > SELECT * FROM name --- diff --git a/src/sql/testscripts/writes/update_index b/src/sql/testscripts/writes/update_index index 7ba36513..8f348f21 100644 --- a/src/sql/testscripts/writes/update_index +++ b/src/sql/testscripts/writes/update_index @@ -14,87 +14,87 @@ ok # An UPDATE writes to all indexes. [ops]> UPDATE "index" SET "bool" = FALSE, "int" = 1, "float" = 2.718, "string" = 'bar' --- -storage set mvcc:NextVersion → 4 ["\x00" → "\x04"] -storage set mvcc:TxnActive(3) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x03" → ""] -storage set mvcc:TxnWrite(3, sql:Index(index.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, TRUE), 3) → None ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] -storage set mvcc:TxnWrite(3, sql:Index(index.bool, FALSE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, FALSE), 3) → 1 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(3, sql:Index(index.int, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, 7), 3) → None ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] -storage set mvcc:TxnWrite(3, sql:Index(index.int, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, 1), 3) → 1 ["\x04\x01index\x00\xff\x00\xffint\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\x03" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(3, sql:Index(index.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, 3.14), 3) → None ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] -storage set mvcc:TxnWrite(3, sql:Index(index.float, 2.718)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, 2.718), 3) → 1 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(3, sql:Index(index.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, 'foo'), 3) → None ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] -storage set mvcc:TxnWrite(3, sql:Index(index.string, 'bar')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04bar\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, 'bar'), 3) → 1 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04bar\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(3, sql:Row(index, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 1), 3) → 1,FALSE,1,2.718,'bar' ["\x04\x02index\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\x03" → "\x01\x15\x05\x02\x02\x01\x00\x02\x02\x03X9\xb4\xc8v\xbe\x05@\x04\x03bar"] -storage delete mvcc:TxnWrite(3, sql:Index(index.bool, FALSE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(3, sql:Index(index.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] -storage delete mvcc:TxnWrite(3, sql:Index(index.float, 2.718)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00"] -storage delete mvcc:TxnWrite(3, sql:Index(index.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] -storage delete mvcc:TxnWrite(3, sql:Index(index.int, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(3, sql:Index(index.int, 7)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00"] -storage delete mvcc:TxnWrite(3, sql:Index(index.string, 'bar')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04bar\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(3, sql:Index(index.string, 'foo')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(3, sql:Row(index, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnActive(3) ["\x01\x00\x00\x00\x00\x00\x00\x00\x03"] +set mvcc:NextVersion → 4 ["\x00" → "\x04"] +set mvcc:TxnActive(3) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x03" → ""] +set mvcc:TxnWrite(3, sql:Index(index.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, TRUE), 3) → None ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] +set mvcc:TxnWrite(3, sql:Index(index.bool, FALSE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, FALSE), 3) → 1 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(3, sql:Index(index.int, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, 7), 3) → None ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] +set mvcc:TxnWrite(3, sql:Index(index.int, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, 1), 3) → 1 ["\x04\x01index\x00\xff\x00\xffint\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\x03" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(3, sql:Index(index.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, 3.14), 3) → None ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] +set mvcc:TxnWrite(3, sql:Index(index.float, 2.718)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, 2.718), 3) → 1 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(3, sql:Index(index.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, 'foo'), 3) → None ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x00"] +set mvcc:TxnWrite(3, sql:Index(index.string, 'bar')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04bar\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, 'bar'), 3) → 1 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04bar\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(3, sql:Row(index, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 1), 3) → 1,FALSE,1,2.718,'bar' ["\x04\x02index\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\x03" → "\x01\x15\x05\x02\x02\x01\x00\x02\x02\x03X9\xb4\xc8v\xbe\x05@\x04\x03bar"] +delete mvcc:TxnWrite(3, sql:Index(index.bool, FALSE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00"] +delete mvcc:TxnWrite(3, sql:Index(index.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] +delete mvcc:TxnWrite(3, sql:Index(index.float, 2.718)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00"] +delete mvcc:TxnWrite(3, sql:Index(index.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] +delete mvcc:TxnWrite(3, sql:Index(index.int, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(3, sql:Index(index.int, 7)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00"] +delete mvcc:TxnWrite(3, sql:Index(index.string, 'bar')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04bar\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(3, sql:Index(index.string, 'foo')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(3, sql:Row(index, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x03\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnActive(3) ["\x01\x00\x00\x00\x00\x00\x00\x00\x03"] # A single-column update only updates the relevant index. [ops]> UPDATE "index" SET "bool" = TRUE --- -storage set mvcc:NextVersion → 5 ["\x00" → "\x05"] -storage set mvcc:TxnActive(4) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x04" → ""] -storage set mvcc:TxnWrite(4, sql:Index(index.bool, FALSE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, FALSE), 4) → None ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x00"] -storage set mvcc:TxnWrite(4, sql:Index(index.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, TRUE), 4) → 1 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(4, sql:Row(index, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 1), 4) → 1,TRUE,1,2.718,'bar' ["\x04\x02index\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\x04" → "\x01\x15\x05\x02\x02\x01\x01\x02\x02\x03X9\xb4\xc8v\xbe\x05@\x04\x03bar"] -storage delete mvcc:TxnWrite(4, sql:Index(index.bool, FALSE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(4, sql:Index(index.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] -storage delete mvcc:TxnWrite(4, sql:Row(index, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnActive(4) ["\x01\x00\x00\x00\x00\x00\x00\x00\x04"] +set mvcc:NextVersion → 5 ["\x00" → "\x05"] +set mvcc:TxnActive(4) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x04" → ""] +set mvcc:TxnWrite(4, sql:Index(index.bool, FALSE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, FALSE), 4) → None ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x00"] +set mvcc:TxnWrite(4, sql:Index(index.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, TRUE), 4) → 1 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(4, sql:Row(index, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 1), 4) → 1,TRUE,1,2.718,'bar' ["\x04\x02index\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\x04" → "\x01\x15\x05\x02\x02\x01\x01\x02\x02\x03X9\xb4\xc8v\xbe\x05@\x04\x03bar"] +delete mvcc:TxnWrite(4, sql:Index(index.bool, FALSE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00"] +delete mvcc:TxnWrite(4, sql:Index(index.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] +delete mvcc:TxnWrite(4, sql:Row(index, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnActive(4) ["\x01\x00\x00\x00\x00\x00\x00\x00\x04"] # An update with different values writes new index entries. > INSERT INTO "index" VALUES (2, NULL, NULL, NULL, NULL) [ops]> UPDATE "index" SET "bool" = FALSE, "int" = 7, "float" = 3.14, "string" = 'abc' WHERE id = 2 --- -storage set mvcc:NextVersion → 7 ["\x00" → "\x07"] -storage set mvcc:TxnActive(6) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x06" → ""] -storage set mvcc:TxnWrite(6, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, NULL), 6) → None ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x00"] -storage set mvcc:TxnWrite(6, sql:Index(index.bool, FALSE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, FALSE), 6) → 2 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x03\x01\x02\x04"] -storage set mvcc:TxnWrite(6, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, NULL), 6) → None ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x00"] -storage set mvcc:TxnWrite(6, sql:Index(index.int, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, 7), 6) → 2 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x03\x01\x02\x04"] -storage set mvcc:TxnWrite(6, sql:Index(index.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, NULL), 6) → None ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x00"] -storage set mvcc:TxnWrite(6, sql:Index(index.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, 3.14), 6) → 2 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x03\x01\x02\x04"] -storage set mvcc:TxnWrite(6, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, NULL), 6) → None ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x00"] -storage set mvcc:TxnWrite(6, sql:Index(index.string, 'abc')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04abc\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, 'abc'), 6) → 2 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04abc\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x03\x01\x02\x04"] -storage set mvcc:TxnWrite(6, sql:Row(index, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 2), 6) → 2,FALSE,7,3.14,'abc' ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x15\x05\x02\x04\x01\x00\x02\x0e\x03\x1f\x85\xebQ\xb8\x1e\t@\x04\x03abc"] -storage delete mvcc:TxnWrite(6, sql:Index(index.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(6, sql:Index(index.bool, FALSE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(6, sql:Index(index.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(6, sql:Index(index.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] -storage delete mvcc:TxnWrite(6, sql:Index(index.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(6, sql:Index(index.int, 7)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00"] -storage delete mvcc:TxnWrite(6, sql:Index(index.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(6, sql:Index(index.string, 'abc')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04abc\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(6, sql:Row(index, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnActive(6) ["\x01\x00\x00\x00\x00\x00\x00\x00\x06"] +set mvcc:NextVersion → 7 ["\x00" → "\x07"] +set mvcc:TxnActive(6) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x06" → ""] +set mvcc:TxnWrite(6, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, NULL), 6) → None ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x00"] +set mvcc:TxnWrite(6, sql:Index(index.bool, FALSE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, FALSE), 6) → 2 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x03\x01\x02\x04"] +set mvcc:TxnWrite(6, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, NULL), 6) → None ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x00"] +set mvcc:TxnWrite(6, sql:Index(index.int, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, 7), 6) → 2 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x03\x01\x02\x04"] +set mvcc:TxnWrite(6, sql:Index(index.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, NULL), 6) → None ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x00"] +set mvcc:TxnWrite(6, sql:Index(index.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, 3.14), 6) → 2 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x03\x01\x02\x04"] +set mvcc:TxnWrite(6, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, NULL), 6) → None ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x00"] +set mvcc:TxnWrite(6, sql:Index(index.string, 'abc')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04abc\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, 'abc'), 6) → 2 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04abc\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x03\x01\x02\x04"] +set mvcc:TxnWrite(6, sql:Row(index, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 2), 6) → 2,FALSE,7,3.14,'abc' ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06" → "\x01\x15\x05\x02\x04\x01\x00\x02\x0e\x03\x1f\x85\xebQ\xb8\x1e\t@\x04\x03abc"] +delete mvcc:TxnWrite(6, sql:Index(index.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(6, sql:Index(index.bool, FALSE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00"] +delete mvcc:TxnWrite(6, sql:Index(index.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(6, sql:Index(index.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] +delete mvcc:TxnWrite(6, sql:Index(index.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(6, sql:Index(index.int, 7)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00"] +delete mvcc:TxnWrite(6, sql:Index(index.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(6, sql:Index(index.string, 'abc')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04abc\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(6, sql:Row(index, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x06\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnActive(6) ["\x01\x00\x00\x00\x00\x00\x00\x00\x06"] > SELECT * FROM "index" --- @@ -104,44 +104,44 @@ storage delete mvcc:TxnActive(6) ["\x01\x00\x00\x00\x00\x00\x00\x00\x06"] # Updates with same values merges the index entries. [ops]> UPDATE "index" SET "bool" = TRUE, "int" = 7, "float" = 3.14, "string" = 'foo' --- -storage set mvcc:NextVersion → 8 ["\x00" → "\x08"] -storage set mvcc:TxnActive(7) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x07" → ""] -storage set mvcc:TxnWrite(7, sql:Index(index.int, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, 1), 7) → None ["\x04\x01index\x00\xff\x00\xffint\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\x07" → "\x00"] -storage set mvcc:TxnWrite(7, sql:Index(index.int, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, 7), 7) → 1,2 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x05\x02\x02\x02\x02\x04"] -storage set mvcc:TxnWrite(7, sql:Index(index.float, 2.718)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, 2.718), 7) → None ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x00"] -storage set mvcc:TxnWrite(7, sql:Index(index.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, 3.14), 7) → 1,2 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x05\x02\x02\x02\x02\x04"] -storage set mvcc:TxnWrite(7, sql:Index(index.string, 'bar')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04bar\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, 'bar'), 7) → None ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04bar\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x00"] -storage set mvcc:TxnWrite(7, sql:Index(index.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, 'foo'), 7) → 1 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(7, sql:Row(index, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 1), 7) → 1,TRUE,7,3.14,'foo' ["\x04\x02index\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\x07" → "\x01\x15\x05\x02\x02\x01\x01\x02\x0e\x03\x1f\x85\xebQ\xb8\x1e\t@\x04\x03foo"] -storage set mvcc:TxnWrite(7, sql:Index(index.bool, FALSE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, FALSE), 7) → None ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x00"] -storage set mvcc:TxnWrite(7, sql:Index(index.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, TRUE), 7) → 1,2 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x05\x02\x02\x02\x02\x04"] -storage set mvcc:TxnWrite(7, sql:Index(index.string, 'abc')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04abc\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, 'abc'), 7) → None ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04abc\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x00"] -storage set mvcc:TxnWrite(7, sql:Index(index.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, 'foo'), 7) → 1,2 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x05\x02\x02\x02\x02\x04"] -storage set mvcc:TxnWrite(7, sql:Row(index, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 2), 7) → 2,TRUE,7,3.14,'foo' ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x15\x05\x02\x04\x01\x01\x02\x0e\x03\x1f\x85\xebQ\xb8\x1e\t@\x04\x03foo"] -storage delete mvcc:TxnWrite(7, sql:Index(index.bool, FALSE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(7, sql:Index(index.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] -storage delete mvcc:TxnWrite(7, sql:Index(index.float, 2.718)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00"] -storage delete mvcc:TxnWrite(7, sql:Index(index.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] -storage delete mvcc:TxnWrite(7, sql:Index(index.int, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(7, sql:Index(index.int, 7)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00"] -storage delete mvcc:TxnWrite(7, sql:Index(index.string, 'abc')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04abc\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(7, sql:Index(index.string, 'bar')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04bar\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(7, sql:Index(index.string, 'foo')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(7, sql:Row(index, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(7, sql:Row(index, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnActive(7) ["\x01\x00\x00\x00\x00\x00\x00\x00\x07"] +set mvcc:NextVersion → 8 ["\x00" → "\x08"] +set mvcc:TxnActive(7) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x07" → ""] +set mvcc:TxnWrite(7, sql:Index(index.int, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, 1), 7) → None ["\x04\x01index\x00\xff\x00\xffint\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\x07" → "\x00"] +set mvcc:TxnWrite(7, sql:Index(index.int, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, 7), 7) → 1,2 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x05\x02\x02\x02\x02\x04"] +set mvcc:TxnWrite(7, sql:Index(index.float, 2.718)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, 2.718), 7) → None ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x00"] +set mvcc:TxnWrite(7, sql:Index(index.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, 3.14), 7) → 1,2 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x05\x02\x02\x02\x02\x04"] +set mvcc:TxnWrite(7, sql:Index(index.string, 'bar')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04bar\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, 'bar'), 7) → None ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04bar\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x00"] +set mvcc:TxnWrite(7, sql:Index(index.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, 'foo'), 7) → 1 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(7, sql:Row(index, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 1), 7) → 1,TRUE,7,3.14,'foo' ["\x04\x02index\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\x07" → "\x01\x15\x05\x02\x02\x01\x01\x02\x0e\x03\x1f\x85\xebQ\xb8\x1e\t@\x04\x03foo"] +set mvcc:TxnWrite(7, sql:Index(index.bool, FALSE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, FALSE), 7) → None ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x00"] +set mvcc:TxnWrite(7, sql:Index(index.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, TRUE), 7) → 1,2 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x05\x02\x02\x02\x02\x04"] +set mvcc:TxnWrite(7, sql:Index(index.string, 'abc')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04abc\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, 'abc'), 7) → None ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04abc\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x00"] +set mvcc:TxnWrite(7, sql:Index(index.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, 'foo'), 7) → 1,2 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x05\x02\x02\x02\x02\x04"] +set mvcc:TxnWrite(7, sql:Row(index, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 2), 7) → 2,TRUE,7,3.14,'foo' ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07" → "\x01\x15\x05\x02\x04\x01\x01\x02\x0e\x03\x1f\x85\xebQ\xb8\x1e\t@\x04\x03foo"] +delete mvcc:TxnWrite(7, sql:Index(index.bool, FALSE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00"] +delete mvcc:TxnWrite(7, sql:Index(index.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] +delete mvcc:TxnWrite(7, sql:Index(index.float, 2.718)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00"] +delete mvcc:TxnWrite(7, sql:Index(index.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] +delete mvcc:TxnWrite(7, sql:Index(index.int, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(7, sql:Index(index.int, 7)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00"] +delete mvcc:TxnWrite(7, sql:Index(index.string, 'abc')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04abc\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(7, sql:Index(index.string, 'bar')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04bar\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(7, sql:Index(index.string, 'foo')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(7, sql:Row(index, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(7, sql:Row(index, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x07\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnActive(7) ["\x01\x00\x00\x00\x00\x00\x00\x00\x07"] > SELECT * FROM "index" --- @@ -151,55 +151,55 @@ storage delete mvcc:TxnActive(7) ["\x01\x00\x00\x00\x00\x00\x00\x00\x07"] # Updates with all NULLs work and get indexed. [ops]> UPDATE "index" SET "bool" = NULL, "int" = NULL, "float" = NULL, "string" = NULL --- -storage set mvcc:NextVersion → 9 ["\x00" → "\t"] -storage set mvcc:TxnActive(8) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x08" → ""] -storage set mvcc:TxnWrite(8, sql:Index(index.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, TRUE), 8) → 2 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x04"] -storage set mvcc:TxnWrite(8, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, NULL), 8) → 1 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(8, sql:Index(index.int, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, 7), 8) → 2 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x04"] -storage set mvcc:TxnWrite(8, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, NULL), 8) → 1 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(8, sql:Index(index.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, 3.14), 8) → 2 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x04"] -storage set mvcc:TxnWrite(8, sql:Index(index.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, NULL), 8) → 1 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(8, sql:Index(index.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, 'foo'), 8) → 2 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x04"] -storage set mvcc:TxnWrite(8, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, NULL), 8) → 1 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(8, sql:Row(index, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 1), 8) → 1,NULL,NULL,NULL,NULL ["\x04\x02index\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\x08" → "\x01\x07\x05\x02\x02\x00\x00\x00\x00"] -storage set mvcc:TxnWrite(8, sql:Index(index.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, TRUE), 8) → None ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] -storage set mvcc:TxnWrite(8, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.bool, NULL), 8) → 1,2 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x05\x02\x02\x02\x02\x04"] -storage set mvcc:TxnWrite(8, sql:Index(index.int, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, 7), 8) → None ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] -storage set mvcc:TxnWrite(8, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.int, NULL), 8) → 1,2 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x05\x02\x02\x02\x02\x04"] -storage set mvcc:TxnWrite(8, sql:Index(index.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, 3.14), 8) → None ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] -storage set mvcc:TxnWrite(8, sql:Index(index.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.float, NULL), 8) → 1,2 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x05\x02\x02\x02\x02\x04"] -storage set mvcc:TxnWrite(8, sql:Index(index.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, 'foo'), 8) → None ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] -storage set mvcc:TxnWrite(8, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(index.string, NULL), 8) → 1,2 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x05\x02\x02\x02\x02\x04"] -storage set mvcc:TxnWrite(8, sql:Row(index, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(index, 2), 8) → 2,NULL,NULL,NULL,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x07\x05\x02\x04\x00\x00\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(index.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(index.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(index.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(index.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(index.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(index.int, 7)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(index.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Index(index.string, 'foo')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Row(index, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(8, sql:Row(index, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnActive(8) ["\x01\x00\x00\x00\x00\x00\x00\x00\x08"] +set mvcc:NextVersion → 9 ["\x00" → "\t"] +set mvcc:TxnActive(8) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x08" → ""] +set mvcc:TxnWrite(8, sql:Index(index.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, TRUE), 8) → 2 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x04"] +set mvcc:TxnWrite(8, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, NULL), 8) → 1 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(8, sql:Index(index.int, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, 7), 8) → 2 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x04"] +set mvcc:TxnWrite(8, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, NULL), 8) → 1 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(8, sql:Index(index.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, 3.14), 8) → 2 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x04"] +set mvcc:TxnWrite(8, sql:Index(index.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, NULL), 8) → 1 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(8, sql:Index(index.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, 'foo'), 8) → 2 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x04"] +set mvcc:TxnWrite(8, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, NULL), 8) → 1 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(8, sql:Row(index, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 1), 8) → 1,NULL,NULL,NULL,NULL ["\x04\x02index\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\x08" → "\x01\x07\x05\x02\x02\x00\x00\x00\x00"] +set mvcc:TxnWrite(8, sql:Index(index.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, TRUE), 8) → None ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] +set mvcc:TxnWrite(8, sql:Index(index.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.bool, NULL), 8) → 1,2 ["\x04\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x05\x02\x02\x02\x02\x04"] +set mvcc:TxnWrite(8, sql:Index(index.int, 7)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, 7), 8) → None ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] +set mvcc:TxnWrite(8, sql:Index(index.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.int, NULL), 8) → 1,2 ["\x04\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x05\x02\x02\x02\x02\x04"] +set mvcc:TxnWrite(8, sql:Index(index.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, 3.14), 8) → None ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] +set mvcc:TxnWrite(8, sql:Index(index.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.float, NULL), 8) → 1,2 ["\x04\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x05\x02\x02\x02\x02\x04"] +set mvcc:TxnWrite(8, sql:Index(index.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, 'foo'), 8) → None ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x00"] +set mvcc:TxnWrite(8, sql:Index(index.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(index.string, NULL), 8) → 1,2 ["\x04\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x05\x02\x02\x02\x02\x04"] +set mvcc:TxnWrite(8, sql:Row(index, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(index, 2), 8) → 2,NULL,NULL,NULL,NULL ["\x04\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08" → "\x01\x07\x05\x02\x04\x00\x00\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(index.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(index.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(index.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(index.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(index.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(index.int, 7)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x07\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(index.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(8, sql:Index(index.string, 'foo')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x01index\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(8, sql:Row(index, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(8, sql:Row(index, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x08\x02index\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnActive(8) ["\x01\x00\x00\x00\x00\x00\x00\x00\x08"] > SELECT * FROM "index" --- diff --git a/src/sql/testscripts/writes/update_reference b/src/sql/testscripts/writes/update_reference index 87faa06a..eb9ad698 100644 --- a/src/sql/testscripts/writes/update_reference +++ b/src/sql/testscripts/writes/update_reference @@ -27,36 +27,36 @@ ok # UPDATEs with existing references work, and update the index entries. [ops]> UPDATE name SET "bool" = TRUE, "int" = 1, "float" = 3.14, "string" = 'foo' --- -storage set mvcc:NextVersion → 12 ["\x00" → "\x0c"] -storage set mvcc:TxnActive(11) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x0b" → ""] -storage set mvcc:TxnWrite(11, sql:Index(name.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.bool, NULL), 11) → None ["\x04\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x00"] -storage set mvcc:TxnWrite(11, sql:Index(name.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.bool, TRUE), 11) → 1 ["\x04\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(11, sql:Index(name.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.int, NULL), 11) → None ["\x04\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x00"] -storage set mvcc:TxnWrite(11, sql:Index(name.int, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.int, 1), 11) → 1 ["\x04\x01name\x00\xff\x00\xffint\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\x0b" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(11, sql:Index(name.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.float, NULL), 11) → None ["\x04\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x00"] -storage set mvcc:TxnWrite(11, sql:Index(name.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.float, 3.14), 11) → 1 ["\x04\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(11, sql:Index(name.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.string, NULL), 11) → None ["\x04\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x00"] -storage set mvcc:TxnWrite(11, sql:Index(name.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(name.string, 'foo'), 11) → 1 ["\x04\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(11, sql:Row(name, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(name, 1), 11) → 1,TRUE,1,3.14,'foo' ["\x04\x02name\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\x0b" → "\x01\x15\x05\x02\x02\x01\x01\x02\x02\x03\x1f\x85\xebQ\xb8\x1e\t@\x04\x03foo"] -storage delete mvcc:TxnWrite(11, sql:Index(name.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(11, sql:Index(name.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] -storage delete mvcc:TxnWrite(11, sql:Index(name.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(11, sql:Index(name.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] -storage delete mvcc:TxnWrite(11, sql:Index(name.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(11, sql:Index(name.int, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(11, sql:Index(name.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(11, sql:Index(name.string, 'foo')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(11, sql:Row(name, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnActive(11) ["\x01\x00\x00\x00\x00\x00\x00\x00\x0b"] +set mvcc:NextVersion → 12 ["\x00" → "\x0c"] +set mvcc:TxnActive(11) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x0b" → ""] +set mvcc:TxnWrite(11, sql:Index(name.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(name.bool, NULL), 11) → None ["\x04\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x00"] +set mvcc:TxnWrite(11, sql:Index(name.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(name.bool, TRUE), 11) → 1 ["\x04\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(11, sql:Index(name.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(name.int, NULL), 11) → None ["\x04\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x00"] +set mvcc:TxnWrite(11, sql:Index(name.int, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(name.int, 1), 11) → 1 ["\x04\x01name\x00\xff\x00\xffint\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\x0b" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(11, sql:Index(name.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(name.float, NULL), 11) → None ["\x04\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x00"] +set mvcc:TxnWrite(11, sql:Index(name.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] +set mvcc:Version(sql:Index(name.float, 3.14), 11) → 1 ["\x04\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(11, sql:Index(name.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(name.string, NULL), 11) → None ["\x04\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x00"] +set mvcc:TxnWrite(11, sql:Index(name.string, 'foo')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(name.string, 'foo'), 11) → 1 ["\x04\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(11, sql:Row(name, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(name, 1), 11) → 1,TRUE,1,3.14,'foo' ["\x04\x02name\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\x0b" → "\x01\x15\x05\x02\x02\x01\x01\x02\x02\x03\x1f\x85\xebQ\xb8\x1e\t@\x04\x03foo"] +delete mvcc:TxnWrite(11, sql:Index(name.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(11, sql:Index(name.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] +delete mvcc:TxnWrite(11, sql:Index(name.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(11, sql:Index(name.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] +delete mvcc:TxnWrite(11, sql:Index(name.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(11, sql:Index(name.int, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(11, sql:Index(name.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(11, sql:Index(name.string, 'foo')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x01name\x00\xff\x00\xffstring\x00\xff\x00\xff\x04foo\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(11, sql:Row(name, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0b\x02name\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnActive(11) ["\x01\x00\x00\x00\x00\x00\x00\x00\x0b"] # UPDATEs error on missing references. !> UPDATE name SET "bool" = FALSE @@ -111,48 +111,48 @@ ok [ops]> UPDATE self SET self_id = 1 WHERE id = 1 --- -storage set mvcc:NextVersion → 25 ["\x00" → "\x19"] -storage set mvcc:TxnActive(24) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x18" → ""] -storage set mvcc:TxnWrite(24, sql:Index(self.self_id, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(self.self_id, NULL), 24) → 2,3 ["\x04\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18" → "\x01\x05\x02\x02\x04\x02\x06"] -storage set mvcc:TxnWrite(24, sql:Index(self.self_id, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(self.self_id, 1), 24) → 1 ["\x04\x01self\x00\xff\x00\xffself_id\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\x18" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(24, sql:Row(self, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(self, 1), 24) → 1,1 ["\x04\x02self\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\x18" → "\x01\x05\x02\x02\x02\x02\x02"] -storage delete mvcc:TxnWrite(24, sql:Index(self.self_id, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(24, sql:Index(self.self_id, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(24, sql:Row(self, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnActive(24) ["\x01\x00\x00\x00\x00\x00\x00\x00\x18"] +set mvcc:NextVersion → 25 ["\x00" → "\x19"] +set mvcc:TxnActive(24) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x18" → ""] +set mvcc:TxnWrite(24, sql:Index(self.self_id, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(self.self_id, NULL), 24) → 2,3 ["\x04\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18" → "\x01\x05\x02\x02\x04\x02\x06"] +set mvcc:TxnWrite(24, sql:Index(self.self_id, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(self.self_id, 1), 24) → 1 ["\x04\x01self\x00\xff\x00\xffself_id\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\x18" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(24, sql:Row(self, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(self, 1), 24) → 1,1 ["\x04\x02self\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\x18" → "\x01\x05\x02\x02\x02\x02\x02"] +delete mvcc:TxnWrite(24, sql:Index(self.self_id, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(24, sql:Index(self.self_id, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(24, sql:Row(self, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x18\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnActive(24) ["\x01\x00\x00\x00\x00\x00\x00\x00\x18"] [ops]> UPDATE self SET self_id = 1 WHERE id = 2 --- -storage set mvcc:NextVersion → 26 ["\x00" → "\x1a"] -storage set mvcc:TxnActive(25) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x19" → ""] -storage set mvcc:TxnWrite(25, sql:Index(self.self_id, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x19\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(self.self_id, NULL), 25) → 3 ["\x04\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19" → "\x01\x03\x01\x02\x06"] -storage set mvcc:TxnWrite(25, sql:Index(self.self_id, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x19\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(self.self_id, 1), 25) → 1,2 ["\x04\x01self\x00\xff\x00\xffself_id\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\x19" → "\x01\x05\x02\x02\x02\x02\x04"] -storage set mvcc:TxnWrite(25, sql:Row(self, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x19\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(self, 2), 25) → 2,1 ["\x04\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19" → "\x01\x05\x02\x02\x04\x02\x02"] -storage delete mvcc:TxnWrite(25, sql:Index(self.self_id, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x19\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(25, sql:Index(self.self_id, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x19\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(25, sql:Row(self, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x19\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnActive(25) ["\x01\x00\x00\x00\x00\x00\x00\x00\x19"] +set mvcc:NextVersion → 26 ["\x00" → "\x1a"] +set mvcc:TxnActive(25) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x19" → ""] +set mvcc:TxnWrite(25, sql:Index(self.self_id, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x19\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(self.self_id, NULL), 25) → 3 ["\x04\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19" → "\x01\x03\x01\x02\x06"] +set mvcc:TxnWrite(25, sql:Index(self.self_id, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x19\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(self.self_id, 1), 25) → 1,2 ["\x04\x01self\x00\xff\x00\xffself_id\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\x19" → "\x01\x05\x02\x02\x02\x02\x04"] +set mvcc:TxnWrite(25, sql:Row(self, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x19\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(self, 2), 25) → 2,1 ["\x04\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19" → "\x01\x05\x02\x02\x04\x02\x02"] +delete mvcc:TxnWrite(25, sql:Index(self.self_id, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x19\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(25, sql:Index(self.self_id, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x19\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(25, sql:Row(self, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x19\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnActive(25) ["\x01\x00\x00\x00\x00\x00\x00\x00\x19"] [ops]> UPDATE self SET self_id = 2 WHERE id = 3 --- -storage set mvcc:NextVersion → 27 ["\x00" → "\x1b"] -storage set mvcc:TxnActive(26) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x1a" → ""] -storage set mvcc:TxnWrite(26, sql:Index(self.self_id, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x1a\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(self.self_id, NULL), 26) → None ["\x04\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a" → "\x00"] -storage set mvcc:TxnWrite(26, sql:Index(self.self_id, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x1a\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Index(self.self_id, 2), 26) → 3 ["\x04\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a" → "\x01\x03\x01\x02\x06"] -storage set mvcc:TxnWrite(26, sql:Row(self, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x1a\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] -storage set mvcc:Version(sql:Row(self, 3), 26) → 3,2 ["\x04\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a" → "\x01\x05\x02\x02\x06\x02\x04"] -storage delete mvcc:TxnWrite(26, sql:Index(self.self_id, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x1a\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(26, sql:Index(self.self_id, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x1a\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnWrite(26, sql:Row(self, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x1a\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] -storage delete mvcc:TxnActive(26) ["\x01\x00\x00\x00\x00\x00\x00\x00\x1a"] +set mvcc:NextVersion → 27 ["\x00" → "\x1b"] +set mvcc:TxnActive(26) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x1a" → ""] +set mvcc:TxnWrite(26, sql:Index(self.self_id, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x1a\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(self.self_id, NULL), 26) → None ["\x04\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a" → "\x00"] +set mvcc:TxnWrite(26, sql:Index(self.self_id, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x1a\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Index(self.self_id, 2), 26) → 3 ["\x04\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a" → "\x01\x03\x01\x02\x06"] +set mvcc:TxnWrite(26, sql:Row(self, 3)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x1a\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00" → ""] +set mvcc:Version(sql:Row(self, 3), 26) → 3,2 ["\x04\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a" → "\x01\x05\x02\x02\x06\x02\x04"] +delete mvcc:TxnWrite(26, sql:Index(self.self_id, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x1a\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(26, sql:Index(self.self_id, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x1a\x01self\x00\xff\x00\xffself_id\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnWrite(26, sql:Row(self, 3)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x1a\x02self\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x03\x00\x00"] +delete mvcc:TxnActive(26) ["\x01\x00\x00\x00\x00\x00\x00\x00\x1a"] # Breaking the reference isn't. !> UPDATE self SET id = 4 WHERE id = 1 diff --git a/src/sql/testscripts/writes/update_unique b/src/sql/testscripts/writes/update_unique index 6e868090..b72c7b4f 100644 --- a/src/sql/testscripts/writes/update_unique +++ b/src/sql/testscripts/writes/update_unique @@ -17,36 +17,36 @@ ok SET "bool" = true, "int" = 2, "float" = 2.718, "string" = 'b' \ WHERE id = 2 --- -storage set mvcc:NextVersion → 5 ["\x00" → "\x05"] -storage set mvcc:TxnActive(4) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x04" → ""] -storage set mvcc:TxnWrite(4, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.bool, NULL), 4) → None ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x00"] -storage set mvcc:TxnWrite(4, sql:Index(unique.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.bool, TRUE), 4) → 2 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03\x01\x02\x04"] -storage set mvcc:TxnWrite(4, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.int, NULL), 4) → None ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x00"] -storage set mvcc:TxnWrite(4, sql:Index(unique.int, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.int, 2), 4) → 2 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03\x01\x02\x04"] -storage set mvcc:TxnWrite(4, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, NULL), 4) → None ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x00"] -storage set mvcc:TxnWrite(4, sql:Index(unique.float, 2.718)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, 2.718), 4) → 2 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03\x01\x02\x04"] -storage set mvcc:TxnWrite(4, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, NULL), 4) → None ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x00"] -storage set mvcc:TxnWrite(4, sql:Index(unique.string, 'b')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, 'b'), 4) → 2 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03\x01\x02\x04"] -storage set mvcc:TxnWrite(4, sql:Row(unique, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 2), 4) → 2,TRUE,2,2.718,'b' ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x13\x05\x02\x04\x01\x01\x02\x04\x03X9\xb4\xc8v\xbe\x05@\x04\x01b"] -storage delete mvcc:TxnWrite(4, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(4, sql:Index(unique.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] -storage delete mvcc:TxnWrite(4, sql:Index(unique.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(4, sql:Index(unique.float, 2.718)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00"] -storage delete mvcc:TxnWrite(4, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(4, sql:Index(unique.int, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnWrite(4, sql:Index(unique.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(4, sql:Index(unique.string, 'b')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(4, sql:Row(unique, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnActive(4) ["\x01\x00\x00\x00\x00\x00\x00\x00\x04"] +set mvcc:NextVersion → 5 ["\x00" → "\x05"] +set mvcc:TxnActive(4) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x04" → ""] +set mvcc:TxnWrite(4, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.bool, NULL), 4) → None ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x00"] +set mvcc:TxnWrite(4, sql:Index(unique.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.bool, TRUE), 4) → 2 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03\x01\x02\x04"] +set mvcc:TxnWrite(4, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.int, NULL), 4) → None ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x00"] +set mvcc:TxnWrite(4, sql:Index(unique.int, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.int, 2), 4) → 2 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03\x01\x02\x04"] +set mvcc:TxnWrite(4, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, NULL), 4) → None ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x00"] +set mvcc:TxnWrite(4, sql:Index(unique.float, 2.718)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, 2.718), 4) → 2 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03\x01\x02\x04"] +set mvcc:TxnWrite(4, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, NULL), 4) → None ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x00"] +set mvcc:TxnWrite(4, sql:Index(unique.string, 'b')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, 'b'), 4) → 2 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x03\x01\x02\x04"] +set mvcc:TxnWrite(4, sql:Row(unique, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 2), 4) → 2,TRUE,2,2.718,'b' ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" → "\x01\x13\x05\x02\x04\x01\x01\x02\x04\x03X9\xb4\xc8v\xbe\x05@\x04\x01b"] +delete mvcc:TxnWrite(4, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(4, sql:Index(unique.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] +delete mvcc:TxnWrite(4, sql:Index(unique.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(4, sql:Index(unique.float, 2.718)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00"] +delete mvcc:TxnWrite(4, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(4, sql:Index(unique.int, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnWrite(4, sql:Index(unique.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(4, sql:Index(unique.string, 'b')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(4, sql:Row(unique, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnActive(4) ["\x01\x00\x00\x00\x00\x00\x00\x00\x04"] # An update that violates the unique constraint fails. !> UPDATE "unique" SET "bool" = FALSE WHERE id = 2 @@ -73,59 +73,59 @@ Error: invalid input: value 'abc' already in unique column string # Updates with NULLS sets NULL entries. Duplicates are allowed. [ops]> UPDATE "unique" SET "bool" = NULL, "int" = NULL, "float" = NULL, "string" = NULL --- -storage set mvcc:NextVersion → 14 ["\x00" → "\x0e"] -storage set mvcc:TxnActive(13) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\r" → ""] -storage set mvcc:TxnWrite(13, sql:Index(unique.bool, FALSE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.bool, FALSE), 13) → None ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x00"] -storage set mvcc:TxnWrite(13, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.bool, NULL), 13) → 1 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(13, sql:Index(unique.int, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.int, 1), 13) → None ["\x04\x01unique\x00\xff\x00\xffint\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\r" → "\x00"] -storage set mvcc:TxnWrite(13, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.int, NULL), 13) → 1 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(13, sql:Index(unique.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, 3.14), 13) → None ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x00"] -storage set mvcc:TxnWrite(13, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, NULL), 13) → 1 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(13, sql:Index(unique.string, 'a')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04a\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, 'a'), 13) → None ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04a\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x00"] -storage set mvcc:TxnWrite(13, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, NULL), 13) → 1 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(13, sql:Row(unique, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 1), 13) → 1,NULL,NULL,NULL,NULL ["\x04\x02unique\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\r" → "\x01\x07\x05\x02\x02\x00\x00\x00\x00"] -storage set mvcc:TxnWrite(13, sql:Index(unique.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.bool, TRUE), 13) → None ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x00"] -storage set mvcc:TxnWrite(13, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.bool, NULL), 13) → 1,2 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x01\x05\x02\x02\x02\x02\x04"] -storage set mvcc:TxnWrite(13, sql:Index(unique.int, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.int, 2), 13) → None ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x00"] -storage set mvcc:TxnWrite(13, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.int, NULL), 13) → 1,2 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x01\x05\x02\x02\x02\x02\x04"] -storage set mvcc:TxnWrite(13, sql:Index(unique.float, 2.718)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, 2.718), 13) → None ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x00"] -storage set mvcc:TxnWrite(13, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, NULL), 13) → 1,2 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x01\x05\x02\x02\x02\x02\x04"] -storage set mvcc:TxnWrite(13, sql:Index(unique.string, 'b')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, 'b'), 13) → None ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x00"] -storage set mvcc:TxnWrite(13, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, NULL), 13) → 1,2 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x01\x05\x02\x02\x02\x02\x04"] -storage set mvcc:TxnWrite(13, sql:Row(unique, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 2), 13) → 2,NULL,NULL,NULL,NULL ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x01\x07\x05\x02\x04\x00\x00\x00\x00"] -storage delete mvcc:TxnWrite(13, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(13, sql:Index(unique.bool, FALSE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(13, sql:Index(unique.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] -storage delete mvcc:TxnWrite(13, sql:Index(unique.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(13, sql:Index(unique.float, 2.718)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00"] -storage delete mvcc:TxnWrite(13, sql:Index(unique.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] -storage delete mvcc:TxnWrite(13, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(13, sql:Index(unique.int, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(13, sql:Index(unique.int, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnWrite(13, sql:Index(unique.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(13, sql:Index(unique.string, 'a')) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04a\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(13, sql:Index(unique.string, 'b')) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(13, sql:Row(unique, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(13, sql:Row(unique, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnActive(13) ["\x01\x00\x00\x00\x00\x00\x00\x00\r"] +set mvcc:NextVersion → 14 ["\x00" → "\x0e"] +set mvcc:TxnActive(13) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\r" → ""] +set mvcc:TxnWrite(13, sql:Index(unique.bool, FALSE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.bool, FALSE), 13) → None ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x00"] +set mvcc:TxnWrite(13, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.bool, NULL), 13) → 1 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(13, sql:Index(unique.int, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.int, 1), 13) → None ["\x04\x01unique\x00\xff\x00\xffint\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\r" → "\x00"] +set mvcc:TxnWrite(13, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.int, NULL), 13) → 1 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(13, sql:Index(unique.float, 3.14)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, 3.14), 13) → None ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x00"] +set mvcc:TxnWrite(13, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, NULL), 13) → 1 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(13, sql:Index(unique.string, 'a')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04a\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, 'a'), 13) → None ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04a\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x00"] +set mvcc:TxnWrite(13, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, NULL), 13) → 1 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(13, sql:Row(unique, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 1), 13) → 1,NULL,NULL,NULL,NULL ["\x04\x02unique\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\r" → "\x01\x07\x05\x02\x02\x00\x00\x00\x00"] +set mvcc:TxnWrite(13, sql:Index(unique.bool, TRUE)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.bool, TRUE), 13) → None ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x00"] +set mvcc:TxnWrite(13, sql:Index(unique.bool, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.bool, NULL), 13) → 1,2 ["\x04\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x01\x05\x02\x02\x02\x02\x04"] +set mvcc:TxnWrite(13, sql:Index(unique.int, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.int, 2), 13) → None ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x00"] +set mvcc:TxnWrite(13, sql:Index(unique.int, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.int, NULL), 13) → 1,2 ["\x04\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x01\x05\x02\x02\x02\x02\x04"] +set mvcc:TxnWrite(13, sql:Index(unique.float, 2.718)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, 2.718), 13) → None ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x00"] +set mvcc:TxnWrite(13, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, NULL), 13) → 1,2 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x01\x05\x02\x02\x02\x02\x04"] +set mvcc:TxnWrite(13, sql:Index(unique.string, 'b')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, 'b'), 13) → None ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x00"] +set mvcc:TxnWrite(13, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, NULL), 13) → 1,2 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x01\x05\x02\x02\x02\x02\x04"] +set mvcc:TxnWrite(13, sql:Row(unique, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 2), 13) → 2,NULL,NULL,NULL,NULL ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\r" → "\x01\x07\x05\x02\x04\x00\x00\x00\x00"] +delete mvcc:TxnWrite(13, sql:Index(unique.bool, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(13, sql:Index(unique.bool, FALSE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x00\xff\x00\x00"] +delete mvcc:TxnWrite(13, sql:Index(unique.bool, TRUE)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffbool\x00\xff\x00\xff\x01\x01\x00\x00"] +delete mvcc:TxnWrite(13, sql:Index(unique.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(13, sql:Index(unique.float, 2.718)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\x05\xbev\xc8\xb49X\x00\x00"] +delete mvcc:TxnWrite(13, sql:Index(unique.float, 3.14)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xc0\t\x1e\xb8Q\xeb\x85\x1f\x00\x00"] +delete mvcc:TxnWrite(13, sql:Index(unique.int, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(13, sql:Index(unique.int, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(13, sql:Index(unique.int, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffint\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnWrite(13, sql:Index(unique.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(13, sql:Index(unique.string, 'a')) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04a\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(13, sql:Index(unique.string, 'b')) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04b\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(13, sql:Row(unique, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(13, sql:Row(unique, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\r\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnActive(13) ["\x01\x00\x00\x00\x00\x00\x00\x00\r"] > SELECT * FROM "unique" --- @@ -135,25 +135,25 @@ storage delete mvcc:TxnActive(13) ["\x01\x00\x00\x00\x00\x00\x00\x00\r"] # Float NaNs are considered different and allowed. [ops]> UPDATE "unique" SET "float" = NAN --- -storage set mvcc:NextVersion → 15 ["\x00" → "\x0f"] -storage set mvcc:TxnActive(14) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x0e" → ""] -storage set mvcc:TxnWrite(14, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, NULL), 14) → 2 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\x03\x01\x02\x04"] -storage set mvcc:TxnWrite(14, sql:Index(unique.float, NaN)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, NaN), 14) → 1 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(14, sql:Row(unique, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 1), 14) → 1,NULL,NULL,NaN,NULL ["\x04\x02unique\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\x0e" → "\x01\x0f\x05\x02\x02\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf8\x7f\x00"] -storage set mvcc:TxnWrite(14, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, NULL), 14) → None ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x00"] -storage set mvcc:TxnWrite(14, sql:Index(unique.float, NaN)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, NaN), 14) → 1,2 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\x05\x02\x02\x02\x02\x04"] -storage set mvcc:TxnWrite(14, sql:Row(unique, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 2), 14) → 2,NULL,NULL,NaN,NULL ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\x0f\x05\x02\x04\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf8\x7f\x00"] -storage delete mvcc:TxnWrite(14, sql:Index(unique.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(14, sql:Index(unique.float, NaN)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(14, sql:Row(unique, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnWrite(14, sql:Row(unique, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnActive(14) ["\x01\x00\x00\x00\x00\x00\x00\x00\x0e"] +set mvcc:NextVersion → 15 ["\x00" → "\x0f"] +set mvcc:TxnActive(14) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x0e" → ""] +set mvcc:TxnWrite(14, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, NULL), 14) → 2 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\x03\x01\x02\x04"] +set mvcc:TxnWrite(14, sql:Index(unique.float, NaN)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, NaN), 14) → 1 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(14, sql:Row(unique, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 1), 14) → 1,NULL,NULL,NaN,NULL ["\x04\x02unique\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\x0e" → "\x01\x0f\x05\x02\x02\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf8\x7f\x00"] +set mvcc:TxnWrite(14, sql:Index(unique.float, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, NULL), 14) → None ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x00"] +set mvcc:TxnWrite(14, sql:Index(unique.float, NaN)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, NaN), 14) → 1,2 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\x05\x02\x02\x02\x02\x04"] +set mvcc:TxnWrite(14, sql:Row(unique, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 2), 14) → 2,NULL,NULL,NaN,NULL ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e" → "\x01\x0f\x05\x02\x04\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf8\x7f\x00"] +delete mvcc:TxnWrite(14, sql:Index(unique.float, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(14, sql:Index(unique.float, NaN)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(14, sql:Row(unique, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnWrite(14, sql:Row(unique, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0e\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnActive(14) ["\x01\x00\x00\x00\x00\x00\x00\x00\x0e"] > SELECT * FROM "unique" --- @@ -164,18 +164,18 @@ storage delete mvcc:TxnActive(14) ["\x01\x00\x00\x00\x00\x00\x00\x00\x0e"] [ops]> UPDATE "unique" SET "float" = -0.0 WHERE id = 1 !> UPDATE "unique" SET "float" = 0.0 WHERE id = 2 --- -storage set mvcc:NextVersion → 16 ["\x00" → "\x10"] -storage set mvcc:TxnActive(15) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x0f" → ""] -storage set mvcc:TxnWrite(15, sql:Index(unique.float, NaN)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, NaN), 15) → 2 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f" → "\x01\x03\x01\x02\x04"] -storage set mvcc:TxnWrite(15, sql:Index(unique.float, 0.0)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, 0.0), 15) → 1 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(15, sql:Row(unique, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 1), 15) → 1,NULL,NULL,0.0,NULL ["\x04\x02unique\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\x0f" → "\x01\x0f\x05\x02\x02\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00"] -storage delete mvcc:TxnWrite(15, sql:Index(unique.float, 0.0)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(15, sql:Index(unique.float, NaN)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(15, sql:Row(unique, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnActive(15) ["\x01\x00\x00\x00\x00\x00\x00\x00\x0f"] +set mvcc:NextVersion → 16 ["\x00" → "\x10"] +set mvcc:TxnActive(15) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x0f" → ""] +set mvcc:TxnWrite(15, sql:Index(unique.float, NaN)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, NaN), 15) → 2 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f" → "\x01\x03\x01\x02\x04"] +set mvcc:TxnWrite(15, sql:Index(unique.float, 0.0)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, 0.0), 15) → 1 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(15, sql:Row(unique, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 1), 15) → 1,NULL,NULL,0.0,NULL ["\x04\x02unique\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\x0f" → "\x01\x0f\x05\x02\x02\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00"] +delete mvcc:TxnWrite(15, sql:Index(unique.float, 0.0)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(15, sql:Index(unique.float, NaN)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(15, sql:Row(unique, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x0f\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnActive(15) ["\x01\x00\x00\x00\x00\x00\x00\x00\x0f"] Error: invalid input: value 0.0 already in unique column float > SELECT * FROM "unique" @@ -187,30 +187,30 @@ Error: invalid input: value 0.0 already in unique column float [ops]> UPDATE "unique" SET "float" = INFINITY WHERE id = 1 [ops]> UPDATE "unique" SET "float" = -INFINITY WHERE id = 2 --- -storage set mvcc:NextVersion → 18 ["\x00" → "\x12"] -storage set mvcc:TxnActive(17) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x11" → ""] -storage set mvcc:TxnWrite(17, sql:Index(unique.float, 0.0)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x11\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, 0.0), 17) → None ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11" → "\x00"] -storage set mvcc:TxnWrite(17, sql:Index(unique.float, inf)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x11\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, inf), 17) → 1 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(17, sql:Row(unique, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x11\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 1), 17) → 1,NULL,NULL,inf,NULL ["\x04\x02unique\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\x11" → "\x01\x0f\x05\x02\x02\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf0\x7f\x00"] -storage delete mvcc:TxnWrite(17, sql:Index(unique.float, 0.0)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x11\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(17, sql:Index(unique.float, inf)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x11\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(17, sql:Row(unique, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x11\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnActive(17) ["\x01\x00\x00\x00\x00\x00\x00\x00\x11"] -storage set mvcc:NextVersion → 19 ["\x00" → "\x13"] -storage set mvcc:TxnActive(18) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x12" → ""] -storage set mvcc:TxnWrite(18, sql:Index(unique.float, NaN)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, NaN), 18) → None ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12" → "\x00"] -storage set mvcc:TxnWrite(18, sql:Index(unique.float, -inf)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x00\xff\x0f\xff\xff\xff\xff\xff\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.float, -inf), 18) → 2 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x00\xff\x0f\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12" → "\x01\x03\x01\x02\x04"] -storage set mvcc:TxnWrite(18, sql:Row(unique, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 2), 18) → 2,NULL,NULL,-inf,NULL ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12" → "\x01\x0f\x05\x02\x04\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf0\xff\x00"] -storage delete mvcc:TxnWrite(18, sql:Index(unique.float, -inf)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x00\xff\x0f\xff\xff\xff\xff\xff\xff\x00\x00"] -storage delete mvcc:TxnWrite(18, sql:Index(unique.float, NaN)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(18, sql:Row(unique, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnActive(18) ["\x01\x00\x00\x00\x00\x00\x00\x00\x12"] +set mvcc:NextVersion → 18 ["\x00" → "\x12"] +set mvcc:TxnActive(17) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x11" → ""] +set mvcc:TxnWrite(17, sql:Index(unique.float, 0.0)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x11\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, 0.0), 17) → None ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11" → "\x00"] +set mvcc:TxnWrite(17, sql:Index(unique.float, inf)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x11\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, inf), 17) → 1 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(17, sql:Row(unique, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x11\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 1), 17) → 1,NULL,NULL,inf,NULL ["\x04\x02unique\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\x11" → "\x01\x0f\x05\x02\x02\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf0\x7f\x00"] +delete mvcc:TxnWrite(17, sql:Index(unique.float, 0.0)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x11\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(17, sql:Index(unique.float, inf)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x11\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf0\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(17, sql:Row(unique, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x11\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnActive(17) ["\x01\x00\x00\x00\x00\x00\x00\x00\x11"] +set mvcc:NextVersion → 19 ["\x00" → "\x13"] +set mvcc:TxnActive(18) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x12" → ""] +set mvcc:TxnWrite(18, sql:Index(unique.float, NaN)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, NaN), 18) → None ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12" → "\x00"] +set mvcc:TxnWrite(18, sql:Index(unique.float, -inf)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x00\xff\x0f\xff\xff\xff\xff\xff\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.float, -inf), 18) → 2 ["\x04\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x00\xff\x0f\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12" → "\x01\x03\x01\x02\x04"] +set mvcc:TxnWrite(18, sql:Row(unique, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 2), 18) → 2,NULL,NULL,-inf,NULL ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12" → "\x01\x0f\x05\x02\x04\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf0\xff\x00"] +delete mvcc:TxnWrite(18, sql:Index(unique.float, -inf)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\x00\xff\x0f\xff\xff\xff\xff\xff\xff\x00\x00"] +delete mvcc:TxnWrite(18, sql:Index(unique.float, NaN)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x01unique\x00\xff\x00\xfffloat\x00\xff\x00\xff\x03\xff\xf8\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(18, sql:Row(unique, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x12\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnActive(18) ["\x01\x00\x00\x00\x00\x00\x00\x00\x12"] > SELECT * FROM "unique" --- @@ -231,30 +231,30 @@ Error: invalid input: value '' already in unique column string [ops]> UPDATE "unique" SET "string" = 'case' WHERE id = 1 [ops]> UPDATE "unique" SET "string" = 'CaSe' WHERE id = 2 --- -storage set mvcc:NextVersion → 23 ["\x00" → "\x17"] -storage set mvcc:TxnActive(22) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x16" → ""] -storage set mvcc:TxnWrite(22, sql:Index(unique.string, '')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, ''), 22) → None ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16" → "\x00"] -storage set mvcc:TxnWrite(22, sql:Index(unique.string, 'case')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04case\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, 'case'), 22) → 1 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04case\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16" → "\x01\x03\x01\x02\x02"] -storage set mvcc:TxnWrite(22, sql:Row(unique, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 1), 22) → 1,NULL,NULL,inf,'case' ["\x04\x02unique\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\x16" → "\x01\x14\x05\x02\x02\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf0\x7f\x04\x04case"] -storage delete mvcc:TxnWrite(22, sql:Index(unique.string, '')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(22, sql:Index(unique.string, 'case')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04case\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(22, sql:Row(unique, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] -storage delete mvcc:TxnActive(22) ["\x01\x00\x00\x00\x00\x00\x00\x00\x16"] -storage set mvcc:NextVersion → 24 ["\x00" → "\x18"] -storage set mvcc:TxnActive(23) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x17" → ""] -storage set mvcc:TxnWrite(23, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, NULL), 23) → None ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17" → "\x00"] -storage set mvcc:TxnWrite(23, sql:Index(unique.string, 'CaSe')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04CaSe\x00\xff\x00\xff\x00\x00" → ""] -storage set mvcc:Version(sql:Index(unique.string, 'CaSe'), 23) → 2 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04CaSe\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17" → "\x01\x03\x01\x02\x04"] -storage set mvcc:TxnWrite(23, sql:Row(unique, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] -storage set mvcc:Version(sql:Row(unique, 2), 23) → 2,NULL,NULL,-inf,'CaSe' ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17" → "\x01\x14\x05\x02\x04\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf0\xff\x04\x04CaSe"] -storage delete mvcc:TxnWrite(23, sql:Index(unique.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(23, sql:Index(unique.string, 'CaSe')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04CaSe\x00\xff\x00\xff\x00\x00"] -storage delete mvcc:TxnWrite(23, sql:Row(unique, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] -storage delete mvcc:TxnActive(23) ["\x01\x00\x00\x00\x00\x00\x00\x00\x17"] +set mvcc:NextVersion → 23 ["\x00" → "\x17"] +set mvcc:TxnActive(22) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x16" → ""] +set mvcc:TxnWrite(22, sql:Index(unique.string, '')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, ''), 22) → None ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16" → "\x00"] +set mvcc:TxnWrite(22, sql:Index(unique.string, 'case')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04case\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, 'case'), 22) → 1 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04case\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16" → "\x01\x03\x01\x02\x02"] +set mvcc:TxnWrite(22, sql:Row(unique, 1)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 1), 22) → 1,NULL,NULL,inf,'case' ["\x04\x02unique\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\x16" → "\x01\x14\x05\x02\x02\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf0\x7f\x04\x04case"] +delete mvcc:TxnWrite(22, sql:Index(unique.string, '')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(22, sql:Index(unique.string, 'case')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04case\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(22, sql:Row(unique, 1)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x16\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x01\x00\x00"] +delete mvcc:TxnActive(22) ["\x01\x00\x00\x00\x00\x00\x00\x00\x16"] +set mvcc:NextVersion → 24 ["\x00" → "\x18"] +set mvcc:TxnActive(23) → "" ["\x01\x00\x00\x00\x00\x00\x00\x00\x17" → ""] +set mvcc:TxnWrite(23, sql:Index(unique.string, NULL)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, NULL), 23) → None ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17" → "\x00"] +set mvcc:TxnWrite(23, sql:Index(unique.string, 'CaSe')) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04CaSe\x00\xff\x00\xff\x00\x00" → ""] +set mvcc:Version(sql:Index(unique.string, 'CaSe'), 23) → 2 ["\x04\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04CaSe\x00\xff\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17" → "\x01\x03\x01\x02\x04"] +set mvcc:TxnWrite(23, sql:Row(unique, 2)) → "" ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00" → ""] +set mvcc:Version(sql:Row(unique, 2), 23) → 2,NULL,NULL,-inf,'CaSe' ["\x04\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17" → "\x01\x14\x05\x02\x04\x00\x00\x03\x00\x00\x00\x00\x00\x00\xf0\xff\x04\x04CaSe"] +delete mvcc:TxnWrite(23, sql:Index(unique.string, NULL)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(23, sql:Index(unique.string, 'CaSe')) ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x01unique\x00\xff\x00\xffstring\x00\xff\x00\xff\x04CaSe\x00\xff\x00\xff\x00\x00"] +delete mvcc:TxnWrite(23, sql:Row(unique, 2)) ["\x03\x00\x00\x00\x00\x00\x00\x00\x17\x02unique\x00\xff\x00\xff\x02\x80\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x02\x00\x00"] +delete mvcc:TxnActive(23) ["\x01\x00\x00\x00\x00\x00\x00\x00\x17"] > SELECT * FROM "unique" --- diff --git a/src/sql/types/expression.rs b/src/sql/types/expression.rs index b84ae15c..5b9d9726 100644 --- a/src/sql/types/expression.rs +++ b/src/sql/types/expression.rs @@ -125,6 +125,11 @@ impl Expression { } } + /// Formats a constant expression. Errors on column references. + pub fn format_constant(&self) -> String { + self.format(&Node::Nothing { columns: Vec::new() }) + } + /// Evaluates an expression, returning a value. Column references look up /// values in the given row. If None, any Column references will panic. pub fn evaluate(&self, row: Option<&Row>) -> Result { diff --git a/src/storage/mvcc.rs b/src/storage/mvcc.rs index 825e9fc5..4624dc67 100644 --- a/src/storage/mvcc.rs +++ b/src/storage/mvcc.rs @@ -787,6 +787,42 @@ pub mod tests { type TestEngine = Emit>; + impl MVCCRunner { + fn new() -> Self { + // Use both a BitCask and a Memory engine, and mirror operations + // across them. Emit engine operations to op_rx. + let (op_tx, op_rx) = crossbeam::channel::unbounded(); + let tempdir = tempfile::TempDir::with_prefix("toydb").expect("tempdir failed"); + let bitcask = BitCask::new(tempdir.path().join("bitcask")).expect("bitcask failed"); + let memory = Memory::new(); + let engine = Emit::new(Mirror::new(bitcask, memory), op_tx); + let mvcc = MVCC::new(engine); + Self { mvcc, op_rx, txns: HashMap::new(), tempdir } + } + + /// Fetches the named transaction from a command prefix. + fn get_txn( + &mut self, + prefix: &Option, + ) -> Result<&'_ mut Transaction, Box> { + let name = Self::txn_name(prefix)?; + self.txns.get_mut(name).ok_or(format!("unknown txn {name}").into()) + } + + /// Fetches the txn name from a command prefix, or errors. + fn txn_name(prefix: &Option) -> Result<&str, Box> { + prefix.as_deref().ok_or("no txn name".into()) + } + + /// Errors if a txn prefix is given. + fn no_txn(command: &goldenscript::Command) -> Result<(), Box> { + if let Some(name) = &command.prefix { + return Err(format!("can't run {} with txn {name}", command.name).into()); + } + Ok(()) + } + } + impl goldenscript::Runner for MVCCRunner { fn run(&mut self, command: &goldenscript::Command) -> Result> { let mut output = String::new(); @@ -1029,40 +1065,4 @@ pub mod tests { Ok(output) } } - - impl MVCCRunner { - fn new() -> Self { - // Use both a BitCask and a Memory engine, and mirror operations - // across them. Emit engine operations to op_rx. - let (op_tx, op_rx) = crossbeam::channel::unbounded(); - let tempdir = tempfile::TempDir::with_prefix("toydb").expect("tempdir failed"); - let bitcask = BitCask::new(tempdir.path().join("bitcask")).expect("bitcask failed"); - let memory = Memory::new(); - let engine = Emit::new(Mirror::new(bitcask, memory), op_tx); - let mvcc = MVCC::new(engine); - Self { mvcc, op_rx, txns: HashMap::new(), tempdir } - } - - /// Fetches the named transaction from a command prefix. - fn get_txn( - &mut self, - prefix: &Option, - ) -> Result<&'_ mut Transaction, Box> { - let name = Self::txn_name(prefix)?; - self.txns.get_mut(name).ok_or(format!("unknown txn {name}").into()) - } - - /// Fetches the txn name from a command prefix, or errors. - fn txn_name(prefix: &Option) -> Result<&str, Box> { - prefix.as_deref().ok_or("no txn name".into()) - } - - /// Errors if a txn prefix is given. - fn no_txn(command: &goldenscript::Command) -> Result<(), Box> { - if let Some(name) = &command.prefix { - return Err(format!("can't run {} with txn {name}", command.name).into()); - } - Ok(()) - } - } }